From 454dacde9f9443480a894c3cfa824e135bd88068 Mon Sep 17 00:00:00 2001 From: Nicholas Pettas Date: Thu, 9 Jan 2025 20:44:16 -0800 Subject: [PATCH 1/6] pin bytemuck_derive to 1.7.0 to fix failed unit test due to breaking change on 1.9.0 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index ab77e193e56b58..b55c916817b12d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -175,7 +175,7 @@ bv = "0.11.1" byte-unit = "4.0.19" bytecount = "0.6.8" bytemuck = "1.16.1" -bytemuck_derive = "1.7.0" +bytemuck_derive = "=1.7.0" byteorder = "1.5.0" bytes = "1.6" bzip2 = "0.4.4" From c0a3d99ed24078f1041290446a1369055fb37cd6 Mon Sep 17 00:00:00 2001 From: Nicholas Pettas Date: Wed, 5 Feb 2025 09:22:37 -0800 Subject: [PATCH 2/6] Update inactive feature gate public keys (#9) * Revert "Update all non-active feature gate public keys" This reverts commit 9af30c9585d4652574a6ffa83596efff4e4995dc. * Update all non-active feature gate public keys --- sdk/src/feature_set.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 6fdb49bd1621ff..36ed0d1a2f0c50 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -467,7 +467,7 @@ pub mod enable_early_verification_of_account_modifications { } pub mod skip_rent_rewrites { - solana_sdk::declare_id!("FPxxFrxds8u7esBP3NY4mipYfSgFXxQHEfsMiujsBdtD"); + solana_sdk::declare_id!("CGB2jM8pwZkeeiXQ66kBMyBR6Np61mggL7XUsmLjVcrw"); } pub mod prevent_crediting_accounts_that_end_rent_paying { @@ -826,7 +826,7 @@ pub mod enable_get_epoch_stake_syscall { } pub mod migrate_address_lookup_table_program_to_core_bpf { - solana_sdk::declare_id!("C97eKZygrkU4JxJsZdjgbUY7iQR7rKTr4NyDWo2E5pRm"); + solana_sdk::declare_id!("8fqszxYA2HscUsVHtGGrb1Kx6KxRbLbT3oo76BZ97kay"); } pub mod zk_elgamal_proof_program_enabled { @@ -858,7 +858,7 @@ pub mod deprecate_legacy_vote_ixs { } pub mod disable_account_loader_special_case { - solana_program::declare_id!("EQUMpNFr7Nacb1sva56xn1aLfBxppEoSBH8RRVdkcD1x"); + solana_program::declare_id!("7QkayNydJtEKXghHvc4EqedXWsadK3crvFs732jruVXM"); } lazy_static! { From 635556284794dbb6274299a8b1d8d61f65d5aa5e Mon Sep 17 00:00:00 2001 From: Nicholas Pettas Date: Wed, 5 Feb 2025 09:23:02 -0800 Subject: [PATCH 3/6] chore: bump openssl to 0.10.70 (#4741) (#11) Co-authored-by: Yihau Chen --- Cargo.lock | 14 +++++++------- programs/sbf/Cargo.lock | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 73118669d1723a..96985c6ebd14b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3647,9 +3647,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" dependencies = [ "bitflags 2.5.0", "cfg-if 1.0.0", @@ -3662,13 +3662,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.66", ] [[package]] @@ -3688,9 +3688,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" dependencies = [ "cc", "libc", diff --git a/programs/sbf/Cargo.lock b/programs/sbf/Cargo.lock index 63d0f082ff6d03..b7ca6739d3c61c 100644 --- a/programs/sbf/Cargo.lock +++ b/programs/sbf/Cargo.lock @@ -3101,9 +3101,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" dependencies = [ "bitflags 2.5.0", "cfg-if 1.0.0", @@ -3142,9 +3142,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" dependencies = [ "cc", "libc", From 1834554e0ef7b822243367341a1a164955719fa9 Mon Sep 17 00:00:00 2001 From: Nicholas Pettas Date: Wed, 5 Feb 2025 14:07:16 -0800 Subject: [PATCH 4/6] Merge in upstream V2.0.24 (#12) * v2.0: Reclaims more old accounts in `clean` (backport of #4044) (#4089) * Reclaims more old accounts in `clean` (#4044) (cherry picked from commit 3d438241544121386b88e654d5f6a666df294365) # Conflicts: # accounts-db/src/accounts_db.rs # accounts-db/src/accounts_db/tests.rs * fix merge conflicts --------- Co-authored-by: Brooks * v2.0: Fixes clean_old_storages_with_reclaims tests (backport of #4147) (#4166) * Fixes clean_old_storages_with_reclaims tests (#4147) (cherry picked from commit 4eabeedaa2f26822b9eb61d8e081c5edb03544da) # Conflicts: # accounts-db/src/accounts_db/tests.rs * fix merge conflicts --------- Co-authored-by: Brooks * v2.0: blockstore: mark slot as dead on data shred merkle root conflict (backport of #3970) (#4074) * blockstore: mark slot as dead on data shred merkle root conflict (#3970) (cherry picked from commit 5564a941ae65d6a43d8a4d97936fdc09792f92a8) # Conflicts: # ledger/src/blockstore.rs * fix conflicts --------- Co-authored-by: Ashwin Sekar Co-authored-by: Ashwin Sekar * Bump version to v2.0.22 (#4200) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * v2.0: hardcode rust version for publish-crate (#4228) * Bump version to v2.0.23 (#4419) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * v2.0: rolls out chained Merkle shreds to ~21% of mainnet slots (backport of #4431) (#4434) rolls out chained Merkle shreds to ~21% of mainnet slots (#4431) (cherry picked from commit 9d09787d21da942f09751feebd0d67f4ee7a27a7) Co-authored-by: behzad nouri * v2.0: [rpc] Fatal `getSignaturesForAddress()` when Bigtable errors (backport of #3700) (#4442) [rpc] Fatal `getSignaturesForAddress()` when Bigtable errors (#3700) * Unindent code in `get_signatures_for_address` * Add a custom JSON-RPC error to throw when long-term storage (ie. Bigtable) can't be reached * When the `before`/`until` signatures can't be found, throw `SignatureNotFound` instead of `RowNotFound` * Fatal `getSignaturesForAddress` calls when Bigtable must be queried but can't be reached (cherry picked from commit 52f132cc41c5e9b992a0574d47f6dcaf91980ae9) Co-authored-by: Steven Luscher * v2.0: ci: bump [upload|download]-artifact to v4 (#4501) ci: bump [upload|download]-artifact to v4 * v2.0: ci: hardcode crate publishing version (#4515) ci: hardcode rust version for publish-crate * Bump version to v2.0.24 (#4528) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * v2.0: fix: reduce max packet receive time during leader window (backport of #2801) (#4544) fix: reduce max packet receive time during leader window (#2801) (cherry picked from commit 20e0df4debabf27a3da6d4c1a4972fc901cd22b1) Co-authored-by: cavemanloverboy <93507302+cavemanloverboy@users.noreply.github.com> * v2.0: Scheduler Frequency Fixes (backport of #4545) (#4576) * Change prio_graph_scheduler configurations for 1k maxs, 256 look ahead * Break loop on scanned transaction count * make Hold decision behave same as Consume during receive * receive maximum of 5_000 packets - loose max * receive_completed before process_transactions --------- Co-authored-by: Andrew Fitzgerald --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: Brooks Co-authored-by: Ashwin Sekar Co-authored-by: Ashwin Sekar Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Yihau Chen Co-authored-by: behzad nouri Co-authored-by: Steven Luscher Co-authored-by: cavemanloverboy <93507302+cavemanloverboy@users.noreply.github.com> Co-authored-by: Andrew Fitzgerald --- .github/workflows/release-artifacts.yml | 6 +- Cargo.lock | 252 ++++++++-------- Cargo.toml | 182 ++++++------ accounts-db/src/accounts_db.rs | 129 ++++++++- accounts-db/src/accounts_index.rs | 10 + ci/publish-crate.sh | 3 +- .../prio_graph_scheduler.rs | 16 +- .../scheduler_controller.rs | 14 +- ledger/src/blockstore.rs | 40 +-- programs/sbf/Cargo.lock | 272 +++++++++--------- programs/sbf/Cargo.toml | 56 ++-- rpc-client-api/src/custom_error.rs | 8 + rpc/src/rpc.rs | 190 ++++++------ .../tests/crates/fail/Cargo.toml | 4 +- .../tests/crates/noop/Cargo.toml | 4 +- storage-bigtable/src/lib.rs | 12 +- .../example-programs/clock-sysvar/Cargo.toml | 4 +- .../example-programs/hello-solana/Cargo.toml | 4 +- .../simple-transfer/Cargo.toml | 4 +- 19 files changed, 674 insertions(+), 536 deletions(-) diff --git a/.github/workflows/release-artifacts.yml b/.github/workflows/release-artifacts.yml index ed5eab0325bda1..f0fba142bb4c60 100644 --- a/.github/workflows/release-artifacts.yml +++ b/.github/workflows/release-artifacts.yml @@ -70,7 +70,7 @@ jobs: - name: Upload Artifacts if: ${{ steps.build.outputs.channel != '' || steps.build.outputs.tag != '' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: windows-artifact path: windows-release/ @@ -81,7 +81,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Download - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: windows-artifact path: ./windows-release @@ -101,7 +101,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Download - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: windows-artifact path: ./windows-release/ diff --git a/Cargo.lock b/Cargo.lock index 96985c6ebd14b3..fac69e149d0c76 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,7 +65,7 @@ dependencies = [ [[package]] name = "agave-accounts-hash-cache-tool" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "clap 2.33.3", @@ -75,7 +75,7 @@ dependencies = [ [[package]] name = "agave-cargo-registry" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 2.33.3", "flate2", @@ -105,7 +105,7 @@ dependencies = [ [[package]] name = "agave-geyser-plugin-interface" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "solana-sdk", @@ -115,7 +115,7 @@ dependencies = [ [[package]] name = "agave-install" -version = "2.0.21" +version = "2.0.24" dependencies = [ "atty", "bincode", @@ -151,7 +151,7 @@ dependencies = [ [[package]] name = "agave-store-tool" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 2.33.3", "solana-accounts-db", @@ -161,7 +161,7 @@ dependencies = [ [[package]] name = "agave-watchtower" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 2.33.3", "humantime", @@ -2273,7 +2273,7 @@ dependencies = [ [[package]] name = "gen-headers" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "regex", @@ -2281,7 +2281,7 @@ dependencies = [ [[package]] name = "gen-syscall-list" -version = "2.0.21" +version = "2.0.24" dependencies = [ "regex", ] @@ -4184,7 +4184,7 @@ dependencies = [ [[package]] name = "proto" -version = "2.0.21" +version = "2.0.24" dependencies = [ "protobuf-src", "tonic-build", @@ -4436,7 +4436,7 @@ dependencies = [ [[package]] name = "rbpf-cli" -version = "2.0.21" +version = "2.0.24" [[package]] name = "rdrand" @@ -5282,7 +5282,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "2.0.21" +version = "2.0.24" dependencies = [ "Inflector", "assert_matches", @@ -5307,7 +5307,7 @@ dependencies = [ [[package]] name = "solana-accounts-bench" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 2.33.3", "log", @@ -5321,7 +5321,7 @@ dependencies = [ [[package]] name = "solana-accounts-cluster-bench" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 2.33.3", "log", @@ -5352,7 +5352,7 @@ dependencies = [ [[package]] name = "solana-accounts-db" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -5413,7 +5413,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "bytemuck", @@ -5429,7 +5429,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program-tests" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -5440,7 +5440,7 @@ dependencies = [ [[package]] name = "solana-banking-bench" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -5464,7 +5464,7 @@ dependencies = [ [[package]] name = "solana-banks-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "borsh 1.5.1", "futures 0.3.30", @@ -5481,7 +5481,7 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "2.0.21" +version = "2.0.24" dependencies = [ "serde", "serde_derive", @@ -5491,7 +5491,7 @@ dependencies = [ [[package]] name = "solana-banks-server" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "crossbeam-channel", @@ -5509,7 +5509,7 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 3.2.23", "crossbeam-channel", @@ -5520,7 +5520,7 @@ dependencies = [ [[package]] name = "solana-bench-tps" -version = "2.0.21" +version = "2.0.24" dependencies = [ "chrono", "clap 2.33.3", @@ -5566,7 +5566,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bv", "fnv", @@ -5583,7 +5583,7 @@ dependencies = [ [[package]] name = "solana-bpf-loader-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -5608,7 +5608,7 @@ dependencies = [ [[package]] name = "solana-bpf-loader-program-tests" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -5619,7 +5619,7 @@ dependencies = [ [[package]] name = "solana-bucket-map" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bv", "bytemuck", @@ -5639,7 +5639,7 @@ dependencies = [ [[package]] name = "solana-cargo-build-bpf" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "solana-logger", @@ -5647,7 +5647,7 @@ dependencies = [ [[package]] name = "solana-cargo-build-sbf" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_cmd", "bzip2", @@ -5668,11 +5668,11 @@ dependencies = [ [[package]] name = "solana-cargo-test-bpf" -version = "2.0.21" +version = "2.0.24" [[package]] name = "solana-cargo-test-sbf" -version = "2.0.21" +version = "2.0.24" dependencies = [ "cargo_metadata", "clap 3.2.23", @@ -5684,7 +5684,7 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "chrono", @@ -5701,7 +5701,7 @@ dependencies = [ [[package]] name = "solana-clap-v3-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "chrono", @@ -5719,7 +5719,7 @@ dependencies = [ [[package]] name = "solana-cli" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -5778,7 +5778,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "2.0.21" +version = "2.0.24" dependencies = [ "anyhow", "dirs-next", @@ -5793,7 +5793,7 @@ dependencies = [ [[package]] name = "solana-cli-output" -version = "2.0.21" +version = "2.0.24" dependencies = [ "Inflector", "base64 0.22.1", @@ -5819,7 +5819,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-trait", "bincode", @@ -5851,7 +5851,7 @@ dependencies = [ [[package]] name = "solana-client-test" -version = "2.0.21" +version = "2.0.24" dependencies = [ "futures-util", "rand 0.8.5", @@ -5881,7 +5881,7 @@ dependencies = [ [[package]] name = "solana-compute-budget" -version = "2.0.21" +version = "2.0.24" dependencies = [ "rustc_version 0.4.0", "solana-frozen-abi", @@ -5890,7 +5890,7 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program-runtime", "solana-sdk", @@ -5898,7 +5898,7 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "chrono", @@ -5911,7 +5911,7 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-trait", "bincode", @@ -5934,7 +5934,7 @@ dependencies = [ [[package]] name = "solana-core" -version = "2.0.21" +version = "2.0.24" dependencies = [ "ahash 0.8.10", "assert_matches", @@ -6022,7 +6022,7 @@ dependencies = [ [[package]] name = "solana-cost-model" -version = "2.0.21" +version = "2.0.24" dependencies = [ "ahash 0.8.10", "itertools 0.12.1", @@ -6049,7 +6049,7 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "bytemuck_derive", @@ -6060,7 +6060,7 @@ dependencies = [ [[package]] name = "solana-dos" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "clap 3.2.23", @@ -6093,7 +6093,7 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "console", "indicatif", @@ -6105,7 +6105,7 @@ dependencies = [ [[package]] name = "solana-ed25519-program-tests" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "ed25519-dalek", @@ -6116,7 +6116,7 @@ dependencies = [ [[package]] name = "solana-entry" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -6138,7 +6138,7 @@ dependencies = [ [[package]] name = "solana-faucet" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "byteorder", @@ -6160,7 +6160,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bitflags 2.5.0", "bs58", @@ -6181,7 +6181,7 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "2.0.21" +version = "2.0.24" dependencies = [ "proc-macro2", "quote", @@ -6191,7 +6191,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "2.0.21" +version = "2.0.24" dependencies = [ "base64 0.22.1", "bincode", @@ -6216,7 +6216,7 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "solana-accounts-db", @@ -6227,7 +6227,7 @@ dependencies = [ [[package]] name = "solana-geyser-plugin-manager" -version = "2.0.21" +version = "2.0.24" dependencies = [ "agave-geyser-plugin-interface", "bs58", @@ -6252,7 +6252,7 @@ dependencies = [ [[package]] name = "solana-gossip" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -6303,7 +6303,7 @@ dependencies = [ [[package]] name = "solana-inline-spl" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "rustc_version 0.4.0", @@ -6312,7 +6312,7 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bs58", "clap 3.2.23", @@ -6329,7 +6329,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -6402,7 +6402,7 @@ dependencies = [ [[package]] name = "solana-loader-v4-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "log", @@ -6416,7 +6416,7 @@ dependencies = [ [[package]] name = "solana-local-cluster" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "crossbeam-channel", @@ -6457,7 +6457,7 @@ dependencies = [ [[package]] name = "solana-log-analyzer" -version = "2.0.21" +version = "2.0.24" dependencies = [ "byte-unit", "clap 3.2.23", @@ -6469,7 +6469,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "2.0.21" +version = "2.0.24" dependencies = [ "env_logger", "lazy_static", @@ -6478,7 +6478,7 @@ dependencies = [ [[package]] name = "solana-measure" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "solana-sdk", @@ -6486,11 +6486,11 @@ dependencies = [ [[package]] name = "solana-memory-management" -version = "2.0.21" +version = "2.0.24" [[package]] name = "solana-merkle-root-bench" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 2.33.3", "log", @@ -6503,7 +6503,7 @@ dependencies = [ [[package]] name = "solana-merkle-tree" -version = "2.0.21" +version = "2.0.24" dependencies = [ "fast-math", "hex", @@ -6512,7 +6512,7 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "2.0.21" +version = "2.0.24" dependencies = [ "crossbeam-channel", "env_logger", @@ -6528,7 +6528,7 @@ dependencies = [ [[package]] name = "solana-net-shaper" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 3.2.23", "rand 0.8.5", @@ -6540,7 +6540,7 @@ dependencies = [ [[package]] name = "solana-net-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "clap 3.2.23", @@ -6567,7 +6567,7 @@ checksum = "8b8a731ed60e89177c8a7ab05fe0f1511cedd3e70e773f288f9de33a9cfdc21e" [[package]] name = "solana-notifier" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "reqwest", @@ -6577,7 +6577,7 @@ dependencies = [ [[package]] name = "solana-package-metadata-macro" -version = "2.0.21" +version = "2.0.24" dependencies = [ "proc-macro2", "quote", @@ -6587,7 +6587,7 @@ dependencies = [ [[package]] name = "solana-perf" -version = "2.0.21" +version = "2.0.24" dependencies = [ "ahash 0.8.10", "assert_matches", @@ -6618,7 +6618,7 @@ dependencies = [ [[package]] name = "solana-poh" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -6640,7 +6640,7 @@ dependencies = [ [[package]] name = "solana-poh-bench" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 3.2.23", "log", @@ -6656,7 +6656,7 @@ dependencies = [ [[package]] name = "solana-poseidon" -version = "2.0.21" +version = "2.0.24" dependencies = [ "ark-bn254", "light-poseidon", @@ -6665,7 +6665,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "anyhow", "arbitrary", @@ -6720,7 +6720,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "base64 0.22.1", @@ -6752,7 +6752,7 @@ dependencies = [ [[package]] name = "solana-program-test" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "async-trait", @@ -6784,7 +6784,7 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "anyhow", "crossbeam-channel", @@ -6808,7 +6808,7 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-mutex", "async-trait", @@ -6835,7 +6835,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "2.0.21" +version = "2.0.24" dependencies = [ "lazy_static", "num_cpus", @@ -6843,7 +6843,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "console", @@ -6862,7 +6862,7 @@ dependencies = [ [[package]] name = "solana-rpc" -version = "2.0.21" +version = "2.0.24" dependencies = [ "base64 0.22.1", "bincode", @@ -6923,7 +6923,7 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "async-trait", @@ -6953,7 +6953,7 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.0.21" +version = "2.0.24" dependencies = [ "anyhow", "base64 0.22.1", @@ -6976,7 +6976,7 @@ dependencies = [ [[package]] name = "solana-rpc-client-nonce-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "anyhow", "clap 2.33.3", @@ -6993,7 +6993,7 @@ dependencies = [ [[package]] name = "solana-rpc-test" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "bs58", @@ -7020,7 +7020,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "2.0.21" +version = "2.0.24" dependencies = [ "aquamarine", "arrayref", @@ -7108,7 +7108,7 @@ dependencies = [ [[package]] name = "solana-runtime-transaction" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "log", @@ -7122,7 +7122,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "2.0.21" +version = "2.0.24" dependencies = [ "anyhow", "assert_matches", @@ -7180,7 +7180,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bs58", "proc-macro2", @@ -7197,7 +7197,7 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-send-transaction-service" -version = "2.0.21" +version = "2.0.24" dependencies = [ "crossbeam-channel", "log", @@ -7213,7 +7213,7 @@ dependencies = [ [[package]] name = "solana-stake-accounts" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -7229,7 +7229,7 @@ dependencies = [ [[package]] name = "solana-stake-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -7248,7 +7248,7 @@ dependencies = [ [[package]] name = "solana-stake-program-tests" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -7261,7 +7261,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "2.0.21" +version = "2.0.24" dependencies = [ "backoff", "bincode", @@ -7293,7 +7293,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "bs58", @@ -7309,7 +7309,7 @@ dependencies = [ [[package]] name = "solana-streamer" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "async-channel", @@ -7343,7 +7343,7 @@ dependencies = [ [[package]] name = "solana-svm" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "itertools 0.12.1", @@ -7378,7 +7378,7 @@ dependencies = [ [[package]] name = "solana-system-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -7394,7 +7394,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "2.0.21" +version = "2.0.24" dependencies = [ "base64 0.22.1", "bincode", @@ -7424,7 +7424,7 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "log", @@ -7438,7 +7438,7 @@ dependencies = [ [[package]] name = "solana-tokens" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -7472,7 +7472,7 @@ dependencies = [ [[package]] name = "solana-tps-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "serial_test", @@ -7493,7 +7493,7 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-trait", "bincode", @@ -7515,7 +7515,7 @@ dependencies = [ [[package]] name = "solana-transaction-dos" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "clap 2.33.3", @@ -7542,7 +7542,7 @@ dependencies = [ [[package]] name = "solana-transaction-metrics-tracker" -version = "2.0.21" +version = "2.0.24" dependencies = [ "Inflector", "base64 0.22.1", @@ -7556,7 +7556,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "2.0.21" +version = "2.0.24" dependencies = [ "Inflector", "base64 0.22.1", @@ -7581,7 +7581,7 @@ dependencies = [ [[package]] name = "solana-turbine" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -7619,7 +7619,7 @@ dependencies = [ [[package]] name = "solana-type-overrides" -version = "2.0.21" +version = "2.0.24" dependencies = [ "futures 0.3.30", "lazy_static", @@ -7629,7 +7629,7 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-trait", "solana-connection-cache", @@ -7642,7 +7642,7 @@ dependencies = [ [[package]] name = "solana-unified-scheduler-logic" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "solana-sdk", @@ -7651,7 +7651,7 @@ dependencies = [ [[package]] name = "solana-unified-scheduler-pool" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "crossbeam-channel", @@ -7672,7 +7672,7 @@ dependencies = [ [[package]] name = "solana-upload-perf" -version = "2.0.21" +version = "2.0.24" dependencies = [ "serde_json", "solana-metrics", @@ -7680,7 +7680,7 @@ dependencies = [ [[package]] name = "solana-version" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "rustc_version 0.4.0", @@ -7694,7 +7694,7 @@ dependencies = [ [[package]] name = "solana-vote" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "itertools 0.12.1", @@ -7711,7 +7711,7 @@ dependencies = [ [[package]] name = "solana-vote-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -7734,7 +7734,7 @@ dependencies = [ [[package]] name = "solana-wen-restart" -version = "2.0.21" +version = "2.0.24" dependencies = [ "anyhow", "assert_matches", @@ -7763,7 +7763,7 @@ dependencies = [ [[package]] name = "solana-zk-elgamal-proof-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "num-derive", @@ -7775,7 +7775,7 @@ dependencies = [ [[package]] name = "solana-zk-keygen" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bs58", "clap 3.2.23", @@ -7794,7 +7794,7 @@ dependencies = [ [[package]] name = "solana-zk-sdk" -version = "2.0.21" +version = "2.0.24" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -7822,7 +7822,7 @@ dependencies = [ [[package]] name = "solana-zk-token-proof-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "criterion", @@ -7836,7 +7836,7 @@ dependencies = [ [[package]] name = "solana-zk-token-proof-program-tests" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "curve25519-dalek", @@ -7848,7 +7848,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "2.0.21" +version = "2.0.24" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -8301,7 +8301,7 @@ dependencies = [ [[package]] name = "tachyon-ledger-tool" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_cmd", "bs58", @@ -8356,7 +8356,7 @@ dependencies = [ [[package]] name = "tachyon-validator" -version = "2.0.21" +version = "2.0.24" dependencies = [ "agave-geyser-plugin-interface", "chrono", diff --git a/Cargo.toml b/Cargo.toml index b55c916817b12d..eadc4e1431d694 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -138,7 +138,7 @@ exclude = ["programs/sbf", "svm/tests/example-programs"] resolver = "2" [workspace.package] -version = "2.0.21" +version = "2.0.24" authors = ["X1 Labs maintainers "] repository = "https://github.com/x1-labs/tachyon" homepage = "https://x1.xyz/" @@ -320,97 +320,97 @@ smallvec = "1.13.2" smpl_jwt = "0.7.1" socket2 = "0.5.7" soketto = "0.7" -solana-account-decoder = { path = "account-decoder", version = "=2.0.21" } -solana-accounts-db = { path = "accounts-db", version = "=2.0.21" } -solana-address-lookup-table-program = { path = "programs/address-lookup-table", version = "=2.0.21" } -solana-banks-client = { path = "banks-client", version = "=2.0.21" } -solana-banks-interface = { path = "banks-interface", version = "=2.0.21" } -solana-banks-server = { path = "banks-server", version = "=2.0.21" } -solana-bench-tps = { path = "bench-tps", version = "=2.0.21" } -solana-bloom = { path = "bloom", version = "=2.0.21" } -solana-bpf-loader-program = { path = "programs/bpf_loader", version = "=2.0.21" } -solana-bucket-map = { path = "bucket_map", version = "=2.0.21" } -agave-cargo-registry = { path = "cargo-registry", version = "=2.0.21" } -solana-clap-utils = { path = "clap-utils", version = "=2.0.21" } -solana-clap-v3-utils = { path = "clap-v3-utils", version = "=2.0.21" } -solana-cli = { path = "cli", version = "=2.0.21" } -solana-cli-config = { path = "cli-config", version = "=2.0.21" } -solana-cli-output = { path = "cli-output", version = "=2.0.21" } -solana-client = { path = "client", version = "=2.0.21" } -solana-compute-budget = { path = "compute-budget", version = "=2.0.21" } -solana-compute-budget-program = { path = "programs/compute-budget", version = "=2.0.21" } -solana-config-program = { path = "programs/config", version = "=2.0.21" } -solana-connection-cache = { path = "connection-cache", version = "=2.0.21", default-features = false } -solana-core = { path = "core", version = "=2.0.21" } -solana-cost-model = { path = "cost-model", version = "=2.0.21" } -solana-curve25519 = { path = "curves/curve25519", version = "=2.0.21" } -solana-download-utils = { path = "download-utils", version = "=2.0.21" } -solana-entry = { path = "entry", version = "=2.0.21" } -solana-faucet = { path = "faucet", version = "=2.0.21" } -solana-frozen-abi = { path = "frozen-abi", version = "=2.0.21" } -solana-frozen-abi-macro = { path = "frozen-abi/macro", version = "=2.0.21" } -solana-tps-client = { path = "tps-client", version = "=2.0.21" } -solana-genesis = { path = "genesis", version = "=2.0.21" } -solana-genesis-utils = { path = "genesis-utils", version = "=2.0.21" } -agave-geyser-plugin-interface = { path = "geyser-plugin-interface", version = "=2.0.21" } -solana-geyser-plugin-manager = { path = "geyser-plugin-manager", version = "=2.0.21" } -solana-gossip = { path = "gossip", version = "=2.0.21" } -solana-inline-spl = { path = "inline-spl", version = "=2.0.21" } -solana-ledger = { path = "ledger", version = "=2.0.21" } -solana-loader-v4-program = { path = "programs/loader-v4", version = "=2.0.21" } -solana-local-cluster = { path = "local-cluster", version = "=2.0.21" } -solana-logger = { path = "logger", version = "=2.0.21" } -solana-measure = { path = "measure", version = "=2.0.21" } -solana-merkle-tree = { path = "merkle-tree", version = "=2.0.21" } -solana-metrics = { path = "metrics", version = "=2.0.21" } -solana-net-utils = { path = "net-utils", version = "=2.0.21" } +solana-account-decoder = { path = "account-decoder", version = "=2.0.24" } +solana-accounts-db = { path = "accounts-db", version = "=2.0.24" } +solana-address-lookup-table-program = { path = "programs/address-lookup-table", version = "=2.0.24" } +solana-banks-client = { path = "banks-client", version = "=2.0.24" } +solana-banks-interface = { path = "banks-interface", version = "=2.0.24" } +solana-banks-server = { path = "banks-server", version = "=2.0.24" } +solana-bench-tps = { path = "bench-tps", version = "=2.0.24" } +solana-bloom = { path = "bloom", version = "=2.0.24" } +solana-bpf-loader-program = { path = "programs/bpf_loader", version = "=2.0.24" } +solana-bucket-map = { path = "bucket_map", version = "=2.0.24" } +agave-cargo-registry = { path = "cargo-registry", version = "=2.0.24" } +solana-clap-utils = { path = "clap-utils", version = "=2.0.24" } +solana-clap-v3-utils = { path = "clap-v3-utils", version = "=2.0.24" } +solana-cli = { path = "cli", version = "=2.0.24" } +solana-cli-config = { path = "cli-config", version = "=2.0.24" } +solana-cli-output = { path = "cli-output", version = "=2.0.24" } +solana-client = { path = "client", version = "=2.0.24" } +solana-compute-budget = { path = "compute-budget", version = "=2.0.24" } +solana-compute-budget-program = { path = "programs/compute-budget", version = "=2.0.24" } +solana-config-program = { path = "programs/config", version = "=2.0.24" } +solana-connection-cache = { path = "connection-cache", version = "=2.0.24", default-features = false } +solana-core = { path = "core", version = "=2.0.24" } +solana-cost-model = { path = "cost-model", version = "=2.0.24" } +solana-curve25519 = { path = "curves/curve25519", version = "=2.0.24" } +solana-download-utils = { path = "download-utils", version = "=2.0.24" } +solana-entry = { path = "entry", version = "=2.0.24" } +solana-faucet = { path = "faucet", version = "=2.0.24" } +solana-frozen-abi = { path = "frozen-abi", version = "=2.0.24" } +solana-frozen-abi-macro = { path = "frozen-abi/macro", version = "=2.0.24" } +solana-tps-client = { path = "tps-client", version = "=2.0.24" } +solana-genesis = { path = "genesis", version = "=2.0.24" } +solana-genesis-utils = { path = "genesis-utils", version = "=2.0.24" } +agave-geyser-plugin-interface = { path = "geyser-plugin-interface", version = "=2.0.24" } +solana-geyser-plugin-manager = { path = "geyser-plugin-manager", version = "=2.0.24" } +solana-gossip = { path = "gossip", version = "=2.0.24" } +solana-inline-spl = { path = "inline-spl", version = "=2.0.24" } +solana-ledger = { path = "ledger", version = "=2.0.24" } +solana-loader-v4-program = { path = "programs/loader-v4", version = "=2.0.24" } +solana-local-cluster = { path = "local-cluster", version = "=2.0.24" } +solana-logger = { path = "logger", version = "=2.0.24" } +solana-measure = { path = "measure", version = "=2.0.24" } +solana-merkle-tree = { path = "merkle-tree", version = "=2.0.24" } +solana-metrics = { path = "metrics", version = "=2.0.24" } +solana-net-utils = { path = "net-utils", version = "=2.0.24" } solana-nohash-hasher = "0.2.1" -solana-notifier = { path = "notifier", version = "=2.0.21" } -solana-package-metadata-macro = { path = "sdk/package-metadata-macro", version = "=2.0.21" } -solana-perf = { path = "perf", version = "=2.0.21" } -solana-poh = { path = "poh", version = "=2.0.21" } -solana-poseidon = { path = "poseidon", version = "=2.0.21" } -solana-program = { path = "sdk/program", version = "=2.0.21" } -solana-program-runtime = { path = "program-runtime", version = "=2.0.21" } -solana-program-test = { path = "program-test", version = "=2.0.21" } -solana-pubsub-client = { path = "pubsub-client", version = "=2.0.21" } -solana-quic-client = { path = "quic-client", version = "=2.0.21" } -solana-rayon-threadlimit = { path = "rayon-threadlimit", version = "=2.0.21" } -solana-remote-wallet = { path = "remote-wallet", version = "=2.0.21", default-features = false } -solana-unified-scheduler-logic = { path = "unified-scheduler-logic", version = "=2.0.21" } -solana-unified-scheduler-pool = { path = "unified-scheduler-pool", version = "=2.0.21" } -solana-rpc = { path = "rpc", version = "=2.0.21" } -solana-rpc-client = { path = "rpc-client", version = "=2.0.21", default-features = false } -solana-rpc-client-api = { path = "rpc-client-api", version = "=2.0.21" } -solana-rpc-client-nonce-utils = { path = "rpc-client-nonce-utils", version = "=2.0.21" } -solana-runtime = { path = "runtime", version = "=2.0.21" } -solana-runtime-transaction = { path = "runtime-transaction", version = "=2.0.21" } -solana-sdk = { path = "sdk", version = "=2.0.21" } -solana-sdk-macro = { path = "sdk/macro", version = "=2.0.21" } -solana-send-transaction-service = { path = "send-transaction-service", version = "=2.0.21" } -solana-stake-program = { path = "programs/stake", version = "=2.0.21" } -solana-storage-bigtable = { path = "storage-bigtable", version = "=2.0.21" } -solana-storage-proto = { path = "storage-proto", version = "=2.0.21" } -solana-streamer = { path = "streamer", version = "=2.0.21" } -solana-svm = { path = "svm", version = "=2.0.21" } -solana-system-program = { path = "programs/system", version = "=2.0.21" } -solana-test-validator = { path = "test-validator", version = "=2.0.21" } -solana-thin-client = { path = "thin-client", version = "=2.0.21" } -solana-tpu-client = { path = "tpu-client", version = "=2.0.21", default-features = false } -solana-transaction-status = { path = "transaction-status", version = "=2.0.21" } -solana-transaction-metrics-tracker = { path = "transaction-metrics-tracker", version = "=2.0.21" } -solana-turbine = { path = "turbine", version = "=2.0.21" } -solana-type-overrides = { path = "type-overrides", version = "=2.0.21" } -solana-udp-client = { path = "udp-client", version = "=2.0.21" } -solana-version = { path = "version", version = "=2.0.21" } -solana-vote = { path = "vote", version = "=2.0.21" } -solana-vote-program = { path = "programs/vote", version = "=2.0.21" } -solana-wen-restart = { path = "wen-restart", version = "=2.0.21" } -solana-zk-elgamal-proof-program = { path = "programs/zk-elgamal-proof", version = "=2.0.21" } -solana-zk-keygen = { path = "zk-keygen", version = "=2.0.21" } -solana-zk-sdk = { path = "zk-sdk", version = "=2.0.21" } -solana-zk-token-proof-program = { path = "programs/zk-token-proof", version = "=2.0.21" } -solana-zk-token-sdk = { path = "zk-token-sdk", version = "=2.0.21" } +solana-notifier = { path = "notifier", version = "=2.0.24" } +solana-package-metadata-macro = { path = "sdk/package-metadata-macro", version = "=2.0.24" } +solana-perf = { path = "perf", version = "=2.0.24" } +solana-poh = { path = "poh", version = "=2.0.24" } +solana-poseidon = { path = "poseidon", version = "=2.0.24" } +solana-program = { path = "sdk/program", version = "=2.0.24" } +solana-program-runtime = { path = "program-runtime", version = "=2.0.24" } +solana-program-test = { path = "program-test", version = "=2.0.24" } +solana-pubsub-client = { path = "pubsub-client", version = "=2.0.24" } +solana-quic-client = { path = "quic-client", version = "=2.0.24" } +solana-rayon-threadlimit = { path = "rayon-threadlimit", version = "=2.0.24" } +solana-remote-wallet = { path = "remote-wallet", version = "=2.0.24", default-features = false } +solana-unified-scheduler-logic = { path = "unified-scheduler-logic", version = "=2.0.24" } +solana-unified-scheduler-pool = { path = "unified-scheduler-pool", version = "=2.0.24" } +solana-rpc = { path = "rpc", version = "=2.0.24" } +solana-rpc-client = { path = "rpc-client", version = "=2.0.24", default-features = false } +solana-rpc-client-api = { path = "rpc-client-api", version = "=2.0.24" } +solana-rpc-client-nonce-utils = { path = "rpc-client-nonce-utils", version = "=2.0.24" } +solana-runtime = { path = "runtime", version = "=2.0.24" } +solana-runtime-transaction = { path = "runtime-transaction", version = "=2.0.24" } +solana-sdk = { path = "sdk", version = "=2.0.24" } +solana-sdk-macro = { path = "sdk/macro", version = "=2.0.24" } +solana-send-transaction-service = { path = "send-transaction-service", version = "=2.0.24" } +solana-stake-program = { path = "programs/stake", version = "=2.0.24" } +solana-storage-bigtable = { path = "storage-bigtable", version = "=2.0.24" } +solana-storage-proto = { path = "storage-proto", version = "=2.0.24" } +solana-streamer = { path = "streamer", version = "=2.0.24" } +solana-svm = { path = "svm", version = "=2.0.24" } +solana-system-program = { path = "programs/system", version = "=2.0.24" } +solana-test-validator = { path = "test-validator", version = "=2.0.24" } +solana-thin-client = { path = "thin-client", version = "=2.0.24" } +solana-tpu-client = { path = "tpu-client", version = "=2.0.24", default-features = false } +solana-transaction-status = { path = "transaction-status", version = "=2.0.24" } +solana-transaction-metrics-tracker = { path = "transaction-metrics-tracker", version = "=2.0.24" } +solana-turbine = { path = "turbine", version = "=2.0.24" } +solana-type-overrides = { path = "type-overrides", version = "=2.0.24" } +solana-udp-client = { path = "udp-client", version = "=2.0.24" } +solana-version = { path = "version", version = "=2.0.24" } +solana-vote = { path = "vote", version = "=2.0.24" } +solana-vote-program = { path = "programs/vote", version = "=2.0.24" } +solana-wen-restart = { path = "wen-restart", version = "=2.0.24" } +solana-zk-elgamal-proof-program = { path = "programs/zk-elgamal-proof", version = "=2.0.24" } +solana-zk-keygen = { path = "zk-keygen", version = "=2.0.24" } +solana-zk-sdk = { path = "zk-sdk", version = "=2.0.24" } +solana-zk-token-proof-program = { path = "programs/zk-token-proof", version = "=2.0.24" } +solana-zk-token-sdk = { path = "zk-token-sdk", version = "=2.0.24" } solana_rbpf = "=0.8.4" spl-associated-token-account = "=4.0.0" spl-instruction-padding = "0.2" diff --git a/accounts-db/src/accounts_db.rs b/accounts-db/src/accounts_db.rs index 8286be07aee9c0..6d1e677d094dd3 100644 --- a/accounts-db/src/accounts_db.rs +++ b/accounts-db/src/accounts_db.rs @@ -3358,14 +3358,13 @@ impl AccountsDb { } else { found_not_zero += 1; } - if uncleaned_roots.contains(slot) { - // Assertion enforced by `accounts_index.get()`, the latest slot - // will not be greater than the given `max_clean_root` - if let Some(max_clean_root_inclusive) = - max_clean_root_inclusive - { - assert!(slot <= &max_clean_root_inclusive); - } + + // If this candidate has multiple rooted slot list entries, + // we should reclaim the older ones. + if slot_list.len() > 1 + && *slot + <= max_clean_root_inclusive.unwrap_or(Slot::MAX) + { purges_old_accounts.push(*pubkey); useless = false; } @@ -9770,7 +9769,7 @@ pub mod tests { pubkey::PUBKEY_BYTES, }, std::{ - iter::FromIterator, + iter::{self, FromIterator}, str::FromStr, sync::{atomic::AtomicBool, RwLock}, thread::{self, Builder, JoinHandle}, @@ -18089,4 +18088,116 @@ pub mod tests { let hashes = hashes.into_iter().collect(); AccountsHasher::compute_merkle_root_recurse(hashes, MERKLE_FANOUT) } + + /// Test that `clean` reclaims old accounts when cleaning old storages + /// + /// When `clean` constructs candidates from old storages, pubkeys in these storages may have other + /// newer versions of the accounts in other newer storages *not* explicitly marked to be visited by + /// `clean`. In this case, `clean` should still reclaim the old versions of these accounts. + #[test] + fn test_clean_old_storages_with_reclaims_rooted() { + let accounts_db = AccountsDb::new_single_for_tests(); + let pubkey = Pubkey::new_unique(); + let old_slot = 11; + let new_slot = 22; + let slots = [old_slot, new_slot]; + for &slot in &slots { + let account = AccountSharedData::new(slot, 0, &Pubkey::new_unique()); + // store `pubkey` into multiple slots, and also store another unique pubkey + // to prevent the whole storage from being marked as dead by `clean`. + accounts_db.store_for_tests( + slot, + &[(&pubkey, &account), (&Pubkey::new_unique(), &account)], + ); + accounts_db.add_root_and_flush_write_cache(slot); + // ensure this slot is *not* in the dirty_stores or uncleaned_pubkeys, because we want to + // test cleaning *old* storages, i.e. when they aren't explicitly marked for cleaning + assert!(!accounts_db.dirty_stores.contains_key(&slot)); + assert!(!accounts_db.uncleaned_pubkeys.contains_key(&slot)); + } + + // add `old_slot` to the dirty stores list to mimic it being picked up as old + let old_storage = accounts_db + .storage + .get_slot_storage_entry_shrinking_in_progress_ok(old_slot) + .unwrap(); + accounts_db.dirty_stores.insert(old_slot, old_storage); + + // ensure the slot list for `pubkey` has both the old and new slots + let slot_list = accounts_db + .accounts_index + .get_bin(&pubkey) + .slot_list_mut(&pubkey, |slot_list| slot_list.clone()) + .unwrap(); + assert_eq!(slot_list.len(), slots.len()); + assert!(slot_list.iter().map(|(slot, _)| slot).eq(slots.iter())); + + // `clean` should now reclaim the account in `old_slot`, even though `new_slot` is not + // explicitly being cleaned + accounts_db.clean_accounts_for_tests(); + + // ensure we've reclaimed the account in `old_slot` + let slot_list = accounts_db + .accounts_index + .get_bin(&pubkey) + .slot_list_mut(&pubkey, |slot_list| slot_list.clone()) + .unwrap(); + assert_eq!(slot_list.len(), 1); + assert!(slot_list + .iter() + .map(|(slot, _)| slot) + .eq(iter::once(&new_slot))); + } + + /// Test that `clean` respects rooted vs unrooted slots w.r.t. reclaims + /// + /// When an account is in multiple slots, and the latest is unrooted, `clean` should *not* reclaim + /// all the rooted versions. + #[test] + fn test_clean_old_storages_with_reclaims_unrooted() { + let accounts_db = AccountsDb::new_single_for_tests(); + let pubkey = Pubkey::new_unique(); + let old_slot = 11; + let new_slot = 22; + let slots = [old_slot, new_slot]; + for &slot in &slots { + let account = AccountSharedData::new(slot, 0, &Pubkey::new_unique()); + // store `pubkey` into multiple slots, and also store another unique pubkey + // to prevent the whole storage from being marked as dead by `clean`. + accounts_db.store_for_tests( + slot, + &[(&pubkey, &account), (&Pubkey::new_unique(), &account)], + ); + accounts_db.calculate_accounts_delta_hash(slot); + // ensure this slot is in uncleaned_pubkeys (but not dirty_stores) so it'll be cleaned + assert!(!accounts_db.dirty_stores.contains_key(&slot)); + assert!(accounts_db.uncleaned_pubkeys.contains_key(&slot)); + } + + // only `old_slot` should be rooted, not `new_slot` + accounts_db.add_root_and_flush_write_cache(old_slot); + assert!(accounts_db.accounts_index.is_alive_root(old_slot)); + assert!(!accounts_db.accounts_index.is_alive_root(new_slot)); + + // ensure the slot list for `pubkey` has both the old and new slots + let slot_list = accounts_db + .accounts_index + .get_bin(&pubkey) + .slot_list_mut(&pubkey, |slot_list| slot_list.clone()) + .unwrap(); + assert_eq!(slot_list.len(), slots.len()); + assert!(slot_list.iter().map(|(slot, _)| slot).eq(slots.iter())); + + // `clean` should *not* reclaim the account in `old_slot` because `new_slot` is not a root + accounts_db.clean_accounts_for_tests(); + + // ensure we have NOT reclaimed the account in `old_slot` + let slot_list = accounts_db + .accounts_index + .get_bin(&pubkey) + .slot_list_mut(&pubkey, |slot_list| slot_list.clone()) + .unwrap(); + assert_eq!(slot_list.len(), slots.len()); + assert!(slot_list.iter().map(|(slot, _)| slot).eq(slots.iter())); + } } diff --git a/accounts-db/src/accounts_index.rs b/accounts-db/src/accounts_index.rs index 08058934b1781f..e8296cd50c6af7 100644 --- a/accounts-db/src/accounts_index.rs +++ b/accounts-db/src/accounts_index.rs @@ -1933,6 +1933,16 @@ impl + Into> AccountsIndex { w_roots_tracker.uncleaned_roots.extend(roots); } + /// Removes `root` from `uncleaned_roots` and returns whether it was previously present + #[cfg(feature = "dev-context-only-utils")] + pub fn remove_uncleaned_root(&self, root: Slot) -> bool { + self.roots_tracker + .write() + .unwrap() + .uncleaned_roots + .remove(&root) + } + pub fn max_root_inclusive(&self) -> Slot { self.roots_tracker .read() diff --git a/ci/publish-crate.sh b/ci/publish-crate.sh index 5d7f3b1e1e1c50..567508a180db35 100755 --- a/ci/publish-crate.sh +++ b/ci/publish-crate.sh @@ -2,6 +2,7 @@ set -e cd "$(dirname "$0")/.." source ci/semver_bash/semver.sh +export RUST_STABLE_VERSION=1.81.0 source ci/rust-version.sh stable # shellcheck disable=SC2086 @@ -65,7 +66,7 @@ for Cargo_toml in $Cargo_tomls; do set -x crate=$(dirname "$Cargo_toml") - cargoCommand="cargo publish --token $CRATES_IO_TOKEN" + cargoCommand="cargo +$rust_stable publish --token $CRATES_IO_TOKEN" numRetries=10 for ((i = 1; i <= numRetries; i++)); do diff --git a/core/src/banking_stage/transaction_scheduler/prio_graph_scheduler.rs b/core/src/banking_stage/transaction_scheduler/prio_graph_scheduler.rs index c640e88a178d22..632fdd8ace2fed 100644 --- a/core/src/banking_stage/transaction_scheduler/prio_graph_scheduler.rs +++ b/core/src/banking_stage/transaction_scheduler/prio_graph_scheduler.rs @@ -43,7 +43,7 @@ impl PrioGraphScheduler { account_locks: ThreadAwareAccountLocks::new(num_threads), consume_work_senders, finished_consume_work_receiver, - look_ahead_window_size: 2048, + look_ahead_window_size: 256, } } @@ -154,17 +154,19 @@ impl PrioGraphScheduler { let mut unblock_this_batch = Vec::with_capacity(self.consume_work_senders.len() * TARGET_NUM_TRANSACTIONS_PER_BATCH); - const MAX_TRANSACTIONS_PER_SCHEDULING_PASS: usize = 100_000; + const MAX_TRANSACTIONS_SCANNED_PER_SCHEDULING_PASS: usize = 1_000; + let mut num_scanned: usize = 0; let mut num_scheduled: usize = 0; let mut num_sent: usize = 0; let mut num_unschedulable: usize = 0; - while num_scheduled < MAX_TRANSACTIONS_PER_SCHEDULING_PASS { + while num_scheduled < MAX_TRANSACTIONS_SCANNED_PER_SCHEDULING_PASS { // If nothing is in the main-queue of the `PrioGraph` then there's nothing left to schedule. if prio_graph.is_empty() { break; } while let Some(id) = prio_graph.pop() { + num_scanned += 1; unblock_this_batch.push(id); // Should always be in the container, during initial testing phase panic. @@ -229,12 +231,12 @@ impl PrioGraphScheduler { break; } } - - if num_scheduled >= MAX_TRANSACTIONS_PER_SCHEDULING_PASS { - break; - } } } + + if num_scanned >= MAX_TRANSACTIONS_SCANNED_PER_SCHEDULING_PASS { + break; + } } // Send all non-empty batches diff --git a/core/src/banking_stage/transaction_scheduler/scheduler_controller.rs b/core/src/banking_stage/transaction_scheduler/scheduler_controller.rs index 136ad041b71dcf..b69a8c635844e4 100644 --- a/core/src/banking_stage/transaction_scheduler/scheduler_controller.rs +++ b/core/src/banking_stage/transaction_scheduler/scheduler_controller.rs @@ -119,8 +119,8 @@ impl SchedulerController { self.timing_metrics .maybe_report_and_reset_slot(new_leader_slot); - self.process_transactions(&decision)?; self.receive_completed()?; + self.process_transactions(&decision)?; if !self.receive_and_buffer_packets(&decision) { break; } @@ -435,11 +435,11 @@ impl SchedulerController { /// Returns whether the packet receiver is still connected. fn receive_and_buffer_packets(&mut self, decision: &BufferedPacketsDecision) -> bool { - let remaining_queue_capacity = self.container.remaining_queue_capacity(); + const MAX_RECEIVE_PACKETS: usize = 5_000; - const MAX_PACKET_RECEIVE_TIME: Duration = Duration::from_millis(100); + const MAX_PACKET_RECEIVE_TIME: Duration = Duration::from_millis(10); let (recv_timeout, should_buffer) = match decision { - BufferedPacketsDecision::Consume(_) => ( + BufferedPacketsDecision::Consume(_) | BufferedPacketsDecision::Hold => ( if self.container.is_empty() { MAX_PACKET_RECEIVE_TIME } else { @@ -448,14 +448,12 @@ impl SchedulerController { true, ), BufferedPacketsDecision::Forward => (MAX_PACKET_RECEIVE_TIME, self.forwarder.is_some()), - BufferedPacketsDecision::ForwardAndHold | BufferedPacketsDecision::Hold => { - (MAX_PACKET_RECEIVE_TIME, true) - } + BufferedPacketsDecision::ForwardAndHold => (MAX_PACKET_RECEIVE_TIME, true), }; let (received_packet_results, receive_time_us) = measure_us!(self .packet_receiver - .receive_packets(recv_timeout, remaining_queue_capacity, |packet| { + .receive_packets(recv_timeout, MAX_RECEIVE_PACKETS, |packet| { packet.check_excessive_precompiles()?; Ok(packet) })); diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index acb630bebb3633..9663ba1cc97268 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -1682,6 +1682,13 @@ impl Blockstore { &shred, duplicate_shreds, ) { + // This indicates there is an alternate version of this block. + // Similar to the last index case above, we might never get all the + // shreds for our current version, never replay this slot, and make no + // progress. We cannot determine if we have the version that will eventually + // be complete, so we take the conservative approach and mark the slot as dead + // so that replay can dump and repair the correct version. + write_batch.put::(slot, &true).unwrap(); return Err(InsertDataShredError::InvalidShred); } } @@ -5848,21 +5855,6 @@ pub mod tests { .insert_shreds(shreds, None, false) .expect("Expected successful write of shreds"); - let mut shreds1 = entries_to_test_shreds( - &entries[4..], - 1, - 0, - false, - 0, - false, // merkle_variant - ); - for (i, b) in shreds1.iter_mut().enumerate() { - b.set_index(8 + i as u32); - } - blockstore - .insert_shreds(shreds1, None, false) - .expect("Expected successful write of shreds"); - assert_eq!( blockstore.get_slot_entries(1, 0).unwrap()[2..4], entries[2..4], @@ -7755,6 +7747,11 @@ pub mod tests { index ); + // Block is now dead + blockstore.db.write(write_batch).unwrap(); + assert!(blockstore.is_dead(slot)); + blockstore.remove_dead_slot(slot).unwrap(); + // Blockstore should also have the merkle root meta of the original shred assert_eq!( blockstore @@ -7786,6 +7783,7 @@ pub mod tests { fec_set_index + 30, ); + let mut write_batch = blockstore.db.batch().unwrap(); blockstore .check_insert_data_shred( new_data_shred.clone(), @@ -7802,23 +7800,25 @@ pub mod tests { ShredSource::Turbine, ) .unwrap(); + blockstore.db.write(write_batch).unwrap(); // Verify that we still have the merkle root meta for the original shred // and the new shred - assert_eq!(merkle_root_metas.len(), 2); assert_eq!( - merkle_root_metas - .get(&data_shred.erasure_set()) + blockstore + .merkle_root_meta(data_shred.erasure_set()) .unwrap() .as_ref() + .unwrap() .merkle_root(), data_shred.merkle_root().ok() ); assert_eq!( - merkle_root_metas - .get(&data_shred.erasure_set()) + blockstore + .merkle_root_meta(data_shred.erasure_set()) .unwrap() .as_ref() + .unwrap() .first_received_shred_index(), index ); diff --git a/programs/sbf/Cargo.lock b/programs/sbf/Cargo.lock index b7ca6739d3c61c..fb4f159f0af793 100644 --- a/programs/sbf/Cargo.lock +++ b/programs/sbf/Cargo.lock @@ -65,7 +65,7 @@ dependencies = [ [[package]] name = "agave-geyser-plugin-interface" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "solana-sdk", @@ -4455,7 +4455,7 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "2.0.21" +version = "2.0.24" dependencies = [ "Inflector", "base64 0.22.1", @@ -4478,7 +4478,7 @@ dependencies = [ [[package]] name = "solana-accounts-db" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "blake3", @@ -4521,7 +4521,7 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "bytemuck", @@ -4537,7 +4537,7 @@ dependencies = [ [[package]] name = "solana-banks-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "borsh 1.5.1", "futures 0.3.30", @@ -4552,7 +4552,7 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "2.0.21" +version = "2.0.24" dependencies = [ "serde", "serde_derive", @@ -4562,7 +4562,7 @@ dependencies = [ [[package]] name = "solana-banks-server" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "crossbeam-channel", @@ -4580,7 +4580,7 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bv", "fnv", @@ -4595,7 +4595,7 @@ dependencies = [ [[package]] name = "solana-bpf-loader-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "byteorder 1.5.0", @@ -4615,7 +4615,7 @@ dependencies = [ [[package]] name = "solana-bucket-map" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bv", "bytemuck", @@ -4632,7 +4632,7 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "chrono", "clap 2.33.3", @@ -4647,7 +4647,7 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "2.0.21" +version = "2.0.24" dependencies = [ "dirs-next", "lazy_static", @@ -4661,7 +4661,7 @@ dependencies = [ [[package]] name = "solana-cli-output" -version = "2.0.21" +version = "2.0.24" dependencies = [ "Inflector", "base64 0.22.1", @@ -4686,7 +4686,7 @@ dependencies = [ [[package]] name = "solana-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-trait", "bincode", @@ -4717,7 +4717,7 @@ dependencies = [ [[package]] name = "solana-compute-budget" -version = "2.0.21" +version = "2.0.24" dependencies = [ "rustc_version", "solana-sdk", @@ -4725,7 +4725,7 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program-runtime", "solana-sdk", @@ -4733,7 +4733,7 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "chrono", @@ -4745,7 +4745,7 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-trait", "bincode", @@ -4764,7 +4764,7 @@ dependencies = [ [[package]] name = "solana-core" -version = "2.0.21" +version = "2.0.24" dependencies = [ "ahash 0.8.10", "base64 0.22.1", @@ -4840,7 +4840,7 @@ dependencies = [ [[package]] name = "solana-cost-model" -version = "2.0.21" +version = "2.0.24" dependencies = [ "ahash 0.8.10", "lazy_static", @@ -4861,7 +4861,7 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "bytemuck_derive", @@ -4872,7 +4872,7 @@ dependencies = [ [[package]] name = "solana-download-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "console", "indicatif", @@ -4884,7 +4884,7 @@ dependencies = [ [[package]] name = "solana-entry" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "crossbeam-channel", @@ -4904,7 +4904,7 @@ dependencies = [ [[package]] name = "solana-faucet" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "byteorder 1.5.0", @@ -4926,7 +4926,7 @@ dependencies = [ [[package]] name = "solana-genesis-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "solana-accounts-db", @@ -4937,7 +4937,7 @@ dependencies = [ [[package]] name = "solana-geyser-plugin-manager" -version = "2.0.21" +version = "2.0.24" dependencies = [ "agave-geyser-plugin-interface", "bs58", @@ -4962,7 +4962,7 @@ dependencies = [ [[package]] name = "solana-gossip" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -5008,7 +5008,7 @@ dependencies = [ [[package]] name = "solana-inline-spl" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "rustc_version", @@ -5017,7 +5017,7 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "bincode", @@ -5084,7 +5084,7 @@ dependencies = [ [[package]] name = "solana-loader-v4-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "solana-compute-budget", @@ -5097,7 +5097,7 @@ dependencies = [ [[package]] name = "solana-logger" -version = "2.0.21" +version = "2.0.24" dependencies = [ "env_logger", "lazy_static", @@ -5106,7 +5106,7 @@ dependencies = [ [[package]] name = "solana-measure" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "solana-sdk", @@ -5114,7 +5114,7 @@ dependencies = [ [[package]] name = "solana-merkle-tree" -version = "2.0.21" +version = "2.0.24" dependencies = [ "fast-math", "solana-program", @@ -5122,7 +5122,7 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "2.0.21" +version = "2.0.24" dependencies = [ "crossbeam-channel", "gethostname", @@ -5135,7 +5135,7 @@ dependencies = [ [[package]] name = "solana-net-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "clap 3.2.25", @@ -5162,7 +5162,7 @@ checksum = "8b8a731ed60e89177c8a7ab05fe0f1511cedd3e70e773f288f9de33a9cfdc21e" [[package]] name = "solana-perf" -version = "2.0.21" +version = "2.0.24" dependencies = [ "ahash 0.8.10", "bincode", @@ -5187,7 +5187,7 @@ dependencies = [ [[package]] name = "solana-poh" -version = "2.0.21" +version = "2.0.24" dependencies = [ "core_affinity", "crossbeam-channel", @@ -5203,7 +5203,7 @@ dependencies = [ [[package]] name = "solana-poseidon" -version = "2.0.21" +version = "2.0.24" dependencies = [ "ark-bn254", "light-poseidon", @@ -5212,7 +5212,7 @@ dependencies = [ [[package]] name = "solana-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "ark-bn254", "ark-ec", @@ -5256,7 +5256,7 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "2.0.21" +version = "2.0.24" dependencies = [ "base64 0.22.1", "bincode", @@ -5283,7 +5283,7 @@ dependencies = [ [[package]] name = "solana-program-test" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "async-trait", @@ -5313,7 +5313,7 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "crossbeam-channel", "futures-util", @@ -5336,7 +5336,7 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-mutex", "async-trait", @@ -5360,7 +5360,7 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "2.0.21" +version = "2.0.24" dependencies = [ "lazy_static", "num_cpus", @@ -5368,7 +5368,7 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "2.0.21" +version = "2.0.24" dependencies = [ "console", "dialoguer", @@ -5385,7 +5385,7 @@ dependencies = [ [[package]] name = "solana-rpc" -version = "2.0.21" +version = "2.0.24" dependencies = [ "base64 0.22.1", "bincode", @@ -5442,7 +5442,7 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-trait", "base64 0.22.1", @@ -5467,7 +5467,7 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.0.21" +version = "2.0.24" dependencies = [ "anyhow", "base64 0.22.1", @@ -5489,7 +5489,7 @@ dependencies = [ [[package]] name = "solana-rpc-client-nonce-utils" -version = "2.0.21" +version = "2.0.24" dependencies = [ "clap 2.33.3", "solana-clap-utils", @@ -5500,7 +5500,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "2.0.21" +version = "2.0.24" dependencies = [ "aquamarine", "arrayref", @@ -5578,7 +5578,7 @@ dependencies = [ [[package]] name = "solana-sbf-programs" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "byteorder 1.5.0", @@ -5611,7 +5611,7 @@ dependencies = [ [[package]] name = "solana-sbf-rust-128bit" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", "solana-sbf-rust-128bit-dep", @@ -5619,21 +5619,21 @@ dependencies = [ [[package]] name = "solana-sbf-rust-128bit-dep" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-alloc" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-alt-bn128" -version = "2.0.21" +version = "2.0.24" dependencies = [ "array-bytes", "solana-program", @@ -5641,7 +5641,7 @@ dependencies = [ [[package]] name = "solana-sbf-rust-alt-bn128-compression" -version = "2.0.21" +version = "2.0.24" dependencies = [ "array-bytes", "solana-program", @@ -5649,7 +5649,7 @@ dependencies = [ [[package]] name = "solana-sbf-rust-big-mod-exp" -version = "2.0.21" +version = "2.0.24" dependencies = [ "array-bytes", "serde", @@ -5660,21 +5660,21 @@ dependencies = [ [[package]] name = "solana-sbf-rust-call-depth" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-caller-access" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-curve25519" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-curve25519", "solana-program", @@ -5683,14 +5683,14 @@ dependencies = [ [[package]] name = "solana-sbf-rust-custom-heap" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-dep-crate" -version = "2.0.21" +version = "2.0.24" dependencies = [ "byteorder 1.5.0", "solana-program", @@ -5698,21 +5698,21 @@ dependencies = [ [[package]] name = "solana-sbf-rust-deprecated-loader" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-dup-accounts" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-error-handling" -version = "2.0.21" +version = "2.0.24" dependencies = [ "num-derive", "num-traits", @@ -5722,42 +5722,42 @@ dependencies = [ [[package]] name = "solana-sbf-rust-external-spend" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-finalize" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-get-minimum-delegation" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-inner_instruction_alignment_check" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-instruction-introspection" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-invoke" -version = "2.0.21" +version = "2.0.24" dependencies = [ "rustversion", "solana-program", @@ -5768,32 +5768,32 @@ dependencies = [ [[package]] name = "solana-sbf-rust-invoke-and-error" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-invoke-and-ok" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-invoke-and-return" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-invoke-dep" -version = "2.0.21" +version = "2.0.24" [[package]] name = "solana-sbf-rust-invoked" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", "solana-sbf-rust-invoked-dep", @@ -5801,28 +5801,28 @@ dependencies = [ [[package]] name = "solana-sbf-rust-invoked-dep" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-iter" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-log-data" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-many-args" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", "solana-sbf-rust-many-args-dep", @@ -5830,14 +5830,14 @@ dependencies = [ [[package]] name = "solana-sbf-rust-many-args-dep" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-mem" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", "solana-sbf-rust-mem-dep", @@ -5845,14 +5845,14 @@ dependencies = [ [[package]] name = "solana-sbf-rust-mem-dep" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-membuiltins" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", "solana-sbf-rust-mem-dep", @@ -5860,21 +5860,21 @@ dependencies = [ [[package]] name = "solana-sbf-rust-noop" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-panic" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-param-passing" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", "solana-sbf-rust-param-passing-dep", @@ -5882,14 +5882,14 @@ dependencies = [ [[package]] name = "solana-sbf-rust-param-passing-dep" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-poseidon" -version = "2.0.21" +version = "2.0.24" dependencies = [ "array-bytes", "solana-poseidon", @@ -5898,7 +5898,7 @@ dependencies = [ [[package]] name = "solana-sbf-rust-rand" -version = "2.0.21" +version = "2.0.24" dependencies = [ "getrandom 0.2.10", "rand 0.8.5", @@ -5907,7 +5907,7 @@ dependencies = [ [[package]] name = "solana-sbf-rust-realloc" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", "solana-sbf-rust-realloc-dep", @@ -5915,14 +5915,14 @@ dependencies = [ [[package]] name = "solana-sbf-rust-realloc-dep" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-realloc-invoke" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", "solana-sbf-rust-realloc-dep", @@ -5931,39 +5931,39 @@ dependencies = [ [[package]] name = "solana-sbf-rust-realloc-invoke-dep" -version = "2.0.21" +version = "2.0.24" [[package]] name = "solana-sbf-rust-remaining-compute-units" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-ro-account_modify" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-ro-modify" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-sanity" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-secp256k1-recover" -version = "2.0.21" +version = "2.0.24" dependencies = [ "libsecp256k1 0.7.0", "solana-program", @@ -5971,7 +5971,7 @@ dependencies = [ [[package]] name = "solana-sbf-rust-sha" -version = "2.0.21" +version = "2.0.24" dependencies = [ "blake3", "solana-program", @@ -5979,63 +5979,63 @@ dependencies = [ [[package]] name = "solana-sbf-rust-sibling-inner-instructions" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-sibling-instructions" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-simulation" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-spoof1" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-spoof1-system" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-sysvar" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-upgradeable" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sbf-rust-upgraded" -version = "2.0.21" +version = "2.0.24" dependencies = [ "solana-program", ] [[package]] name = "solana-sdk" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "bitflags 2.5.0", @@ -6083,7 +6083,7 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bs58", "proc-macro2", @@ -6100,7 +6100,7 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-send-transaction-service" -version = "2.0.21" +version = "2.0.24" dependencies = [ "crossbeam-channel", "log", @@ -6115,7 +6115,7 @@ dependencies = [ [[package]] name = "solana-stake-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "log", @@ -6129,7 +6129,7 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "2.0.21" +version = "2.0.24" dependencies = [ "backoff", "bincode", @@ -6161,7 +6161,7 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "bs58", @@ -6176,7 +6176,7 @@ dependencies = [ [[package]] name = "solana-streamer" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-channel", "bytes", @@ -6208,7 +6208,7 @@ dependencies = [ [[package]] name = "solana-svm" -version = "2.0.21" +version = "2.0.24" dependencies = [ "itertools 0.12.1", "log", @@ -6232,7 +6232,7 @@ dependencies = [ [[package]] name = "solana-system-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "log", @@ -6245,7 +6245,7 @@ dependencies = [ [[package]] name = "solana-test-validator" -version = "2.0.21" +version = "2.0.24" dependencies = [ "base64 0.22.1", "bincode", @@ -6275,7 +6275,7 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "log", @@ -6288,7 +6288,7 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-trait", "bincode", @@ -6310,7 +6310,7 @@ dependencies = [ [[package]] name = "solana-transaction-metrics-tracker" -version = "2.0.21" +version = "2.0.24" dependencies = [ "Inflector", "base64 0.22.1", @@ -6324,7 +6324,7 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "2.0.21" +version = "2.0.24" dependencies = [ "Inflector", "base64 0.22.1", @@ -6349,7 +6349,7 @@ dependencies = [ [[package]] name = "solana-turbine" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "bytes", @@ -6384,7 +6384,7 @@ dependencies = [ [[package]] name = "solana-type-overrides" -version = "2.0.21" +version = "2.0.24" dependencies = [ "lazy_static", "rand 0.8.5", @@ -6392,7 +6392,7 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "2.0.21" +version = "2.0.24" dependencies = [ "async-trait", "solana-connection-cache", @@ -6405,7 +6405,7 @@ dependencies = [ [[package]] name = "solana-unified-scheduler-logic" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "solana-sdk", @@ -6414,7 +6414,7 @@ dependencies = [ [[package]] name = "solana-unified-scheduler-pool" -version = "2.0.21" +version = "2.0.24" dependencies = [ "assert_matches", "crossbeam-channel", @@ -6433,7 +6433,7 @@ dependencies = [ [[package]] name = "solana-version" -version = "2.0.21" +version = "2.0.24" dependencies = [ "log", "rustc_version", @@ -6445,7 +6445,7 @@ dependencies = [ [[package]] name = "solana-vote" -version = "2.0.21" +version = "2.0.24" dependencies = [ "itertools 0.12.1", "log", @@ -6458,7 +6458,7 @@ dependencies = [ [[package]] name = "solana-vote-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bincode", "log", @@ -6476,7 +6476,7 @@ dependencies = [ [[package]] name = "solana-wen-restart" -version = "2.0.21" +version = "2.0.24" dependencies = [ "anyhow", "log", @@ -6499,7 +6499,7 @@ dependencies = [ [[package]] name = "solana-zk-elgamal-proof-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "num-derive", @@ -6511,7 +6511,7 @@ dependencies = [ [[package]] name = "solana-zk-sdk" -version = "2.0.21" +version = "2.0.24" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -6538,7 +6538,7 @@ dependencies = [ [[package]] name = "solana-zk-token-proof-program" -version = "2.0.21" +version = "2.0.24" dependencies = [ "bytemuck", "num-derive", @@ -6550,7 +6550,7 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "2.0.21" +version = "2.0.24" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -6977,7 +6977,7 @@ dependencies = [ [[package]] name = "tachyon-validator" -version = "2.0.21" +version = "2.0.24" dependencies = [ "agave-geyser-plugin-interface", "chrono", diff --git a/programs/sbf/Cargo.toml b/programs/sbf/Cargo.toml index e6cdc20eb3eab7..e3e6074a93110f 100644 --- a/programs/sbf/Cargo.toml +++ b/programs/sbf/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "2.0.21" +version = "2.0.24" description = "Solana SBF test program written in Rust" authors = ["X1 Labs maintainers "] repository = "https://github.com/x1-labs/tachyon" @@ -26,33 +26,33 @@ rustversion = "1.0.14" serde = "1.0.112" # must match the serde_derive version, see https://github.com/serde-rs/serde/issues/2584#issuecomment-1685252251 serde_derive = "1.0.112" # must match the serde version, see https://github.com/serde-rs/serde/issues/2584#issuecomment-1685252251 serde_json = "1.0.56" -solana-account-decoder = { path = "../../account-decoder", version = "=2.0.21" } -solana-accounts-db = { path = "../../accounts-db", version = "=2.0.21" } -solana-bpf-loader-program = { path = "../bpf_loader", version = "=2.0.21" } -solana-cli-output = { path = "../../cli-output", version = "=2.0.21" } -solana-compute-budget = { path = "../../compute-budget", version = "=2.0.21" } -solana-curve25519 = { path = "../../curves/curve25519", version = "=2.0.21" } -solana-ledger = { path = "../../ledger", version = "=2.0.21" } -solana-logger = { path = "../../logger", version = "=2.0.21" } -solana-measure = { path = "../../measure", version = "=2.0.21" } -solana-poseidon = { path = "../../poseidon/", version = "=2.0.21" } -solana-program = { path = "../../sdk/program", version = "=2.0.21" } -solana-program-runtime = { path = "../../program-runtime", version = "=2.0.21" } -solana-runtime = { path = "../../runtime", version = "=2.0.21" } -solana-sbf-rust-128bit-dep = { path = "rust/128bit_dep", version = "=2.0.21" } -solana-sbf-rust-invoke-dep = { path = "rust/invoke_dep", version = "=2.0.21" } -solana-sbf-rust-invoked-dep = { path = "rust/invoked_dep", version = "=2.0.21" } -solana-sbf-rust-many-args-dep = { path = "rust/many_args_dep", version = "=2.0.21" } -solana-sbf-rust-mem-dep = { path = "rust/mem_dep", version = "=2.0.21" } -solana-sbf-rust-param-passing-dep = { path = "rust/param_passing_dep", version = "=2.0.21" } -solana-sbf-rust-realloc-dep = { path = "rust/realloc_dep", version = "=2.0.21" } -solana-sbf-rust-realloc-invoke-dep = { path = "rust/realloc_invoke_dep", version = "=2.0.21" } -solana-sdk = { path = "../../sdk", version = "=2.0.21" } -solana-svm = { path = "../../svm", version = "=2.0.21" } -solana-transaction-status = { path = "../../transaction-status", version = "=2.0.21" } -solana-type-overrides = { path = "../../type-overrides", version = "=2.0.21" } -tachyon-validator = { path = "../../validator", version = "=2.0.21" } -solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=2.0.21" } +solana-account-decoder = { path = "../../account-decoder", version = "=2.0.24" } +solana-accounts-db = { path = "../../accounts-db", version = "=2.0.24" } +solana-bpf-loader-program = { path = "../bpf_loader", version = "=2.0.24" } +solana-cli-output = { path = "../../cli-output", version = "=2.0.24" } +solana-compute-budget = { path = "../../compute-budget", version = "=2.0.24" } +solana-curve25519 = { path = "../../curves/curve25519", version = "=2.0.24" } +solana-ledger = { path = "../../ledger", version = "=2.0.24" } +solana-logger = { path = "../../logger", version = "=2.0.24" } +solana-measure = { path = "../../measure", version = "=2.0.24" } +solana-poseidon = { path = "../../poseidon/", version = "=2.0.24" } +solana-program = { path = "../../sdk/program", version = "=2.0.24" } +solana-program-runtime = { path = "../../program-runtime", version = "=2.0.24" } +solana-runtime = { path = "../../runtime", version = "=2.0.24" } +solana-sbf-rust-128bit-dep = { path = "rust/128bit_dep", version = "=2.0.24" } +solana-sbf-rust-invoke-dep = { path = "rust/invoke_dep", version = "=2.0.24" } +solana-sbf-rust-invoked-dep = { path = "rust/invoked_dep", version = "=2.0.24" } +solana-sbf-rust-many-args-dep = { path = "rust/many_args_dep", version = "=2.0.24" } +solana-sbf-rust-mem-dep = { path = "rust/mem_dep", version = "=2.0.24" } +solana-sbf-rust-param-passing-dep = { path = "rust/param_passing_dep", version = "=2.0.24" } +solana-sbf-rust-realloc-dep = { path = "rust/realloc_dep", version = "=2.0.24" } +solana-sbf-rust-realloc-invoke-dep = { path = "rust/realloc_invoke_dep", version = "=2.0.24" } +solana-sdk = { path = "../../sdk", version = "=2.0.24" } +solana-svm = { path = "../../svm", version = "=2.0.24" } +solana-transaction-status = { path = "../../transaction-status", version = "=2.0.24" } +solana-type-overrides = { path = "../../type-overrides", version = "=2.0.24" } +tachyon-validator = { path = "../../validator", version = "=2.0.24" } +solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=2.0.24" } solana_rbpf = "=0.8.4" thiserror = "1.0" diff --git a/rpc-client-api/src/custom_error.rs b/rpc-client-api/src/custom_error.rs index 2e54e8edd22e02..d3af94d0ea34d5 100644 --- a/rpc-client-api/src/custom_error.rs +++ b/rpc-client-api/src/custom_error.rs @@ -26,6 +26,7 @@ pub const JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: i64 = -32015; pub const JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: i64 = -32016; pub const JSON_RPC_SERVER_ERROR_EPOCH_REWARDS_PERIOD_ACTIVE: i64 = -32017; pub const JSON_RPC_SERVER_ERROR_SLOT_NOT_EPOCH_BOUNDARY: i64 = -32018; +pub const JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_UNREACHABLE: i64 = -32019; #[derive(Error, Debug)] pub enum RpcCustomError { @@ -75,6 +76,8 @@ pub enum RpcCustomError { }, #[error("SlotNotEpochBoundary")] SlotNotEpochBoundary { slot: Slot }, + #[error("LongTermStorageUnreachable")] + LongTermStorageUnreachable, } #[derive(Debug, Serialize, Deserialize)] @@ -239,6 +242,11 @@ impl From for Error { ), data: None, }, + RpcCustomError::LongTermStorageUnreachable => Self { + code: ErrorCode::ServerError(JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_UNREACHABLE), + message: "Failed to query long-term storage; please try again".to_string(), + data: None, + }, } } } diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 6d4581ab5463a9..67781056445476 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -1681,118 +1681,118 @@ impl JsonRpcRequestProcessor { let commitment = config.commitment.unwrap_or_default(); check_is_at_least_confirmed(commitment)?; - if self.config.enable_rpc_transaction_history { - let highest_super_majority_root = self - .block_commitment_cache - .read() - .unwrap() - .highest_super_majority_root(); - let highest_slot = if commitment.is_confirmed() { - let confirmed_bank = self.get_bank_with_config(config)?; - confirmed_bank.slot() - } else { - let min_context_slot = config.min_context_slot.unwrap_or_default(); - if highest_super_majority_root < min_context_slot { - return Err(RpcCustomError::MinContextSlotNotReached { - context_slot: highest_super_majority_root, - } - .into()); + if !self.config.enable_rpc_transaction_history { + return Err(RpcCustomError::TransactionHistoryNotAvailable.into()); + } + + let highest_super_majority_root = self + .block_commitment_cache + .read() + .unwrap() + .highest_super_majority_root(); + let highest_slot = if commitment.is_confirmed() { + let confirmed_bank = self.get_bank_with_config(config)?; + confirmed_bank.slot() + } else { + let min_context_slot = config.min_context_slot.unwrap_or_default(); + if highest_super_majority_root < min_context_slot { + return Err(RpcCustomError::MinContextSlotNotReached { + context_slot: highest_super_majority_root, } - highest_super_majority_root - }; + .into()); + } + highest_super_majority_root + }; - let SignatureInfosForAddress { - infos: mut results, - found_before, - } = self - .blockstore - .get_confirmed_signatures_for_address2(address, highest_slot, before, until, limit) - .map_err(|err| Error::invalid_params(format!("{err}")))?; + let SignatureInfosForAddress { + infos: mut results, + found_before, + } = self + .blockstore + .get_confirmed_signatures_for_address2(address, highest_slot, before, until, limit) + .map_err(|err| Error::invalid_params(format!("{err}")))?; - let map_results = |results: Vec| { - results - .into_iter() - .map(|x| { - let mut item: RpcConfirmedTransactionStatusWithSignature = x.into(); - if item.slot <= highest_super_majority_root { - item.confirmation_status = - Some(TransactionConfirmationStatus::Finalized); - } else { - item.confirmation_status = - Some(TransactionConfirmationStatus::Confirmed); - if item.block_time.is_none() { - let r_bank_forks = self.bank_forks.read().unwrap(); - item.block_time = r_bank_forks - .get(item.slot) - .map(|bank| bank.clock().unix_timestamp); - } + let map_results = |results: Vec| { + results + .into_iter() + .map(|x| { + let mut item: RpcConfirmedTransactionStatusWithSignature = x.into(); + if item.slot <= highest_super_majority_root { + item.confirmation_status = Some(TransactionConfirmationStatus::Finalized); + } else { + item.confirmation_status = Some(TransactionConfirmationStatus::Confirmed); + if item.block_time.is_none() { + let r_bank_forks = self.bank_forks.read().unwrap(); + item.block_time = r_bank_forks + .get(item.slot) + .map(|bank| bank.clock().unix_timestamp); } - item - }) - .collect() - }; - - if results.len() < limit { - if let Some(bigtable_ledger_storage) = &self.bigtable_ledger_storage { - let mut bigtable_before = before; - if !results.is_empty() { - limit -= results.len(); - bigtable_before = results.last().map(|x| x.signature); } + item + }) + .collect() + }; - // If the oldest address-signature found in Blockstore has not yet been - // uploaded to long-term storage, modify the storage query to return all latest - // signatures to prevent erroring on RowNotFound. This can race with upload. - if found_before && bigtable_before.is_some() { - match bigtable_ledger_storage - .get_signature_status(&bigtable_before.unwrap()) - .await - { - Err(StorageError::SignatureNotFound) => { - bigtable_before = None; - } - Err(err) => { - warn!("{:?}", err); - return Ok(map_results(results)); - } - Ok(_) => {} + if results.len() < limit { + if let Some(bigtable_ledger_storage) = &self.bigtable_ledger_storage { + let mut bigtable_before = before; + if !results.is_empty() { + limit -= results.len(); + bigtable_before = results.last().map(|x| x.signature); + } + + // If the oldest address-signature found in Blockstore has not yet been + // uploaded to long-term storage, modify the storage query to return all latest + // signatures to prevent erroring on RowNotFound. This can race with upload. + if found_before && bigtable_before.is_some() { + match bigtable_ledger_storage + .get_signature_status(&bigtable_before.unwrap()) + .await + { + Err(StorageError::SignatureNotFound) => { + bigtable_before = None; + } + Err(err) => { + warn!("Failed to query Bigtable: {:?}", err); + return Err(RpcCustomError::LongTermStorageUnreachable.into()); } + Ok(_) => {} } + } - let bigtable_results = bigtable_ledger_storage - .get_confirmed_signatures_for_address( - &address, - bigtable_before.as_ref(), - until.as_ref(), - limit, - ) - .await; - match bigtable_results { - Ok(bigtable_results) => { - let results_set: HashSet<_> = - results.iter().map(|result| result.signature).collect(); - for (bigtable_result, _) in bigtable_results { - // In the upload race condition, latest address-signatures in - // long-term storage may include original `before` signature... - if before != Some(bigtable_result.signature) + let bigtable_results = bigtable_ledger_storage + .get_confirmed_signatures_for_address( + &address, + bigtable_before.as_ref(), + until.as_ref(), + limit, + ) + .await; + match bigtable_results { + Ok(bigtable_results) => { + let results_set: HashSet<_> = + results.iter().map(|result| result.signature).collect(); + for (bigtable_result, _) in bigtable_results { + // In the upload race condition, latest address-signatures in + // long-term storage may include original `before` signature... + if before != Some(bigtable_result.signature) // ...or earlier Blockstore signatures && !results_set.contains(&bigtable_result.signature) - { - results.push(bigtable_result); - } + { + results.push(bigtable_result); } } - Err(err) => { - warn!("{:?}", err); - } + } + Err(StorageError::SignatureNotFound) => {} + Err(err) => { + warn!("Failed to query Bigtable: {:?}", err); + return Err(RpcCustomError::LongTermStorageUnreachable.into()); } } } - - Ok(map_results(results)) - } else { - Err(RpcCustomError::TransactionHistoryNotAvailable.into()) } + + Ok(map_results(results)) } pub async fn get_first_available_block(&self) -> Slot { diff --git a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml index 5f5f1e14b56d34..b5e718d954e375 100644 --- a/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/fail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fail" -version = "2.0.21" +version = "2.0.24" description = "Solana SBF test program written in Rust" authors = ["X1 Labs maintainers "] repository = "https://github.com/x1-labs/tachyon" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=2.0.21" } +solana-program = { path = "../../../../program", version = "=2.0.24" } [lib] crate-type = ["cdylib"] diff --git a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml index c47ccca082b59f..4547846139a9fe 100644 --- a/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml +++ b/sdk/cargo-build-sbf/tests/crates/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "noop" -version = "2.0.21" +version = "2.0.24" description = "Solana SBF test program written in Rust" authors = ["X1 Labs maintainers "] repository = "https://github.com/x1-labs/tachyon" @@ -10,7 +10,7 @@ edition = "2021" publish = false [dependencies] -solana-program = { path = "../../../../program", version = "=2.0.21" } +solana-program = { path = "../../../../program", version = "=2.0.24" } [lib] crate-type = ["cdylib"] diff --git a/storage-bigtable/src/lib.rs b/storage-bigtable/src/lib.rs index 3af928a626d834..a72b6b2321cb20 100644 --- a/storage-bigtable/src/lib.rs +++ b/storage-bigtable/src/lib.rs @@ -796,7 +796,11 @@ impl LedgerStorage { Some(before_signature) => { let TransactionInfo { slot, index, .. } = bigtable .get_bincode_cell("tx", before_signature.to_string()) - .await?; + .await + .map_err(|err| match err { + bigtable::Error::RowNotFound => Error::SignatureNotFound, + _ => err.into(), + })?; (slot, index) } @@ -808,7 +812,11 @@ impl LedgerStorage { Some(until_signature) => { let TransactionInfo { slot, index, .. } = bigtable .get_bincode_cell("tx", until_signature.to_string()) - .await?; + .await + .map_err(|err| match err { + bigtable::Error::RowNotFound => Error::SignatureNotFound, + _ => err.into(), + })?; (slot, index) } diff --git a/svm/tests/example-programs/clock-sysvar/Cargo.toml b/svm/tests/example-programs/clock-sysvar/Cargo.toml index 38c3d7e6d7d57c..7dad780df054f0 100644 --- a/svm/tests/example-programs/clock-sysvar/Cargo.toml +++ b/svm/tests/example-programs/clock-sysvar/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "clock-sysvar-program" -version = "2.0.21" +version = "2.0.24" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=2.0.21" } +solana-program = { path = "../../../../sdk/program", version = "=2.0.24" } [lib] crate-type = ["cdylib", "rlib"] diff --git a/svm/tests/example-programs/hello-solana/Cargo.toml b/svm/tests/example-programs/hello-solana/Cargo.toml index ad7a6c68ecdc19..b24bde2a85116c 100644 --- a/svm/tests/example-programs/hello-solana/Cargo.toml +++ b/svm/tests/example-programs/hello-solana/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "hello-solana-program" -version = "2.0.21" +version = "2.0.24" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=2.0.21" } +solana-program = { path = "../../../../sdk/program", version = "=2.0.24" } [lib] crate-type = ["cdylib", "rlib"] diff --git a/svm/tests/example-programs/simple-transfer/Cargo.toml b/svm/tests/example-programs/simple-transfer/Cargo.toml index 5e9cac86ebf6ce..384649cf9c2b4c 100644 --- a/svm/tests/example-programs/simple-transfer/Cargo.toml +++ b/svm/tests/example-programs/simple-transfer/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "simple-transfer-program" -version = "2.0.21" +version = "2.0.24" edition = "2021" [dependencies] -solana-program = { path = "../../../../sdk/program", version = "=2.0.21" } +solana-program = { path = "../../../../sdk/program", version = "=2.0.24" } [lib] crate-type = ["cdylib", "rlib"] From 41aebe18fd57e4a97020f079b2a1486bc6902df2 Mon Sep 17 00:00:00 2001 From: Nicholas Pettas Date: Wed, 5 Feb 2025 16:44:37 -0800 Subject: [PATCH 5/6] update the feature keys --- sdk/src/feature_set.rs | 88 +++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 50e54214e4086e..4687ae5c802499 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -39,7 +39,7 @@ pub mod pico_inflation { pub mod full_inflation { pub mod devnet_and_testnet { - solana_sdk::declare_id!("DT4n6ABDqs6w4bnfwrXT9rsprcPf6cdDga1egctaPkLC"); + solana_sdk::declare_id!("3qTfebr3GDnsBwiifmVsU6uPqfinCzwYqgCtN3FFjgJd"); } pub mod mainnet { @@ -95,7 +95,7 @@ pub mod system_transfer_zero_check { } pub mod blake3_syscall_enabled { - solana_sdk::declare_id!("HTW2pSyErTj4BV6KBM9NZ9VBUJVxt7sacNWcf76wtzb3"); + solana_sdk::declare_id!("5VAACbCZispumFXMb9frTAFJwzLcFC39pKcWrpDdpu99"); } pub mod dedupe_config_program_signers { @@ -139,7 +139,7 @@ pub mod stake_merge_with_unmatched_credits_observed { } pub mod zk_token_sdk_enabled { - solana_sdk::declare_id!("zk1snxsc6Fh3wsGNbbHAJNHiJoYgF29mMnTSusGx5EJ"); + solana_sdk::declare_id!("43XuaFmpSgY6mejuttRGhXc8FsuUQxFZdBMG95bhv17M"); } pub mod curve25519_syscall_enabled { @@ -155,7 +155,7 @@ pub mod versioned_tx_message_enabled { } pub mod libsecp256k1_fail_on_bad_count { - solana_sdk::declare_id!("8aXvSuopd1PUj7UhehfXJRg6619RHp8ZvwTyyJHdUYsj"); + solana_sdk::declare_id!("6ugpUDwk4mm3oyhJPgzEerwNyeGqXT2c28xt1jpTD9JH"); } pub mod libsecp256k1_fail_on_bad_count2 { @@ -283,7 +283,7 @@ pub mod stake_deactivate_delinquent_instruction { } pub mod stake_redelegate_instruction { - solana_sdk::declare_id!("2KKG3C6RBnxQo9jVVrbzsoSh41TDXLK7gBc9gduyxSzW"); + solana_sdk::declare_id!("9LvAA5zHnJJbitZkkibMVcRmC8pDHcACKFKNdTR2oKCW"); } pub mod vote_withdraw_authority_may_change_authorized_voter { @@ -370,11 +370,11 @@ pub mod update_rewards_from_cached_accounts { solana_sdk::declare_id!("28s7i3htzhahXQKqmS2ExzbEoUypg9krwvtK2M9UWXh9"); } pub mod enable_partitioned_epoch_reward { - solana_sdk::declare_id!("9bn2vTJUsUcnpiZWbu2woSKtTGW3ErZC9ERv88SDqQjK"); + solana_sdk::declare_id!("GpiwqcgFnNCrQtifhooVNnMDttuCbNcwDPTzPjmrDEmF"); } pub mod partitioned_epoch_rewards_superfeature { - solana_sdk::declare_id!("PERzQrt5gBD1XEe2c9XdFWqwgHY3mr7cYWbm5V772V8"); + solana_sdk::declare_id!("6RV2Lg6pWaRoXXfmJuA13VYYs62Vh6aEm85TrAJha36i"); } pub mod spl_token_v3_4_0 { @@ -399,11 +399,11 @@ pub mod require_static_program_ids_in_transaction { pub mod stake_raise_minimum_delegation_to_1_sol { // This is a feature-proposal *feature id*. The feature keypair address is `GQXzC7YiSNkje6FFUk6sc2p53XRvKoaZ9VMktYzUMnpL`. - solana_sdk::declare_id!("9onWzzvCzNC2jfhxxeqRgs5q7nFAAKpCUvkj6T6GJK9i"); + solana_sdk::declare_id!("C1xe15McRHEXgrPgwvXwFRjexp5Z6eCw5y4P91PddTa7"); } pub mod stake_minimum_delegation_for_rewards { - solana_sdk::declare_id!("G6ANXD6ptCSyNd9znZm7j4dEczAJCfx7Cy43oBx3rKHJ"); + solana_sdk::declare_id!("Ee1LkFn6TgUXQ7Qem6D2peS8BFa2t8sHauuTi6LbjPk8"); } pub mod add_set_compute_unit_price_ix { @@ -479,7 +479,7 @@ pub mod cap_bpf_program_instruction_accounts { } pub mod loosen_cpi_size_restriction { - solana_sdk::declare_id!("GDH5TVdbTPUpRnXaRyQqiKUa7uZAbZ28Q2N9bhbKoMLm"); + solana_sdk::declare_id!("E58Zgc3dt388eJHxCbsUn5fqt1gxxJHwfxbMiVxgZZzo"); } pub mod use_default_units_in_fee_calculation { @@ -539,7 +539,7 @@ pub mod disable_rehash_for_rent_epoch { } pub mod increase_tx_account_lock_limit { - solana_sdk::declare_id!("9LZdXeKGeBV6hRLdxS1rHbHoEUsKqesCC2ZAPTPKJAbK"); + solana_sdk::declare_id!("A3Waa59UgY6mW9pVhtQmv8o5k1jqTwC8rB4ARL5BaZXD"); } pub mod limit_max_instruction_trace_length { @@ -579,7 +579,7 @@ pub mod enable_turbine_fanout_experiments { } pub mod disable_turbine_fanout_experiments { - solana_sdk::declare_id!("Gz1aLrbeQ4Q6PTSafCZcGWZXz91yVRi7ASFzFEr1U4sa"); + solana_sdk::declare_id!("Gs72Tfm4r2AHCTx5jZyYH1fb9W9uEskQFotUxkZgKbF"); } pub mod move_serialized_len_ptr_in_cpi { @@ -591,7 +591,7 @@ pub mod update_hashes_per_tick { } pub mod enable_big_mod_exp_syscall { - solana_sdk::declare_id!("EBq48m8irRKuE7ZnMTLvLg2UuGSqhe8s8oMqnmja1fJw"); + solana_sdk::declare_id!("AfhVLYsJaGJmkhoex1xJa3Me8hX8QUvoXBfecTqnc7rr"); } pub mod disable_builtin_loader_ownership_chains { @@ -619,10 +619,10 @@ pub mod delay_visibility_of_program_deployment { } pub mod apply_cost_tracker_during_replay { - solana_sdk::declare_id!("2ry7ygxiYURULZCrypHhveanvP5tzZ4toRwVp89oCNSj"); + solana_sdk::declare_id!("ASCW2GdNG2NL6yY6FxzA8qwMXck4F6sH27pbuWDVaF5R"); } pub mod bpf_account_data_direct_mapping { - solana_sdk::declare_id!("EenyoWx9UMXYKpR8mW5Jmfmy2fRjzUtM7NduYMY8bx33"); + solana_sdk::declare_id!("AofbNyvMA4Cm82gkTAntx5crAH1guxykoaie9U8uN1sh"); } pub mod add_set_tx_loaded_accounts_data_size_instruction { @@ -641,9 +641,8 @@ pub mod remove_bpf_loader_incorrect_program_id { solana_sdk::declare_id!("2HmTkCj9tXuPE4ueHzdD7jPeMf9JGCoZh5AsyoATiWEe"); } -// false pub mod include_loaded_accounts_data_size_in_fee_calculation { - solana_sdk::declare_id!("EaQpmC6GtRssaZ3PCUM5YksGqUdMLeZ46BQXYtHYakDS"); + solana_sdk::declare_id!("B13W9CVw5Y8aJz8hVeufEvkDnhsEN7vj3N4Hxutmec19"); } pub mod native_programs_consume_cu { @@ -687,15 +686,15 @@ pub mod enable_poseidon_syscall { } pub mod timely_vote_credits { - solana_sdk::declare_id!("tvcF6b1TRz353zKuhBjinZkKzjmihXmBAHJdjNYw1sQ"); + solana_sdk::declare_id!("9KJNDPGuTnfn5s1GouSTacWLhPykiwWSKu4rM6VbRWJi"); } pub mod remaining_compute_units_syscall_enabled { - solana_sdk::declare_id!("5TuppMutoyzhUSfuYdhgzD47F92GL1g89KpCZQKqedxP"); + solana_sdk::declare_id!("2nYzqcvNZL3ZSs1Pi1n6KV2J7FAsxkd8B3xxWX7Ef8Br"); } pub mod enable_program_runtime_v2_and_loader_v4 { - solana_sdk::declare_id!("8oBxsYqnCvUTGzgEpxPcnVf7MLbWWPYddE33PftFeBBd"); + solana_sdk::declare_id!("HtcKzpZN5XNGVYhm8p8J9cAtq9kGMzQpXRTFV2tE3mYm"); } pub mod require_rent_exempt_split_destination { @@ -731,11 +730,11 @@ pub mod validate_fee_collector_account { } pub mod disable_rent_fees_collection { - solana_sdk::declare_id!("CJzY83ggJHqPGDq8VisV3U91jDJLuEaALZooBrXtnnLU"); + solana_sdk::declare_id!("7AGXomaRfTPdvQf2u8UcuYA2FvtjkHuA89JmwUEaDmkR"); } pub mod enable_zk_transfer_with_fee { - solana_sdk::declare_id!("zkNLP7EQALfC1TYeB3biDU7akDckj8iPkvh9y2Mt2K3"); + solana_sdk::declare_id!("CHmwMhpP6xzvDYmNhw4gnqRqXVh85WwP9BCDPCyVWPTE"); } pub mod drop_legacy_shreds { @@ -743,11 +742,11 @@ pub mod drop_legacy_shreds { } pub mod allow_commission_decrease_at_any_time { - solana_sdk::declare_id!("decoMktMcnmiq6t3u7g5BfgcQu91nKZr6RvMYf9z1Jb"); + solana_sdk::declare_id!("4UfcHnpkGmXywhfc64GpcdMX9vvKqWRbCkhm5xa3s1kh"); } pub mod add_new_reserved_account_keys { - solana_sdk::declare_id!("8U4skmMVnF6k2kMvrWbQuRUT3qQSiTYpSjqmhmgfthZu"); + solana_sdk::declare_id!("BXX4YtTzSytrSVtQS9Z4QkzqigBbvCiCi2qxcrrNqigC"); } pub mod consume_blockstore_duplicate_proofs { @@ -767,12 +766,11 @@ pub mod disable_bpf_loader_instructions { } pub mod enable_zk_proof_from_account { - solana_sdk::declare_id!("zkiTNuzBKxrCLMKehzuQeKZyLtX2yvFcEKMML8nExU8"); + solana_sdk::declare_id!("3N5XWwvVqYQoaaHe1GNjjKUkw7GJNp7vGbSQmeGNxAPk"); } -// false pub mod cost_model_requested_write_lock_cost { - solana_sdk::declare_id!("wLckV1a64ngtcKPRGU4S4grVTestXjmNjxBjaKZrAcn"); + solana_sdk::declare_id!("DntdotNCp9vpUHuLnfaxmByBgXYTQqYnXLiUs72dWFTR"); } pub mod enable_gossip_duplicate_proof_ingestion { @@ -780,19 +778,19 @@ pub mod enable_gossip_duplicate_proof_ingestion { } pub mod chained_merkle_conflict_duplicate_proofs { - solana_sdk::declare_id!("chaie9S2zVfuxJKNRGkyTDokLwWxx6kD2ZLsqQHaDD8"); + solana_sdk::declare_id!("2CbuwkZK29P7xG3d2gSnAeXSQjXAqgGZYDTxAab1VWxc"); } pub mod enable_chained_merkle_shreds { - solana_sdk::declare_id!("7uZBkJXJ1HkuP6R3MJfZs7mLwymBcDbKdqbF51ZWLier"); + solana_sdk::declare_id!("8jZbyCfqexBiQAbAZGbzaJpMsjtquyBJfh9bs88m847b"); } pub mod remove_rounding_in_fee_calculation { - solana_sdk::declare_id!("BtVN7YjDzNE6Dk7kTT7YTDgMNUZTNgiSJgsdzAeTg2jF"); + solana_sdk::declare_id!("CqdEoqodBTXnMyiu7FsBb9E9RWNWgDoFjHeLGb9V647i"); } pub mod enable_tower_sync_ix { - solana_sdk::declare_id!("tSynMCspg4xFiCj1v3TDb4c7crMR5tSBhLz4sF7rrNA"); + solana_sdk::declare_id!("HUEndw3RHoHH4S53PbsRuxMGenyB1V2Wn9xA3tWqKjBK"); } pub mod deprecate_unused_legacy_vote_plumbing { @@ -800,31 +798,31 @@ pub mod deprecate_unused_legacy_vote_plumbing { } pub mod reward_full_priority_fee { - solana_sdk::declare_id!("3opE3EzAKnUftUDURkzMgwpNgimBAypW1mNDYH4x4Zg7"); + solana_sdk::declare_id!("2XpLmpsc1hzebVpeLXRdeFV3dwSgDju19kPns7JMzU61"); } pub mod get_sysvar_syscall_enabled { - solana_sdk::declare_id!("CLCoTADvV64PSrnR6QXty6Fwrt9Xc6EdxSJE4wLRePjq"); + solana_sdk::declare_id!("FEgZJQb5dVHjrz54XTtT3qdjz7S75jJQcZ6LHHCmFhFi"); } pub mod abort_on_invalid_curve { - solana_sdk::declare_id!("FuS3FPfJDKSNot99ECLXtp3rueq36hMNStJkPJwWodLh"); + solana_sdk::declare_id!("6YnJWqMgY6VD9PL4uw5QsweoSDuTYmoHLsSHuFn7t7TH"); } pub mod migrate_feature_gate_program_to_core_bpf { - solana_sdk::declare_id!("4eohviozzEeivk1y9UbrnekbAFMDQyJz5JjA9Y6gyvky"); + solana_sdk::declare_id!("3hp1YAnRUPSi6af3hgPHUWquuQuDGFewacZyPT1z8B2U"); } pub mod vote_only_full_fec_sets { - solana_sdk::declare_id!("ffecLRhhakKSGhMuc6Fz2Lnfq4uT9q3iu9ZsNaPLxPc"); + solana_sdk::declare_id!("tVBwmaFrFsLU6TVMbUSxsbRGkbspH7EeBPqkpAL2iy9"); } pub mod migrate_config_program_to_core_bpf { - solana_sdk::declare_id!("2Fr57nzzkLYXW695UdDxDeR5fhnZWSttZeZYemrnpGFV"); + solana_sdk::declare_id!("HJQ15RuGc2jpdDhLGWQp3dJ4Tn4bKLAW1UdX3g38dfZe"); } pub mod enable_get_epoch_stake_syscall { - solana_sdk::declare_id!("7mScTYkJXsbdrcwTQRs7oeCSXoJm4WjzBsRyf8bCU3Np"); + solana_sdk::declare_id!("BfHftpufmhttQSbmaH98ArbsWwJoqY67MhH84yBALXdL"); } pub mod migrate_address_lookup_table_program_to_core_bpf { @@ -832,31 +830,31 @@ pub mod migrate_address_lookup_table_program_to_core_bpf { } pub mod zk_elgamal_proof_program_enabled { - solana_sdk::declare_id!("zkhiy5oLowR7HY4zogXjCjeMXyruLqBwSWH21qcFtnv"); + solana_sdk::declare_id!("GQoUMg4TcmEcMP5GEpPZ6KAj5ZNJamCNi8S3XrdgNSSs"); } pub mod move_stake_and_move_lamports_ixs { - solana_sdk::declare_id!("7bTK6Jis8Xpfrs8ZoUfiMDPazTcdPcTWheZFJTA5Z6X4"); + solana_sdk::declare_id!("FEyzUKsMzdQfZVFqkZsQPrKoa4Czry6UMLJNxBvnU2aN"); } pub mod ed25519_precompile_verify_strict { - solana_sdk::declare_id!("ed9tNscbWLYBooxWA7FE2B5KHWs8A6sxfY8EzezEcoo"); + solana_sdk::declare_id!("548TrfeYwJMbmWq6QnUQEzsc3TvRQjQFBwyW9kSW2PjT"); } pub mod verify_retransmitter_signature { - solana_sdk::declare_id!("BZ5g4hRbu5hLQQBdPyo2z9icGyJ8Khiyj3QS6dhWijTb"); + solana_sdk::declare_id!("5YR5DAcXTLuEaRXKij5xgqKrNYg9v7BMNKZJX7icZYPQ"); } pub mod vote_only_retransmitter_signed_fec_sets { - solana_sdk::declare_id!("RfEcA95xnhuwooVAhUUksEJLZBF7xKCLuqrJoqk4Zph"); + solana_sdk::declare_id!("EtBvWkoRp8PeYXLEzaJ1FTHhRtUhydeAgesvD6HFktL6"); } pub mod enable_turbine_extended_fanout_experiments { - solana_sdk::declare_id!("BZn14Liea52wtBwrXUxTv6vojuTTmfc7XGEDTXrvMD7b"); + solana_sdk::declare_id!("DaDfuqRRqwYpeX1NfAGp84ExR6nUbDiRq8PTyC2h3891"); } pub mod deprecate_legacy_vote_ixs { - solana_program::declare_id!("mustrekeyysGrhwdiwU42tCadZL8GcBb1i2GYhMopQv"); + solana_program::declare_id!("29Zvc7JoHZeCMHMCHmNXde496UhgohU3gnFTxy6DMoQ2"); } pub mod disable_account_loader_special_case { From f36823000911dcd40264bdd441752f35aaea3cde Mon Sep 17 00:00:00 2001 From: Nicholas Pettas Date: Mon, 3 Feb 2025 14:06:36 -0800 Subject: [PATCH 6/6] Feature Gate: replace token 2022 program on testnet --- runtime/src/bank.rs | 66 ++++++++++++++++++++++++++++ runtime/src/spl_token-2022-5.0.2.so | Bin 0 -> 541936 bytes sdk/src/feature_set.rs | 5 +++ sdk/src/genesis_config.rs | 2 +- 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 runtime/src/spl_token-2022-5.0.2.so diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index f0d4106cc4f9b9..e3652a00116779 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -33,6 +33,7 @@ //! It offers a high-level API that signs transactions //! on behalf of the caller, and a low-level API for when they have //! already been signed and verified. + use { crate::{ bank::{ @@ -92,6 +93,7 @@ use { compute_budget_processor::process_compute_budget_instructions, }, solana_cost_model::cost_tracker::CostTracker, + solana_inline_spl, solana_loader_v4_program::create_program_runtime_environment_v2, solana_measure::{measure, measure::Measure, measure_us}, solana_perf::perf_libs, @@ -186,6 +188,7 @@ use { ops::{AddAssign, RangeFull, RangeInclusive}, path::PathBuf, slice, + str::FromStr, sync::{ atomic::{ AtomicBool, AtomicI64, AtomicU64, AtomicUsize, @@ -317,6 +320,7 @@ pub struct BankRc { #[cfg(all(RUSTC_WITH_SPECIALIZATION, feature = "frozen-abi"))] use solana_frozen_abi::abi_example::AbiExample; +use solana_sdk::bpf_loader_upgradeable::UpgradeableLoaderState; #[cfg(all(RUSTC_WITH_SPECIALIZATION, feature = "frozen-abi"))] impl AbiExample for BankRc { @@ -6472,6 +6476,68 @@ impl Bank { if new_feature_activations.contains(&feature_set::update_hashes_per_tick6::id()) { self.apply_updated_hashes_per_tick(UPDATED_HASHES_PER_TICK6); } + + if new_feature_activations.contains(&feature_set::replace_token_program_2022::id()) { + self.apply_replacement_token(); + } + } + + /// Need to replace the token program with a new one. + /// This is a one-time operation for our testnet. + /// Remove this function after the testnet upgrade to v2.1.x. + fn apply_replacement_token(&mut self) { + let program_data_elf = include_bytes!("./spl_token-2022-5.0.2.so"); + let (programdata_address, ..) = Pubkey::find_program_address( + &[solana_inline_spl::token_2022::id().as_ref()], + &bpf_loader_upgradeable::id(), + ); + info!( + "Replacing token 2022: programdata_address: {:?}", + programdata_address + ); + + // X1 lab's upgrade authority address + let upgrade_authority_address = + Pubkey::from_str("FwJkGYPdpp3BjfRBtrU5duGHMBmiSHmEwGX6oBSMXEQx").unwrap(); + let mut program_data = bincode::serialize(&UpgradeableLoaderState::ProgramData { + slot: self.slot, + upgrade_authority_address: Some(upgrade_authority_address), + }) + .unwrap(); + program_data.extend_from_slice(program_data_elf); + + self.store_account_and_update_capitalization( + &programdata_address, + &AccountSharedData::from(Account { + lamports: self + .parent() + .unwrap() + .get_minimum_balance_for_rent_exemption(program_data.len()), + data: program_data, + owner: bpf_loader_upgradeable::id(), + executable: false, + rent_epoch: 0, + }), + ); + + let program_data = bincode::serialize(&UpgradeableLoaderState::Program { + programdata_address, + }) + .unwrap(); + + self.store_account_and_update_capitalization( + &solana_inline_spl::token_2022::id(), + &AccountSharedData::from(Account { + lamports: self + .parent() + .unwrap() + .get_minimum_balance_for_rent_exemption(program_data.len()), + data: program_data, + owner: bpf_loader_upgradeable::id(), + executable: true, + rent_epoch: 0, + }), + ); } fn apply_updated_hashes_per_tick(&mut self, hashes_per_tick: u64) { diff --git a/runtime/src/spl_token-2022-5.0.2.so b/runtime/src/spl_token-2022-5.0.2.so new file mode 100644 index 0000000000000000000000000000000000000000..e7d371843901112df88f4538e01c85067fc15c81 GIT binary patch literal 541936 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�-4xt>M5$z!DFCSNnG+W@`7x8`V(o3y8JsrO~ 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%0DgRT+z@^+&Av|@ zqKjOM<<`D8y{mIa2jy7o-#u&zv@aqZC%v%i|M}b24ut;JZ2b>kaUH_b4SBH7=Wnu~ zNcXcZZ|lo+@&o0PUlwxHK0Cl8zB%@&%TD{p5DwOeKbqGTp0r5@LtZGq_I)+S zxX(!YI-6sBr&8-(%`xsf%=&1Dn|klM@9v<7?_FknyTkwW$bV<}|2q8J!yo+U+Zuk> z=d5p2`2RNG*N30?_+@=-!_WPZS>LMg^Iqw!Zy@}%BUxWB{U`pOZk&f`9{UIS57Qns zk8+=8^T6^L+l5)V&7D2 zKl{Du80l(7zgO*eEBd|Z7|YdaupvyxSngJX4M{pizO?dpZppV+^n24W^0gKH-gJz7 zZ$-a19oy;UYBkvJO~-bJKkRqxt7=8RHyzs-@$C0%|5Ph~clTh#)9~p2uvUYHCmlN+ z@zw#eFC9A(e)fOUc)z~Ypgm8cUbo_%SnZ2!ML$^kGFuHA!Zg~;_PfBR0>5XMujA_e zH`wLmvV-2M`_SbVZr`@@LI>14Gl)+=^;r*`IFo#S+sfce?8ij>=iczL-$bI{`1>C} zwrwTLExVJqTL$;X$*Mng>z*3bPW2fMrIcc78acMS<3lpeYJSM9rkCV-NC2*naU62&t40Mz1(K@ zUGcJ?gT9(?;X|I>*S~?P*j_mP0-nEq8TdfGn39g-_x%2?od;EWnB7DC;%8Cr>c70` zd*8fyI=MG~^s}!=>NOkw<~`HNed`~7-An)PN5B1=v&sD{pZ|k|78?1$w0r}Og>Pewci4*ale z!_hy~zDdbN{R8BKbKT;9u^e?v4}Aefz%BTL$?L@kM?ByVzurVIy0h(VIxISgZd|*5 zcUuDc^nSJO(aRbhoWt#~a?~woPq^5B1AyH~4Cm4~MJ! zW$$yp>Qyy4=>8GAUkWoQBbA2t-$yDdV_(z{l=ee?Fi&5zU)AJ5q<^8$TaDQMsl^sj ztGvlq*08?_{%Z1GheN*f?|1)5$F( z`+@)ue>K_Z@xV|24)+5;BwDLn?fcUJ4}Uee#p3}_|B(A@l~;TJuU1(b`@Q&HP1SE< zr2T^hwtGVZeogEjdsXZwtGK+X$(uYL_)#;e$zZ^LpX*Jn^2(%PA)sf8$8Yj@z|+rh zU9Iv8-~Uystd9M66_-yn*^tAd1+FHqb$_jLmG9)lJ~d2H0DrH?zsBQ%pZ;syUo-uL z#jjPa^!fyN)a+`)@eAPTUlZ_``3vba+t-F33*e!rRX>GI{?LC_z^{n?Z!3NO8{kn- zs&0)4Pd^8W$PYah?Q4bqCGPLHzl6t3l-@l>e7E~AwZDvC>VA}-e(06%{{%dGRNB`H z|6KP&8iem~KWYX2)|41LN<}|Rm)?m-`itGqej5CB_al_>z?|=2v)>ru=-x!Yo4GYV z`w#Hj@Xq|8is?}jjf)Wvd1+rO{Bzt7DG?q$NS%L2JmjSI4}Rn%y9+lY8d%-)IygJ}BNg@w0EhYqxF549*)3RSFt_VZ1ff9AHg5Q0}k}u zQ=$v>X0fkD`-HOX7HA*v!>+1bLci_F()jLo4MzM@zpA|t*wOg7)xbReEk>W%7mF)2qFl*a-;U?+iU2nKR4Vqnh1s zim$nydM16D*x|u;o^lS?Rfg!_W5n0(C-_&let`6)x!nTn+hYIE*#A7erG}lK*lmC8 zQ+bg7=PbSM=hnIn`WL>B!^#Dg^v`F%qBe))u5>5IPw8#Ye(S&9?@qq%^C9yh9nSF? z`ZMYMEMG2%xIbU{fsSR+<0zl>1N~2=MEnwq&);k4W`2^d-dO1CuNy$sryB%l*=5I?lPWjeh7)$$bFck=#d#Z0H_JLrAwOWXAw{=3Ytd}eY*U(QdO zt4VtOkH6p6>vp*;1N(~n`lSND&IWg^Q2u}IZ}Gg|zxKEOwZHYR{Vmw9|2z9zu*ZK; zXdloX!GdnF#trQ&&b^_D8R@u$<4ilRht9!>o!7G_)Zgzr^&+;B=Cyg6UxMS|PZrMm z126l5k9z!w&HF&FaBdGR)rg%ptC?Ht*y{apyw~;CjcvS0&wlK~k^Ti7Z+5(l)7a;2KbMZ%E58O!5kiPs&%}< zd+vb$|4aBe&S5!f9k2KP3h-Ojluto!)#Uw-x7P7SjxUYwivw=$FRr&@<>ot>XuLyaM>omiWza;VlLQxSL&nYaQEMZh(Jz37+zKv%@2P zeJLLNtomyXEdLXw`hlKXHMuEIzr931^?y?y|2-vsuzau2<5v{obxsR(eOC!D`FL%f z?uVwOdtDy?a49|K1J>m6|4=Fy_52li{GmyDcV!-adnsRxFg0!m-R~;Jb6oziJpEIp zc+%CE$IqFh$IJ8ZJ*D!HkKK9vk4_uU@jB?bp}=Rxh4ADW3CK&<5(kKnXw7 zLn@44Q;KJ~IF17TpPshd$c5>DsT5EAtkX#U+a>&*4}g_m`oAy5ud;B>SL&X^k2tiA zzpmmBy?AOoku&A=TEUFDU7jw z8gFeeAe3mNvY6x1%H@;dF&;!dGtEQW{-o1LfO&z(f3j^4Z9kQVW84lquXk_(cV9v7 zSy#NLYvH>mrJv{NF^+^pvt7K`1NcldhL88x=$x0AW;hM&u6z3ts^ACCDo)WdhwTkkf|WO#U_rTI35zjODrc<2o$Kf&-29l&x{$UjT~PP%d_VCm?#<_mG=E*|SWbIkL?8wD`~}-TQ`~1$ zhx{#He2Cv;b_D!A`9{=4e%fbROt;C>X}>AtjxUS-wn)FWz(3uq2RMLcvCmfL@QQd> zIbN>+r=z{jFTFRGj@HA!iF_RMZ2errZj@t)ew5>P7sHlV#j#KGQJPnp7;eM8wb9n& zDfQWitsCfY*X5qy+4TIt)9Cr94A*m~=j+Lby=&=Su!{6q9{3~&@EiIhenT#&XOIh2 zU^;nF&Xfnz59sn{hu`V>7Ug%j%Wu1fyB=*U>e1FI@Raw{%k#$;x8;K~R`BZ_8R{!~D0;Vaq!Q!j8P;iGKZ@t6Yn2I0O*^`( z&|d{!%hL4m7d^hcUR&q*xw3-e=gQ4)7lC(lGwV7MAU*q?pN#Y|ey$8~{9M_>@w26S z!42(n)#T#=UtXuZiQ{I2zo?WC`{nFFU|qMzFw`nH#5(OD$Iq7TEronQAN!?05&3DI z_C{~dQJ$|9+c|^he8P|A@YbwaKASmyHuzsJ(Z%uC135hSS+n~^(C-5NH4ALM_aj(FYy0d2|wkrKj33LU5W9u!Cz70565X)z~9L6 zw5_v)Z@_;=2|xMiO`p*{80)lKIi5E7tc0KN?+pA~IG#3rf<6QP)@k+ewt)ZsSf_n6 z$I}M?tr9&P2M!1P4{$tPc?-wW2LGNCJm*ukIXv?JNGYD<;qTAmPZh?US`SCM^GoT- z_Z#wb>q~rK{2TN58>fxmkjMXaNe@`g>+<-M)8>D59)EQyp5@|tIOrcM;iq1%&eMOg z6i+>jakZs?Y!Y8C%hP?llrP8IFVEwshJG5#ARzL0*@BE~1B{8@gKg7IH2#WOvqVEosoji>E| z+}>J>r(VE%FnzNWk8!>BXQO@jlx;-NxK`~>*{|@KT(qADihMGvr$|Tw&d=0d9~Vj~3}PHbI`q=f?|t z$k&;dda`8h<#g3A?7!LyY@hm*Tg;1)!3y;*9fCD8K6Cmd*7!gnhufJzSJe=PnTbjzYNj z-x>H+o_v31WOB}YUmkp4ZkgEkFPZPK49^GOF*5@`m-!C;Qg}YE7V}!QIPZ|Iqr7Vs z+C|;lJJ^*r{; zNdCG9H(kf{=+6PK?jZ&KPOJBA{D=j9SXJwb++_gv37_`i%E;(5kZ#>ZSQx}9zLeSjLDBK}9MDOLTK9oM~qMYuyn`x^C7^*p^Z^sD1i z&nON3(0M1lU*Bo+24srKVf*H;r;Bh%7WM-AJ@Gz<4|c>p@jIzsHR&sd+xb3^M@-B} zFZuSrpMrxQUmEuwVxJ#A=pDX0-bVxf)|K>c2|XX|z^sv-OEhAULiIxOtj$3yZSyB{ zI-Fkc@l!^3&hPymozsKx`=D7ZW$RjvB&Sd&BCgRcI`w)s@#;(XLR<8vF%65FTqb*-qE|BJnMfwHT*u0&6j zbS1%ybA{j{S#h~;Ar&R$oJe2+vf>I7UqQcEGH_iov8*bUloAjHio%o*Cut zeEcEAJ)$ZJB*$?~zL0Jwr8ss(C!Jx^dC4F@NAbw(=kzC0+=&}Iw)N&*Yt3^{ovM<+ zcE(7L;SH*N_iydB*IsMwz1RL6jm!DPAS|5TVHCbI+vE5M-y49}ag-awM_pN-cv94K zespd)ZeLV7>0<4N|9a?mCcG$-q$B=Mh~FvrW&FTmNw&w^EBbXGKqOrMXp9p>9+o_o z<>6OhuWXn1e0o=;ypQp9(7#;nmsWxP`#gXCh}U1}TVMY1Jqx2_@m`v%r6k)I_>O`} z;R<|**qS!K7WfWZw8_cO0^j0&gr__{zr*iSWcPVkd?Ws-eC^7rr2 z9+lI(7uoX;w`}ixn(f}>=BJIg9`c+%7Rho+D3 zdat64$G>L373IBLJ<88Ux1S*1Zmvl3k9xh-vvle=;(ZtTxf-wWvW8KioL}XXKWiAc zq)~gP{TR9c2VmiJzjg$|)MR)CW0T|rQk(E)65V^n<&3s*324|lqls`Y-gBlLs2+V+ zXe7#OesCh-k4JoCp6f@A=iFypL^u>C6Hq1TRxrtt*^IWGWw|d_5JSG62BLj_Nv@cOHg}^4!|M3Lg}>XfnG5m(mN)jan7|h z?|XqG(l54bb{>}{yWXSnj{oTS-vg)^_vTS6A^$bz;hhN*0({}aexmm-sE-Jt5$ikV zVp!*pd*^-QG$mF2Uw)^8bmczh$;vqQJD7SD<6I94!`V0$`CqQ&KVHhObH0svKVjtt z(9hJXYB%3CBYy1d!CSmd%*gS#9Io$TEZ%D0?7rq>1ITw8#d_!eWbzgebR0}VOGn+w zm2e)$`0nex-0eRK1mFgc&T`A}?~A2+>o<75?(5yxd{OIQ-P_hXYbb7f*>%0IJGwUc zx}blZ_g`Z^5C@&6KH%``fybzu|B@--MyGi0cak2XEsIXNKJ4p&{tq)2V+q|ZIvws5+C?Y3$LO_Q&s{4c{#N&=f<9NGeWaki7t;qL*H_Sh`i-71 z9rb<2#yNg}THiO*{rs_yy4=)~|6+QN{7QIP+`~(+ZWtiFyG8ntex|4JoAOKyWe?GL z5b1}peOBDQYeu@JSG#>}D%w%tKj8WL0Nn7u!NYowl>PY{%kOvn(pc#CtH*|fzsC

4_IfY|DzgWpC@E@)IXP(^2^@H{FHCzf3%W+C)S73 zTh^}tm0|CiZUE(|hctd|Kga88EP%YiX}o@5g$0wTC){t%bA_w0*7=R({VwOy_rQlv z`o0hRMEiF)9>#I7# zbb7C$svk_h0fY29;pYRh-u-Fo5r>l<3%D_UPwn>j2YTHf+vfg```i~j>!IgGuPPqt zjlQmJEbxxC@c?*{pNN^hJ2XQ-Y-4L7W5~;V)p}bC$mnQ)$WsBQf_J*k_5T2PoC4OU zxtxu4NI!&~DBv{a`S{bz`4j49{p2B?v(UR~@wqsA7nXQv9!9-ja^AyOFK==_Z+1DK zO>P%g}*KZYAfdD*0b3#{oPq%(TLFWMdaOS2*2>AV)@$?WYh9u8o9B!Bdt(;fFv5yAZTn3vR}KJtR$ zb+O0KfOoaWQ$HF!*tZC&w*xB(#Ff{Tq@U)WWBMN3#3`c>*Hf$q`vn&6TEr0L#osTP z(QdTQ({DEaY;-yseH!ySY`>_MY&LkzPYkA-7R3HX&?my8i|HL?X<)a4`590C8(oJV zaDvmA|4-JR!h?E&5}(drVfmH;{C+qF=+|s_8RJjD(RW*ES9<01pZ`4b!TWsuJ^Y37 z4Dr{)@i+bYt^9@ewsyI{<3sMZ=KDOx^f}s?Uf_f@enyz%;>L=6J%9@glE>_b^K<3-v@VsKnnoZ&cOyZ9VSxxHf%#94+Vy`WZimKDPNe;A(!{ zyWo4K^Wk$ygri&-A37P5vFnIs32(Hc+>ceh6h5uQ$6d|ex>p*QWH`nv=?Q+Xgs$LE zXV;{E+X9d8F|SA`{kK)JOMRkw zIQ2HmX+Nu$_)?P1C7u-@GcIh~66Q7`S%z+L@Hy@dZ^M-2NK#Rutl zAKUn&Q9}T3G{zy?6`Ke*Iu<9p;rE_%j@to{jU#Dc$C*F?j{Rc&81?f#QTC+XDU^OD z-*W9()k8RUXn0V6^HU_u*FwHxJ{tWbI!S*wI(x1D>bhohlSKo6*jVwi1^xFn_~bX3 zZ%$J_K=MT8rUHJW=KSaOi4I$T5|X~7RPC>+L8b!E2i(_wXsct1)qBvRQ63F~8@<6J z$S0H++80evFZ}9hcF9!ek79lk^PQ=f|8W1HiF_x**ZOboL+AjwsR8qny$|`iO6$oQ zPBAlODArFJ=Z52*lv?uJmR=oq)o`V|?F$?ciBWI(?T|axo5|Y>(o( zk5`AYyzqB~JTbllj`8%@MEp4D%PF(q4Isx=2;YV2Bc1Hxluw$bM(~gI@q1t|{5U!+ zTs`JF*-nor&znwxE-nv%_pql+?@~^Wt%kmSF6_X1Cnw&&B|fL|uhr2oKilc@Rfd0Z z7Wk5bay>u8dJa1uYd%>Y3Vc9hRFkCV^KYy};ZMc5!ta+crTnfq!%Elwy6lb$D}SrD z(D+00K>HT?1t823Plh!wqJH7dc<;QM5~>#RiQFAG&nw;wSkv^_6Y$pJU-uIp7M;gY z5Bsye(c`IqOiw)I;RmjXczDc5{5mnO+uI3Z!HJHXk5KP1j-J*FJ3{YGUCtEn&2{c~ z#eS#qNly--el#uN{LJWgndhhcvx(_0r@zWk&mqa)y?hJP@1345d-MQ+GDUV)>vt3+ z-AGp?!N00)7a_e-rVgJ@{USZoTl>D`o2a|oPgedKFCclI4*%~SkbDb&%_oX?OV}9J z2Qa_QceJ8k)0*24js8g2`d|R*?3cn05%glbwYNk+hB@D8x3{~nhqGOD<56xn&R^s` z9{*wYlG1v~XvT4$PUiuLA0<$F9^bjJeA+KcFLT8uy9(6^=fCjGH+nGu$AX+E@3Ii| z{MB{CKdMX?_d(u{I()6~vwJK|*;JLGTHBRin>J9-y=k;7r4 zu--jZKe8X_w69*wXBORM@tRL)-l}oE{!vR#;O^^HafOA&MT)3j8y0Hwt@by&A4Dd&?#=GYo_-X-jUOKKc;Z2Lk~`Uf_1*G1 z2VuBIa@2eqhww}KQ0HeF^IZWkp77Mp8vwtFaHI2DTQ}wL-DdJ1RnOkeXYm($@#CQv zkGS2lG5*Y}<|&J*vc4_maYTSSNd!T67OyzI=~gC1_oC#66ymB$*2PTynJI%jlu z#Mk~0lcz@QT$_Key{soY>~grbcEB=9KJgyA$=gBdK{y{jhmBaj{A(xQlpTH9(sh1M za>IW71K?ezBkM^A_!smgbHf$yE8pi~z31GR@9+95EV-^FF87>2u;PM`LJpIbcJ`_L{M&j%cSF-}@{b|iZ>|Lpa2Zx7;k#{JO|kFO>E4)j51gGBZ`y+5aQ zs^ma+cj*oFW4qjg)}Ps7=g0c6*K-hjNvCtFlAFf-KI?C-s}@3@tp68q76SPVI{W;! zEnnI{Qvc6Izh10YNVh^BG+wMQ@P&Ok-Q;qi`dXd;z~x%f9r)MBJiquj-{5*-w`mEV z2Q!DxgG6%z zi*s35vzE3#m3=CXH6@x4)IaF?hFx74Ehq}(kiRB;jvrV?o|fIIJesm5+mU*Ef}V4=r_49x+y?B7bejKgd|CM; z?S5pt**@~Y*Ra1`F5g7_Y~{bdQl9N%`7c+>Z=9q2J1gah4a@)6O8NbBl;2h<|GiQE zizrX~B?YlTg2R>D{Y0f4?IEo9&sgsubGPlgXOfp6KpB>!e$1LytT;zZyV%>_SE4V7 zOFIMQ?n@PYaDExiDoQ!$8(x-hZm7V4ncv_fpKQY?9_Nzyl{lK zs{&7WEvvxe!c*ksZR@&e_StuM{Ei#l9|v5vV@I^F9_cz) z#B{bt@#L#%_SwkK_-Xdph?jkqc*_w__9Oi?>=z6ZkJ~SH!)^OJVUK!$ZW#P0mLER% zxP>V%bm@HmF^=C&{L^~~!>d1Q`O0?Im%rAwSFyflke___Q!9WEk%6PWk~91s^a$DM z#}U~?hT-Ku=J-6m$9#>)>4Of4VU`@hyk;$Ye0S^X@TTp@-(9kwmGQ{~A3`EsA3wd-OB#S%v{ZaLV}H4t&aV{B$MX#{i#n z+{Ju5z25Gp-0wsESO4(hAErLozxDiU8GAndY5z`i!#fe*VA}BVmkclAov+^J{q4<8 z_7254wF%~i+#>!s`c?H3k6(o1D&xBcbS|fVvXZ_S?a?|?^HcSk=v#*O67rYf9R|GY zQ;98|OchMrON5M7+oshY&?N|JFs|>pOfsoJ|BjMgON4qQP+5x9aV@#$H5W zdAdfYPvr1jL6_4ZkLS58y7E02wx|3K4Dr(Xqh_xPf^Q!7a$BBopYu1W9O`xRLqARh z{50;&a2Z8RWrtTkYMz`;IDReTT8<-cu?mLRsc=KryRY-QI)^<1W#2>+&-2o!9h3FE zh=26A@8Mq$)8{;bF}l|<^$25Ke>CBbgHPyhf5gA{BfF^9|Gk|z&Fe$D+A)H5L-eM- zLqxji+!_0U^$o{3C%cf!%O0K`bGg)dFkSC>YyCwyHt%1-+E8DQd7#t(V-fg{n)NU7 zS&yU>;pZD79=VuN>j~n4?mpd~pZdOO1MgqbmHC2vT&xS$`M!QR-P*gtiX}sr$G$&; zY{B+8m&g8~V>?jo>GV4P{*dMgI`2dM_1Bg8%oQj{{d}x4pZPDCAW}XEkL5mDDR*U* zd!kbAFDvEtSITi8pY^S+lzX*Qt}S2Wdg!GI*GHPaL(f`&)ROmFdbMBhy&g;7dzs7i zZ1T^7jRmo888$G9_)T_#vb>t!@NCJ@b^fCd@@RGp_;kauo{`)Z>oByJ{4llE^R@XR z)?rb9u?|}>I(;1mxnY0HZh-In+IXE!`gq*tU*;ko9(B9a5ewQnkos11mELJ|M*Dj` z-w4`4KGr#>sY6j7o|O;1GX#9-`rupp@AL5Rp!>|mo|C+DSz+xT@$|NRJlY@iH{yN% z-p>DM7X9H}0S`!7`y*d|Tg*cy+v(J=jgDv!2WPl5^(XU7ZocFF8TA+a+2P-}m~&md zA;z7fjyIPdgM26J`3Qr~Hr|DOL*q94^ANI7PQTQHaqRKrn=GOADCa?>8`F%gyJvv=7Y6s(47lVI!u{ABa9=nJ-2ZHFw>qCj{lphdGPq9??qTtHyt2vdJm?Ljw}^cTLn>+@;k=XyzY37vPyj(9!kH3lB~Ey7DZjCmZ%JHtNIn7@|M z$P<{mG>kp?Szrl;^lJ0>6nA>5-vr zUQYK1rw)2}1pQ_C!haFvSkLx@{EKlh@EO2w#?+CIZfc+VGv+ynw(|SjzAQaaOML&L zG5=4EeroqX)F=KE|Fjl({k7!R?1%W`2J|lJGLtWyAKQEp;eszdV{oc=!#Bbg)GPlS zd|~?PyL|Bm`N9{%;tS3jDflz_!u3|0FCtv<#RK0qU)VhKI+q8^>vu|D*tqpwzIcOt zv38oiDAqMGugEvN;N#ZeC(Q49`ll^_HnGRT^%y5vjw8lckN0c#yw98P{YlHGbxyj| ziWlQtTJV)$Owv9n^*M9W9zZ@V);kE3U)uZnj%cI9jzCU3Cv4-@631ugqM7R*&NJ)L z&Y`!*dI$W-dbh9OU+8lxPx|=BaUxw2>z$2^C0>5NL3&&7V_1Hq=jXm;?ayy}#_2F& z#mo+KHhaN;XmVcS^efhvvKz!cht4my?FR3(d4tB){ElN*Zv*$T>9h_mulvqyFL1hQ ze!S&w12b)$C5hBuQ&_jtr8jdnf^|Cnk&;>`%U)0&zq02Y&pGV|n+Xl$se?`CTJLi_ zWPPMR{q2wNuZQUmgk3@RWaqL!Y~SPG4JJIgTJo1BSFp=;^dYSFXx?9*w|q->gCnkI zbv`AHdwQ}PWJjEj(mrobEqTrCeNcm9y_WIA)D~-;Olf%|5v-kY-*ahN# z1t-~X#d|Rk*1qoun8)lK;qTr2@yP!l%@;k`PRkem-c^S@J>+0!`o}!|h|@&oXc0Ew#?$EZZWUDo(p?VdA@6KVxBj&)$@}lY<)WD;bG`6I?YSR@w>?|+Ry&c zIs111`1(}%2oK3c!)9^dyTGq^-rxGVox&Gz$r)O&m-&%;uCZXL<| zw*LNB+ZX&-v=8U+=(KN|J?C<+b0BJ0Z|#q#w`J~f<`oPA)t36z%1J})S&d;0E*KJ&n()HKY+4{WEvDSRr zci6+_@x<2SM=X0GcUr#`<4DL&dA$bGn%&&sh5V#F;vbh!*^!STFUR8%_)Ywid=1@z z09>)|3VTs?eOHVR_c?rq=?0=bx|cV_3gBj}`y$`=kyy6{zFN15UhVbUn~YuqfW;b% zbz8E~;%WDMZ|Qyo%P&X1+1CFXapjlx5Nkj5iRs1g_pWcn{I7-5=$8reihUo#W&JFF z4=RwoBAakKg6OUJ8uMR*{OJ;JAj9Op+3@-)3^Bs1YzO@`_nQs}9>DWgAV8YeHSq2< zozCgi8=g=12Xs%7aznWry4KT&ym?92t$yzr4Gp$d`Zj7eYBTp@}+(o-t0affhzA8yaM;rCAirNZ+~mvLW4&=GuOG5S1WLSxeTX?jwe25355Iu&RpkJPF3LiTnWz9 z2MtX79u9&4m89GFw=_@3Z^pEehZ&uu4?S)^_2x$W(zyrivvHiG+%ahOHE(A;`ERy(jzhD>lajN=lQOf#H%swH13&V?wDTyv$OOmz8{(;R{oOZPwCUMt z=TZ7Re#e#Wj{`2-u_M}7k955Qz;w1p@jS0F?L124XZ*DDC=oxt(8m{iFTwfqrf1CO zcuF~Ed*p~e^#xt}kpEEs5RWF}Pei$5e>e198uw8-pJU14$NgMGep8%tSp8|MciMP{ z0YUX~KK~5LQBL0h{Z!7k3wFqIzK=z|b;y@L>-PEKX9rzg_aG6jd!PG#==537WB7Dr zT0LAx75mpghrMC%ko}^J7wwn_UELMuUPK?w)7hS%d^6hfkmJMkCh2}6e9<@ixcAF$ zocE?2DE?sJQC<(2o$RQ?EB1dzJ-i#|9IgB&4-cR`Z_^Qve}{2AI~@By6Hy+WZgz}& zJgoPB*&l}x#d4Ex1)cBr{ZWn&9P!KZfm@01Q(iueaYXw>y$jd4Jp+8fd5H2Uz4%@n z;Lf$*{LC+aiNg_}WhH$?JvP^V^ZrV?^GfBW*a>iTz@r<1{5IihzjDiN#sc5>xPK-4 z`FEfF!Qnv<_eHon@@an4>hSwj)Mx(-bm_(W$>*TR2*T`2;`{a6+U=?LIJ}`4$6NE4 zSOoJu@#F1$&&TkYd&0^2lsY-;WX($zNX9X_jOyN!xeA-_!Fj|WG^c7x5?WPFUR>E z(K93V`@@qXIJHGTlcFgg~jyj%m+SP9K`s!pdxG5@8xEcFY;8&84 z>m>TypK(GmOg8{lV@z=#=b%N;ST}7y80T?9?-l29I{uyQ!>b+CbL5}0-a4aQ4VANg zm6yF#=l^uiy5PS{2_5;1`P`)Of$DAGy+%u~^qbBDRrR>$-wT1aty9kP_4ClRv5wvp z`=6WGtLRsZD~4~61tBMIu^)|jp1;aJZMpD?wd6)}COdYSUgSIV&l^5>0OZ(?;v9)T zB>+6b&JlPQ=MFmG>*pxKK1KN|w@>F4B_GsBmi~~ppLC~6JrRC(#OK4b<5+z7d)N8H zh~3wCIn5`PU++FrA6vQb(|52o^mk1B8?}F95&3QVO>QN>cv$nR z@;LXoF6t4Nw|se=V~G4}FZJa^m^)<0VjO)w;6onFZZb4C{9gzB{P8%S5cvp~oJ_d; z=74MC^BLg&g29dROC`AI3WK{BaHaRk^x-8qY57Mt1XLUXj??hX9om&>4;e3UcCo$lp2PDtg^R5r8^3k>8 z(GKR99hC4Wp|UeH=6}`e^I;YHF^;Fs6Tn_)_2%bporZsUv4MrWtnl(HSPS$jh)NXm z$G2JjLeCsxD)a*WQEqjww2W_A|1AU@%BS>8an54C>lyV|zQN~(=|%_woW4^lyJ;Tt z`L-SU2P|JB-qDxdq1>`XWxZs4b!EoI~yPM&-eLFqw{SBxZnqkUx%YU^sDKw zO8tf1ccbUqG7|aW86Q;nVV|eB-??9E5ohgZXP>k8bMWzY^>gswK(wd+u-C79uXD|V zwr>u*Z`3QhZ)2X$>tL|}C;pki$DHuP)e>L$ia%gaGk(7T$)rz}Pb3#@esR6p=9dT; z{POg-%`bMo>z{#NY3;^<;mjU*qYT7wSCVLgcsc$di+yEBr^-pxfs)9`_IWg!}dA6FcX1 z$l*{-eSD$zgnekEdC42sCz#B@{qLerM7PHLKe2H{@5Wa3N~_Q(U$yql#vknYLZ7U# zY}o(tc}v$*e`FEa#4*!9vMXRe#KN2xafH$N9?jF*@87@2`DfDMGQX`qoZaw#eXLtz zy)}Y(@|W&4RmUyOPliH2_ra&#sD6XPAHF;4fk!<#j`Svcl7W1v?>V*ifnwbf^*6|{ zaJ}<>-}jyGv7pUQh_cp&TDM4!vPoYrWQX?|UDC@wVeRHToGv>W>9PLiJdE?%?70^_ z|1F-ey>IY`HZLg8tH}3if1~E(pWc;{To!WpoKn|bZ}N3Ox{0x%>n4vEU37k_mi&^@L42Y6 zW$Mqye6L^tcv27=^RKjeYSm-ZKjuJd(wF%OLIM=(ss z{^0yFy*%EtMVPLZ_&XihVej|;GwfgOsn`?$KddQaKkJI`Jrwfik>dyEsPkX=1LE|ERg?2{EbeWpYw(MR{q>i2m) zYDd?VAP$`7M|H_{;LZ6i@fp3y--v5;e%1D8>(RbZ)J3OtrSzTjNw?-f=>KxN`tS92 z5I*TcIx)T6Zx;hK(X~HgD*2~res(zeaRoXUE+6x8PVLQukHdUn{76;SSm^J6b6(D{ z`e7{ELB1v5G+@ABje;lqWET_OWqcO{UzHc$q6_E6gnJ_VY~qmh{|G9v`0)20aC=|> zNBunA*!3s`M|%qK>Cb$*D;b%^Tjx ze)7u|{J&g+n~_Lx<#!9_+D|@Nf%7+IIKk)Ted)ROlV7XAIaz`u`(OQXL(BM;d{yix zho0uR!T8qv0n3;k+-`pFIePD4r-kbenP=|+_%Hk0OxK}OIQGZ;clvLJ*^epX(eJB1 z)sAOB{9Xyq+b{BYr@p_=>BmXv36CWt$1nBc*opFK-$VOLMS8SX-v^@no+7*${{=DS zBd&1Dr+NDb;(%gOq;F*|Sick&ZB3xqS#O*7sgG zPvAVQXwP+)y{Mn_9Clri9(a+?CAU%SA?0zL?X>PKC|>oEe(0*CNRRsR<*VF2^Y}jV zweQRMEh)Df?FHE49kT90M8f5dzhwFETz%a9;=Ldu4c8s4Ks%A?!|-=6e2c*&AN@vY zACG+0g>r1)OO9zG4lR?6L5DL2=>+QpS}drRfGKDi3* z;kZQlJrLuo)-yXEB9%bL4gUUH{{hbKJwJVYzqGv1@-pC*&y~Hz@L}f0cmlfdJuuSg zu@WBnZFf)WC(PR|oNw^{(>y`vC-T*S&!y~rj?ZzvAHhR_pWk%M%6D(FWV@eW{fl(^ zeek!!=lJ@QoqX{R$1`Qe3%{^M1A z@dND9hR`xioH3t!3`2Is)59roJSnJ=q4{um+ z23@u>H|Vn2{kiJbx?1bIH7g_k)$Uj6qw|qCw`X|VUYxUY`H=k}-iO)mP_Pbd`Y)BQ z_j&mC%Uu5R)oTr&&Ra@e*IefLbPf^c51k&d-x{z`)5t0YaGoEJAbwN z(ZhNd0rn7sBfb?MDLvod_3E5YHtGGX{K60WTLwqvvPthR^>=>LGEcw8+okfjH|+Hz zx`}`Jxf?yKelGaF>E%Q24|X`50r*$p=ZoNDM%@*1n6G}+@>5STp7VI9v(vbTZ1LD9 za)0?T^B;)y#$58jbphYG&2L-mPUBo_vCf(Bewh<4a6{1~dw#RQ z)4JeAwEqz9^637{i^u~JvH7088+~l8*Wbs}wjR&?wdBeoybHhD_;g$RneZT;s(AF` zJ_Cf%j^_!6nm#>caN#|RgABX+T^6&V7=gW>Bvasv~ z*-__Hg{7A{PoW#YKNiT(^>W?&5rEVCr1>4rm)(0jp0sAs{M@xxPablx5bb2V?v2B4 z=y>&cIoWX+A`|mzJkYp1j<_cN>D}WiK^O9wzRyefW;pF!z~V{Qo9!8Z_W8JtjBU?1 z3V1Fa$q0zvMEZF6S9!M;-@Pl&OR;m|vO_O89WlS6yN`G#ikf-K!jKAL!4p z+T90wSo&pAZ_I0pasL{R*La$5*k^bY_gO-oA9jITjDQtGEAYFQ@rH_PpaGzLq^Q-{5#;ho7)==@lQfg5*PvznVXd z&2xKXvCkIpc}|c5p01nyo{{v%IP^mk`C$LEdi0%D=_&DJ`Y@rD`R`H7uYM3d-O>L# z&ntT!=MOe-i1|YQ70&SK!`=b;{fh!#mCu}R*`(7+>z3}KzXz?{8r3^sXcqfDdM_I1 zGcBLykD9Nw!yBii>-(FUr*-=<4Ey;q%hw(A_IiOw)5}L#>9|L2@!8?v|45hpRNwQ{ zxUG802Nd=0VQ-K4R`bMmIp+_RJIKKuF2BR$^{zJF0dxF9Z>hgD&h=lh+{%e>wNHe5 zC0_0ZOHR74c0Yai0{bDotaXLPN5M~r9U<|t*ZcVgjuX!3-v494 z*V(artnR+L0Yy2z+d-@IQWU+K!A>($=A?pxhYuja(B zP1kJF`%U{-ANFiKe`oa3yq)6)IXJ~PlIYlNuY%rsueKjH7&?8oL~ygiLI2Bw{!6CQ zzXoe6%jLJd>h;Aqp>xIh{%h95T-;BiMhE>+-CXyyUaHWQHqdf^836y&OwVt_`^QQ@ ztz-v9{(uNB`nCO#jplqbq8|D{U#e=L>1eZ?}vM06$}p9Ed2@6x6hpaMAM zlYMUl@SBJ)($8luQaVo}}g;1wv zua5i8ikBUkc4L4{ihBrs4uyJ$Aa{d+)T`1%-M-8-y>tli-9w(A?OcnWC&KT8zZGE= zpJAWe{nqw+;oGrK{$`1f^2bk_{16Y)XD)lB*7-+~kL?}6{zc4_hLc<`^rXU(s)K3j8lz>9kHeZ)1P z&t%sWp1NmTov&$pzI~KC4|uXy`PACELI89+Me zsQKSrmw7qupFa@%n6G}t`iXKx`b)p%vA?lnm6vNRa{bH@5;P7IUK26n;lGIAW^ao9g0y*_i^ z=7a}6B0uK0xt?#^mmFcvyQ!LrbOcy`+UMt^neO(b?`O4U584GkE%11Y#h*d{!FaDV+JSnRpzp-wH+{+SEd)HuA?23+-}UDE4WQnc*M0%V zi6&B{&!%p-Y%}dUna59k)crLiAYAu-?q^3|vwG`GJzUs#B7fHfD=c9u>_=IA@2Ttj zw_E%|bQgO}`dRoDc!fRg%HZep9_A(=|FzZ2adNKtXz~IY8IJRtli&xrw)*di`F4KWGRvoXE!l*RU%J02`qS=9 zS4*xlKbr_VmOCEVg!38RvHzCpAAyiI0a^P;cg6T#f5fW8y3pG<7oIgc4b;~A>Ywa+ z=R?jv$X^5SuL8*Iu+t$sdfe!tdmQ~w`oNOKcgJ*IPWBv~zj)ws$BT2?wfH#}+!X1^ z?|Sh*YbVPye=WJ!!tH)^J`i8!k2}5R>espYLHv?Md&##vv8DCQZ0ovZ6@LFviQhHe za{j)ylJDP^^IeZh;AFp%-B{y#c60FQyS<(LOS(OO%+qE6(K|#nyFCm(xh3duYw&e^ zFFo7p@}+l;q#yN;nf3w7^LdDB@jcz{>#X|X+za(8)BCUU_sZIM`20rrb;rCXz0`F? z{|E>SH#KBlqI2$~*X9bnUVKwqkBHB5U-lIJ(?7ClPI&t&@IG0BC;eX!ewIB${oQqi zD;%v~WY491P%gRNVEbpBQ;c@ac}{Vsw_A3#g^)YK>EGF73509#5y^OtFO=8(T$eZU z=XnqITwxyUQb z_xOB0f5yOI9Qbw9A7d*$O#Mpw>Rx;KoZDRM@h2+v&MV3DXw%{LVn2=TAst4B+v6hX zPYEWUAFIIm8q$jKa;wWP;UKHQd87j8qJVR}0_X3i!EyP|S|Rs0pb#AABS!D=wU4v+ zJ{PRK>2zZ}z$JGMvK02+&~2P2X+2)EQ{~`?pkqF`%JT7i+p!Y9`C!xH+wfRB;d*_t z=jF}y7N2iiY`*Rf=W91wnB_?i*%xYdN)$AWajlk+Dv*i2E3?Wdg@@n&6`b27he6h_yj=sq`l-W@|P=Yeg8@0b``&TZM55` zwMo9QY2_REo+lmi6Jp-n$e_)mr_s68?rH7Wy4CWx>)Y&M(36sw4|#v*j&7k>_1>1g zE3NTq_>NDT9F_G2?IhK8IqO>i_~~V?M=1}7NUU)Aa-YwZ&yRf?aPsA@=gRNhA4h!o zUI6V<(hKa@Qzbc|9%oZHZ=g@Px)!`%&Y%1uBEm8KCjdk8*IGpCIlbxY{QT%s3_-u* z+}GR8hb;`g#?8i}d7)1@VS)VyWCfb1%kYR#E%Avy=kE+pjWD;%WfQ*Umr`>%O;LZ7|fnM1nK=My)8j7@|& zU;SCYtF8+e&-}E*Ald3dFiCH9#CR^Y954K2_o>3`zx-MjPX?mBtbDq=0ufo2x z#G;FLE5&bV&*u#X(X*EPzPEqK^K+atIN|qpEHnJokCLYe zKX#Aj)4s9zOZ?DS1ORXv?{FW$@XL8f9!_}Z91O#xr1Fi09hC8eR7-kTtSHC%hV@5< z?%Efd>pWurHLf3ozwoZoLHiT!_W1W-M`InY^V18#_oP#Lso%4|A^MMe`Lm>7r9T-@ zyj4EE?!OvcI8GzG{boCBiPxw0SLvdAC?95KxT%Z7_hpdD)A|cQFOZw`YvGI3bkvKh zO8Q9WYK!@9=)-)u+Z~vH{Vi?%l`oHV*WyO&l>du>ul5h8_A_^TT|~Wm+XuhW#kg&kB~#)f#{ceXfBZhiFaMk4U&(v;t6eVZ zX)>5(7X_Xx+vD?XyV~ud98o{~6#k)$igD>o<#$)gb0%CZFT1MI@x1bQ6yweW3c*p{ z*#DyY)X|6sigvE~NQ8mhmyl2NWBb>a`cwL$JRaSHYL&lC?@ypkjYDNTUt9dogXiY6 z;JJMcJU>##v(M=ueATY1p4yFfM7gfkJHY%tF4z6M|4I2P=97R;#dGI{jD@@~43}Ss zNH~Vy_v6g}P7Ckuc&nY)x%=6L}gPB|FgB=m}oYz0uc2Pc-b#u&YV0Qf|4= zM_lPNFW(X4@;GoH9n}6UJ(kVp%iMqT5Yoervct)5?@*#>vL*P1dY*1j00tYIgfFt~f7vl%ulajix$aw|zFV|NVe>VbfB;8Nfe_--jP?JlBjaO$Ojw z{0A)B_S@Kl15oRXUk2gYw;akU9LKYAxPFT#aGo?R{(}(@_|xKvBpkK%wD^sT^?BH| z_>~?{`#SNdhkcuL{Yiw!R(oG)UOl$@o7Oj@S9`g!)!*V_4_%1&`_E8^yC6-v{l3&-XxC4>cO&uY%8Ui}k;VayGwSvKO(G zyAkuhD?i_rA2Pz&>hH?W>ysa!CsUqmeFHsu>Q~x&mE-FPBoyzws5wq1I!Z z2j--^&KD#6KIrZ{LtouK={o1mi(S!XlRn<$7dt%FKXx&t8gOEMgm(!|R~7pP7dI_E z>s#f1=JV^a{bQmsPv$toc{1l?+E3+r9I6E8rZ@s&zJ9>r5Dz+?@29@pR+>lRojAjX z`Ork<+h<|jZz9+#sQ(u1{e{^Ro|yhGyn3|X|zH$GXRGf+AM zomX4I^80ptSW;$&oHM2Sc--C`V`!Fbq?|}HeZPk96-*nvIyy(q9zF5cKk zuUP&(=A(t3w1mfT_TOcW7xDP3z>E0k{90a>gHn0&o8YqDFVAAHE!M-OaF`o#aIP)7O7>*U`79MQQ-51l6<{;!noY3sa! zwX0NbzC89vCIe4YeyV~u*A3b~ei3l#IG=vG1c&%AslaQ)`slB@~u{$_;56m{>gf*Sn+-g-s7~0a=#3g z`k|~(dZ6M&!$vJD;-tQ`7jt`5NClH$2Ma)>^sH!zg$6^(8$V_ZRcHA4|B? z^z`y)X29EO@SgDaqk$h9{R-Pr;;$zdF7em0Um|7Pv7KNi<1hMJceDQAD$%uO+~<1l zw@dM5dXqnA()$l*;O+El(_uROoNjoBc1Ag;-yw_t=cLb)zZJc+t-=@V&$8b6CI}!t zD(jsq%k91rh2Zklj+aCui*xGv>Q@clEXGNl-^|VfVOcK57wHq}UEP3c9b=aOCE)b9U`#1O5DTM>@O^@y}uu1ny_Z#zFMoE9Vsit{}?vI2x z!&?4BHvi_FhV)2p_4R(f{AHty>{8TQr;IP0ztRidVgT7b&V1^F7KHo*VK~-KytxlR zU*{6i3mOO^ydd~=j|FW$bS@l2^grd~Pi(*Go8Ppz=HPv^zRmL=MZ1B{=^ar%3stCd zfS-!<8TI#8^55>^EswcR`PmQ05d9rdu5pg$dKRcc4)95U? z=`C(g(L3mh?^+u6RP|r>_uv+s1@3v4QRTExr*qk|FYDY!x|CW9{4!)- zlHSMF3-$WX89!9{RdS_w&+oe_BwmM>7zthu4 z(9R})j)z~=hkN?v`gBeydx*Jb>R;+L_PFk4XAisJNl(8~dNw-zUBIG!t5_@Q4SO@! zucXUpoR4@BUBz&#V~pAGzQ{91pV6JpciHV0oeVv>&VI*j{VRUpeD42+;aKmtSIf=SuPpZkD@Q9o=ra-hEBnHv zMVmeBIOwE)C*4W^mW|3R_a&!up(h)_tYRV!xeHK z@-4ZR{I=pfC(aXG&RxMVOjnEj`gXcc?6RGnKGfrKKY+s29P@rGc+3d zEatHTK$7jlcL{>uU5;CwJ`rSp%`f5CIESs8U5~N;2Hy9hEA-fC)56)ktK6^Xv24QY z)qVI@@($0Z`;hlou+SU&zNG3Y#t+qVPt+57kNDS0_zN%5w`Hfla9=9uGWK}rhkKfi z$C$$_uS?IU9|GUPj&-m1L-v8t4|lIMxTE8tAL2V*uU9`*mf<&& z|88L9&qmA#i*Z@w zXP;$DvUN^x%3XDyL(NgpE#!pqNIVPtY}XTX;zxVn)bF~7A^udkHvOFdvRmjqlr|s4 z{Qb$M!OdowPb@k^Kd8P!U&OrdU;2FFTh=$zecd`C*N`&$NhOy3Acok z9WftaJfb7Mp6DLnj-|{AzJA7ip8uf6;Q5c!phaU5M`MR;KkU!qMCoLk%E8ahoy^G_#;T!9Ehkfb+-J98QtH-oxkbxr{&gZ&rwIhKRCT5NKs06NN z&=|hJ!f}7ve!~K6=Sm^~Z*kJKfLNj3yUerqw}=nz7r*yUr%!kJvsxDZPY7#WNxopo zB0cnlK}B!IOo32!^Qa|=^5l_k!pFKL;Zc!d*|b?#XRVg`I?8yE|}jDcDvc^ii-Ct%?-P-(pD5)cJ?Qp6?G4vG zKH4i8BRJy_qpJ{}3Vs!SjgBAm_IF(G>&!{#cTNx2BL9i-sgM5w{44tIJ>c~*o*bfg zF`0h+htS^m&Pgrtj>vEF_KqVz`G)6GIg&`84!W4TePTcK{V|s>y}w}go&B)?PoNN7 zv7b2^VbJL$@GI~84x;~b4olyiqg;FdANCwUeb&D4vx!0L-&V(^2C!Vual-u;>iJa| zDz!hOe$SWRZS_zee6rM!`SLv$&wOY~a_4f#hhhAml zH`*U_!OM=gT<6PQ^?r$WEb=>E_HgWjm+>%pI$+JUeJFlfMB^>n^(&?JlV5sC7vy=h zbPtGhuH&F6eRLb_Gfl5=!z%CBOB{Z_e65FLe5GC^9a+z`aeA5OXFTCCgws8RzSKCb zahrO~#%cIAPIH3+j^*19y{x(j>x;fu4$2cAD z;EcV&ak|mr=dtu|RjaT^`oxR(A*YSU6mGb^Px%j~m&bLEW28f2Z$f}Wxa5oc^KFd_ zfKSJI%kzesy=w09XT!H#PV~2D-)grSVMTUK#En;Lbgsg}$6+JX=qEo^yQIPusAun@wyqov3&9 zbT5+pdZzJ8{ZMY7<5d|io{jP1j^nPcOY|UpvI*DY#OH@VdyN-UD;!VGBg*!3=3`Qk zZ)?yO9#Brwc^C-jUk(KV$8{uK-qEC&AZvtRA!6m;Dp2k1YV_E6k zh2|~HN2hZDvhOp0S>9y7EBE6oXg}Nca%q2n?d!q3gFcc^Yd5JlPSsXf5rMIzu)^QThCG`7vH&QE%NnYcB#{= z(Q&7xXOk~D|6J_!8v!yLF*QEcV|>hF+@^hyJy5e>&4`26cvnAecoomfv-OhT5Y0b1^n~#d~BypZo^vWh*GCJyMGhx03rI_W>vKWnYrH85nXJ`Y7IC%MQ3)WDhwV=Em=Y(MfP?$>%Km#_{{jX>h9e z)slbj{Soh#X6Jc3+v{$hw~T=p1f2Kk1@<_Tqh=1FVg3!an@iDhp?iG|ks}6xrFb!_E&=!CKU_ z&mkx6B8E@AqoH?Xvqz$zc*zn@_wojipDB%nioeRzyTe{H`WU4ZbUHWmZ=5^ceU9Jo zYn(G;={k2L`#{ZJb94GNS$>1dSK8s{rgW}K@Am4u?rg_zqfL5uBl{NU@G$CY)4}^O z`;aq)=$K8u>U@0I`9gdqJ3i?`id6SE$PaI0d*Xa|_Hi#yJ;waC#P{vW=WGyN?1%6? z5S`A0$u6q>Lw*09-9dP~x4>~$d|Q9QisRg#({l>-(rF*7mi(HvYt+@8**DpPC%|;{ zW#8UC|I4SR09STAy?Z-!U@gI+eLl{zy^I-N=JBHkf*<01uIN0r&*QTLP2@)V9(4ZI z`6itYoQ-ceg0+%AFucWg93QOx@Y(*x0&l3!O=agdSxrGl>OErE9$#G_))M~?apRot zwRJ;rjw{Yzwa+;^J?G+!R`MIpFB31BKejB|JK=N^eMk?wTJoahlU#5;qxR4rSNkHq zP503E2d2|6d$dWg1z(fjj4tusulPxHY2WW~cx}2IF}y^VcD`tT=#}hp`QdV_9gXxhv3!{KQCE~Z|oR2&13Wq+m>4`8v7z|w;#oQhOkpKYS&u4-hb4& zTfI-Icit&ibUGK;m>=gdU9IB%cklnH%=2}67lK5P;M7Vbfhcj&@ynk;RXW znK$iwgobD6&)xGo4Ns2iCy_PvX+!aDTK2rtqtWRTp0w%XuJmkIr`u6wPc8K2!!GaD z^L4dkuOX!Us`^UDPw;dOmUibdo}|Zd5OnW#&WPe8-IJPXIvl;nR>WTs@o|o|IB#^o z3rMeLajr$@zq5E3w9TjQF+ka4(SD#o2-)+Y--2(_As`MXxz%_`w*Cx~G%jl1*H{3? zm?gj7znXjegu;aDf5Oj`b$ig>8DqT0wcQ;{Oi%OO2RiLr***}$nm3(&eEr+X`0D2; zivEuAQFPS(IQ3JTj;Z0n`64-6=gWmxbsW(+lRxWxExsRmY^}k`4hEk++O#m!DR+%H z-<6Gde4*DuUWgCntURwFXSF&wDiANfSDM|s%)%-^7k|uzgARw&{88tTb?%~Tr}NR- z@Kbw>aUt5LaYp)B@QeLXs~!8_@YycuW!ZV8SF=r?vC(m}{m3>sUb4evmw9@&KJa~q zw=28C>7w)D`Liwu`QzSC`D&j>j^02i#ya*I@2{avu3)&%AjEuw&o}Z7J}&EhVciF8 zbaYwyY*W+yYgW0xF8bvm3l`^JTFFj}n9Cl-`5&F;yBb&Ze(u<)<4b)+j5QCF9bx!V zZ%3y0mt(!#eZasL>)mrib3QRZHBEqIYm_e8Ly|7{7;*A-2Q~`*QXt>_t*~pO6U7`r5J|l#=rRfD8hu3cKW$;rc)23 z^Zv%?H3$E35XMmt;c^{Be>{BM zgVOvWTNdqka}&9cpZHO)(J%&Aod18)g2nsk(rfMaYP=t%C$xWBrBAV+_MpQfy*OgD za2ts+g&vFcYkceCMj%`jpDf<97Cvn~=J2Gat9mS5N~)kf`wO`0U#(LvTyH6v)+rad zJkHQ_o~^idCVO%AkmK8!7kF3gq0xS=%ZNYud8U59&+sVl47*$-?mc9Wfq-y*Xb$C1 zb`IGar60@hH{v)2&N=va-dGfNlPZ3(&Z8as?@H&cbgyM@dq_aMV#w`7FHDZwl^f+(qUG$aH8xgK0f8=^A_7ycAj4k(fbB4pN+NOi+wMNIA zj1H0$+A~N2-GeR1lOnQz5>Ke!Bt5@@zo0w%jrx%L@Fy$#5dRu!lsn4#?N1}X{HVvi zGjJ(Od6*bU@2Bg0ykI`pv(7gR~U9$qfL%7U8j8i?(wgY_IlL+IB=AUkZNE zdVDg<0S@m;ia+M&J5qtPIb{8=c~Evi)8e!9R=MABe$#ne!XrJEU-PDHN#sATY30~o zQ#e0Snb@$l0u8;G_UCyvyaf&r%yW(Bs-G1-B{N4udjcPuuc|PgzPM+7< z>F=;-!_9!R%KhDI%~v_*zXJJ3C%pdANylgA{Su#-NMC8a!Z1nI!up0z>->Ky_e%zV z6Y(qh>jq*8Uh(cJ?5A_}SHT~#epmmEEdb%*^00raKdDz(pX}b6pNw7X>-OBq*v6;I zKkE%_GUdx3+>@*D(UVQfP~aiHiFyAFJak?Kc+rim_WsqpySy*Ud8znF>qYX%|4sgw zbpDVYm~n3b%GLS6?eLnXXr9BcrFX`7a@6^}xUVn~e5d;gqfNs%o8`XC8Sg7l$-@=* z72@8@04k@3ZFR(bg)_i^J@*v`qCK*Y7yNaxRXSvn)=iCbK4bBkcjnI?Gkso< z`AWY01q;irA^RWU(&h1vhR$2mAM<#<2hc738Rr`7ArIQ`>pK6a6&PLXu%l)CTneRHHR~N9m!uJ ztn)prpXst|kH)*s9G?ky%O?DRBR^m%m@Z8HC=^+j2E?`~2V({B*vL|3y7< zE_C#2M|c4ESv@^gEa7{^M3wEp7qp7^|9GsAa-em+>eF{H`5rNv0=@|RNG!Orp7?9% z3GMrnFFNoa^~A0J$Z^EKztiaW-0A%&H#+gRr&)e<($}GSSCIHJq0xE#H0#SIosZJT zu4H!Hv-9~=8uP=hOPqmfiQApUf8smcV<&yed_ep-@7#O-_d8s?drp@=xYGQtRji%; z=<*`{SAWW)6V2zlpZ2iUJKEpTx=H%D73b21CfqKkd2AMR(fWt{#`aVH?T1hM2Yt0~ z^k}?yH{t8o{?V|1$GD(@}ODey0$m(j>@)(4C^VrZ^QsxcEsgP^Iqxw#yQktsOLlHo3C{7zxbr< zLk>uA^_{P|n1KkCu=B6>03N6PDwWu8B~xM@GK9@jV7n>}2n zLmzUGPUw2;UsAed+8y@W2N8fP>tph<>0xAKy@zqJWi;07t&VxdSJE%+XUdJd!V@Qjz6dA5d-?Q|!A8S+cdO-2a;2Orc-tih1T*4-*ak z<2r}y@a~A$`JG1CvC{co|I|iggyTLQUBh18McBo@*oU9G+|%p3-5+hauXWP^_<{w_CCL3Tyen-2Q<2%XbVy~LILn%26koZe~Se46lO!9ff_J4TsbHJ)KABy44kk=+nK`^Xa{7&71WeqQ2KRI^y}N^y?Z4`H1=?zp6Lg z@B3+*@9AD4^#h5n^9#jyc0#Wfe0PP{t9MEDK4V!Q9Rocz&mmo2@4JkLtlUW(x61GT zy@2@g`vfN$4!pRIT2-1?P!A%?_?tfU;cZ`Q=P&OAKaKfnq0j#XwrlfQ+I7_&?b`P* zyj^?F(yoq`)cKL?y1xfs(4I<1{YHK+_WxWgaDSAs;PW`g)|mI}9_}^I z)@Kx*0pvG*8u2fBa>D1NDBldym)_L53+*dQzsxmX)_hCzz}+2_IN^uy^hpk-_bTYYFTQHRNhYJW6fXCkXKaBkG*(V#PmBDXtYKEDs3@t%Ar zI4qZ*&k)D?A2na&r|t)g90Nl63KJPX&yFPxwS}7mwHFl;(Z15+c@PWQxrF~?rdkBa5MnfK|{VBepJ!*>ZN340)uf~6Ze`Sv)6ml2v z2%q`plAkvGHyiv~a-Z=h`Q@7^S8Zo&;RVUxGQOa@D^A_psOH~|_xyggf_IrN>6rT0 z8!{XIMxXPnc{BLEjeker|9->)2W7W3Tl-eJA5wqX)1`k}i_Woj>%4Y-lczU2U4QF*;{c+q z9f5yc-8^CRUXPe@-Vco;eT)9VI${cRVVF+(x3Qpoj)d`AC)EcTLO#?>IJD!S zcyaE09OEoWq4RaT=UJZr*OD7qJQ=;gJo_H#di*>AveD=GOSroi#<_EZ>2&TqTjk-Y zgYJ)`9J6R1KaTbxD%leHOYff6H+%kUB{INif3GNy_OKn}@U48%Z^te#SAW?3Y*p~# zw_N`+1N5!dPkJ{2VfzvvA7%g0JEhq%moL4qH-P-?53T>YKWNn#?brD-eYc(Vw$nBu zxxeE|&riCLay!;}xE}Pe^_}$?`>i8c6YiheQTW@}v2O{<1;l0{&<>9p%;J2fvN~;T!*NWh(mH**&Q@Eol0Id_a4( z>7l5%{l1-_FJQf8KGMCN9lkua?@Jj!Rp1-GWqykEan!jM|LPm@2Tpo^H13Br<}J1O z(es_Z#x`v6eh7Nz8=kN*`TNn*dL`d*cae`x$v5n?aK7PD^ULSCwt_(UhW!PcY3tw( zd%Rq{i^6s+(qe*e^?i;BL(|S@@V>d$85%#zcpjSrPk{b5@Z1)7ZZ&_#ecZ!=ALw*9 z@YDGbuB(3v9WJ^vOgxJ9_Itb>-lKB(8`hd{>o#Oed%b@cX2H?L-pL~fn*I-eH)h3C zsF(Q&V05v8NoM9dx5&r&(CA|R1>fV}ba=dJ%7oH+bSbny0Tf4E%E z=`dG&Uz$NT%7ga9-$*+*m%i7;cH)0)CwipZ(T8}4|%-O${qZVZL-R314U#Q>rmFUfO z{xm97do>TQ4@9{O+}Av%JLWI4&ubiJzp=f1N1l%DK=AZv$TdBNsTzz<;qM*ub1=ob z@++)3?puM7aOu^)e%3j-?rS`~>uRS*ExFVp8uKnPU+aR==qIg5Mj%gCZ}_`A*EoJl z91iD!R{?_NO9N<6H^V{K5&UM$wlwhvt`~N-zl5)Mt_Yv$ql@taj^rb}Egnp!u4F9q zD%x%59-0*2h|-3CwmkT2h7;j(^n zy?DyvNvG+0@imK|?cCT#v_tQFu-wVI^E~U9yiJTXCO9`-SPHVaE-=k=>(fi6c1L$J$Xp zk%!Z}RQjF-*9YXIt~mds^+CGT1vCAiuZyJTbl*XEk)9yuX{~E0k0j9OX4dBVju><; zTWR6qUa;_u@55xreBRN<-|;TaQ=l|sbiP>ML)N&bc%5_MdWPqrsekDtZwo;O!WrFV z(Zzaprv4>WP%h@Ddf&XO_e~Z*0AYFnzi206KaK8oe049D_7FnozR|MVx~hqvCx93I zy>XtLY{`<_FLt}hK!i14o=Z=0yn3QCUTrSxD@P}ho@f4JmHfX^dS_1Kq3*5Cmj7d= z{OW)0&r>fqf%|y)q&vguiaz{xJ|;?xC*9H&&JSlQPs*e#&SUZD$4-R3VYS512XH?4 z)3<{O!{w`8{;2;xgRJ>#mrsU2i#+-2khkZ&0L%a6o_2ZS#}i_FfAWt?@w)%X{J;BS z?fm8X)>P{2w(!jQe&o(}dDgco>ia|~p5wt7zaFNqag1{D{!0N5eiQNI;d3eay$HVu_*VWsQ66DB*(=HKU#y`# z{3hbZ!{_+@MZlu|wDL5F!)YE@F5i8@?B%;LF-TPo?V{s2k0vF=mr+|{-bs3}2A!MS z;>)t6)%nL%OU1cL>b+n6?_WPX8{YyX_{_&8@h9_d{qx!LZ~cpNk^gt6!5={Wljy%H z{6^>JPM>_fv%rJ-_+I18e8*3}^`%Z*@8f3CX*RzJyvD<4KeL_W$5S2t&1nR24(`_t z5Ai|qPQ=AbMf;b!&-nlcv~T+1=>7vXSd00}9*0N!De0Dt z9kPhVJio`U`Md0(>>q$mWCxUek^N}#AF$$y&QUD{ULenD@+Z{KY4SaNwvQt$?a!2- zbS)c19Dc-n*)cU9q?ah&2cDtei{X`)-R9*6U-d-2JnzH$wa=*cHaNa?qbTXvgfBYk zoMG$uj@U`Ahd$L15kI{N(IL7rd zex!ruM+49cR^JB=tnITiy}#ENR8vilCz@=B<^y%miH>Mn|3|-<>!BQ_ZzeSIfzN;L z+GW9HXrA9E6JI?r>hU^{JzRlLd1t?if76@4Y;r~Wvf-t7DFROYK-3fKkh^wzc(})X z-G|Y;S;CuqK>nRg&IU_zMm{4xXUczDDgP7~b#U6Bl%6fmzXt;z^N~*v!6!eyh5R_k zkn=a?EbTzY!RZ{@neg~%>HWU^4xcZli#A(%(QhjFOy`ao$-kKfpL~t~!8fan?%ao@ zQ~d>>hds>n8PW@T=|h&i7$?f-ecA51)`gFGKCR2T2KHNo?3d&NsGQ;*`-Q-Rcn#fW z*=#+*^u_`|PnDm$-tf(DTkHP)n;n19lrB58(ZafanjLof5P$N4-UY`yGM0bnO7oI6 z6bQJXP44Udp62tzw|YGFBk>{L#B(9~m0^wNlAng9Qcg}8KG`A1TlSDf&EHuQo^`;Z zn~CRL7SHjES;}^Aqw@+&PKIN@Meoh(TzxjN&FWXX^VJ^Cjym14=bVm`8|ekj`wP6F z59oAXUgJsrxVKCFmOtKf`VU%mYY%@Fd=vYt(r;CHsmJmPJ~ zXr24@>%)(E!0@n##UGM4uIG$jAnr|M(YV`yU5BpVm&xFl9*f5L_38c9Sm6AV#rvxI zexLM)-o>cdDBd2oX7JDX4qy0Y6W)K>q|1@u>O13ttNs+f)soK|ovV6+_|SC?sC~ir zlO9hwA|GeZyPWDgNLgQ=2ZD)@^9v7I!Kpzn|6%t4-@nf&xf~kv1kt-O&+j{Ed}Y6& zTHL1%`M5OB(Qfdt*6FWj9Qo*}(tIuSiO%;F`=1LhG=y{xse$__w1;v2LrbI9zmg;3 zP5fF!6pnP|Y27=+E>cVW(Bko(<*)NcS&mL&0N4CX_rf^tWM6i*eWd)`IISUi2crv&Fp~S0_IRpYz|g zYvR1tRTkXc`Buv(xz;&b;@g9Tk@S%GYH!beD@T1u$`J0d_fp#375wVU+QR-^OV(J1 z+YflY(FfUj$OSx3O}6w{(B}Jp3C9rq9TDH?cwchkyRJun?M&Xa>0Oo&VbebEy7AWc zcJ%-exLSNaae8}CJp#+Q6gpA;2>XNgSIKV4`~#>T|KnbaimYd_KU+vesmaP9a z)Ia6Lp@)uJ{o5D&gkxypWeaN@CqFd-cRc*ACGSRPdOdT==llPh`pD&p>n^%R$7b_~ z;@&vqJm)w4>_dgZK9bH?)B1?V zx9Qxp2+lL!iC^lsalm6r8U&M_nfQEjTS@MhSn*`^V)x5@YW%a)+7$G8e((SF{k;EGy4ibnW_EUV_V`+~jbw6=LwG(<0X`IAj?Vqkefw%~ z3cVEhAp`g!V5TTHp8HktNcB0Kw37uaryC{J*g2>5V3B0n3(i}$V|9>etB71>{? zJx~5Zfk5-~A*e?W<=paWOXXdt%kzC8#^)x;g!zD2vEXC>HUk|~1BRh<BP_`i=N-u^`Kb{D2{#o^-xTEt|#S&_0YDkNur@$$j33&cBenGo^9)m;rTT zOR#^2Rl+=iTo2)4jhRpT5m;Y4*w>(YN)(Unp~LiMaNa>0&rmNq+UG`oK)5hJwnY3H zkO={Bp7bn7evjkv4ow;RL3+67Ia=&6?Wf_o8bL9L{e9Xm%7F2K=k!soMPj;%-=oHG z2K=LUmq@SF0-WU#A1V)IKE==E88R zP8H$>RJ;=Rm$lsLEg#;{(DOtbIYZ7Q7v|{120rLlo&J_tkT%l&_}e z2tA1Kb1yxoZxy;BWdA0-dGULdeusj7j(AhcKI3}#J>+Puf5dm3zSa3I9MR)`KNH#m z(lULqFZguMllbpHmea(Cq<0e^4#w8OUIqUcAO5#;x*9&){vYGR8?dhN)VHyp|3>`% zJ%0T3zWn$WJg6(_Q$Wl%&|kCz<9peLAU$@UjYIV5Tv9wR8>Z9#bsJb$v9REakW9=C z=@5?&<67=2~~enS$Y1t8pF^{SpUgo+2E_$ zt8H#PWB{I6zrbhx68*mt6mZczNZ%im_Jf7owZOew%un(b+gt3by?VSoPq^m$ z$S1vv>>=0Zc;s`TaTFZA^B}! z_?L&75Ap-ZQE56|m|``=J{|Il^<0lJ8H42swfB=7J}l1stfyp+mW(2OsrU^mht5Oy^qydO;+( zQ20LiC(st1lcsojCo!Nk&qw>bRrdu9^`S60Ewl?w$qY&S9&11%#`1Xq<0bxY!J?VH z81akp=Cdm2vf;@{X`Uqg7{@Ud#r*rKTEu-V)Q9z;+{UU6!}$4y z$Hn(&rSA<1xk&s$=bGp~jboU*KCGwUft!3BWb$|kuO=Qw`GNeVmWlHegbyLFkRKR6 zM7wPOKMWr+ynLwYA%>4`S*=(Eo&U>#e4tKOJ|0tt$A|L#*gtHK@Pi|th2wd81tI}l zz(np>jO0Gq)yFU6VaHPLqrD!>7xd-*M1E%Upmqh^DEF`*$ae@A@h#n73P=+5L4Of% zu2wu;O7Xx?SPta}^C1(qYmxs|iTSBN_rouZxBK!GC=5^Gm#0wN#(P7nDljo z7mJeKmMX>>tyeG|K$rQ72NFv0h>vt|SUdWj<&i&qmB*=&;_=*3M{rmkeb4fGk9-?w zz7X<>;5W9wl7Mf5U(6H66dsS`5&L26&BOGrCEdHjdayqMO?W!Wp8#+eLZ9BDtR|O4 z{t^%?36M8k8OAE0@4jL@R3+(UsS8-LtfDRVF`ePpM?Ax?k9dYpAMp&IKH~Mz6tzow zp=bLDAL@gi^fL%St*goB@@VVLH@@4&`tLlt~@S!$CT1)qM^I-^p>ilYK*$@R0Yuy{z0Q^c=b` zLFZVoA2{9v+VFCOKOBy+5Jl&gQE$ibZEVT&(R~G4ui^ZN^`w&i0rl!3jP;|R+6w-F z3qj!l4)bGuWLHT=!2_=9J(k80hjNT1!XKm~g~2Z)_>5^h2ijNM4&+@n?>NC}9L7@( zW-dTd1w14VgH*_60Eg(OQOFq!d=DPmtqM;;3!w)?8RWCz7MvjT-GXZQ>vQ^Hdptk> z#q}fi2@XVu9{wE?{>F@tz*7XK^0JmUhA)^wZ(o z8afQ4qx(rDUn>$>v}`8#WCbpsQHlq?Kqs{`m4~JJ#e2e1{lz>zK*+I~Ku>g1y&~On ze4GcoS8%kk@lYS~ZxaByR-b3Qkq&k-bhM6>zVjT-qGbVD+$a1@bt#fE)ki#{!dE<# zn?CY0xk>R=<`vT4Xx!2|umpf*?ThhDdLhQ^J=^aI0dN@4;G+B<@eD2zk8;UV4sQT{ z#BoLIXOtI^MP@`Ig9~ZReY$Uh>8wAks>kagisTH+W3TyE$WLP!FINKXV*iYyezMZw8Ox1Cn1fPEamlzv=rUbf3d0c+i}4wr9zykH@-VHNCA>pA!+R)Cm-HbaNKs$H zen{~`9vKC`tKyU9ZM?^d_;s!3_gT{AoS_Jxu8l$tOy})lJBaVp5j;%yk4Rth70>YN zBR|8hk9dY(AMtvRb~iv_#@AKg!uiq*zZMQ>2-PR>LhqrIT%d78dZ~22a567X@_^!r ze)tFC>h&8xqfbwd_q+p6KEWUq;BPmbGF9Tx)qh za9ym27?exs2dOxL$-dd67es<1yJAF79;S6iF7UG+(*^#CKD5rEd96nuUXJFCYV~LZ z9Kxr1Q;S8pH178ha#+%POgvs{w*?QQ9a|4SQ{#A;z9T~Yi4gq?X~WZr57e@Ga*Qb* zmB8ljQhynr$0zfAA@jLk6~D*_dPt)CWNKM5%UC)ol9fk$eImq=KAr*LG6;L>HRUiM zU7I*vXkFoYk@FS3CyV<3LKq{ijpeM~ARPp%)PwKjxYqD?T`%%}c$S}y<<}Rn@;zp- z;$CoMLV0R`C(J+S$bPgF=#38HK!NHB|6pu)qkwk`%O>98@Lm2UVA{22EQ7Tg+3&u+);7AY3fFQ=C%fDdpA+gMp;6i+1x`FBy_@jKpZ}9zNRx!en3Hd`N^Lk2~ z268-ze$n_W?cbQi9}?r#6YscQB)LcYg7g^#bS8SydpA}2RtxPTAh5s5>PP&bBfcpe zrDyS_{lj=VjH^UQ4_S=4055jo=W^c{U!Mo~O51UIlySOdb-7yhDhs<-b9_*| zYc;1!h|rre01stV+CK^H*EDXB9+@!aJ?Xa3M}Csau5}!KHr|0ip5?Z)e(q!NyTteI zXnbP+G-${5;z^EAA^%*fIUNH8{KWq#w~+qyeE!)!fd zmM=ue=MbS6|EKmgT33bi#oD3Y!?=(06S8J%ZyxrH2Xgw1M-k;KzuqHW(lb5U!5%h- ze_nc!7#H+zH|dvE?Rb*C2;?N9vYP#E5k!Kc{*eBU^?2#|LVvHO-&fV^l|rv~y6Z*w zB|Y8;z7Q^7c=`Vlzs7$lK1r{4t>yBL_KoPC58Xq~1tjVLk0g%_3;4K@-ji7XiQuZ{ zqj$yVTtX<^L+b(g)Uu&`yb5_rdS;JkR*ekr@1Y~RRfLGIx_?LWn@h}thB#i1bszdC+^Y8BiW;BKw(I#uan=4ps%>)4}^oa-Q~G2~NVRA>JEb zL=V>nA;(?39^_ZVn^bOzcR5-oNbi!WHf@PD@ zcaIRbfcB~5kmfueKADL6BWIAdIprkd5zAy*#`4?oM#X&NnYtO#KY** zdI#~Yhj56XH|;NEKpfU)3rg2R6c#FColbc#-2jwU6 z4eIq+Kh0~lOkN-20U@RGAqWVDAwN0`ETotmt`esFsWW&!X}vU-hYgMf><6gqtbCA4 z?8hTfz|s6d=LGQl4Ym`c#1eon@EBYZSx}l+(T;}k1ylID(DWS>dQUY2`pxJg^o_D! zyu6WDE0gx$M7^}XQ97CDBRN#s`D!J`(EGGxC#t%Bqj??S)kFRg;nR5l9IqHp@4G~Z zbp*X*Mf5L$JS?B!YuZnxeQo+)7x5Xr??(C!y-&^?42w#kkQYB|>!Y|n^ zJ@udSK!4P4UV{TAF0tPQ@1SrxwC3eY8}fRkdRp=DHUSszD|onaV+;?K_UHBBx&!$P zW8t)zw6ADP;`s=VwBD%*5w%xfk4zayy;$ z-FA9sP%R5&IlRxqK)x2d6z%iDy>XsT^n<5fEep2r2IzeP!8W4Fn`OafzCl`zK0@E$ zR-b33_X&c{cUVM_`cLkwjxwL{=iMK;uRny^=M|zpln5n){Mxf}WWOkZc+5%TO6s3z zAJgG~cfUR2k%GSRBWL=G2UhkOulI=G0Kg!0vW*5MX}r_25%{grFmaS$$Q~|5NyKVSYjjFZ!%K@&(+8e;g-O`&Siy!f%8aA2e^% zzQInwJNz%*^PzJeRojhd37NoAdBQigkL61MKI}ie6N>PK0DPsBxE)r~(^g|Gu+IsF z&~A_GSaf8c#(5AO&hMw-9*k?%dB!Ip1Cq+YH&k3)*m9uRfzQu&G%G4%5%&|@0AjNRo%a$dl9bH z0*|5}()(E)Jn{EtS&%q4qB~qMey!~I86C}{oEen6Y)TJ zk@Wnr5D5_n+(VdWGF+tw{JNk(NG_y4dB`$e^d;tl_V!`E!ziz`7z67{6ky=!-l_Nex9SZ# zzlG&KMtFF3CfE8vINSdklWPP&wl^fwa2o3jOqt2r+Xd~JR`YxXS_TTV2Zh1m`Hx;5 zKIx%mua5HYD{HPoxD!kFtoQDe_7;rn8}vsHgl99fh3hsHy$JW=CZbairgypN{V7kl zPe6Kw$V%rOyyfrt{aF8&zd$cQWf$|0=RU@3pj}*Ff-6V4fUaON|3T-cDL=1wAHz{) z<++|%-VR;Ibu97$$w{(zQaKv;n7t% zC%RXR<+(!TsAxxauc5*7Y zj5lvNBuk|AtZNg;Ki1bC>!W%++UXACh4AZ1$56~~;_Z3DH4vgGKj$x=hxj@L(}_Rk z^EBdD(#uMqeLW-vDSEOD#K#u-gG?Wz{TDjVL~u|()F1JEL+WRN^xgPKR-Y&TvIzDk zQ;B%+L%b1u0-vZK9f3N@9*6i$0J{v8H8jL=59Neh^X@mV_b!y7ddbdq2YJYRAb${i1PAu-Q;&A(d@kt+n2s$_ z80|wa4~Y2z>|d?0byy!`W8frv7?W7gKIC`1z;Zg*OW)zZ{Sn>+%oSK}(C`9eccpxW zNIk2@yFRe5iE~nPU(dV0U>^%&#iaM*;5}~E9DR?m#&QirxkT>6yv54Vxh%SOM|!R| zT(WY~KZC{jG1%W@<*VA=;CtyTp6q&FEK_8=;r&GNp5X7Vm_*V(zfz}@=A6Pv27*FR})v{<-0j?Jl;a8AK*oAttXm%eH z0j2dfeb8nY;cC@SD*I+V!Fn&;gx9r(7PU_i?Jx3Cg20iuEG$H}=C= zgt0&akzSF>g3^0U6p!Q6i%udx#(U98#3P;o00je`}C5ghGzgb2L@^<$*tPWYDy{|x1vAydr|0B3>q3gQ*y z3=5Oor*k-H|MYNjiH~~o*dTQ`_9H{IQv!`)d#Pd`#(5jVYK8?EKTci_;XxOq;)wTN zcb7@$S`EWELTLXM`5x<|bFZmGST)kTBFPUQ@r*Bh#52D15zqM2N4y@Iq;@v|FpMt& zE-${s!r+j<5MJY83_<@f01o-ZOMZxX$jHg)w*QO#bPtX0Zy=trKNOGinipS+`Y_&$ zFGW1b50n?6K2*~FH1eAs>cw>QCHc`40^q9fLpklcp&rBSa=ZiH^X%2KRAI-VeRuk< zFWQv>L|H*A{Oh3yg|Z-fcLVX80oCF-p?OK#w}*HvN#9G}$(xsjwBqG6pnfb@Cg3N! z?ZiP3j?TNGotTX?D39%78rxq?#9wauk={h#{Y{PL=@|e7ilR_?14b8`ukpJhP&M#B zM*zZu@X|XMbgqZa1I*;rvH6zuH-ksmuySxXZdiZ$bkD*VPy4-SpV33OY&ymQp9*}C zoKVA8V=*HVS2j91+@mo#b6Zwn+FW!0&ya&*de^1Xl z{(O?5CBL7F@z_7^K!0n=LxewEUm#v^UUbu`vTR!mUV`{T(x=5Z%!OpM+k3AI-0uZ= zu6t0g!Szdb@IzX{A8;8E#&*jhSx}OjL@&Z0;U!4U7CR+93Lo0LqtC*9ph16mOwe|7t#a60Z1%xbRGrM zu^$wV6egim%9lsCu^_`aXpUG0JL1|7Y#Px+~S zoHz84j`9!jNbhsdyzgmWVE7Pnhw8z0v7C2*J=(QHA~>>R;QA16%#j_0*4r+qrR5Ji%CuRm$VB$YWjuO7Bu1_WWXY+Ejzu?^;c!!`RPcQAv z?K9r`39Og0cslLZ(>y}w0LjjcdMWY=>PKw-gh&O4a+<}1&*Fu=#`&0?JApjx+{s{I zI&fs~r1SHXFI2sZpF6?zy%?|HxzC*lM2KctT_6d{4B~s3bWYp2kS7_$d2U+2de7sq zUS^gyoCn||FW|iK=Igx42P|K(n$t(Bm&MW_*hf+xW&!W|fDWyBo^7IC(#zGdcUVGj zRd}gN=0m;eJ?vMtdRy>}+f3Yd&l_BV2dRaxe1m0>&Z7gK(Rt&=$N3dt-bBbJt$&lS z6wn>w5fhUB8pWced4c3xs*iZ&1Yhwe0(`|YdF!Jdy+{5H01WaC%0(~z6@?!-oJSB| zV=N2GYCONf)f*YTZ-L_)hNt`dib(goe}nxA5b=mlFa6ac-b;TK@rb7cD39ZUt*iL< z3j0nZf|>#8J;1k#`2p+4enJ%ZaDJsB7wkJBUn0Z>Da87>CFby;QwtvUgmwYj;OHG{ERXhcclkg0_ims)tiQm)4FWiBJ^7mSZamk4te@HjYsGqT76$#r z!8}XGKl71V~i^t@*bk$~Pw$q}`UKOlKNOGis+Zgr{l<7N zx$S`ul-oAJH^@)Or-WCmAICq@Gb9oM;HbYizEHk<(gpdK^tBLCFU~(0Pv=>@$J@yy ziYL00eJKOxyF@6LF1{Naq~dyxXFAqvOM^e)W+F1c;W`833GT8)j0Ji@|Ipcna-aBF z$}jL@OXBIMm!m6fA$;-9s03$y9$%H8jiTQe@0JJWdeHoYe0~)7p@bcg)*Xl^PyA;< z`>2nGDjLY5p-*T(b=L>yJg|QFXK2Yg4q{DK2SCaY_}(ehU zZ@sLjFT(jcz)Ab_8$^A^Twb2`;pzQg(gz7Y-uHUk3cEtn4A{3qHKG3+E={*)M_*#~J3Mag@RNCM1;W)9}^Jwk*FE@&N`C ziLceN4lJJIqrA);->?qWQgFo(}LpdE_tTo5}Dmq$Mj3^G_&?M|tGtFIZQJei##Z zK1_EznC}yL2;stV$ggbNiF~$JJbfpJ8@@v#=m%kR)#fij&kBGI9pNEWz*z!uh^J5` z!*ig}2LM0F^?*N7FT#N>(RaMv_(Cb~mJ7hn=n~!aaKNSVdX^6JHHRDX<1ZYim?Xwa zIs9ak`^G9j<4$#=moHmn3( zs-AhWGBFyO99K|^~ z)@&;@(Wki3?2zKKZFajQ+d0^7%e9*dQp_S@pw;297UmAMj4!s@E#@?9ZlTFpY`0*4 zMHbOo&wRVZWOk(#TAfzt$s~)}T4=UR)Z2=kdRvY@3t%)mI_sTdE&6;*q2B7yV;%Q$ z9=-0Ych@_xINxb?SaYLA`{{*Ncbftjku=EW>|JOp&K)bFAGWxt$0DW|blXhqV$aF9fw0ZC6&3uP zoC3g|uK?Uxoi2T$&8g2p?ip)yIQ7Maz-HNFOYu@l2qK7{l+K+Hl@fyHhr z%(dt(g=RhH#9pR+Q(?A6Uto0+ROuvCd3=4&#>2`pBs0jxn)u@d=$wS=nYw4#86>#!}B>=U5xy#gz?& zv6%IlsYTfP&Yg=3OYEkiu(p|cK#fVCImlLM$<)L6FNQuiE%riFzTU!x1mM5|<*JY+3G0DH@WoIf}(s2$`HmZfO;6Og;0g5kXH(IStb?% zVJzl+SHxIbfhEFT43x4*l-TTf5m1LS$7U}uIBm9kN7W#VX2|VuM&w(w>?XS_g7I7g z1IK9xG6E<7ofF5m*T`qcadQCS&|%5X>0osjfueRJlMzs9nAJS7?SBm!P{BfgMHHEw zh**G5P-%dv0EeMIOE5*21$Y*aRp>NW*nkB|1zbDUmQQlQ3ZsH#r#{C^crwwg9|*(~ zwTpqvco#Zt%eI;T-TD$3Bv3El#v?Dx0T#R7Y_m96cE*~b8WfgJn-kaprAEFB1t}}; zwB>Obnq!?P2`3XDmU^2V3Sqj5i)3JbeX&CtE@G4v78hheyHI11-8R7rGENUd6+j^j ziNUUSXS9o1pi0Ix;4}*oyx3C`i!OKwA$K2z4AjG1Vx53p1Zb&Q7z_pxPaVnz*0mKv z_p>be?0lO8K(*%RK`cqsgT^OW>^7-QP7t6NO`BCxsAdNP9oSuOD*}0e!&Br;rLf*6 z1e%0rBCbR->W%|Ol{E(>iQYs*U+;7k5$1;>;W=drfK~L+EhgLS7Rw}yUVubsphlob zj@>rNLU5U(37F6wdb2er2SfwZ1L*~9UPY$TQwFKW5)ORe-;HZ;8dys7mWfUv3JP!R zg1ao^Pl>fG6Ri%IK62gJsRO;G@)DkSQDo{YlLN?(^%C<5aNVWc%quArC@vZM3tWjZ zJ%Q5&>(|UFFd5|llf#q(qlpH+H`@@(ktn7j1PmyNyx~>W3Db%LFi-vTDwUmW0T~bI zFk6aj4&+cAj8#hX&hKji66%YJvta7e=UH6Rlq7mob*2*0jJ{({C?^UH$nQcdbkO$# z5f3!U7efgK3c$?=3qpe^N0t-y46=DJD5D_qr5-pQ1wYFTG92~2YQq8)3D$dkjs>Px zrW`r+1*VDCg5m;{B~g*#k&%%|U%+jV4cc@ts3p;X`1GV9HcSW-(1)Y6(q~dE%ng?8 zJc}7-OMCTLBg#}GK$Dqd%Fix_$qR`Fz*XTon({EM4~A44z1_J4x_lNqEQ$b2?h8N4)?lcZ;$Ay4`s zX~|evd>~Z??cF4G&ur3y1{r`@-waDU95lY?8flaf3|_NIlS&-z?{13}b(gc{Y&vRfiOf@Qj6%Gt%SQ9X@jY7x)k`)*Euzuz% zYitSh61%GiW>(+RDZ%J2kZS>D6g5jGfI(gopezg_Nq7OcIk3Lem%!8riA!SjDAZUEPTb;Zi1kVYbXT#R5mNDTkt=*ZB^nd`Ci7<50(s1ue2)ZO| z(O6guV>18+C<8e0TFf5NCTT$})|-RD3}JVGRu6On@q!CHgx~C*m4>qQF2@eXew7Tu z$RLSvl3!WScV2)*D4XD5*~%tVWC*@qV+f3Z7EmY|q9dcD*#b*ql?YExG?JXc0@)T= z1=(TwJpSG6y+N|O{%&S5<=q#C3>cqgyQ$>983~#9%?Q29cMawfqfk)q zTc$Ug&OEavv6HD?@wnh^e!Hp)q z>NPSehF8nUJcqzGGthVe;pUe6<>Yb_weMWJt+)sm5ok7IOFQr-(NF6KSWe+&Vghvl zwQka#P^H2!m{egV5Ywkv*fWJ9TwiDbeuFAKXYu=@f&pdZKp6#4UYO{MP!D84560!F z#a;suoniSpREnT_3iapE+?=A&KbxFHED{X0FV=vLavaPfB+C; zCL7f~(7Bjw01X+J7h_FmD<(-~5IpZ8f~@X+KsK8BO2b_X+MZ0jDOMqvAv}t}Z&o|< zFdCO}XQDb_T+~#p*%y2~=idR-cb)$n+F^)v)^ksm_SiaQX*J~HROM0-c0geR_x>5B z9j+R(dh!!a8=mMSCapqSioQ4Ah&|av^3O=hK&A3E;Hl<397}zyq!#(CXedaR2^QFF zzF$4w`14s;Z&>R&?>Cs7!YW%$b7TfzG8CeTh3yq|)|2e3qH;;`N!;X$suyIbDR<3k z9?JQDUW$~%no8b7A*`uLn#B_il-5qNV2`!g@;roxuz%i5f5EjqGsnTI8%L)kJpLOE zhTt(GJYI7r^{F2ucrvQTQn$t|oKOEgA5ZrDqgdO*=wpDfv!pYJNHWi@g1d9Quf=W-+d&ttNs*FdH;NzMKit{U8 z$wWx6NMT3tiW_Q~0NC(~0v?wHiB|#}g*LA!+$i#jNW%S8UjX-E+mgOghK)6q_>31L zO9&6IW<*zfC2=Tyr691r;@#7V03+I~tu$9*_8>+;ujp!}I@XYk0D0Hg7ck7%T6hu% z=f)a}rqISkDsJj~W$MZH3WnLzt^Ai)B1I0f`ABpFj*xMJ(Yng37I6XybSkfCu$w>> z#|YNomFTVe-lBc`&lT`$bUs9t5~u@9cm z5F54Pj2ucb*kYmT-5Xkf4X=|J)pJO@bmFWATiRDUd*MM3H#Brgfy*`_RDtOK@o5W! z&Vy7EI957~1=A$L3@ZY_f^^8j*Xatvu(WYY0M~S^V%Xn0PeIkf#K8|zpb{VFmM(;7L?5O{bH&AV7 zy=n{pdw1CNqB%FMK-3B%-SZrS*lD+0;K(T)%k?rBi#qQ+oRF`Wt%#0xd5tXq1P}8F zvjbXx+`4!&&G#MUbmZc3IpdW^dAhzc!gV}2woZmGT+w)~(oz5ah=ZFY6 z``f``g9FZ{4gh=vn}B$3K#$Xu?R3cUt%Z4=DSs}ocX1ZW%ZnM{jI$#`{Du~o;f_xE zIxN}6c#=87WS(G!ja;k65m9I<2`_-7&`w)tN=|e`5DsG#PT-oQ2Hi;!B1u+cgY$1L zsSE!Mq^x{fRzv~pGr+-R33ml%K#m1Y=fN(c5s(3UGPxFq%u* zn1pzDLEJU5$lR1OOo-_a*&#}1Du%O1aLeGna0?(nwd- zRSf(%fPtM!7l)|1sn(qjR{A^zh=@j9*b1_n3_`as6tMIDa7x__NMkkuz81%U#*d7Y zz}adz2?{zloI7Mk>M;!t@8`q40C&>A=wQ3YB8B4z&&gN|;g$rc!dY-;9`s${K{%YztOHOC4I99D?iNx|L`i8Ei62P|-l#A*Wd z$Y}y=ikm+7rX!x%x4=yWGm;KO6T6@=)Zzf+MAZulh5AhBg1Dg2i_wd&6{Uc6ft|HZ zcjhF(0S=oPOgbW}7vQ2wRMJ?u@Zz0om?@WHk^yPZ6TCarv(NC5cUK5!FIp^cE~6RLbd|z%foQfBM<(i!L0^;*KT@P-dIozVc_A73I?pPxX9?V zfsnA-jX+4;*_JXe`miL#kl<#cwJ^s9c*0wF|H#SY3Z+V|(dtAgKmS^_>(mVhtgKi6 zfd)a94I4FX(zIFg;0HtWJVT3zTDA&p-6pJUyY`jgh7J+#D<&*mx^U97S5k8CK7IT3 ze|W&aL4$`3O&gXzJY&SjQT!rG?pW)%yn;eo(Rg5<;t3@aU6VMu;ZP{sHG!^RgvY{7 z#K6HDICKMnbf#qS0STu`O*qMeQ2-ZC%mPXqxmm>pMPPx0Eg+~*BA>C?X@$EZeB84X zepSVzK?gL#FZ#%U(tYrL&oD6EnN#5qV;CPK$uLOZLQ@_{Oy;9?kl)t<^B`W>ftk&H z!6*k-)aF8q6ECrNUYGI6WXfU}uW;caVl8Is2w##@2(y^z-Var3hJ$}ucASRwMb;t< z3~;=jL`yDyj#^sb>Pu|JaBvr9scbk(47Gu>iWlr`b{A+K9w8~3nHKPrrwgTnfn9jO zt4wgs2M&MYpa(8zx03)(*5U$>w0xVb2r~fZvqta?6+48g53_X0?VxwK3UKn*W4^Xv zHvvLYr?3`SSQVPx_otXdb03hlilsbmaiVn-2zb zd@(F7z|zid(y<2NZV{aJwCBPF20k&vJm7G_#hYw?m5bfsVsY8fg2P~jSrt@7)(Pk* zTzkO7+fWIZi(M?*0kyH4lMn)l$r`W~=DO(t3rHB&#dwGoKqblIz6%8^EA%XfwTyZ{ z{DgfuAeRkvOgQL((xSK!Zs1vRLH|LEGmA=f6o8crw2a=EflDHmpbxWw8jO+pwn-AB z4z(~o^^Aa%i~ZncTe|yV+aS)x9x?9xJvk4;&1X4U^N3@-0;AzoOz&2@|m-`gw=R-qqp^~wVyXGOtG-yJ^+m{#(Q_cY77?`7& zD%T4b2Ch~LhQS;dlZ5PIaU?T-aX^`Yz#s#F_hFZx$$rd;%tIG#2LM{IYT%U=H-~s! z({xX?y=^%lolXNxCQpi+@npvZHhI zo#^8|BO#@Aa-CAA3G@rB6Ij1-qsGCFTfs(uM}1d)pRmDUkA&q$IwH#>pH5hjuqEN` zgky|m#Q{$|daf8PdjGH}fv;BzuN4tM% z`_h4>MN=0}-8uE_RK=XIIjM6>7Oh-#c+qbwnydMLYK2;^P-_%wC3tfDq1C}Jr5}9n zLM``W(SBMDCa82e1*R!fD!Ga!D-`gWCl=JmWlCOJDO1a}ybd|kt<&mQOTIt6P)q1375I<*$wpl5)} z2mptKnUdtNh@>6%7=H%6PZ5DtNtI zCxgO%kdc9*)Iu-)WKdkCk^70x>NENpBi&@qi% zp@YW}wOXa0z$n0>Q_3_drA7_(_R|2|42RHHxmu}^>l7M4K!jYyk%XPrYBVxGxl#ov zftN@*z7)`VB~*l}j}pEjs?-1k*m=214fFz>Lo*r;fTELWI2yGItr`H<$N_swl|t<& zQz|(|l^UhiPpi`b75(H|xx!B^hbB34fiL}Zek!1=O083CR9ZE(%JJ+c^Hce$v@*F? zs{s5fpc1)S##u%Mcu;AT@PR~~252FNTGU!%B!xn&)B=UoDwPuO0XPSw0dSlUa=B8Y zLyBt^Kp_pFAFu~?3${~hbSfouL8p=F;6FJqjh{y6=O>s^p;Ia3&<_>h2L6))8>w_E zm7i9ys2q}II)DyPgm3o%V`)_ig-WLuoC|NXs8s+UU<%)o08Z0s<#L5e0r2uMp;jxj z03#v{UY-Ef^HZu}V90?Ef|y#ZMhS2Nr^EX|@VEh>KnrDo5`ap^{5qXZt_3~@xIlwd z0~VA@D6Cd0fp0m9RVtNChperGMu6!M8BkiG(P$MwF+K)i=&4k|?!aC!IFyJIEU#1o zL+Hf#ftQ73!2B|W3dgcqqXxua4M1d_%ugnUl^Xa)E(a-q16iw6Xk`kZ8jLz6WLLw( zAdDXrFsRf(NnmtjT{$2P$R`8JLw+bDhM*jV8uS>xUklv^RtDU`NP^)AJOuOwiNM(e zcwMIhiGW-Ktc^qm76YjO{eeQzYd&6q`Td}uz?di+kb{96VCd>#0BJ#R!srmp15yOg z18fT1#26Z+6bJ|v3@N1_NEsL|d~oaFmqreZ2#m$p8y-o4!4Iq;gLa@9rA7>S7+ijJ z0v~A9G`K~pHtjn^#U^wSdNud1iu?4f5_xze_Y>!F|H*f`Kkg>;%cphdDFb)1em3)` zeY%ACmJdEaUvFHc=mq`{6Z*xYzh+U>0`L~g%MvTCC+($V(_-0=hm#ka9;i8S zwLBT>{U331Q44>KSSB-z@DCs&&;_>P{;C-~XJRk@en|P^r99#5>%iOKjy}gxdZE@Z z1%{#bjnEHVcj^c9SJ?+O#;1J}Ck6gK3jFeeYoC~_l-+ZFh1-J;TzdOBs{m&oKws|O zO&{sI2CK^m4=kA2EROIrfPaVK-$@v)`au9j9i^;%+Jo@mQIuTv&d;@Ei(*S;vi-K- zX0(J{@OICYtx;)1i~rRyg?)}2+o_xbh@b~h>OxL(;hbVOyJ`#vDEP+@VHyi?*D-b&7>k z&+guP`<0T)8@JA~aP3d>dS017d~dzm7g)IK?XqWH3OPA9{Pralp88yRRM_YtANRR^ zjfG!7vi_xcTgN|dx_z64-=BTCWywP;ek#4Ks>JpR(k3R(PdWDT;@h=ZIOF&mV_fyS zPI={a0~U@SersUdqQH0FzulaLQG|7neT45V&Oxbr-Z&g-TA5PPB;r+TT-#) zgA+4WHMD4&BD{xWj)?1f9n^!?wDEl#^=U5BXYL9c=}F0 z3%CCD-LDqj{O0#7cbqKzW_ji2jW50ay8qqBSa^2-$MV(2teK&Ar?GHa8*FopEG^X;!$@OvGATJ+7`7c`SYCf?g|#3_vXbnSME8te%{@+EWGG(=aVOl zn{IBpyOo7cEZ;b9VNvp1@7>+O!g)af6*sTyo;r7THw(WJ6=g{e-TuL!ci&^-t!1Sr z4}Q~QS%b=BEUf9$zTJC)qc3!*JjKEvFK}3wwQ99FrSdEb*F7qm`rGR>?_^hAVBw#e z)>~lKUEKXdoQ`QdAow^ua3bw>Y?WvwQiHT@<|zg=dsPL_fAEv$^K=HEScrs_|oAy z36`(6?~x5);V&#(nm(;NH1#vtFcy9;czmxvgU7u0n`|@-kNCdX`f%&O1$E?R7XE2& zQB(6}`R8rq`7GSO3NUuD4po{+i3Y?EL_s~OV{cP!*-O&r?K!m z2bMpwV8$ae7RcwYaJMmw4|EYf<|9sD?`?D^9U+=g5#HXJ23S&2q(A7GC_?x1-ZO zJhSl)#RV4bn!I7{na7sjI;ptC!hy+aHw+js;q9Ll*I2meio`drJiTSMMtPfs!>47e z54;j`QV)tSMzoEZ|Kr8Afy=un`S*{Wuf1aRt>uB=rz;!q^lM$R&gjFo7Ac#v@bnWK zCO!Iaa`|j!D;73&j#nK2vgTS7F8Cp953_SlH*RT5ZnAwObv<_nI==>$$vzRd868zH3)~ zToiw2Ph8eU&-Nj!3-J~>Q-F|XX1}nuWQYG74+T}POUz{6&|rsA|1rZq z)O%3pL45~x9j51?jsyD5J#oVAxYb((;2((`1Jh$xo5(iRlR?FCI^6RhZe|(U4>An` zW4e#Y)@#m$d-yPa;$daD++;V}O=jyvFv2^*x`H0yyFp+>Q8M5&AiM)&(yd!PNq6y|Cczmi#J}{36!*z!a{BHJ8MsnCiqSl}7e&i-K51p6fH?eJHrz#81GTZ?Y&d=I?i z;Pu879HGFMvO4Sic|86QF`f1LQhhl5@elWZT>p4j82Dp+b_T3Ez{Zgi;a!fX$mqz9 zkuj06k#UjnkqMEVq9UWBqN1ZZM#V(MM#V+NMyAr#Ky$M#K$DWbc&6Pjf#zq?HC&q z8yg!J8y}kx+bJ$GE-EfMu47zGTx?uiTzp(YT&MWR_^9~k_>S>0@v-r7@$vBq@tqPP z6QUBL6FMfuB*Z4fCB!ErBy{QoAa;W0J3-Z*pjao2`Y#>l7_frF>rb2nWSHYAc(NPc zB!jm+asb(Qi(Q0yZdQ^V6K9kJvoQ-0Qx!XN3<IdpIkOwImDVo%2t`63P$Xm(B zsqz%tl&>guD^4grRGg}P+V2y^r;5+z=ha^;zE}OAxU9dbx~cd}c}rfqO_%P2Qs=$! z!phRw3m30>b=QnnG+Mv7Zrz9fe)2ilapXcX6}^Tth|o$-r*X8uO4f0yn#)_Du+*^CvJuZ+sN zcDpid*mKJ}M6?M@e}2{K7uRms_|mT3?`dk)4hrtvqxX>Y8;*UjO53FAL!sS!e1GXm z<$;4Leaq0+VI31X_v=4ka9aBC5u-*wnwf3M$#YD6yzHs9o40M>ck<@G%BX#ymjYvWg3t5^4Snl5U8%@D8&1uE6$v$G!Tr}Hmg|L8-# zYx!&HJkVL=9~Z7_RQ^_1b6V|we*S%WH|wWMtCOPjFTc^pKUmo}C0Z){;=gd;&sp}~Hw1EpU`}#S%mf!Gq=!$~+ zOlnZOLG28`Cgn3H_f<~s6%aISaEL}ze!9K7dkcAyLD^KLn4B0=ud`Y{`DD8(-SwBY$~wvt zl~Ge$B@d{rN`TIV=^h$1d06dWfF({>7qa?k%ij<6p9VHYG#-K#OQX~J)$?y&t4Zyq zbpq?w4p0Ru>(_t4uc5q=s&Q7&^Xlmu@Nj$4q+~5_jx+`{2>zCoWu+N$lPQ`TbF|W!n7Z&mTE{qE5ZG zoxAi-$#`V+qeio3?)*(q7EY`9zT&XC^ci`qsCcJ&wJ&KofZ2J9{RLi!$yyczVXN1%JPEoU!AKPQfO-) zY<&EQm$#L@y}Mzf2SfVw9h8dv|3umA2Tq+nd-d1rcE>zt@#5AUA~tN>S#jvZr{|ta zT(UHBUdTtMj#my!9rcJ-7ZBJc;_{V3TYR@3y?Q@0KP|WT@R5@res<>jyOm&HduYlz z)s$piGnJ;^CO1ki4v^UV4qdi z2HR~djl6DsB5I(re66mlGCEz_u`Z&XLD?dpML_u+)s!VoY6U&HNFAZ>0-V;^uYB)A&f4XlG_9>JuT+!Yi!an^cJIZ8FsuY79b=Kc-+2B^xP(rj5hkr0ldo&#`gR&fovSL}t8AtWs8geW7J}M{Th<_>tL3xc)*4FhYALt{ zmIcosGM%ZqN?T~-dR_GtvlWi7Ibbai<3qRQTgYHWViVh_Pr5AlB<gvFp{`}K zW_Rpm6St3>Q}Fa3`nngdUyZz*x^nU8=~r~G#%>z&Xh*}IJuUn0el4f{?60Og@Lg>A z#PF9UY)y~U-)cBJ>e#jxgWvBmU}2-Yu0OnW_N8tW&Dyov+yC6eFQ-48^+Vd3I@{L7 zyi^eUY2N0Jwr=B3%^dsE#l$&g`wY#qviIlAJ+kSY#vwzt-Kjga->!Xku3YVM>bI|Q zLYwWWuPAUXz5DEhb<;8)&io_tjfdq=&hP$2ms7{r86HiD-SgrLJ%5TlKBoVyUMJov zo-t+X0L{=>zg{)z__MPnFZ5gV;m=o+93f3pn)JH$^Xi+m{ygyA&kX|CXD(k^|F4{* zHwKlIoNwLq)X9V?eV4o`yR+k=^kw z1W(-@^T(_fKbN*Y{dUrh`hQ$#d0Jk4>Bn`3E|&Do+w-0)j0P-SxZw(x$k4 z_ivZ3tKxO)gLzBl{xE*Qs-HWI?RYS`|BOFgd}2h@%tw+J2DdnWYux46CJlJuOwcm4X_Yx#{! zmd;w+Z(i4pTiUkm@W%O>UoE=3<%6ajLsM$)I&*gXoCdXm%VzJpy3*F{>9D|IPj5Rj z@WP`nU%jO5zvh+b20xDfVzBA?8)w3QI8vzIwsLD!n^_-?eyFpqdDLFA4{EM$?&qJq zr{M94lizy2+rUqBublq;*xTWLgMPlca7v%6)7L$HK$m&_?a&sje@SRLB7ei6-){K7 z`CGefn{8p*@WQ?ye*N-}Iyu{}H$B?hHSLSF$EFPY<(b1P=bjndb;%M-{o`dXt_pj7 zm-g3yi?tuWb9eE6#&9eYp48WoP2@_wx zv`z9WD@uBvJ5le0Wx;wTIuJTYuvnlR<^_r7GLF383tL#4WX!0YY>dY@c{ot}Q^{2fvW6@oI*N7k9IR8{m<-A7g z>>E4n9k`@0>)WM<#7f7Q<^gp8Dhwt4ZPO`ireY4GE%jk~gBD=U9}nC!`$c67^p zw?~QXp~nK3z1HaXdmpzLn6M)t{r&dKhn1~*UVfwBxXeDQ)7m|8>-?hBX^Q>J3VPjs zKiTmh@QH>)AVFiyv#f_^S~y z5wp|xKfI=E=+p(xw!hubCcpK|=2u=I`}NtQ`(2xY9_?dnR6OCSXIC#c@?euovp)E% zR@|8S4SxA6WoKzlNbaTbKaWql)^OxTSM!Ta6TdHS^YzXtAB}i9-tSn{yuc@)+5YCG zS3lHVSvI{^kGro1ZQgPAyA2^Tj*OG#9zVY4+;gYCUU+`~hTJ{9GG#qie=_@gtAf$t zZy!ES_VUJsPdfhi@vjm6#x8#5`XgnZzc6du;NrENwi)D)PI4`q_oQ-huc1dY(+Va| zzW&*#Wv^|X+U4W*rMioUKlwWP#0SRA(`NrCpLwqTgST3LP`3Jfm(kP9H0jT+y8PQ{ z+rD#0KI{M5`Um^{w6EXhh-&+qV9l3jAAjHP&f_P>L@e5*sO48HXxNy$10EZb6x-#`kH21j zvGv?xf4#7+plN^kfztP$3tU;W{l_;CHuGD(qURgW#qK+Ga8C19xi_;OKBD|6TmJ6N z3i)beVz2yqTilh_-dolM{M0kJ#s1k z=t{=v&73y<#EDE1Z0+3l#FrW0pO|$q;`5)HcBK7> z789Udn8i^5^F8 z3$v2#uRs6ZjE2`bWi8)%I)2R7)5jk=P#o4giuOBZPsxj07@ht2Zu9s*Uif(9j3rS@ z#fr)?FaNw};OjGVX&Z0fnW~stcKu9_VRhEVqq!fI-f8u2_Bs2>%-w6dZThNwYQckl zjC|q!zP%>?TxV`tL(^K_ch0NR_nsL#JZDJJ50AJ$m>sepzfFf{a&MfA?lb;OUilko zU%dEP^Ifvv#s13Lu#b+_UHe1%)yKEp**A6L;SXNbl-K{@AyfXCX5C&{`_W&MjXHfs zd7dk~Y1F~X>)&0my^Goz7y0e`w=?&YY<}k2yDOg3)Jwko#ojJ&Z4ElTHTVC-yl#x?)WBs)?gcWqou(?B~QhcDUjAS+{1? z-8!l6${FR)t{T|w zefR6_p3IuD@aYwor`St(JTYvp*gs0z+%ok!(+fXFg}i(1&&dbBI<@H1H?qIf<|lst zGofp}uCrBNempmE_tdW*ElTJ+JE+#ny-)RfW$>0(izm#{G`alw+%p+|%fD>($xB_1 zG+KM&)W(}LKe<@$|LM8`7k3BGRr-H?W7B|;79R{avGUROmZE9LW;#!W~y$L_T4G5zabuOx=;fAZ_dXNUdq z*tMs>8+p0?hi^^1KBxPai=I0^qDkaU=i5`h|0Fu{=?0zm%eRGejT<`d+tqV=?0#k0 zlfUkNuFd=JewTdq;?5000h!kqzqRk?qn!h{wEb#by)Wv&`ReZPufB1k->D$y@PJR| zH_AEpbBmYEF^{A)tM{zfkBhmqS9Ye(D@Sj2xng~1W}i2EZMdA6I%G_@zx?x5ueBZV zUHu{L>bWt zmgC~9(WFFjd&$hpo>i&FT!G{;8iv7P% z75#Vi`J?wa`-U;c7r*=Ptf@Pnj-In?c3x_|>ysbb@xm6fCAvq%rb5k{bo-j+rWv2? zxqG*6X`27x>BTd9%kMleBhG02G2E%y^Zn2t7x%oqbb~5>XUl|o{lZsmc=7g-E@dAc zP^}A}5j5(L_xgR;?Sbi6rrdhy`!5^=mp*r0>^JWE`TR#GGrRA9?ZcgcmwPNewz2gx zt@_WoQ6UE}F8cAr+m%C$%2N82{Cel(?L-!U#)|(ox7^EA$zV_<9nm6ZKF9!V8?Ay8oFAA16KVLkmPus;eEe-r;bR0TsZ_5!6{JP|| zw{MhW3mt=krePu?gN9T8_AAHu?;J82Sr|ufw>VXBzCfE5c zv*L99CN00U=Kr$fM&;Lm^HwZ5u;t42x%;!PJ@{9Txkq1{dgqPBd5%|Jee9L>H|Is} zS#@Ez`LRAHzx?WpF(+@l_Sn`7b#Lsg6TarDyiJ{ZO}hF)-t!Ay>riiJ|CbJ?9ro1gz|=f+ZP#i8*((EhDGCh1H0OSZcwLeF-he=pwe3%a*x@2npKC%$Vc zZ&KyQqwUSF=_T8bI9}JOIBoOF)w$YjO=!Eg?e*$g5L0NQF^jdb7Vz5BH0%`$OaEzt|-`@V5M;BXjC>4f`@HWY*I=d)9BW-F^|7 z@Zx;@_NdCk&-~SL@J{E#)e9rIGjqZloICQkQ1;v754NaVNO5G?#T?07@2;L{>i)Dq zw&J3=ux95Eyx4N0%eTMhS1l9KW@^hVYh(L&`HBhQFp%d4)SbjaawXbE( zq0ifHT$E7t+1bg{?^NxUQ?WreJdytWz0;w=c~lqLo!e8s}A)Ux%si`KWA^{YF@p!rOC6`r;g+rIj&eE)dKeS z{z?ljE{kcmVf4g{%KZ=T3|e`($iv3RcFj0bG-ze%+nrjR(Dq$^aYs+@_jMP?k7V3i4zM)+2<~K9+G>H zETVY$fkTHHC_ju%Hl0uo?^F5xsohd*nYVLOs+DduspZH=V;9Wan&97YGtZH@^Tpk{d%ifl z_(i89=VzquJFzyRRjPSoYQ2pWUQD)@?YFnpO>>zhxnqrqyPvGRvZKDGaIVR(5@$6o z@b%4`_0zVO4UuUtbuL^vvB$x!FXnEzSv6b3W+~QacK$^BaoNvBd|X&J@A1abT?-`| zT;WfS&2b-jbYocVgOyhAw)~fS_0F9a<9f~syAnG(NKj|i#x z$vQyRcI~Z3*SFF0H7Y88B?entK3y8UB0+y={_&cwQ{;>;CVg-JK^!9O=|Mms;%5blo-L{%UQ}o2i@jiH4Q% z*|+8j-PW(vi1G`)y0anqmhL@!+1d5Tpj@^CrE~o}xom=_Q8s#hNStco!GBiR=ROYU zxnlh6Ly67y>{ytn`7pNFsdtLPuLthATB3X1J#t^y^>rf`M0*7fj038jyx(%j;8Tx| z9&S**@0f0(IH!A|5I;g5n-;dKFeNh>stDB=ht^n-zwF{G`Dv0^QEIl z_v(`WMKNQS$lGI^-cU`tLeED@J>thQDp_u19j;d*58iZ7Xa_ynf-u>>ayb9bQ~7YDbCPm)^ITvhlU}{=knvnzya8 z_u`bB7j-iiUwUDv{v&^%FVW4`%?oP3W!$uKNsSw<3o2xr#F8z|N z^rvab_omhF)L?Xr3;B<&XkL5V$fa=$|En;2;Sz4e(0>ZA!d)R%3|k zaccF-p}mVQOnkF&k!x-9evvhP*KfUVL!BC1$J$e7Ui)_F*RdQuAGZJR*y1J6_HCIp zPJ1k}-L37m`d=m%H{}ic+*VL`b)G!#UO8&tExT{Y+z)I1O-SgRFZaH-&GJP)JUrZ% z{r$%N(sT6uo@-H&Ee_6X^7Yr&vgg8ozueXOX1xL%2hIO-?E35Ei@%=TDc0WDBX^5Y z`3vMXD1-5H|Y|DI^QqRFN*39X8@+J16#m*OL9-ZfmxQ<V95z}6juP)qPtVe9v&GouQ#BuFc@7Gnf z?l`$RJumTPd)%&0MB%z8(=8oxs;DQW+k=G9>8^3QSKcA@mxkwCk!Ho@hV1;aG>g`@ zmE2JtDRLs&m*#6TN_;ft+OJwZW+`t&i~RYjzf?Wi&?Ns+-j=Sn3jHkiv`FG#gXSJio)npSy!T$Rw%Jt->+TJctx4)vt+t1p?YpC{B>Z~R{h*Dj8&E{$3-n>1qDEBsQeAM`mTrU#Y`E>^O4Re%f!^oz-5ibYCte>uGHDhw++nZW-9MWNv zqG8U>Wp53PK43B}?;rZ;lB(?`*U(E%zdYXe@%P#muct)JpE7krsafN5zw;kIy+m93 z=KE6XbH!CI+^Oo9UG5#ZKduzUrIgc!KmE1udgoTII`4zn`Fy7S zi>oy2cT;drGEQnbFO<5D(`sd-*bO+|CzHqSH@1yS(E&gVr8|L z#C*4kCG{u1mm7R~#Ngu%XPZ(c7pqY4!}zyR^*XeCJEvRy+m}YTUoYFf z|J-BWoYBi(IbF>YJESHTT7RtA>o=VmvGWJ-wS5y~-MYD*zu5P((NTRC$GwejyydKS zew`=v-W<3w`cR9?5s96DKHA%&w{uHuyQ|L&9#}fUdi0K_P5t68j^%k`x={UB%hay3 zj@~nF*swES@%>GYC7WZmZ5y0_+lBTk)Ul5)SA9LH;nJn2Ud^`XGzTZmTi3A5rKiP9 z{9xxRo@-mNdGy9|4I*xR+co1?fqTc+e8_h&_uJOnPXDNy|9I8eb(`yl)EHEI*wU{P z>fMSwv^}KD($L8%Ct831a(m|d@y~B&Pn~e4Pkhb0KW}^YE#K~&v3|tsMn|NUK}YkJ zDebtq-J0{FHrI<9!v8AY*jCAw%YDTpNHJ|_684FmANkEQ?)IsH<;Qhu(k*HCS^EZg zcku$dK=*g~OWShv`T6X^jNyIumk(<9THiPPRF6J3!@g`itE;E{)#XOL#If&2-?fxF zy}Qv)asgXA=ZNb=7v(#XDlc)NaQ&mf(e*F3X{}d(FLS!T!lK+3GU18iV%4^VR*zZL zL>imxWj}U4=Hh98)kt=2Y{2!;wP#;FD?@`fZCpzt+Kg0RewTEl zq_pqZExlVDS#~#ZXVkFSmCBF&+A#m<0xyym)hKc^N7Ya4{LgNyqIKoVH|!qyaNVV` zDV_sErj5;Mt2Sr&_~mm_x_&f2X%)L9&#Lc3!(TP2yJEljLE`p4$+Ma!mu>Yt&q?m_ zq-A^lK2YV=f>*EA4?BN$tnAb1!RyC$2Obz$vD%Q2%hjcN&X^PbW-52ZGcI}N2*=LU zcLR6k-MZe8y}SEWDm~wH$>Q@8{ zTie~&vTgFx7nlFN@aXBaB49%_zrv_ho6dd(?@NwDl&YOxA zm~pV>v^xm}f46))akBSP%!+~i#jz33hDFaUu=B5XQzkhyP3BKJ_g8Cre(P$VJWtI& z#~v5!x=monnd98aDxp`8f7;P2rc%Km%U|bye*WS-U2W8@QIl@B7yOrZ?V4{Z?%nR2-W*4nZdcQh$ao_BGC7-T;FgMk3rq$s^bp^ZY45>N%R3TrP zhevK%?FmhLw`j$M+l#*%a;uW)>a(W{;tOitUNkpVyQAGv*X*3h&foo> zH^m%v>~O`!eY&{M6pwp2{>F!2H-=XHSo}z>3Trw&nwxWgI(pNS<>Du)g56Qii`eE* zj{I_|x1&$**k;8GC6&56s^qti%}49T9G=vAy6L}hpjpG-30Jm6vGaxZY>7I&u*~f68V9GoucLjxxkUb(+OgY* zB>s*qv#UkW+sox|W@wF)CC9vu>sx!8J=EJe`B{s}&o^DQo;(z^VN;HNtA

EFeKKJ91`UkDezI`oJ@^HN}W6#~x?@t)HWzeec!#d{=8B^(ZuA7g_ zUCNh`a=4AQ@brA2eqEm1^X&<7|Br)upNJly-ZLpkzWn;QYRAoe$KU$iWNfv!!83lh zQGb7P?3?@2w>(|HZ%r6@ym#c`t#9O)rhV;P>F|<0^nB=Pecw-r@3Hva17o9l@qI@h ze)9Frio7GfE-v(PZmY|OB2s(Xw+gyls5|~mg#CQ!ecKk)-y8OCS5Lp~TMIp#Tsf)W zfgGCl)d!m={JnVfgXl4>S3M55TYgTT)Z_I(CtiL}-O)5LbX3BzeDl@$i|u_jKDO|c z-Ol;tcDnZr>(0)ouU<+ zi*(zyVRd%t?=PZTA-5MBIwn;vI-_*RxZf+b&TJ;^?Yq+AyGdF(>hI%Cmu%_WCVqQp z!TPn|k1klX+QM&Fy}cGJo3+x|>|l<_iM>}&Ovrot@UPl^mkeU(doM8!nl$aux8{*= zLnBV?3A%LTV{o4*1HUf*=TnQehj#Uy@=1T<@EcFj;&*ElT(i08;iMXcMh&WTt6%J* z<142xSSLOE>+YrC(eo$#qu&+uy!N?0KN??4Y0+ua?Oxk<^tB0&zg@jK_FG&&qp*I# z!sCmb*g5#5>!&?Rymhv)Cq2JBs!@f%*L2x2dwEQgO*178SG1j>|NN-S_BxXrUYfr} zdd_igbHRN@ieI*>m7?Ft!qJU9Q(Yx{=b83mX_PQd&AQocK&>DNq_R=S0!8YxU%)ly=o1&rIa7DqnNkC z^>;J6#$9g^ek0y?)m`S%h}qrZNB8TW?ez549TEn1t2*=ZkjoKAj-8TkzSFnAV7p(s z@AUMWgNFIDU+#4HnBZoenh#g)EguxsbHmh8wF>oZ8RU4Cps_V8II{hElc4w4n?b$` z?0o%?P4|777yPRF#icc!&4Mca9?>aj^oWpwlbSY`Bo9g&w|2(Wgw#|0xICBJYpeX1 zLw#B+e70Uc!OLx8GqgBy=d0g zZ6|7P$n9F>zZCbYQ*HmtFWo*gZy)iW{qwYJ_v!TkZFF7@h&FxN?{B*; zr|ZD6;BxGGgyJ{yB*gA)5m|Q9sQX(+Y?ycD>8vZiUcKnGqqnGA{={6nTSZry+1Oex zUOam7;N|aB_X>~wBJB`S?Q*p<4Ilqr+G+Oitt)Qn1}9IQ@ICzQ@rKX0hj$f-+MgN{ z)8kw2t8c?gxjSqXbn$#?)llCn_3`M<`Dcy@n^No5x9$De^$)q)CpFz%Pds^|rC2R% zl<2C;k|QFo@_vc-PZmgKRemw8Mo7zTVXxaP()2!{9em))h9=Vsb!%@e?mzVLakK1C zieF3|uzH&&qFkL1`irU4c3v?Q)-)SDvGUD-WrdnODcd77siZ$*M$gaf_WW4YsrXJ= z>oXM&EF1W~rsqDp-eULqe*|w8=7Jk%d$S88o38FK{mDUf4Z|fe&C>8qMiK<9l!Bm(}Lv{-&#FML(gt+a&Opqo9OfL50$Q} z!*cvAl(=~I@4JgXytRD_ecP_>k9)UP9Vi*r$iF1K-d{t;o>T z`MS=#9Q~m4i`OTImYUVqnNX#x|Iy09@eB8@e6sIT!=E+A#vQmbbw=KUNhgYzt~vK; zlLFZ`EG*-_{-jOKjW3$)+Lov4v`q~P?#?zpw_@}AneES2^p`Q6?OFWvo(NILx2clG z@t>>IO5XEC|Da%(a)ZlmX}^G7Pm%ZUTCTty@)uJzkSF5S7i;{H)(w;tZEkhQE>9TdENX8`xYGj(0W?Fu_Ky|sn+D& zs1>E^Y|#}fd-GbZtDV2+{v{G@opyC@nb+AjdSmkUKC@=4qD_qud7Y2Si;pID-#6jZ zb=Td-*-kazeS1pLyTg-;_`|X-PMmRY@jWTMUZ(uCVukm;pLllUKc8YsUcC0NZ+%S3 zzSWBTyma?{!_9&=?_bSrIIv!Wn4^NTg=Pqw4qKMbJ>3(W?b!9HM^|rdbGdc0xWi_5 ziy2khuB$w~P6>g_CU3&Lx!oJV1s~R+)zwYiB zd*w)H`KE`X2Gz6pN9p_QnH1Bt*5lB5-iKvkCn&@3ME5xwC%D_%*6((eMk|V3T<~S| z;FE&Rz3zS&>CY>YnvOYKF{bFly@zJ44m&s58IroCBE24{#f9Xx-=bo=)O>gLaGr`a zZZ1*mXf>|T#4U~+$F6PZK6yrO<@xj55?{C0&3)54zpSJ+zQ^z5-QH_^&8-&KtMHHV zSMpZ>J^WSVv{46ppSU%@w|d&PNxx5a{#o5w?o$odhxo`1UHeQvXr0*j@bEoN{*y)2 zzwokl^wTRvFG|_@YxfoRp=(^9MXRpXT-$BM@yo+P|MKRTQrn*5eijqf%A?P3 z4pH@f@g{!z5YLbEYVo<84}v<4@3h4EvU$!DhPruvURpZsnRxTz!_T_RFQ>_N_2;yS zWhD<(se>eyK1AA2wVHJ0Lc#bsR~9rSe{?Bc^KQH1t)>*~7}@GTr&RxrCr$Eso|=u7Z@p^bqZ|g_C3XC3c&SdSk0y2EF7@r)|8i1i?slmzoabTJosatd{pv}n?k;aqcM12V zyH7B=2d5(y5~`9bA%e(%0%f?YfJo4voZ=c3BnT-ZC{eU$c>NqX1Y%OMfSiq=t#WWf zVI{FZQkQff^%Vrcpf}o&!7EP=b^d2L9m=8Nyp&&!k{2?upk#HEJ0Qn9CS*-2~tXN!Se(f z3735ksn{S0lLV=P$f@6C?uAKBhGjuTB611J3k!!w2Fu8{1qD?QG$(sLC@3e{u4;ms zWK>dLglu;uQug5uzuQPX22Larab%Q7f+c+M2U3|uO0EaoNXF-aRKYF7tA|Vw)X7tk zY-d<-buwnCpiyvHQV^uEAZJjm9OQg2Q?ch9uoA49C`AL5SYmNLIjd9 zY4)@ul|3jplI(CUlV_isLSj$LjQJS2m6l)31f}k$*6X(xIb|7SfJiob-|Zn!oms zEehJMVbM@})hox0-q$qMSyuj49)a?R=2 zwa8=om5>}47;lqBe0mn~(In1lSp<&5|DwDc`NuDT@jb+uwfAHZCna+-Z7&Ikuc#8r zwIcobr8fB|OZ$rB0^{*yKd|i$j4up`_lpe8*jJ^<82mos7Z-`M{Z^isjUO172gL7G z3*|_GjkKjq7I8&D{H`oCV;ck82gU>2cd!0uK7s86;|&AG_mTE&pG!!bZI`b`DA$;n zUjoMoj5i`Vw!LF&hGsm^`96unPsH$)2{>L{Ql#Q5x+dF6PnQ`aK8q| zTa$Kd{ekg$B;JxAge-ya$;6qp-$3GQK1J(>as~O0bg51pSP~;}yhEf-X5+mf@yyom zA@M5YAHS@Y|JmfB60qC%`g1^WXB~iZXt0g`NuDTasCfSb<(0RPKsu6xiX1= zA~Ci<1IMWv(7s;%P%gcCP5J;z;&3_^{}9;k7wN~|UjpM_Nj$UdI7j0AYd60Hwy#a% zinJ(uFcxLnbltugZB%axP4v^RX%#Pb0 z60e%ceBwx)e@*0Tpj<-j<3>CAY&+}J3TE1BLk?R%1ao(YT(Cwca~@&vSBM&kKs-@y3hfH?oT zDscHt`m@)Q_9Rh(CJ(g?<>r#-J6ob!hh`i@{{4vU*P$fNUUT_l%+}BK4#{}`6tY3c zqe(}08oy+bx6^z^yN&7d)spu7Vx*6{9_eOr1C4Jc^C_0rlH&@|NB$v&#EVk1W6V>Y z#XKCE^znUkTz9W@%c%LjfzM9|jTdN>`RCacWc}>5lz;zXueZ}kd$#}iF%J^6s^NKz4ot2l< z`(>4PyZ-mQ_R9aBH(dSS^ZNf|{aU)cSrF$zdZ+eoR z58Q8yNW03k?ceP}GrmXp&vfi_OJKYwiL>uxM|=2sQI?qfT-cW!k1}*zHJJ~a2YcjG z;%9U|q#ygNa)IklLX~)(Z80SB0v+wP|IRE@- zb6y)T&KeSD`z0`5fUKAA!!M?G*)ly2?DZ+DJboQ>Zb{#d4l*9Uc<7_5Wx841P2+gK ztN$W}G1Gc-8IL@@9n$-2NS;hPZDEf*#IfmlEy-v0d@_?bzo^I~``!*bep)&{pJ#FQ z$oDhRJf81T75u!HL>xFT$>7ZABOjYS9}j)>#ijdJr$5g-e!a=W>~+2rd7nyeMYflW z%a*|Psc5`-=RdEX{O3FgZ7e5o_TJZ##Msw?@c|^x_F-VWFNw3)-N5)iB+kB%0^>;} zE+PN;B`|I$E|(UC@uwtKAd~o863c8py#<-Cw>ycm*L8D`(2RBMBIB@m-X`%wxGWa1IJrqYv-#%=h|Bu@`F#feyk*a~!1xvtXX6CMw`LLNKj&oDerFbO{&|>Ldw&13 z*YCjf^7CiUhrqZZi};Q##^0Vr{B9Qe=Ux`^`&q8!#@~}&%zkDGjMpX`&W>GRJd(sq^E-nq)ds-h-ISQ+_`DeHADoXN?b&-T-+ml1 znKl`yephkHp#M_6DSV2|DI>GEaUVGPC{7 zUNg=1^zV6g++4HLJF?F#>~rh4-@k|RnYZ*?KK&U^J|pi>@6YDMzCYM2gW+I$p5K0c ziJ%9RZCiTu|NZ}b_Xx5@y1eOI;-+15)41_Ra9Tu6H;DfkEHC-Ps$)a?JlOW|&l~o2 zS_k?+{+MPK=YRgmEZ#JWc%Lld30cIKXA!q$5&tiX_^mABud|4M%_2_jpONYIaxrQ5 z--=Evb4l*C$L=!4vD*Sh$Lr&{w3{!Ho81kG9x{AjblMl>MkwUwH|bxKPSFEMQNL(< zhpA|KE2gxD14%0q=kF&??&~*dP(N}bpn;?wD5=#qIwqdK+a5nI--;Axj2RrQ?LTOs zHa;y#$}*BWHjzF9hmo!$$xPG2{Cd-GiX{YDvMAKQEwlvL z+aBf}ouI{Cp`G+YK3hN69p=5r!X7a1?+I<-zk$iZ#?xuim|;Kvf=d>bm&Zb@`$M~s zwF6+@iR?ob4}|UQ$WkrLE0MLxc4YA&*k6S`1m_;}n!}fM$#Tb}(jDwa&(#B<cmz(YnZnnb8TQ=+5=kM3tAKn zZALa~VBXaaS``EBMYhDkym|n%m_K1A;CL$Hpbf*2`CoVjw09!=k!_PFJa z9q@e79)?yPfmS6$>yJUJk0bvJEl+_K{fB%CT7DW@J`XLq2(7#XE#d$0 zAFw~9SD;l_p=H;g-Y_Ap}%Qn@8{N_Akf}LZcZ84-xdOG&kpS&_Ye$h?;!V9474*0+7}M($_eex z4b6$5-N>E@m>1@U_8@x;!n{Zf?L+n#fq6+WXs$T4uq3oh0xjhK&`lP$|3zh>yRWoUI3Xn9p=MKx%x3|d(oTE+iiEMR-|wV>7f37P?UO|(GS>F@pt;jB9cW>BU(Fa`;ko= zIG(C6w3t7Ege>g)QHw0p!n_#S9tZPIWZe*$Hz2Eq!@LgJG709D{E6)W^A$~l_86hL z+0fQ`(7Hru#bRjP66E#JMr7$unD^PBMZ2MO`=D(Hpe4!BZe;HXm{*^K)*)-o!n^_5 zf^0vJ+FylMUxU^mJFmmM{|2=E9<=yAw9gC8y@!?{yFS3Y{VTK^S@8qrO~0X){DqnU z&o@^oXjK_#U0G<66k1Ug+8&8q9omhoY6SDbCeXIl&@N;jva}s+uT(*+J3}kFLUY}q zt!ij>cW525tQX9ykxji}-WCI`kA>C_fc6iB_QXMJ21DzSjmW~Gu)S#*v}!c8a1yk2 zGBh_8+BFT@lmIQA39Ukw&VqR#vUM)ZTN9yO$hJi=?>9q>mqXi;H7jA>jjUOP^2n;y zFz-b6Z-9BrMriFOXvt=18?t&Q%!_tGdyp0Ug);%K4_0L5ZkX5XftKxswje9_!Mp?6 zupj2-2cS&{p(S=`3$o)7%o`3PAAxpWg!UsVFT=d)KD6~AwDb|Q0$GKuL$)FdAH(rv zPoR~^`WG;7LiWFed8-fFkF0nH^G0MRvXH-kD&YB~L^dKjkp0NA4{$sUvKiThEc^)j zE0FcbR%AD_kiT#&VEg3AT4Xb_6WNa}{S3!fAsdiw$R1?T7dV~*S&M8!wj+Cxg?>1` z3|WP&N46k4k$uSGuW)?|WG%7@*^cZ%7Jh@{%aGN`24pL;3)zn>`3~2oMAjjjksZih zWYG^ez8qPDto;ewJCOazvR|;h2HAw{K=vVvf5Y(<$QEP=vIm)6slk3el+ZH?nH9(y zWCOAV*@5gq=J*gUsbb>qk}~Ymg1d7Gwvq2bs%-){m?})*u^@EyxaJ4>Fe< ztshx|tU)#)8|nG2?DforY%K`aXQ~P9K(_EPK-Ft0(j zA{$1+_TEv@l6YthvIW^S8n*Y1ffnhZ)yRhNFfaWF+A|qiGzHo<6 z+b%;pkv+&VdTlU!ek+mv$Vz&xGHb6v_T7N%7v6*xBP(vfyc$`HY(aJ+`;aB{+GsXk zC9>r%T)*Q9v>VxnEPo2ytB{?@+Gnu60ojHud=A@7kd??LWGk{0*@vv~!u6?<&B!)n zSt{&rL{@%;c^k4HS^5dKH;S@>&z}}#8?w9rZ0{@!Eh-1?E)UIBfR-Y=r7*9m1g)_J6yj6S%IuZ)+3vd?Z_@w$CDtNke$dLWJxp}PmV0oz`PW@ zFU)I^Ilkagz|Z3fWF4}K)^1?04_ag^vIkkzAFfY{tVgyYyOD(h;COOmEwUNeiR?#~ z4us>Yk@d)CWE-*z*@rCB!u83JRmeJI6S582iR?ud4ub2KA}f)#$VOx-hkhN1`do!{N**_h&*UyAj&4re%gtjC5knO8sdq1*#4b1D2ZOC3^@mknlhO9x> zBioRj$ObDM-;8WWb|L$agE2?^m%Cj;BI4-GO=gU1-OBXdklV0nDqA^~hFaC$a}w;(_DK zk+sMMWE-**S^W@>uS2#xhIu=(8`*~}dII}Pk(J0AWam@ZU-%5#^9h>!3@t&HBkRAw z_9kQ}vIkk{hy5kU+HWv#M%Mp;c^j?R%bveZWP5OS@OjLGEXoG+8f1AW%$t#I$R1=r zvQ!AiQy{yMbvaP`FlZmLG92dh$U<5Zh3zjnvM4X?uR=B;yOE_4u)hIWQxN8L$VOxf zvK`rlY$*)Kw;?-`J;;7!Q4u(vy(qN47_<{vS{&vz$R1=-N!Z?mY(af462DA^^T@&WzwV*|{p&iJEIxsJ;3vEG` z)rWZ{vKm>^5VqGMn~|lBV0(FEXbrL*S>6P;S0Q_w!o08e%hY(};t8=J%NxE9b} zWL*@@`;nzBVP1u7Y7O(UHqdf4w7564un)8wSzwBG=&m;$Xqwjg_v<9D;P z**yd1oknQiENJO$Xf?7C*@LW`2m2e5?Z{qaQzGo|LiQqa^I>}hvKraF0JirbtCzsM z5m~ep<}E9sWvijNHPEsoXg{)SJ_PS;i&nwyks>RQ)yO(zBeDhAj_gAA zB6F+Z{KUvIWF@i&S&wW&wjw)_UC16}KeA{IoWB%VfviT>Asdm+$W~+rvK!flEL;oc zD?yectB|$G24pj`4cUq8LG~ky$nCiJh5h^?MOGlIk#)#MWDBw#*@f&y=91w2M930k zIkE~_i)=tPBioRj$R1=rvS=NgzZ6-4tVY%$8<8!@c4QZ_7nvjXI0-!dVr2dvD1mte zvI<#)tVcE>Tag{eZe$;_kk+qc&tD0$99e~|MK&Otk*&zAekNPL3+27Y9KE*)YcEEY zAj^>z$Vy}tvKm=~tVPx#>yb^!R%8dV6WN9AM)o25kwu%}^HGW{M^+-Mk+sMMWHYi2 z*@^5y_9KfnqxmB%kd??9WIeJ0*^F#Kwj(=`-N+tfKQd>9+b2erAj^>z$ZBK_vL4xh zY(};rJCWVUK4c-irw04}6(LKJ<;W^zEwTaGjBG<@_xND*@u0jHncE7Fj}TdeEJl_f zOOa*Ba%2Uv3R#P+LpCCtkgdozWGAu<*^BH$=C;B8CqkAW%aIkxN@NwX23e16LN+7Y zke$dLWIwWKJKSC=vI1F+tV1>;TafL@E@Uq_Zmr zg!7dk%aK*cT4V#V8QF&HMD`&2kwv@Ue5J?=WHqu5*@$dGwj;Zcy~vym&QFXiLslYd zkoCwWWGk`**^TT&=60j`B1@6w$Vy~2vKCp7Y(%yoTaoR^PGk?V7uk<2+=I3sS&A%2 zRwApBwa9v86S5iEf^0>0AUlyg$bMweUby{IWI3`DS&ghk)*~B{&B#_{JF*kmjqFAC zBMbMz?G+$urWHquDS&wW&wjw)_-N-&+iGm%aPg5kyxIi_4An} z$mTw9{h}CXAFU71`a5WScxDx?56^6)_1~G@*tEVo%Zn$%^{EWdx&&zPbmW=Pa%9Uq zn77b+>}>s7T92KXTL{~WXuWlomm#aMX}xvUUb700C!zJ$SzeL^^U{sbN@Ojz6}H#W z`sr+Z*>;$h(R%4DFQ@g;nbpX8WZfY+o|D!?XZ_7bVV-k9t4~7fkROo znboxZIkTA7KWA3cdgsh~WI3&8&hma_J*{uf@=_0+zw;5a=`pn8Ikber8EpBY)a0Ji67y=m6oiEO0xr&-=k>q#@ak^RUXT5p=Qwu1`hlOS8P1)|X~B(E8HMns>0jme!YMdEF`+LHmg*lETiHOSU>aCD$h=GCi)J<;Ylgz{6gp_lC}_iE zXbr9R%*K~agLyx#_ssI1*)Z>*^`2SYNb5Z_s~5xes-@5tTHl$qSJ3*-%&Pscy*wG( zhs>qGyzwNop4MMxt*?)=y@6AF`U( zQ)YRoAQ=4o9L{=B2b=GRs@5!Mv+Fv=6%p%sXklV>X@_S=a`)SI~OMti47B z^SaK^>aNh@ZqN=jw6Qz1vKO=tS>FfdowWWjo1cN!J7#ujVS5X$U(E6nTECcCKODB# zj)vAFn~}YG*xrXMo(l6`THlzh-7THScow4?AWRV>9mm*v1!Mp=m*#PD>$i9X!FKh&@YYc5f zwl;@(LrZ9`HM9^}qJnujvc3zGmAT2GASWwc%wvw_yvVzwiDkcG6~ z7Hcm@)*zc6!1-8_r4M0Vf$V$)^B!a+t>4Awqd`{EdQ~iMLAJk!297K{nEQ8?3#H*3V!T(s~%o3S>PpN9$#< z_8w$Et(U>_Vpsv5;X#EOiS8)3EV9b7GX*QVGBdcir z3D)0=>L2K#t z+H5>6z22GGN3Tz2R>#5q4rJj_n70jscGK&J*?2a3eK50;ULVY?oC^C}>GicN&(Z5^ znSI#wdRvxP)9Y=SE%f?VW*0I?uXkm6;X*hc9lbu4>nEAb$WD3M$FH>WefU>0cPD7i z-_YXj(5hHyU4LjVvS9$s%LYQbkd0cHcO%ON!MqOHIRxfK@z54zH?q?R+bd^7+vh+V zmO(p~Lrc~`n>Ina0?y~)kB5xj@18$?ye;&8^~~A>u)oj^t-23w@<4lDLQDP7+K@kg zpW@fA7D7u4LA#4U%Ouc7WEZlu6l`yx_b+GLt1l1pMkTZ#SwrtP&iXr$C2e4TX*9GA z*-P&y&c@Tm!1i1$v}z=@!2qqC4{Z!MKY`!hy0tLxr1$q@>o?y2^ZQr6y({4NOT6_f z|NQ=kw+~sr3gwZt^nO`veI8^HyOef1~LzcV?H|9OAnzp|I-Tcw}>8A=`c{s7R`Ja4FVqMf9^QWR(j{ccX+Nr3={x}cGi~jv%5iu7T-(MfkMaGUBHY$E3 zdF&hCH*#eEA(118b7_wxk)9nlH0`nP&_OX=XAh2NKfi-LgfA3=k*g6ZwqV|W5h(1)~b4+!!5hVP&L>>$UD);VC0 z`XT|1$(MNjRY{DWJL@l}=Ml3#ve82|tP literal 0 HcmV?d00001 diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 4687ae5c802499..a1a78f54c0cc68 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -861,6 +861,10 @@ pub mod disable_account_loader_special_case { solana_program::declare_id!("7QkayNydJtEKXghHvc4EqedXWsadK3crvFs732jruVXM"); } +pub mod replace_token_program_2022 { + solana_program::declare_id!("8FbKvGXFBMjpYXhtnX6KuuLquqMRFaGouQkrDkKYp64b"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -1071,6 +1075,7 @@ lazy_static! { (enable_turbine_extended_fanout_experiments::id(), "enable turbine extended fanout experiments #2373"), (deprecate_legacy_vote_ixs::id(), "Deprecate legacy vote instructions"), (disable_account_loader_special_case::id(), "Disable account loader special case"), + (replace_token_program_2022::id(), "Replace Token Program 2022"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter() diff --git a/sdk/src/genesis_config.rs b/sdk/src/genesis_config.rs index c27793c5e20eec..4f1c5246dbf038 100644 --- a/sdk/src/genesis_config.rs +++ b/sdk/src/genesis_config.rs @@ -60,7 +60,7 @@ impl ClusterType { Some(Hash::from_str("5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d").unwrap()) } Self::Testnet => { - Some(Hash::from_str("4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY").unwrap()) + Some(Hash::from_str("C7ucgdDEhxLTpXHhWSZxavSVmaNTUJWwT5iTdeaviDho").unwrap()) } Self::Devnet => { Some(Hash::from_str("EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG").unwrap())