From 9f2545e30ae022161233c0baec63868d00261513 Mon Sep 17 00:00:00 2001 From: Uwe Cerron Date: Wed, 8 Jan 2025 13:12:55 -0500 Subject: [PATCH] removing xhro deps --- .github/workflows/solita-npm-publish.yml | 1 - Anchor.toml | 4 - Cargo.lock | 2125 +++++--- Cargo.toml | 9 +- .../agnostic-orderbook/Cargo.lock | 3426 ------------ .../agnostic-orderbook/Cargo.toml | 30 - .../agnostic-orderbook/Xargo.toml | 2 - .../agnostic-orderbook/src/critbit.rs | 98 - .../agnostic-orderbook/src/entrypoint.rs | 75 - .../agnostic-orderbook/src/error.rs | 67 - .../agnostic-orderbook/src/lib.rs | 65 - .../agnostic-orderbook/src/orderbook.rs | 22 - .../agnostic-orderbook/src/processor.rs | 74 - .../agnostic-orderbook/src/state.rs | 317 -- .../agnostic-orderbook/src/utils.rs | 20 - hxro-print-trade-provider/dex/Cargo.toml | 37 - hxro-print-trade-provider/dex/src/error.rs | 225 - hxro-print-trade-provider/dex/src/lib.rs | 760 --- .../dex/src/state/callback_info.rs | 20 - .../dex/src/state/constants.rs | 66 - .../dex/src/state/enums.rs | 75 - .../dex/src/state/fee_model.rs | 84 - .../dex/src/state/market_product_group.rs | 136 - .../dex/src/state/mod.rs | 10 - .../dex/src/state/open_orders.rs | 37 - .../dex/src/state/print_trade.rs | 96 - .../dex/src/state/products.rs | 169 - .../dex/src/state/risk_engine_register.rs | 146 - .../dex/src/state/trader_risk_group.rs | 127 - .../dex/src/utils/bitset.rs | 145 - .../dex/src/utils/cpi.rs | 161 - .../dex/src/utils/loadable.rs | 68 - .../dex/src/utils/logs.rs | 33 - .../dex/src/utils/mod.rs | 28 - .../dex/src/utils/numeric.rs | 878 ---- .../dex/src/utils/orderbook.rs | 111 - .../dex/src/utils/param.rs | 137 - .../instruments/Cargo.toml | 33 - .../instruments/Xargo.toml | 2 - .../instruments/src/error.rs | 53 - .../instruments/src/lib.rs | 132 - .../instruments/src/state/constants.rs | 1 - .../src/state/derivative_metadata.rs | 48 - .../instruments/src/state/enums.rs | 74 - .../instruments/src/state/mod.rs | 3 - hxro-print-trade-provider/js/.gitignore | 2 - hxro-print-trade-provider/js/.solitarc.js | 16 - hxro-print-trade-provider/js/README.md | 1 - hxro-print-trade-provider/js/package.json | 34 - .../js/tsconfig.build.json | 9 - hxro-print-trade-provider/js/tsconfig.json | 7 - hxro-print-trade-provider/js/yarn.lock | 612 --- hxro-print-trade-provider/program/Cargo.toml | 21 - .../program/src/constants.rs | 11 - .../program/src/errors.rs | 69 - .../program/src/helpers/close_print_trade.rs | 56 - .../program/src/helpers/common.rs | 61 - .../program/src/helpers/conversions.rs | 55 - .../program/src/helpers/create_print_trade.rs | 90 - .../src/helpers/execute_print_trade.rs | 103 - .../helpers/initialize_trader_risk_group.rs | 48 - .../program/src/helpers/mod.rs | 14 - .../program/src/helpers/validation.rs | 339 -- hxro-print-trade-provider/program/src/lib.rs | 514 -- .../program/src/state.rs | 63 - migrations/deploy.ts | 17 +- package.json | 1 - .../program/src/american_options.rs | 21 + .../program/src/errors.rs | 2 + .../program/src/state.rs | 16 + .../program/src/errors.rs | 2 + .../program/src/euro_options.rs | 21 + .../program/src/state.rs | 16 + rfq/program/Cargo.toml | 2 +- rfq/program/src/interfaces/mod.rs | 1 - rfq/program/src/lib.rs | 43 - rfq/program/src/state/protocol.rs | 65 +- .../hxro/accounts/execution-output.json | 13 - .../hxro/accounts/fee-config.json | 13 - .../hxro/accounts/fee-output.json | 13 - .../hxro/accounts/maker-fee-state.json | 13 - .../hxro/accounts/maker-risk-state.json | 13 - .../dependencies/hxro/accounts/maker-trg.json | 13 - tests/dependencies/hxro/accounts/mpg.json | 13 - .../hxro/accounts/product-0-orderbook.json | 13 - .../dependencies/hxro/accounts/product-0.json | 13 - .../hxro/accounts/product-1-orderbook.json | 13 - .../dependencies/hxro/accounts/product-1.json | 13 - .../hxro/accounts/risk-output.json | 13 - .../hxro/accounts/taker-fee-state.json | 13 - .../hxro/accounts/taker-risk-state.json | 13 - .../dependencies/hxro/accounts/taker-trg.json | 13 - tests/dependencies/hxro/accounts/vault.json | 13 - tests/dependencies/hxro/dex.json | 4605 ----------------- .../keypairs/operator-trg-risk-state.json | 1 - .../hxro/keypairs/operator-trg.json | 1 - ...6g8LyRCM5mnao1MAg3g9twfqBbDmUWgpQpFfn1b.so | Bin 358768 -> 0 bytes .../hxro/programs/constant_fees.so | Bin 138968 -> 0 bytes ...31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL.so | Bin 10000000 -> 0 bytes ...ZYszfz1FrFVx7gcUm61RfawMoAHnURuERRJKdkq.so | Bin 654848 -> 0 bytes .../hxro/programs/noop_risk_engine.so | Bin 236928 -> 0 bytes tests/dependencies/hxro/pubkey-naming.json | 22 - tests/integration/hxro.spec.ts | 294 -- tests/scripts/fixturesGenerator.ts | 17 +- tests/unit/hxroCollateralLockedRecords.ts | 119 - tests/unit/hxroSettlementResults.ts | 255 - tests/unit/requiredCollateralCalculations.ts | 28 +- tests/utilities/constants.ts | 47 +- .../hxroPrintTradeProvider.ts | 761 --- tests/utilities/types.ts | 3 + tests/utilities/wrappers/context.ts | 47 +- yarn.lock | 2101 -------- 112 files changed, 1650 insertions(+), 19421 deletions(-) delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/Cargo.lock delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/Cargo.toml delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/Xargo.toml delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/src/critbit.rs delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/src/entrypoint.rs delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/src/error.rs delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/src/lib.rs delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/src/orderbook.rs delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/src/processor.rs delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/src/state.rs delete mode 100644 hxro-print-trade-provider/agnostic-orderbook/src/utils.rs delete mode 100644 hxro-print-trade-provider/dex/Cargo.toml delete mode 100644 hxro-print-trade-provider/dex/src/error.rs delete mode 100644 hxro-print-trade-provider/dex/src/lib.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/callback_info.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/constants.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/enums.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/fee_model.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/market_product_group.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/mod.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/open_orders.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/print_trade.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/products.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/risk_engine_register.rs delete mode 100644 hxro-print-trade-provider/dex/src/state/trader_risk_group.rs delete mode 100644 hxro-print-trade-provider/dex/src/utils/bitset.rs delete mode 100644 hxro-print-trade-provider/dex/src/utils/cpi.rs delete mode 100644 hxro-print-trade-provider/dex/src/utils/loadable.rs delete mode 100644 hxro-print-trade-provider/dex/src/utils/logs.rs delete mode 100644 hxro-print-trade-provider/dex/src/utils/mod.rs delete mode 100644 hxro-print-trade-provider/dex/src/utils/numeric.rs delete mode 100644 hxro-print-trade-provider/dex/src/utils/orderbook.rs delete mode 100644 hxro-print-trade-provider/dex/src/utils/param.rs delete mode 100644 hxro-print-trade-provider/instruments/Cargo.toml delete mode 100644 hxro-print-trade-provider/instruments/Xargo.toml delete mode 100644 hxro-print-trade-provider/instruments/src/error.rs delete mode 100644 hxro-print-trade-provider/instruments/src/lib.rs delete mode 100644 hxro-print-trade-provider/instruments/src/state/constants.rs delete mode 100644 hxro-print-trade-provider/instruments/src/state/derivative_metadata.rs delete mode 100644 hxro-print-trade-provider/instruments/src/state/enums.rs delete mode 100644 hxro-print-trade-provider/instruments/src/state/mod.rs delete mode 100644 hxro-print-trade-provider/js/.gitignore delete mode 100644 hxro-print-trade-provider/js/.solitarc.js delete mode 100644 hxro-print-trade-provider/js/README.md delete mode 100644 hxro-print-trade-provider/js/package.json delete mode 100644 hxro-print-trade-provider/js/tsconfig.build.json delete mode 100644 hxro-print-trade-provider/js/tsconfig.json delete mode 100644 hxro-print-trade-provider/js/yarn.lock delete mode 100644 hxro-print-trade-provider/program/Cargo.toml delete mode 100644 hxro-print-trade-provider/program/src/constants.rs delete mode 100644 hxro-print-trade-provider/program/src/errors.rs delete mode 100644 hxro-print-trade-provider/program/src/helpers/close_print_trade.rs delete mode 100644 hxro-print-trade-provider/program/src/helpers/common.rs delete mode 100644 hxro-print-trade-provider/program/src/helpers/conversions.rs delete mode 100644 hxro-print-trade-provider/program/src/helpers/create_print_trade.rs delete mode 100644 hxro-print-trade-provider/program/src/helpers/execute_print_trade.rs delete mode 100644 hxro-print-trade-provider/program/src/helpers/initialize_trader_risk_group.rs delete mode 100644 hxro-print-trade-provider/program/src/helpers/mod.rs delete mode 100644 hxro-print-trade-provider/program/src/helpers/validation.rs delete mode 100644 hxro-print-trade-provider/program/src/lib.rs delete mode 100644 hxro-print-trade-provider/program/src/state.rs delete mode 100644 tests/dependencies/hxro/accounts/execution-output.json delete mode 100644 tests/dependencies/hxro/accounts/fee-config.json delete mode 100644 tests/dependencies/hxro/accounts/fee-output.json delete mode 100644 tests/dependencies/hxro/accounts/maker-fee-state.json delete mode 100644 tests/dependencies/hxro/accounts/maker-risk-state.json delete mode 100644 tests/dependencies/hxro/accounts/maker-trg.json delete mode 100644 tests/dependencies/hxro/accounts/mpg.json delete mode 100644 tests/dependencies/hxro/accounts/product-0-orderbook.json delete mode 100644 tests/dependencies/hxro/accounts/product-0.json delete mode 100644 tests/dependencies/hxro/accounts/product-1-orderbook.json delete mode 100644 tests/dependencies/hxro/accounts/product-1.json delete mode 100644 tests/dependencies/hxro/accounts/risk-output.json delete mode 100644 tests/dependencies/hxro/accounts/taker-fee-state.json delete mode 100644 tests/dependencies/hxro/accounts/taker-risk-state.json delete mode 100644 tests/dependencies/hxro/accounts/taker-trg.json delete mode 100644 tests/dependencies/hxro/accounts/vault.json delete mode 100644 tests/dependencies/hxro/dex.json delete mode 100644 tests/dependencies/hxro/keypairs/operator-trg-risk-state.json delete mode 100644 tests/dependencies/hxro/keypairs/operator-trg.json delete mode 100644 tests/dependencies/hxro/programs/aaob_DchhQ6g8LyRCM5mnao1MAg3g9twfqBbDmUWgpQpFfn1b.so delete mode 100755 tests/dependencies/hxro/programs/constant_fees.so delete mode 100644 tests/dependencies/hxro/programs/dex_FUfpR31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL.so delete mode 100644 tests/dependencies/hxro/programs/instrument_8981bZYszfz1FrFVx7gcUm61RfawMoAHnURuERRJKdkq.so delete mode 100755 tests/dependencies/hxro/programs/noop_risk_engine.so delete mode 100644 tests/dependencies/hxro/pubkey-naming.json delete mode 100644 tests/integration/hxro.spec.ts delete mode 100644 tests/unit/hxroCollateralLockedRecords.ts delete mode 100644 tests/unit/hxroSettlementResults.ts delete mode 100644 tests/utilities/printTradeProviders/hxroPrintTradeProvider.ts delete mode 100644 yarn.lock diff --git a/.github/workflows/solita-npm-publish.yml b/.github/workflows/solita-npm-publish.yml index 65d695c..065d086 100644 --- a/.github/workflows/solita-npm-publish.yml +++ b/.github/workflows/solita-npm-publish.yml @@ -17,7 +17,6 @@ jobs: - "spot-instrument" - "psyoptions-american-instrument" - "psyoptions-european-instrument" - - "hxro-print-trade-provider" - "vault-operator" defaults: run: diff --git a/Anchor.toml b/Anchor.toml index e2b731a..e104a90 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -7,7 +7,6 @@ risk_engine = "CtfTi4TstqJaxEh8giQ7kK8CKXsJyF9CuwdcVoqGrEi1" spot_instrument = "BMXWVaYPVJ4G8g2MMJt51CDgjHHuoirPMvsTUadv3s3v" psyoptions_european_instrument = "4KC8MQi2zQGr7LhTCVTMhbKuP4KcpTmdZjxsDBWrTSVf" psyoptions_american_instrument = "HpmyVA3t3uNGgdx86AuwZww7gnAWB57vepnk3732vEr9" -hxro_print_trade_provider = "598ZWckNjupx5sftmNC27NPRYHbwNbxi2dYBUan7Su1P" vault_operator = "DftT8Q74YPqwrtJzy6g97XLzouG2YWaWZfRad6yK2GvA" [programs.devnet] @@ -16,7 +15,6 @@ risk_engine = "CtfTi4TstqJaxEh8giQ7kK8CKXsJyF9CuwdcVoqGrEi1" spot_instrument = "BMXWVaYPVJ4G8g2MMJt51CDgjHHuoirPMvsTUadv3s3v" psyoptions_european_instrument = "4KC8MQi2zQGr7LhTCVTMhbKuP4KcpTmdZjxsDBWrTSVf" psyoptions_american_instrument = "HpmyVA3t3uNGgdx86AuwZww7gnAWB57vepnk3732vEr9" -hxro_print_trade_provider = "598ZWckNjupx5sftmNC27NPRYHbwNbxi2dYBUan7Su1P" vault_operator = "DftT8Q74YPqwrtJzy6g97XLzouG2YWaWZfRad6yK2GvA" [programs.mainnet] @@ -25,7 +23,6 @@ risk_engine = "CtfTi4TstqJaxEh8giQ7kK8CKXsJyF9CuwdcVoqGrEi1" spot_instrument = "BMXWVaYPVJ4G8g2MMJt51CDgjHHuoirPMvsTUadv3s3v" psyoptions_european_instrument = "4KC8MQi2zQGr7LhTCVTMhbKuP4KcpTmdZjxsDBWrTSVf" psyoptions_american_instrument = "HpmyVA3t3uNGgdx86AuwZww7gnAWB57vepnk3732vEr9" -hxro_print_trade_provider = "598ZWckNjupx5sftmNC27NPRYHbwNbxi2dYBUan7Su1P" vault_operator = "DftT8Q74YPqwrtJzy6g97XLzouG2YWaWZfRad6yK2GvA" [registry] @@ -41,7 +38,6 @@ members = [ "risk-engine/program", "spot-instrument/program", "psyoptions-european-instrument/program", - "hxro-print-trade-provider/program", "psyoptions-american-instrument/program", "vault-operator/program", ] diff --git a/Cargo.lock b/Cargo.lock index c8afdc7..efb8ea5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,7 +18,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if", - "cipher 0.3.0", + "cipher", "cpufeatures", "opaque-debug", ] @@ -31,7 +31,7 @@ checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc" dependencies = [ "aead", "aes", - "cipher 0.3.0", + "cipher", "ctr", "polyval", "subtle", @@ -39,38 +39,34 @@ dependencies = [ ] [[package]] -name = "agnostic-orderbook" -version = "0.1.0" +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "base64 0.13.0", - "bonfida-utils", - "borsh", - "bytemuck", - "enumflags2", - "num-derive", - "num-traits", - "num_enum", - "solana-program", - "spl-token", - "thiserror", + "getrandom 0.2.15", + "once_cell", + "version_check", ] [[package]] name = "ahash" -version = "0.7.6" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ - "getrandom 0.2.10", + "cfg-if", + "getrandom 0.2.15", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "0.7.19" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -86,7 +82,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 1.0.99", + "syn 1.0.109", ] [[package]] @@ -97,11 +93,11 @@ checksum = "f468970344c7c9f9d03b4da854fd7c54f21305059f53789d0045c1dd803f0018" dependencies = [ "anchor-syn", "anyhow", - "bs58 0.5.0", + "bs58 0.5.1", "proc-macro2", "quote", "rustversion", - "syn 1.0.99", + "syn 1.0.109", ] [[package]] @@ -112,7 +108,7 @@ checksum = "59948e7f9ef8144c2aefb3f32a40c5fce2798baeec765ba038389e82301017ef" dependencies = [ "anchor-syn", "proc-macro2", - "syn 1.0.99", + "syn 1.0.109", ] [[package]] @@ -124,7 +120,7 @@ dependencies = [ "anchor-syn", "proc-macro2", "quote", - "syn 1.0.99", + "syn 1.0.109", ] [[package]] @@ -137,7 +133,7 @@ dependencies = [ "anyhow", "proc-macro2", "quote", - "syn 1.0.99", + "syn 1.0.109", ] [[package]] @@ -150,7 +146,7 @@ dependencies = [ "anyhow", "proc-macro2", "quote", - "syn 1.0.99", + "syn 1.0.109", ] [[package]] @@ -163,7 +159,7 @@ dependencies = [ "anyhow", "proc-macro2", "quote", - "syn 1.0.99", + "syn 1.0.109", ] [[package]] @@ -174,7 +170,7 @@ checksum = "f495e85480bd96ddeb77b71d499247c7d4e8b501e75ecb234e9ef7ae7bd6552a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.99", + "syn 1.0.109", ] [[package]] @@ -192,12 +188,12 @@ dependencies = [ "anchor-derive-accounts", "anchor-derive-space", "arrayref", - "base64 0.13.0", + "base64 0.13.1", "bincode", - "borsh", + "borsh 0.10.4", "bytemuck", - "getrandom 0.2.10", - "solana-program", + "getrandom 0.2.15", + "solana-program 1.16.25", "thiserror", ] @@ -208,9 +204,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78f860599da1c2354e7234c768783049eb42e2f54509ecfc942d2e0076a2da7b" dependencies = [ "anchor-lang", - "solana-program", + "solana-program 1.16.25", "spl-associated-token-account", - "spl-token", + "spl-token 3.5.0", "spl-token-2022 0.6.1", ] @@ -221,40 +217,157 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a125e4b0cc046cfec58f5aa25038e34cf440151d58f0db3afc55308251fe936d" dependencies = [ "anyhow", - "bs58 0.5.0", + "bs58 0.5.1", "heck", "proc-macro2", "quote", "serde", "serde_json", - "sha2 0.10.7", - "syn 1.0.99", + "sha2 0.10.8", + "syn 1.0.109", "thiserror", ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "anyhow" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] -name = "anyhow" -version = "1.0.64" +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9a8f622bcf6ff3df478e9deba3e03e4e04b300f8e6a139e192c05fa3490afc7" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "array-bytes" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ad284aeb45c13f2fb4f084de4a420ebf447423bdf9386c0540ce33cb3ef4b8c" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "assert_matches" @@ -275,9 +388,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "base64" @@ -287,9 +400,21 @@ checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bincode" @@ -306,6 +431,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + [[package]] name = "bitmaps" version = "2.1.0" @@ -317,9 +448,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.3.1" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" +checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" dependencies = [ "arrayref", "arrayvec", @@ -341,9 +472,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] @@ -355,40 +486,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] -name = "bonfida-macros" -version = "0.2.9" +name = "borsh" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10c56a4a679222368b66b5d31cc31dfbfd94144190a50412f55b9663c051290e" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" dependencies = [ - "proc-macro2", - "quote", - "solana-program", - "spl-name-service", - "syn 1.0.99", + "borsh-derive 0.9.3", + "hashbrown 0.11.2", ] [[package]] -name = "bonfida-utils" -version = "0.2.14" +name = "borsh" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49cfd2320d6e7dea2bcf1768bc176ea468a6cc01046300bb56c5acc75995ee01" +checksum = "115e54d64eb62cdebad391c19efc9dce4981c690c85a33a12199d99bb9546fee" dependencies = [ - "bonfida-macros", - "borsh", - "bytemuck", - "pyth-sdk-solana", - "solana-program", - "spl-token", + "borsh-derive 0.10.4", + "hashbrown 0.13.2", ] [[package]] name = "borsh" -version = "0.9.3" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" dependencies = [ - "borsh-derive", - "hashbrown 0.11.2", + "borsh-derive 1.5.3", + "cfg_aliases", ] [[package]] @@ -397,11 +521,37 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831213f80d9423998dd696e2c5345aba6be7a0bd8cd19e31c5243e13df1cef89" +dependencies = [ + "borsh-derive-internal 0.10.4", + "borsh-schema-derive-internal 0.10.4", "proc-macro-crate 0.1.5", "proc-macro2", - "syn 1.0.99", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" +dependencies = [ + "once_cell", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.95", ] [[package]] @@ -412,7 +562,18 @@ checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" dependencies = [ "proc-macro2", "quote", - "syn 1.0.99", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65d6ba50644c98714aa2a70d13d7df3cd75cd2b523a2b452bf010443800976b3" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -423,7 +584,18 @@ checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.99", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276691d96f063427be83e6692b86148e488ebba9f48f77788724ca027ba3b6d4" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -434,18 +606,18 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bs58" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ "tinyvec", ] [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bv" @@ -459,37 +631,39 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.4.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.99", + "syn 2.0.95", ] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.0.79" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" dependencies = [ "jobserver", + "libc", + "shlex", ] [[package]] @@ -498,13 +672,18 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ - "android-tzdata", "num-traits", ] @@ -517,16 +696,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -539,9 +708,9 @@ dependencies = [ [[package]] name = "console_log" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" +checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" dependencies = [ "log", "web-sys", @@ -549,61 +718,43 @@ dependencies = [ [[package]] name = "constant_time_eq" -version = "0.1.5" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.11" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.12" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" -dependencies = [ - "cfg-if", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" @@ -637,7 +788,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" dependencies = [ - "cipher 0.3.0", + "cipher", ] [[package]] @@ -654,6 +805,69 @@ dependencies = [ "zeroize", ] +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rand_core 0.6.4", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.95", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.95", +] + [[package]] name = "derivation-path" version = "0.2.0" @@ -661,27 +875,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" [[package]] -name = "dex" -version = "0.1.0" +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "agnostic-orderbook", - "anchor-lang", - "anchor-spl", - "arrayref", - "base64 0.13.0", - "bonfida-utils", - "borsh", - "bytemuck", - "itertools", - "num", - "num-derive", - "num-traits", - "pyth-client 0.3.0", - "serde", - "serde-big-array", - "spl-associated-token-account", - "spl-token", - "thiserror", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -699,17 +900,11 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "crypto-common", "subtle", ] -[[package]] -name = "dyn-clone" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" - [[package]] name = "ed25519" version = "1.5.3" @@ -725,9 +920,9 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "curve25519-dalek", + "curve25519-dalek 3.2.1", "ed25519", - "rand", + "rand 0.7.3", "serde", "sha2 0.9.9", "zeroize", @@ -742,40 +937,20 @@ dependencies = [ "derivation-path", "ed25519-dalek", "hmac 0.12.1", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] name = "either" -version = "1.8.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] -name = "enumflags2" -version = "0.7.7" +name = "env_logger" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" -dependencies = [ - "enumflags2_derive", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "env_logger" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ "atty", "humantime", @@ -784,12 +959,39 @@ dependencies = [ "termcolor", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "feature-probe" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "five8_const" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b4f62f0f8ca357f93ae90c8c2dd1041a1f665fde2f889ea9b1787903829015" +dependencies = [ + "five8_core", +] + +[[package]] +name = "five8_core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94474d15a76982be62ca8a39570dccce148d98c238ebb7408b0a21b2c4bdddc4" + [[package]] name = "fnv" version = "1.0.7" @@ -798,9 +1000,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "serde", "typenum", @@ -822,9 +1024,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", @@ -839,18 +1041,24 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash", + "ahash 0.7.8", ] [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash", + "ahash 0.8.11", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.3.3" @@ -869,15 +1077,6 @@ dependencies = [ "libc", ] -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] - [[package]] name = "hmac" version = "0.8.1" @@ -915,16 +1114,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] -name = "hxro-print-trade-provider" -version = "0.1.0" -dependencies = [ - "agnostic-orderbook", - "anchor-lang", - "dex", - "instruments", - "rfq", - "risk-engine", -] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "im" @@ -943,31 +1136,13 @@ dependencies = [ ] [[package]] -name = "inout" -version = "0.1.3" +name = "indexmap" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - -[[package]] -name = "instruments" -version = "0.1.0" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ - "anchor-lang", - "arrayref", - "bincode", - "borsh", - "bytemuck", - "dex", - "num-derive", - "num-traits", - "pyth-client 0.2.2", - "solana-program", - "spl-associated-token-account", - "spl-token", - "thiserror", + "equivalent", + "hashbrown 0.15.2", ] [[package]] @@ -981,45 +1156,49 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.3" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.59" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "keccak" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libsecp256k1" @@ -1034,7 +1213,7 @@ dependencies = [ "libsecp256k1-core", "libsecp256k1-gen-ecmult", "libsecp256k1-gen-genmult", - "rand", + "rand 0.7.3", "serde", "sha2 0.9.9", "typenum", @@ -1071,9 +1250,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.8" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1081,18 +1260,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" @@ -1105,9 +1281,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.6.5" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -1124,141 +1300,136 @@ dependencies = [ "zeroize", ] -[[package]] -name = "num" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] -name = "num-complex" -version = "0.4.3" +name = "num-derive" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "num-derive" -version = "0.3.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 1.0.99", + "syn 2.0.95", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] -name = "num-iter" -version = "0.1.43" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "num-integer", - "num-traits", ] [[package]] -name = "num-rational" -version = "0.4.1" +name = "num_enum" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", + "num_enum_derive 0.5.11", ] [[package]] -name = "num-traits" -version = "0.2.15" +name = "num_enum" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" dependencies = [ - "autocfg", + "num_enum_derive 0.6.1", ] [[package]] -name = "num_cpus" -version = "1.13.1" +name = "num_enum" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "hermit-abi", - "libc", + "num_enum_derive 0.7.3", ] [[package]] -name = "num_enum" +name = "num_enum_derive" version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ - "num_enum_derive", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "num_enum_derive" -version = "0.5.11" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.95", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 1.2.1", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 1.0.99", + "syn 2.0.95", ] [[package]] name = "once_cell" -version = "1.14.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -1266,17 +1437,23 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.4" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys", + "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pbkdf2" version = "0.4.0" @@ -1297,9 +1474,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "polyval" @@ -1315,9 +1492,12 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "proc-macro-crate" @@ -1330,20 +1510,28 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.2.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "thiserror", - "toml", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.22", ] [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -1368,56 +1556,6 @@ dependencies = [ "risk-engine", ] -[[package]] -name = "pyth-client" -version = "0.2.2" -source = "git+https://github.com/pyth-network/pyth-client-rs?rev=396b7e9#396b7e98d6195b9b6d027e2b4d67ddfdd1975c01" - -[[package]] -name = "pyth-client" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a99198087943003b585590a42c3e323523b94a2c9e1df3e2636ebce39535a26" -dependencies = [ - "borsh", - "borsh-derive", - "bytemuck", - "num-derive", - "num-traits", - "solana-program", - "thiserror", -] - -[[package]] -name = "pyth-sdk" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f262b88557d8f152a247e1be786a8359d63112fac0a6e49fa41082a8ef789e8d" -dependencies = [ - "borsh", - "borsh-derive", - "hex", - "schemars", - "serde", -] - -[[package]] -name = "pyth-sdk-solana" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aed1a0b714f91cb104cc025eb806782e30aa63c23259724e79efd609294a2c9" -dependencies = [ - "borsh", - "borsh-derive", - "bytemuck", - "num-derive", - "num-traits", - "pyth-sdk", - "serde", - "solana-program", - "thiserror", -] - [[package]] name = "qstring" version = "0.7.2" @@ -1429,9 +1567,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.31" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1444,11 +1582,22 @@ checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ "getrandom 0.1.16", "libc", - "rand_chacha", + "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -1459,6 +1608,16 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -1474,7 +1633,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.15", ] [[package]] @@ -1497,42 +1656,50 @@ dependencies = [ [[package]] name = "rayon" -version = "1.5.3" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.3" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags", + "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.6.0" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1541,9 +1708,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rfq" @@ -1551,9 +1718,10 @@ version = "2.2.0" dependencies = [ "anchor-lang", "anchor-spl", - "borsh", - "solana-program", + "borsh 0.9.3", + "solana-program 1.16.25", "solana-security-txt", + "spl-token-2022 0.9.0", ] [[package]] @@ -1573,139 +1741,118 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustversion" -version = "1.0.9" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" - -[[package]] -name = "schemars" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c613288622e5f0c3fdc5dbd4db1c5fbe752746b1d1a56a0630b78fd00de44f" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 1.0.99", -] +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" -version = "1.0.13" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "serde" -version = "1.0.144" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] -[[package]] -name = "serde-big-array" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd31f59f6fe2b0c055371bb2f16d7f0aa7d8881676c04a55b1596d1a17cd10a4" -dependencies = [ - "serde", -] - [[package]] name = "serde_bytes" -version = "0.11.7" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc50e8183eeeb6178dcb167ae34a8051d63535023ae38b5d8d12beae193d37b" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.144" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.99", + "syn 2.0.95", ] [[package]] -name = "serde_derive_internals" -version = "0.26.0" +name = "serde_json" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.99", + "itoa", + "memchr", + "ryu", + "serde", ] [[package]] -name = "serde_json" -version = "1.0.85" +name = "serde_with" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" dependencies = [ - "itoa", - "ryu", "serde", + "serde_with_macros", ] [[package]] -name = "sha2" -version = "0.9.9" +name = "serde_with_macros" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", + "darling", + "proc-macro2", + "quote", + "syn 2.0.95", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", "digest 0.9.0", "opaque-debug", ] [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -1726,14 +1873,20 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.4" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaedf34ed289ea47c2b741bb72e5357a209512d67bcd4bda44359e5bf0470f56" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ "digest 0.10.7", "keccak", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signature" version = "1.6.4" @@ -1752,19 +1905,126 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.9.0" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "solana-account-info" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8378a48833ee7f828e20a63e93a6cdaef1313a8fd8f71a90b243df83295987b1" +dependencies = [ + "bincode", + "serde", + "solana-program-error", + "solana-program-memory", + "solana-pubkey", +] + +[[package]] +name = "solana-atomic-u64" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6f9da603778bbee6402ee2526a3b219b85497c10e49f9c7c112ed8836f46d3" +dependencies = [ + "parking_lot", +] + +[[package]] +name = "solana-bincode" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb75b5d25ae05cfddb8b9b53512f17c18c29e3c92b7a848f39598473e6bf6484" +dependencies = [ + "bincode", + "serde", + "solana-instruction", +] + +[[package]] +name = "solana-borsh" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "055c45b7aae61c8c7b26a537f7a8387cc8a10036081ddfd7170a7a9b4d924ffd" +dependencies = [ + "borsh 0.10.4", + "borsh 1.5.3", +] + +[[package]] +name = "solana-clock" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d6af32497acc6bb09d8150ea6f53df25dbad713991741999d46688beaf944e" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-macro 2.1.7", + "solana-sysvar-id", +] + +[[package]] +name = "solana-cpi" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b06ac8e2ebf8a5b8a54645b721f92f5d7a6d116550bbf1817167cc48abeb1" +dependencies = [ + "solana-account-info", + "solana-define-syscall", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-stable-layout", +] + +[[package]] +name = "solana-decode-error" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99f2fe3170045ae27951ae476a0c88a40130b242736f033ba5e353cd6f816b8e" +dependencies = [ + "num-traits", +] + +[[package]] +name = "solana-define-syscall" +version = "2.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +checksum = "14a80d323dbe8866aaefb40e3c11564d82f77894d193fa66583e793f3d845723" + +[[package]] +name = "solana-epoch-schedule" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276fda33b7de27df41e3043f344e517d5e85ab345d2f2aa2425d1011bac570c4" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-macro 2.1.7", + "solana-sysvar-id", +] + +[[package]] +name = "solana-fee-calculator" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abc0371153eda80024109800051b87bab11f056fae260ca477a50875aaffdfde" +dependencies = [ + "log", + "serde", + "serde_derive", +] [[package]] name = "solana-frozen-abi" -version = "1.14.16" +version = "1.16.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b4953578272ac0fadec245e85e83ae86454611f0c0a7fff7d906835124bdcf" +checksum = "a7077f6495ccc313dff49c3e3f3ed03e49058258bae7fee77ac29ba0a474ba82" dependencies = [ - "ahash", + "ahash 0.8.11", "blake3", - "block-buffer 0.9.0", + "block-buffer 0.10.4", "bs58 0.4.0", "bv", "byteorder", @@ -1772,7 +2032,6 @@ dependencies = [ "either", "generic-array", "getrandom 0.1.16", - "hashbrown 0.12.3", "im", "lazy_static", "log", @@ -1784,7 +2043,7 @@ dependencies = [ "serde_bytes", "serde_derive", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "solana-frozen-abi-macro", "subtle", "thiserror", @@ -1792,47 +2051,115 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.14.16" +version = "1.16.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57892538250428ad3dc3cbe05f6cd75ad14f4f16734fcb91bc7cd5fbb63d6315" +checksum = "f516f992211a2ab70de5c367190575c97e02d156f9f1d8b76886d673f30e88a2" dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 1.0.99", + "syn 2.0.95", +] + +[[package]] +name = "solana-hash" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7067f2bd1e9c3f28153484f03e44bf8dc73cededa6bc132e40de9bfc667b8534" +dependencies = [ + "borsh 1.5.3", + "bs58 0.5.1", + "bytemuck", + "bytemuck_derive", + "js-sys", + "serde", + "serde_derive", + "solana-atomic-u64", + "solana-sanitize", + "wasm-bindgen", +] + +[[package]] +name = "solana-instruction" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dbf607aff88e4f17079a33d34517b7f379d752dfa0496a94cea798a91e6f6ee" +dependencies = [ + "bincode", + "borsh 1.5.3", + "getrandom 0.2.15", + "js-sys", + "num-traits", + "serde", + "serde_derive", + "solana-define-syscall", + "solana-pubkey", + "wasm-bindgen", +] + +[[package]] +name = "solana-last-restart-slot" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f2ee9af7a2815137c60d77cb930c26480bc802b55e00d9e230e81fd308062e" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-macro 2.1.7", + "solana-sysvar-id", ] [[package]] name = "solana-logger" -version = "1.14.16" +version = "1.16.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06aa701c49493e93085dd1e800c05475baca15a9d4d527b59794f2ed0b66e055" +checksum = "7b64def674bfaa4a3f8be7ba19c03c9caec4ec028ba62b9a427ec1bf608a2486" dependencies = [ "env_logger", "lazy_static", "log", ] +[[package]] +name = "solana-msg" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cd9c6ed9d4d036da00c958f0f98edb248c08eb596975011a30063ac3aa902" +dependencies = [ + "solana-define-syscall", +] + +[[package]] +name = "solana-native-token" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08ef55ad8dcc8c5f21e2bbbc7298fa59550269e8bdf2c6976c4de626ea8a0069" + [[package]] name = "solana-program" -version = "1.14.16" +version = "1.16.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f99052873619df68913cb8e92e28ff251a5483828925e87fa97ba15a9cbad51" +checksum = "3e92350aa5b42564681655331e7e0b9d5c99a442de317ceeb4741efbbe9a6c05" dependencies = [ - "base64 0.13.0", + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "array-bytes", + "base64 0.21.7", "bincode", - "bitflags", + "bitflags 1.3.2", "blake3", - "borsh", - "borsh-derive", + "borsh 0.10.4", + "borsh 0.9.3", "bs58 0.4.0", "bv", "bytemuck", "cc", "console_error_panic_hook", "console_log", - "curve25519-dalek", - "getrandom 0.2.10", + "curve25519-dalek 3.2.1", + "getrandom 0.2.15", "itertools", "js-sys", "lazy_static", @@ -1840,39 +2167,210 @@ dependencies = [ "libsecp256k1", "log", "memoffset", - "num-derive", + "num-bigint", + "num-derive 0.3.3", "num-traits", "parking_lot", - "rand", - "rand_chacha", + "rand 0.7.3", + "rand_chacha 0.2.2", "rustc_version", "rustversion", "serde", "serde_bytes", "serde_derive", "serde_json", - "sha2 0.10.7", - "sha3 0.10.4", + "sha2 0.10.8", + "sha3 0.10.8", "solana-frozen-abi", "solana-frozen-abi-macro", - "solana-sdk-macro", + "solana-sdk-macro 1.16.25", "thiserror", "tiny-bip39", "wasm-bindgen", "zeroize", ] +[[package]] +name = "solana-program" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99c693c5c392bacc44e7a86baa18069eb966d88afbc9040219ca000e873fb02e" +dependencies = [ + "base64 0.22.1", + "bincode", + "bitflags 2.6.0", + "blake3", + "borsh 0.10.4", + "borsh 1.5.3", + "bs58 0.5.1", + "bv", + "bytemuck", + "bytemuck_derive", + "console_error_panic_hook", + "console_log", + "curve25519-dalek 4.1.3", + "five8_const", + "getrandom 0.2.15", + "js-sys", + "lazy_static", + "log", + "memoffset", + "num-bigint", + "num-derive 0.4.2", + "num-traits", + "parking_lot", + "rand 0.8.5", + "serde", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-account-info", + "solana-atomic-u64", + "solana-bincode", + "solana-borsh", + "solana-clock", + "solana-cpi", + "solana-decode-error", + "solana-define-syscall", + "solana-epoch-schedule", + "solana-fee-calculator", + "solana-hash", + "solana-instruction", + "solana-last-restart-slot", + "solana-msg", + "solana-native-token", + "solana-program-entrypoint", + "solana-program-error", + "solana-program-memory", + "solana-program-option", + "solana-program-pack", + "solana-pubkey", + "solana-rent", + "solana-sanitize", + "solana-sdk-macro 2.1.7", + "solana-secp256k1-recover", + "solana-serde-varint", + "solana-serialize-utils", + "solana-sha256-hasher", + "solana-short-vec", + "solana-slot-hashes", + "solana-slot-history", + "solana-stable-layout", + "solana-sysvar-id", + "solana-transaction-error", + "thiserror", + "wasm-bindgen", +] + +[[package]] +name = "solana-program-entrypoint" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e0696f51a4386f92f4e1807059bd2b649c207688b9249df332d0fd5ecac240c" +dependencies = [ + "solana-account-info", + "solana-msg", + "solana-program-error", + "solana-pubkey", +] + +[[package]] +name = "solana-program-error" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd557d10df4380234f5b4a5971a0cae29eedcc42ebe4bbe926a21ff31912e99" +dependencies = [ + "borsh 1.5.3", + "num-traits", + "serde", + "serde_derive", + "solana-decode-error", + "solana-instruction", + "solana-msg", + "solana-pubkey", +] + +[[package]] +name = "solana-program-memory" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef71296a3fa6ebaa38ae522bea71af82b7deeea170e459efa3c539b8f14e0155" +dependencies = [ + "num-traits", + "solana-define-syscall", +] + +[[package]] +name = "solana-program-option" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "506908720b9b1660f2087d9c6f45ba208fa67a0f34658804517324ef65fd432b" + +[[package]] +name = "solana-program-pack" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21820c32999ce24532fb12d6188daeffa27eb88a366505a4a0553857729aae52" +dependencies = [ + "solana-program-error", +] + +[[package]] +name = "solana-pubkey" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c46701a845b731f2ffcf002c4bb08968434b9cf5e576cdd705259421074d1764" +dependencies = [ + "borsh 0.10.4", + "borsh 1.5.3", + "bs58 0.5.1", + "bytemuck", + "bytemuck_derive", + "curve25519-dalek 4.1.3", + "five8_const", + "getrandom 0.2.15", + "js-sys", + "num-traits", + "serde", + "serde_derive", + "solana-atomic-u64", + "solana-decode-error", + "solana-define-syscall", + "solana-sanitize", + "solana-sha256-hasher", + "wasm-bindgen", +] + +[[package]] +name = "solana-rent" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05a4d15fe63d0e9a9551adfecfec495e3d50ba0bc4705001010c724fe84f65d8" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-macro 2.1.7", + "solana-sysvar-id", +] + +[[package]] +name = "solana-sanitize" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b8c536460c84ec7cbcce45d8a68ab1c12c99933cfeb0cb332567e67a27eea2f" + [[package]] name = "solana-sdk" -version = "1.14.16" +version = "1.16.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb47da3e18cb669f6ace0b40cee0610e278903783e0c9f7fce1e1beb881a1b7" +checksum = "2087e15c92d4d6b3f085dc12fbe9614141c811f90a54cc418240ac30b608133f" dependencies = [ "assert_matches", - "base64 0.13.0", + "base64 0.21.7", "bincode", - "bitflags", - "borsh", + "bitflags 1.3.2", + "borsh 0.10.4", "bs58 0.4.0", "bytemuck", "byteorder", @@ -1889,25 +2387,27 @@ dependencies = [ "libsecp256k1", "log", "memmap2", - "num-derive", + "num-derive 0.3.3", "num-traits", + "num_enum 0.6.1", "pbkdf2 0.11.0", "qstring", - "rand", - "rand_chacha", + "rand 0.7.3", + "rand_chacha 0.2.2", "rustc_version", "rustversion", "serde", "serde_bytes", "serde_derive", "serde_json", - "sha2 0.10.7", - "sha3 0.10.4", + "serde_with", + "sha2 0.10.8", + "sha3 0.10.8", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-logger", - "solana-program", - "solana-sdk-macro", + "solana-program 1.16.25", + "solana-sdk-macro 1.16.25", "thiserror", "uriparse", "wasm-bindgen", @@ -1915,15 +2415,38 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.14.16" +version = "1.16.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d41a09b9cecd0a4df63c78a192adee99ebf2d3757c19713a68246e1d9789c7c" +checksum = "2e0e0e7ee984b0f9179a1d4f4e9e67ce675de2324b5a98b61d2bdb61be3c19bb" dependencies = [ "bs58 0.4.0", "proc-macro2", "quote", "rustversion", - "syn 1.0.99", + "syn 2.0.95", +] + +[[package]] +name = "solana-sdk-macro" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24c160cb22c3671fe2e0fd7c3630701cfccae308174d8d31d7fc93386c3cc381" +dependencies = [ + "bs58 0.5.1", + "proc-macro2", + "quote", + "syn 2.0.95", +] + +[[package]] +name = "solana-secp256k1-recover" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ece1b12237c7755a2070ab1d309a236b506041dd1d7927c7053b04cd3203728" +dependencies = [ + "libsecp256k1", + "solana-define-syscall", + "thiserror", ] [[package]] @@ -1932,31 +2455,122 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" +[[package]] +name = "solana-serde-varint" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef862fbe970f90d0e024c6dfca71f25210ec9a52c0e62d94249aae10bda8e97" +dependencies = [ + "serde", +] + +[[package]] +name = "solana-serialize-utils" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6f1cdaa53aea6fa76dbacd1504e307c4d9665edd50d6d2c5154cd1f88caa1d2" +dependencies = [ + "solana-instruction", + "solana-pubkey", + "solana-sanitize", +] + +[[package]] +name = "solana-sha256-hasher" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4806e0ffeeb460968219b6a20176b1dc616089e84de1cd37e50cf7f01e295ad9" +dependencies = [ + "sha2 0.10.8", + "solana-define-syscall", + "solana-hash", +] + +[[package]] +name = "solana-short-vec" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824dee0886a8504a62a0c06bf95928d43cec0b077992d2b543e0f898775a4931" +dependencies = [ + "serde", +] + +[[package]] +name = "solana-slot-hashes" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "409010900f8c357c6cb7bec25014f96e7a0826ca47c915f61f94358b01df9f68" +dependencies = [ + "serde", + "serde_derive", + "solana-hash", + "solana-sysvar-id", +] + +[[package]] +name = "solana-slot-history" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82dfd06c84fa3baea6686178b34be9f9485849045ba401c5d0e8eee2eaf485ab" +dependencies = [ + "bv", + "serde", + "serde_derive", + "solana-sysvar-id", +] + +[[package]] +name = "solana-stable-layout" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1629426668b0c503ce86e2fad9ed6d9d525efa958365e6b890397af491c545" +dependencies = [ + "solana-instruction", + "solana-pubkey", +] + +[[package]] +name = "solana-sysvar-id" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9ec6dbb5d57e773722824069d1b2283e552f0363b1be39aa177b1d77b51ea6e" +dependencies = [ + "solana-pubkey", +] + +[[package]] +name = "solana-transaction-error" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "832ead1987e67eb4cd9a742b8e778169966d600955a39efa50b83a6bb3dec6d3" +dependencies = [ + "solana-instruction", + "solana-sanitize", +] + [[package]] name = "solana-zk-token-sdk" -version = "1.14.16" +version = "1.16.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab38abd096769f79fd8e3fe8465070f04742395db724606a5263c8ebc215567" +checksum = "1457c85ab70a518438b9ac2b0c56037b9f6693060dfb617bbb93c7116e4f0c22" dependencies = [ "aes-gcm-siv", - "arrayref", - "base64 0.13.0", + "base64 0.21.7", "bincode", "bytemuck", "byteorder", - "cipher 0.4.4", - "curve25519-dalek", + "curve25519-dalek 3.2.1", "getrandom 0.1.16", "itertools", "lazy_static", "merlin", - "num-derive", + "num-derive 0.3.3", "num-traits", - "rand", + "rand 0.7.3", "serde", "serde_json", "sha3 0.9.1", - "solana-program", + "solana-program 1.16.25", "solana-sdk", "subtle", "thiserror", @@ -1965,17 +2579,52 @@ dependencies = [ [[package]] name = "spl-associated-token-account" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc000f0fdf1f12f99d77d398137c1751345b18c88258ce0f99b7872cf6c9bd6" +checksum = "978dba3bcbe88d0c2c58366c254d9ea41c5f73357e72fc0bdee4d6b5fc99c8f4" dependencies = [ "assert_matches", - "borsh", - "num-derive", + "borsh 0.9.3", + "num-derive 0.3.3", "num-traits", - "solana-program", - "spl-token", - "spl-token-2022 0.5.0", + "solana-program 1.16.25", + "spl-token 3.5.0", + "spl-token-2022 0.6.1", + "thiserror", +] + +[[package]] +name = "spl-discriminator" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" +dependencies = [ + "bytemuck", + "solana-program 1.16.25", + "spl-discriminator-derive", +] + +[[package]] +name = "spl-discriminator-derive" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07fd7858fc4ff8fb0e34090e41d7eb06a823e1057945c26d480bfc21d2338a93" +dependencies = [ + "quote", + "spl-discriminator-syn", + "syn 2.0.95", +] + +[[package]] +name = "spl-discriminator-syn" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fea7be851bd98d10721782ea958097c03a0c2a07d8d4997041d0ece6319a63" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.95", "thiserror", ] @@ -1985,22 +2634,70 @@ version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" dependencies = [ - "solana-program", + "solana-program 1.16.25", ] [[package]] -name = "spl-name-service" -version = "0.2.0" +name = "spl-memo" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f13e674ae639249a78e2445fb043cf70e18f60e6dcf87a5411bc8c9580f130" +dependencies = [ + "solana-program 2.1.7", +] + +[[package]] +name = "spl-pod" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2920a0762e3fdbd02a24469787d9217f658776502265a9b99903557be28adf" +checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" dependencies = [ - "borsh", - "num-derive", + "borsh 0.10.4", + "bytemuck", + "solana-program 1.16.25", + "solana-zk-token-sdk", + "spl-program-error", +] + +[[package]] +name = "spl-program-error" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" +dependencies = [ + "num-derive 0.4.2", "num-traits", - "solana-program", + "solana-program 1.16.25", + "spl-program-error-derive", "thiserror", ] +[[package]] +name = "spl-program-error-derive" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1845dfe71fd68f70382232742e758557afe973ae19e6c06807b2c30f5d5cb474" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.95", +] + +[[package]] +name = "spl-tlv-account-resolution" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "062e148d3eab7b165582757453632ffeef490c02c86a48bfdb4988f63eefb3b9" +dependencies = [ + "bytemuck", + "solana-program 1.16.25", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + [[package]] name = "spl-token" version = "3.5.0" @@ -2009,28 +2706,25 @@ checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d" dependencies = [ "arrayref", "bytemuck", - "num-derive", + "num-derive 0.3.3", "num-traits", - "num_enum", - "solana-program", + "num_enum 0.5.11", + "solana-program 1.16.25", "thiserror", ] [[package]] -name = "spl-token-2022" -version = "0.5.0" +name = "spl-token" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edb869dbe159b018f17fb9bfa67118c30f232d7f54a73742bc96794dff77ed8" +checksum = "5e9e171cbcb4b1f72f6d78ed1e975cb467f56825c27d09b8dd2608e4e7fc8b3b" dependencies = [ "arrayref", "bytemuck", - "num-derive", + "num-derive 0.4.2", "num-traits", - "num_enum", - "solana-program", - "solana-zk-token-sdk", - "spl-memo", - "spl-token", + "num_enum 0.7.3", + "solana-program 2.1.7", "thiserror", ] @@ -2042,16 +2736,81 @@ checksum = "0043b590232c400bad5ee9eb983ced003d15163c4c5d56b090ac6d9a57457b47" dependencies = [ "arrayref", "bytemuck", - "num-derive", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.5.11", + "solana-program 1.16.25", + "solana-zk-token-sdk", + "spl-memo 3.0.1", + "spl-token 3.5.0", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4abf34a65ba420584a0c35f3903f8d727d1f13ababbdc3f714c6b065a686e86" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.2", "num-traits", - "num_enum", - "solana-program", + "num_enum 0.7.3", + "solana-program 1.16.25", "solana-zk-token-sdk", - "spl-memo", - "spl-token", + "spl-memo 4.0.3", + "spl-pod", + "spl-token 4.0.2", + "spl-token-metadata-interface", + "spl-transfer-hook-interface", + "spl-type-length-value", "thiserror", ] +[[package]] +name = "spl-token-metadata-interface" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" +dependencies = [ + "borsh 0.10.4", + "solana-program 1.16.25", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-transfer-hook-interface" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "051d31803f873cabe71aec3c1b849f35248beae5d19a347d93a5c9cccc5d5a9b" +dependencies = [ + "arrayref", + "bytemuck", + "solana-program 1.16.25", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", +] + +[[package]] +name = "spl-type-length-value" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" +dependencies = [ + "bytemuck", + "solana-program 1.16.25", + "spl-discriminator", + "spl-pod", + "spl-program-error", +] + [[package]] name = "spot-instrument" version = "0.1.0" @@ -2061,6 +2820,12 @@ dependencies = [ "rfq", ] +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "subtle" version = "2.4.1" @@ -2069,9 +2834,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.99" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -2080,54 +2845,42 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.27" +version = "2.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" +checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.99", - "unicode-xid", -] - [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 1.0.99", + "syn 2.0.95", ] [[package]] @@ -2140,7 +2893,7 @@ dependencies = [ "hmac 0.8.1", "once_cell", "pbkdf2 0.4.0", - "rand", + "rand 0.7.3", "rustc-hash", "sha2 0.9.9", "thiserror", @@ -2151,9 +2904,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2166,45 +2919,67 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.6.22", +] + [[package]] name = "typenum" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.3" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" - -[[package]] -name = "unicode-xid" -version = "0.2.4" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "universal-hash" @@ -2238,9 +3013,9 @@ dependencies = [ [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasi" @@ -2256,34 +3031,34 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.82" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.82" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 1.0.99", + "syn 2.0.95", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.82" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2291,28 +3066,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.82" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 1.0.99", + "syn 2.0.95", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.82" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.59" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -2336,11 +3111,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", + "windows-sys", ] [[package]] @@ -2351,13 +3126,23 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", + "windows_i686_gnullvm", "windows_i686_msvc", "windows_x86_64_gnu", "windows_x86_64_gnullvm", @@ -2366,45 +3151,90 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39281189af81c07ec09db316b302a3e67bf9bd7cbf6c820b50e35fee9c2fa980" +dependencies = [ + "memchr", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] [[package]] name = "zeroize" @@ -2417,12 +3247,11 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.3.3" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 1.0.99", - "synstructure", + "syn 2.0.95", ] diff --git a/Cargo.toml b/Cargo.toml index 216bcf8..c535980 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,13 +1,20 @@ [workspace] +resolver = "2" # Required for edition 2021 members = [ "rfq/program", "risk-engine/program", "spot-instrument/program", "psyoptions-american-instrument/program", "psyoptions-european-instrument/program", - "hxro-print-trade-provider/program", "vault-operator/program", ] [profile.release] overflow-checks = true + +[workspace.dependencies] +# Update to versions compatible with rustc 1.80.1 +solana-program = "1.16.13" # More recent version compatible with your rustc +anchor-lang = "0.28.0" +anchor-spl = "0.28.0" +spl-token-2022 = { version = "0.9", features = ["no-entrypoint"] } \ No newline at end of file diff --git a/hxro-print-trade-provider/agnostic-orderbook/Cargo.lock b/hxro-print-trade-provider/agnostic-orderbook/Cargo.lock deleted file mode 100644 index 9adeb9d..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/Cargo.lock +++ /dev/null @@ -1,3426 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aead" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array", -] - -[[package]] -name = "aes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "opaque-debug", -] - -[[package]] -name = "aes-gcm-siv" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc" -dependencies = [ - "aead", - "aes", - "cipher 0.3.0", - "ctr", - "polyval", - "subtle", - "zeroize", -] - -[[package]] -name = "agnostic-orderbook" -version = "0.1.0" -dependencies = [ - "arrayref", - "bonfida-utils", - "borsh", - "bytemuck", - "enumflags2", - "hexdump", - "num-derive", - "num-traits", - "num_enum", - "rand 0.8.5", - "solana-program", - "solana-program-test", - "solana-sdk", - "spl-token", - "thiserror", - "tokio", -] - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom 0.2.5", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - -[[package]] -name = "aliasable" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" - -[[package]] -name = "anyhow" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "ascii" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" - -[[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - -[[package]] -name = "async-trait" -version = "0.1.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "blake3" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" -dependencies = [ - "arrayref", - "arrayvec 0.7.2", - "cc", - "cfg-if", - "constant_time_eq", - "digest 0.10.3", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "block-padding", - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - -[[package]] -name = "bonfida-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5560c4eb64bcc9c0eb4ad3975155c30cb353a898299dcc47c5400bf7e21c60ff" -dependencies = [ - "proc-macro2", - "quote", - "solana-program", - "syn", -] - -[[package]] -name = "bonfida-utils" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ca0c3144631620e988afa459792da2a35f33c43bdd06495f45d5d0e3d8709" -dependencies = [ - "bonfida-macros", - "borsh", - "pyth-client", - "solana-program", -] - -[[package]] -name = "borsh" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" -dependencies = [ - "borsh-derive", - "hashbrown", -] - -[[package]] -name = "borsh-derive" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" -dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", - "proc-macro-crate 0.1.5", - "proc-macro2", - "syn", -] - -[[package]] -name = "borsh-derive-internal" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "borsh-schema-derive-internal" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" - -[[package]] -name = "bumpalo" -version = "3.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" - -[[package]] -name = "bv" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" -dependencies = [ - "feature-probe", - "serde", -] - -[[package]] -name = "bytemuck" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e851ca7c24871e7336801608a4797d7376545b6928a10d32d75685687141ead" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e215f8c2f9f79cb53c8335e687ffd07d5bfcb6fe5fc80723762d0be46e7cc54" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" - -[[package]] -name = "bzip2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" -dependencies = [ - "libc", - "num-integer", - "num-traits", - "serde", - "time", - "winapi", -] - -[[package]] -name = "chrono-humanize" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eddc119501d583fd930cb92144e605f44e0252c38dd89d9247fffa1993375cb" -dependencies = [ - "chrono", -] - -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array", -] - -[[package]] -name = "cipher" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" -dependencies = [ - "crypto-common", - "inout", -] - -[[package]] -name = "combine" -version = "3.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" -dependencies = [ - "ascii", - "byteorder", - "either", - "memchr", - "unreachable", -] - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] - -[[package]] -name = "console_log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" -dependencies = [ - "log", - "web-sys", -] - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "cpufeatures" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00d6d2ea26e8b151d99093005cb442fb9a37aeaca582a03ec70946f49ab5ed9" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "lazy_static", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6" -dependencies = [ - "cfg-if", - "lazy_static", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-common" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "ctr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" -dependencies = [ - "cipher 0.3.0", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "serde", - "subtle", - "zeroize", -] - -[[package]] -name = "dashmap" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" -dependencies = [ - "cfg-if", - "num_cpus", - "rayon", -] - -[[package]] -name = "derivation-path" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" -dependencies = [ - "block-buffer 0.10.2", - "crypto-common", - "subtle", -] - -[[package]] -name = "dir-diff" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2860407d7d7e2e004bb2128510ad9e8d669e76fa005ccf567977b5d71b8b4a0b" -dependencies = [ - "walkdir", -] - -[[package]] -name = "ed25519" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed12bbf7b5312f8da1c2722bc06d8c6b12c2d86a7fb35a194c7f3e6fc2bbe39" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-dalek-bip32" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" -dependencies = [ - "derivation-path", - "ed25519-dalek", - "hmac 0.12.1", - "sha2 0.10.2", -] - -[[package]] -name = "educe" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07b7cc9cd8c08d10db74fca3b20949b9b6199725c04a0cce6d543496098fcac" -dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "either" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" - -[[package]] -name = "encoding_rs" -version = "0.8.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enum-iterator" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" -dependencies = [ - "enum-iterator-derive", -] - -[[package]] -name = "enum-iterator-derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "enum-ordinalize" -version = "3.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2170fc0efee383079a8bdd05d6ea2a184d2a0f07a1c1dcabdb2fd5e9f24bc36c" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "rustc_version", - "syn", -] - -[[package]] -name = "enumflags2" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25c90b056b3f84111cf183cbeddef0d3a0bbe9a674f057e1a1533c315f24def" -dependencies = [ - "enumflags2_derive", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "144ec79496cbab6f84fa125dc67be9264aef22eb8a28da8454d9c33f15108da4" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "env_logger" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "fastrand" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" -dependencies = [ - "instant", -] - -[[package]] -name = "feature-probe" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" - -[[package]] -name = "filetime" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "winapi", -] - -[[package]] -name = "flate2" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" -dependencies = [ - "cfg-if", - "crc32fast", - "libc", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" -dependencies = [ - "matches", - "percent-encoding", -] - -[[package]] -name = "futures" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" - -[[package]] -name = "futures-executor" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" - -[[package]] -name = "futures-macro" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" - -[[package]] -name = "futures-task" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" - -[[package]] -name = "futures-util" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" -dependencies = [ - "serde", - "typenum", - "version_check", -] - -[[package]] -name = "gethostname" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4addc164932852d066774c405dbbdb7914742d2b39e39e1a7ca949c856d054d1" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.10.2+wasi-snapshot-preview1", -] - -[[package]] -name = "goblin" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32401e89c6446dcd28185931a01b1093726d0356820ac744023e6850689bf926" -dependencies = [ - "log", - "plain", - "scroll", -] - -[[package]] -name = "h2" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62eeb471aa3e3c9197aa4bfeabfe02982f6dc96f750486c0bb0009ac58b26d2b" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hash32" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc" -dependencies = [ - "byteorder", -] - -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hexdump" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40283dadb02f3af778878be1d717b17b4e4ab92e1d935ab03a730b0542905f2" -dependencies = [ - "arrayvec 0.5.2", - "itertools 0.4.19", -] - -[[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.3", -] - -[[package]] -name = "hmac-drbg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" -dependencies = [ - "digest 0.9.0", - "generic-array", - "hmac 0.8.1", -] - -[[package]] -name = "http" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "hyper" -version = "0.14.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" -dependencies = [ - "http", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "index_list" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9d968042a4902e08810946fc7cd5851eb75e80301342305af755ca06cb82ce" - -[[package]] -name = "indexmap" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "inout" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1f03d4ab4d5dc9ec2d219f86c15d2a15fc08239d1cd3b2d6a19717c0a2f443" -dependencies = [ - "generic-array", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "ipnet" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c" - -[[package]] -name = "itertools" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" - -[[package]] -name = "itertools" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" - -[[package]] -name = "jobserver" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "keccak" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.119" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" - -[[package]] -name = "libloading" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "libsecp256k1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" -dependencies = [ - "arrayref", - "base64 0.12.3", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "typenum", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "lock_api" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - -[[package]] -name = "memchr" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" - -[[package]] -name = "memmap2" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057a3db23999c867821a7a59feb06a578fcb03685e983dff90daf9e7d24ac08f" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "merlin" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.6.3", - "zeroize", -] - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] - -[[package]] -name = "mio" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2" -dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", -] - -[[package]] -name = "modular-bitfield" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" -dependencies = [ - "modular-bitfield-impl", - "static_assertions", -] - -[[package]] -name = "modular-bitfield-impl" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi", -] - -[[package]] -name = "num-bigint" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "once_cell" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "opentelemetry" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf9b1c4e9a6c4de793c632496fa490bdc0e1eea73f0c91394f7b6990935d22" -dependencies = [ - "async-trait", - "crossbeam-channel", - "futures", - "js-sys", - "lazy_static", - "percent-encoding", - "pin-project", - "rand 0.8.5", - "thiserror", -] - -[[package]] -name = "ouroboros" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71643f290d126e18ac2598876d01e1d57aed164afc78fdb6e2a0c6589a1f6662" -dependencies = [ - "aliasable", - "ouroboros_macro", - "stable_deref_trait", -] - -[[package]] -name = "ouroboros_macro" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9a247206016d424fe8497bc611e510887af5c261fbbf977877c4bb55ca4d82" -dependencies = [ - "Inflector", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "parking_lot" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys", -] - -[[package]] -name = "pbkdf2" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" -dependencies = [ - "digest 0.10.3", -] - -[[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "pin-project" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - -[[package]] -name = "polyval" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro-crate" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" -dependencies = [ - "thiserror", - "toml", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "pyth-client" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f779e98b8c8016d0c1409247a204bd4fcdea8b67ceeef545f04e324d66c49e52" -dependencies = [ - "borsh", - "borsh-derive", - "bytemuck", - "num-derive", - "num-traits", - "serde", - "solana-program", - "thiserror", -] - -[[package]] -name = "qstring" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "quote" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom 0.2.5", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rayon" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" -dependencies = [ - "autocfg", - "crossbeam-deque", - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "lazy_static", - "num_cpus", -] - -[[package]] -name = "redox_syscall" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c" -dependencies = [ - "bitflags", -] - -[[package]] -name = "regex" -version = "1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "reqwest" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525" -dependencies = [ - "base64 0.13.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "lazy_static", - "log", - "mime", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-rustls", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "winreg", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustls" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - -[[package]] -name = "rustls-pemfile" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" -dependencies = [ - "base64 0.13.0", -] - -[[package]] -name = "rustversion" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" - -[[package]] -name = "ryu" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scroll" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec" -dependencies = [ - "scroll_derive", -] - -[[package]] -name = "scroll_derive" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "semver" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" - -[[package]] -name = "serde" -version = "1.0.136" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_bytes" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.136" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.3", -] - -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "keccak", - "opaque-debug", -] - -[[package]] -name = "sha3" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881bf8156c87b6301fc5ca6b27f11eeb2761224c7081e69b409d5a1951a70c86" -dependencies = [ - "digest 0.10.3", - "keccak", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4" - -[[package]] -name = "slab" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" - -[[package]] -name = "smallvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" - -[[package]] -name = "socket2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "solana-address-lookup-table-program" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b833e98954aee42d933a072fb29df86c4b7d73de25b152b8411f98d3c4bc8b1d" -dependencies = [ - "bincode", - "bytemuck", - "log", - "num-derive", - "num-traits", - "rustc_version", - "serde", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-program-runtime", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-banks-client" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dc5fd548f9fe46fb1ddf4b3076685d65f98a55989a3be1f78c7de85a531c247" -dependencies = [ - "borsh", - "futures", - "solana-banks-interface", - "solana-program", - "solana-sdk", - "tarpc", - "thiserror", - "tokio", - "tokio-serde", -] - -[[package]] -name = "solana-banks-interface" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8b137011b8ac5cc60b95a387a0704f3c675b370217e71a5ca7d889945a8ffc" -dependencies = [ - "serde", - "solana-sdk", - "tarpc", -] - -[[package]] -name = "solana-banks-server" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4dc58f29c22344a4921e64d831fe8d04c75cb183a23236b5fd6860fcae77cdd" -dependencies = [ - "bincode", - "crossbeam-channel", - "futures", - "solana-banks-interface", - "solana-runtime", - "solana-sdk", - "solana-send-transaction-service", - "tarpc", - "tokio", - "tokio-serde", - "tokio-stream", -] - -[[package]] -name = "solana-bloom" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc4b02ff4727a9d98c8f4a0b2333f246d8396d2782f6a1cc4061d25a3f5c0e6" -dependencies = [ - "bv", - "fnv", - "log", - "rand 0.7.3", - "rayon", - "rustc_version", - "serde", - "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-sdk", -] - -[[package]] -name = "solana-bpf-loader-program" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a4a6717db5fe0d32c2f06403d804bc8473a6915774ddfae250bc7881de5a473" -dependencies = [ - "bincode", - "byteorder", - "libsecp256k1", - "log", - "solana-measure", - "solana-metrics", - "solana-program-runtime", - "solana-sdk", - "solana-zk-token-sdk", - "solana_rbpf", - "thiserror", -] - -[[package]] -name = "solana-bucket-map" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93abc1e09c04746ded0027af1bc14b85c914edfd02bdda05d3ddf1e648e40cfb" -dependencies = [ - "log", - "memmap2", - "modular-bitfield", - "rand 0.7.3", - "solana-measure", - "solana-sdk", - "tempfile", -] - -[[package]] -name = "solana-compute-budget-program" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632e9705cf781cd63fed4db6b2c6b2dd763c9f33a93f948a2de1b3705ba93da9" -dependencies = [ - "solana-program-runtime", - "solana-sdk", -] - -[[package]] -name = "solana-config-program" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "105bb43c93d12727d5a2f2694c42312468f3c62424c81422a53f8b4cdf82dc49" -dependencies = [ - "bincode", - "chrono", - "serde", - "serde_derive", - "solana-program-runtime", - "solana-sdk", -] - -[[package]] -name = "solana-frozen-abi" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f704637b29f1d58b819601efede8eff0998ec10381cb96796dacfe4cfea5581" -dependencies = [ - "bs58", - "bv", - "generic-array", - "log", - "memmap2", - "rustc_version", - "serde", - "serde_derive", - "sha2 0.10.2", - "solana-frozen-abi-macro", - "thiserror", -] - -[[package]] -name = "solana-frozen-abi-macro" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bf045e938c042c59739ba3a77bf1d25cb7cf073bbf3690cc2d56c7cff27ba2" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "syn", -] - -[[package]] -name = "solana-logger" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d97a6f07b5068fdd761b4c5c4ddc1d6cdf5e234abc8f7ed0bf38b46fa4b1eba" -dependencies = [ - "env_logger", - "lazy_static", - "log", -] - -[[package]] -name = "solana-measure" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3171842d99570b8d9c5581c5b0802b1de01bb5ace0aa5f8773d4a45b8acb9d" -dependencies = [ - "log", - "solana-sdk", -] - -[[package]] -name = "solana-metrics" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4910b30a9580eed0e64250d357f985b0572db83c4a7161e1f4c95ccc67384f89" -dependencies = [ - "crossbeam-channel", - "gethostname", - "lazy_static", - "log", - "reqwest", - "solana-sdk", -] - -[[package]] -name = "solana-program" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "888f50c71dc45a528cb63df960e657601fe6fa3d643159d93ebff1dd1cc00b63" -dependencies = [ - "base64 0.13.0", - "bincode", - "bitflags", - "blake3", - "borsh", - "borsh-derive", - "bs58", - "bv", - "bytemuck", - "console_error_panic_hook", - "console_log", - "curve25519-dalek", - "getrandom 0.1.16", - "itertools 0.10.3", - "js-sys", - "lazy_static", - "libsecp256k1", - "log", - "num-derive", - "num-traits", - "parking_lot", - "rand 0.7.3", - "rustc_version", - "rustversion", - "serde", - "serde_bytes", - "serde_derive", - "sha2 0.10.2", - "sha3 0.10.1", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-sdk-macro", - "thiserror", - "wasm-bindgen", -] - -[[package]] -name = "solana-program-runtime" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f01781bc8ef3af7e2b683ea4f8fd35d85fae34fb92da96da22bae9d392794e" -dependencies = [ - "base64 0.13.0", - "bincode", - "enum-iterator", - "itertools 0.10.3", - "libc", - "libloading", - "log", - "num-derive", - "num-traits", - "rustc_version", - "serde", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-measure", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-program-test" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7cadac313ea89b7ca02344c0af569164a1eedf84502e015823b095a7e106f1e" -dependencies = [ - "async-trait", - "base64 0.12.3", - "bincode", - "chrono-humanize", - "log", - "serde", - "solana-banks-client", - "solana-banks-server", - "solana-bpf-loader-program", - "solana-logger", - "solana-program-runtime", - "solana-runtime", - "solana-sdk", - "solana-vote-program", - "thiserror", - "tokio", -] - -[[package]] -name = "solana-rayon-threadlimit" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0d654e7383fa42b6092773ddbd78397c7db09186778eb05e397b27c187e47b" -dependencies = [ - "lazy_static", - "num_cpus", -] - -[[package]] -name = "solana-runtime" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc7825a57262edb374656dc92d58416c987181cc8017877a3790570d9a51adc" -dependencies = [ - "arrayref", - "bincode", - "blake3", - "bv", - "bytemuck", - "byteorder", - "bzip2", - "crossbeam-channel", - "dashmap", - "dir-diff", - "enum-iterator", - "flate2", - "fnv", - "index_list", - "itertools 0.10.3", - "lazy_static", - "log", - "memmap2", - "num-derive", - "num-traits", - "num_cpus", - "ouroboros", - "rand 0.7.3", - "rayon", - "regex", - "rustc_version", - "serde", - "serde_derive", - "solana-address-lookup-table-program", - "solana-bloom", - "solana-bucket-map", - "solana-compute-budget-program", - "solana-config-program", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-measure", - "solana-metrics", - "solana-program-runtime", - "solana-rayon-threadlimit", - "solana-sdk", - "solana-stake-program", - "solana-vote-program", - "solana-zk-token-proof-program", - "solana-zk-token-sdk", - "symlink", - "tar", - "tempfile", - "thiserror", - "zstd", -] - -[[package]] -name = "solana-sdk" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd094e3c7213be0cf9b8e4452705a826f78591aaa1e33be93d9ecfc19e69aa15" -dependencies = [ - "assert_matches", - "base64 0.13.0", - "bincode", - "bitflags", - "borsh", - "bs58", - "bytemuck", - "byteorder", - "chrono", - "derivation-path", - "digest 0.10.3", - "ed25519-dalek", - "ed25519-dalek-bip32", - "generic-array", - "hmac 0.12.1", - "itertools 0.10.3", - "js-sys", - "lazy_static", - "libsecp256k1", - "log", - "memmap2", - "num-derive", - "num-traits", - "pbkdf2", - "qstring", - "rand 0.7.3", - "rand_chacha 0.2.2", - "rustc_version", - "rustversion", - "serde", - "serde_bytes", - "serde_derive", - "serde_json", - "sha2 0.10.2", - "sha3 0.10.1", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-logger", - "solana-program", - "solana-sdk-macro", - "thiserror", - "uriparse", - "wasm-bindgen", -] - -[[package]] -name = "solana-sdk-macro" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2388e9b1690e83413393f3e20d98551cbebae9d9385397600d25ae9992873736" -dependencies = [ - "bs58", - "proc-macro2", - "quote", - "rustversion", - "syn", -] - -[[package]] -name = "solana-send-transaction-service" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f25f4a68456ab25b725f5ceb2813f54404bc5f0f856550e6cacb244858eea2b" -dependencies = [ - "crossbeam-channel", - "log", - "solana-metrics", - "solana-runtime", - "solana-sdk", -] - -[[package]] -name = "solana-stake-program" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4211da1ddcce85c7e5a3efcc86dd8093b31001339bfdcf4833fe329df17148" -dependencies = [ - "bincode", - "log", - "num-derive", - "num-traits", - "rustc_version", - "serde", - "serde_derive", - "solana-config-program", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-metrics", - "solana-program-runtime", - "solana-sdk", - "solana-vote-program", - "thiserror", -] - -[[package]] -name = "solana-vote-program" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfdbdc07303b4538eac63decad5425add559cbd58ebc4b2c983c0a184c07ce8d" -dependencies = [ - "bincode", - "log", - "num-derive", - "num-traits", - "rustc_version", - "serde", - "serde_derive", - "solana-frozen-abi", - "solana-frozen-abi-macro", - "solana-metrics", - "solana-program-runtime", - "solana-sdk", - "thiserror", -] - -[[package]] -name = "solana-zk-token-proof-program" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833b2953da080b736aa77f0e092b3f5bb62d4d2cbff78302595ea1498374a2dc" -dependencies = [ - "bytemuck", - "getrandom 0.1.16", - "num-derive", - "num-traits", - "solana-program-runtime", - "solana-sdk", - "solana-zk-token-sdk", -] - -[[package]] -name = "solana-zk-token-sdk" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa675fb67493c3ef5307f00c099a7c8c840ec24340c8defb300f4ffc0819401" -dependencies = [ - "aes-gcm-siv", - "arrayref", - "base64 0.13.0", - "bincode", - "bytemuck", - "byteorder", - "cipher 0.4.3", - "curve25519-dalek", - "getrandom 0.1.16", - "lazy_static", - "merlin", - "num-derive", - "num-traits", - "rand 0.7.3", - "serde", - "serde_json", - "sha3 0.9.1", - "solana-program", - "solana-sdk", - "subtle", - "thiserror", - "zeroize", -] - -[[package]] -name = "solana_rbpf" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e138f6d6d4eb6a65f8e9f01ca620bc9907d79648d5038a69dd3f07b6ed3f1f" -dependencies = [ - "byteorder", - "combine", - "goblin", - "hash32", - "libc", - "log", - "rand 0.7.3", - "rustc-demangle", - "scroll", - "thiserror", - "time", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spl-token" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc67166ef99d10c18cb5e9c208901e6d8255c6513bb1f877977eba48e6cc4fb" -dependencies = [ - "arrayref", - "num-derive", - "num-traits", - "num_enum", - "solana-program", - "thiserror", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "symlink" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" - -[[package]] -name = "syn" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tarpc" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85d0a9369a919ba0db919b142a2b704cd207dfc676f7a43c2d105d0bc225487" -dependencies = [ - "anyhow", - "fnv", - "futures", - "humantime", - "opentelemetry", - "pin-project", - "rand 0.8.5", - "serde", - "static_assertions", - "tarpc-plugins", - "thiserror", - "tokio", - "tokio-serde", - "tokio-util", - "tracing", - "tracing-opentelemetry", -] - -[[package]] -name = "tarpc-plugins" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thiserror" -version = "1.0.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" -dependencies = [ - "once_cell", -] - -[[package]] -name = "time" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "tinyvec" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "tokio" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" -dependencies = [ - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "once_cell", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "winapi", -] - -[[package]] -name = "tokio-macros" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-serde" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911a61637386b789af998ee23f50aa30d5fd7edcec8d6d3dedae5e5815205466" -dependencies = [ - "bincode", - "bytes", - "educe", - "futures-core", - "futures-sink", - "pin-project", - "serde", - "serde_json", -] - -[[package]] -name = "tokio-stream" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "slab", - "tokio", -] - -[[package]] -name = "toml" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" -dependencies = [ - "serde", -] - -[[package]] -name = "tower-service" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" - -[[package]] -name = "tracing" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" -dependencies = [ - "lazy_static", - "valuable", -] - -[[package]] -name = "tracing-opentelemetry" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599f388ecb26b28d9c1b2e4437ae019a7b336018b45ed911458cd9ebf91129f6" -dependencies = [ - "opentelemetry", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "sharded-slab", - "thread_local", - "tracing-core", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "typenum" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" - -[[package]] -name = "unicode-bidi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" - -[[package]] -name = "unicode-normalization" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "unreachable" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" -dependencies = [ - "void", -] - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "uriparse" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e515b1ada404168e145ac55afba3c42f04cf972201a8552d42e2abb17c1b7221" -dependencies = [ - "fnv", - "lazy_static", -] - -[[package]] -name = "url" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" -dependencies = [ - "form_urlencoded", - "idna", - "matches", - "percent-encoding", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - -[[package]] -name = "wasm-bindgen" -version = "0.2.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" -dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" - -[[package]] -name = "web-sys" -version = "0.3.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" -dependencies = [ - "webpki", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" -dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_msvc" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" - -[[package]] -name = "windows_i686_gnu" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" - -[[package]] -name = "windows_i686_msvc" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" - -[[package]] -name = "winreg" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" -dependencies = [ - "winapi", -] - -[[package]] -name = "xattr" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" -dependencies = [ - "libc", -] - -[[package]] -name = "zeroize" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zstd" -version = "0.10.0+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b1365becbe415f3f0fcd024e2f7b45bacfb5bdd055f0dc113571394114e7bdd" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "4.1.4+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7cd17c9af1a4d6c24beb1cc54b17e2ef7b593dc92f19e9d9acad8b182bbaee" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "1.6.3+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" -dependencies = [ - "cc", - "libc", -] diff --git a/hxro-print-trade-provider/agnostic-orderbook/Cargo.toml b/hxro-print-trade-provider/agnostic-orderbook/Cargo.toml deleted file mode 100644 index 746f202..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "agnostic-orderbook" -version = "0.1.0" -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[features] -no-entrypoint = [] -test-bpf = [] -wasm = [] -debug-asserts = [] -lib = [] -utils = [] - -[dependencies] -solana-program = "=1.14.16" -bytemuck = { version = "1.7.2", features = ["derive"] } -num_enum = "0.5.4" -base64 = "0.13.0" -borsh = "0.9.1" -thiserror = "1.0.24" -num-traits = "0.2" -num-derive = "0.3" -enumflags2 = "0.7.1" -spl-token = { version = "3.2.0", features = ["no-entrypoint"] } -bonfida-utils = "0.2.5" - -[lib] -crate-type = ["cdylib", "lib"] diff --git a/hxro-print-trade-provider/agnostic-orderbook/Xargo.toml b/hxro-print-trade-provider/agnostic-orderbook/Xargo.toml deleted file mode 100644 index 1744f09..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/Xargo.toml +++ /dev/null @@ -1,2 +0,0 @@ -[target.bpfel-unknown-unknown.dependencies.std] -features = [] \ No newline at end of file diff --git a/hxro-print-trade-provider/agnostic-orderbook/src/critbit.rs b/hxro-print-trade-provider/agnostic-orderbook/src/critbit.rs deleted file mode 100644 index 3c93fcb..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/src/critbit.rs +++ /dev/null @@ -1,98 +0,0 @@ -use crate::state::AccountTag; -use borsh::{BorshDeserialize, BorshSerialize}; -use bytemuck::{Pod, Zeroable}; -use num_derive::FromPrimitive; -use solana_program::pubkey::Pubkey; -use std::{cell::RefCell, rc::Rc}; -// A Slab contains the data for a slab header and an array of nodes of a critbit tree -// whose leafs contain the data referencing an order of the orderbook. - -//////////////////////////////////// -// Nodes - -#[doc(hidden)] -pub type NodeHandle = u32; - -#[doc(hidden)] -pub type IoError = std::io::Error; - -/// A critibit leaf node -#[derive(Debug, PartialEq, PartialOrd, Clone, Copy, Pod, Zeroable)] -#[repr(C)] -pub struct LeafNode { - /// The key is the associated order id - pub key: u128, - /// A pointer into the underlying Slab to retrieve the node's associated callback info. The [`Slab::get_callback_info`] method can be used. - pub callback_info_pt: u64, - /// The quantity of base asset associated with the underlying order - pub base_quantity: u64, -} - -pub(crate) const NODE_SIZE: usize = 32; - -pub(crate) const NODE_TAG_SIZE: usize = 8; - -/// The size in bytes of a critbit slot -pub const SLOT_SIZE: usize = NODE_TAG_SIZE + NODE_SIZE; - -impl LeafNode { - /// Parse a leaf node's price - pub fn price(&self) -> u64 { - (self.key >> 64) as u64 - } - - /// Get the associated order id - pub fn order_id(&self) -> u128 { - self.key - } -} - -#[doc(hidden)] -#[derive(BorshDeserialize, BorshSerialize, Debug, PartialEq, Clone, Copy, Pod, Zeroable)] -#[repr(C)] -pub struct FreeNode { - next: u32, -} - -#[derive(Debug, PartialEq, Clone, FromPrimitive)] -pub(crate) enum NodeTag { - Uninitialized, - Inner, - Leaf, - Free, - LastFree, -} - -//////////////////////////////////// -// Slabs - -#[derive(BorshDeserialize, BorshSerialize, Debug, Clone)] -struct SlabHeader { - account_tag: AccountTag, - bump_index: u64, - free_list_len: u64, - free_list_head: u32, - callback_memory_offset: u64, - callback_free_list_len: u64, - callback_free_list_head: u64, - callback_bump_index: u64, - - root_node: u32, - leaf_count: u64, - market_address: Pubkey, -} -#[doc(hidden)] -pub const SLAB_HEADER_LEN: usize = 97; -#[doc(hidden)] -pub const PADDED_SLAB_HEADER_LEN: usize = SLAB_HEADER_LEN + 7; - -/// A Slab contains the data for a slab header and an array of nodes of a critbit tree -/// whose leafs contain the data referencing an order of the orderbook. -#[derive(Clone)] -pub struct Slab<'a> { - _header: SlabHeader, - /// The underlying account data - pub buffer: Rc>, - #[doc(hidden)] - pub callback_info_len: usize, -} diff --git a/hxro-print-trade-provider/agnostic-orderbook/src/entrypoint.rs b/hxro-print-trade-provider/agnostic-orderbook/src/entrypoint.rs deleted file mode 100644 index a11cde4..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/src/entrypoint.rs +++ /dev/null @@ -1,75 +0,0 @@ -use crate::error::AoError; -use num_traits::FromPrimitive; -use solana_program::{ - account_info::AccountInfo, decode_error::DecodeError, entrypoint::ProgramResult, msg, - program_error::PrintProgramError, pubkey::Pubkey, -}; - -#[cfg(not(feature = "no-entrypoint"))] -use solana_program::entrypoint; -#[cfg(not(feature = "no-entrypoint"))] -entrypoint!(process_instruction); - -/// The entrypoint to the AAOB program -pub fn process_instruction( - _program_id: &Pubkey, - _accounts: &[AccountInfo], - _instruction_data: &[u8], -) -> ProgramResult { - msg!("Entrypoint"); - Ok(()) -} - -impl PrintProgramError for AoError { - fn print(&self) - where - E: 'static + std::error::Error + DecodeError + PrintProgramError + FromPrimitive, - { - match self { - AoError::AlreadyInitialized => msg!("Error: This account is already initialized"), - AoError::WrongBidsAccount => msg!("Error: An invalid bids account has been provided."), - AoError::WrongAsksAccount => msg!("Error: An invalid asks account has been provided."), - AoError::WrongEventQueueAccount => { - msg!("Error: An invalid event queue account has been provided.") - } - AoError::WrongCallerAuthority => { - msg!("Error: An invalid caller authority account has been provided.") - } - AoError::EventQueueFull => msg!("Error: The event queue is full. "), - AoError::OrderNotFound => msg!("Error: The order could not be found."), - AoError::WouldSelfTrade => msg!("Error: The order would self trade."), - AoError::SlabOutOfSpace => msg!("Error: The market's memory is full."), - AoError::FeeNotPayed => msg!("Error: The fee was not correctly payed."), - AoError::NoOperations => msg!("Error: This instruction is a No-op."), - AoError::MarketStillActive => msg!("Error: The market is still active"), - AoError::InvalidBaseQuantity => msg!("Error: The base quantity must be > 0"), - AoError::WrongEventQueueOwner => { - msg!("Error: The event queue should be owned by the AO program") - } - AoError::WrongBidsOwner => { - msg!("Error: The bids account should be owned by the AO program") - } - AoError::WrongAsksOwner => { - msg!("Error: The asks account should be owned by the AO program") - } - AoError::WrongMarketOwner => { - msg!("Error: The market account should be owned by the AO program") - } - AoError::WrongMsrmOwner => { - msg!("Error: The MSRM token account should be owned by the cranker") - } - AoError::WrongMsrmMint => { - msg!("Error: An invalid MSRM mint has been provided") - } - AoError::WrongMsrmBalance => { - msg!("Error: The MSRM token account does not have enough balances") - } - AoError::IllegalMsrmOwner => { - msg!("Error: Illegal MSRM token account owner") - } - AoError::InvalidLimitPrice => { - msg!("Error: Limit price must be a tick size multiple") - } - } - } -} diff --git a/hxro-print-trade-provider/agnostic-orderbook/src/error.rs b/hxro-print-trade-provider/agnostic-orderbook/src/error.rs deleted file mode 100644 index c78ebb8..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/src/error.rs +++ /dev/null @@ -1,67 +0,0 @@ -use num_derive::FromPrimitive; -use thiserror::Error; - -use solana_program::{decode_error::DecodeError, program_error::ProgramError}; - -pub type AoResult = Result; - -//TODO clean-up -#[derive(Clone, Debug, Error, FromPrimitive)] -pub enum AoError { - #[error("This account is already initialized")] - AlreadyInitialized, - #[error("An invalid bids account has been provided.")] - WrongBidsAccount, - #[error("An invalid asks account has been provided.")] - WrongAsksAccount, - #[error("An invalid event queue account has been provided.")] - WrongEventQueueAccount, - #[error("An invalid caller authority account has been provided.")] - WrongCallerAuthority, - #[error("The event queue is full.")] - EventQueueFull, - #[error("The order could not be found.")] - OrderNotFound, - #[error("The order would self trade.")] - WouldSelfTrade, - #[error("The market's memory is full.")] - SlabOutOfSpace, - #[error("The due fee was not payed.")] - FeeNotPayed, - #[error("This instruction is a No-op.")] - NoOperations, - #[error("The market is still active")] - MarketStillActive, - #[error("The base quantity must be > 0")] - InvalidBaseQuantity, - #[error("The event queue should be owned by the AO program")] - WrongEventQueueOwner, - #[error("The bids account should be owned by the AO program")] - WrongBidsOwner, - #[error("The asks account should be owned by the AO program")] - WrongAsksOwner, - #[error("The market account should be owned by the AO program")] - WrongMarketOwner, - #[error("The MSRM token account should be owned by the cranker")] - WrongMsrmOwner, - #[error("An invalid MSRM mint has been provided")] - WrongMsrmMint, - #[error("The MSRM token account does not have enough balances")] - WrongMsrmBalance, - #[error("Illegal MSRM token account owner")] - IllegalMsrmOwner, - #[error("Limit price must be a tick size multiple")] - InvalidLimitPrice, -} - -impl From for ProgramError { - fn from(e: AoError) -> Self { - ProgramError::Custom(e as u32) - } -} - -impl DecodeError for AoError { - fn type_of() -> &'static str { - "AOError" - } -} diff --git a/hxro-print-trade-provider/agnostic-orderbook/src/lib.rs b/hxro-print-trade-provider/agnostic-orderbook/src/lib.rs deleted file mode 100644 index 9f2b263..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/src/lib.rs +++ /dev/null @@ -1,65 +0,0 @@ -#![warn(missing_docs)] -/*! -Orderbook program which can be used with generic assets. - -## Overview - -This program is intended to be called upon by other programs that implement specific on-chain orderbooks. -These "caller" program can use the agnostic orderbook as an underlying infrastructure. - -There are two ways to interact with an asset agnostic orderbook : -- creating a new order -- cancelling an existing order - -The AAOB program outputs information through the event queue account in of two ways: -- instantaneous order information through the event queue's register (accessible through the [`read_register`][`state::EventQueue::read_register`] primitive). -- the queue itself - - -## Creating an order - -The [`new_order`][`fn@instruction::new_order`] primitive will push a new order to the orderbook which will optionally match with existing orders if its limit price crosses -the spread. The result of this is a series of matching events pushed to the event queue, as well as the writing of a new order to the orderbook, which will become -immediately available to be matched agains other orders. An [`OrderSummary`][`state::OrderSummary`] object is also written to the event queue's register, yielding -a unique order identifier which will be valid for the whole lifetime of the order : until it is completely matched or cancelled (if it posted). - -More information about different parameters for this primitive can be found [here][`instruction`]. - -## Cancelling an order - -The [`cancel_order`][`fn@instruction::cancel_order`] primitive will act on orders which are posted to the orderbook. It will completely erase a posted order -from the orderbook. The instruction only requires the `order_id`. - -## Processing the queue - -On the caller program's side, the queue can be parsed as an [`EventQueue`][`state::EventQueue`] object. Its [`peek_at`][`state::EventQueue::peek_at`] method can be used -to retrieve particular events. Alternatively, the events can be iterated through with the object's `iter` method. - -An [`Event`][`state::Event`] object describes matching operations as well as purging of orders from the orderbook. Information about the matched parties is provided -through the `callback_info` fields. An example of such information would be a user account or user wallet, enabling the caller program to perform a transfer of assets between -those accounts. A prefix of len [`callback_id_len`][`state::MarketState`] of this information is also used by the program to detect matches which would result in self trading. - -Once event processing is over, it is essential to pop the processed events off the queue. This can be done through the [`consume_events`][`fn@instruction::consume_events`] -primitive. In general, the event processing logic should be handled by a dedicated cranker on the caller program's side. -*/ - -#[doc(hidden)] -pub mod entrypoint; -/// Describes the different data structres that the program uses to encode state -pub mod state; - -/// Describes the orderbook's underlying data structure, the [`Slab`]. -pub mod critbit; -#[doc(hidden)] -pub mod error; - -// pub use processor::msrm_token; -use solana_program::declare_id; - -pub(crate) mod orderbook; -#[doc(hidden)] -// pub(crate) mod processor; -/// Utility functions -pub mod utils; - -declare_id!("DchhQ6g8LyRCM5mnao1MAg3g9twfqBbDmUWgpQpFfn1b"); diff --git a/hxro-print-trade-provider/agnostic-orderbook/src/orderbook.rs b/hxro-print-trade-provider/agnostic-orderbook/src/orderbook.rs deleted file mode 100644 index a5fb59b..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/src/orderbook.rs +++ /dev/null @@ -1,22 +0,0 @@ -use borsh::{BorshDeserialize, BorshSerialize}; - -#[derive(BorshSerialize, BorshDeserialize, Debug)] -/// This struct is written back into the event queue's register after new_order or cancel_order. -/// -/// In the case of a new order, the quantities describe the total order amounts which -/// were either matched against other orders or written into the orderbook. -/// -/// In the case of an order cancellation, the quantities describe what was left of the order in the orderbook. -pub struct OrderSummary { - /// When applicable, the order id of the newly created order. - pub posted_order_id: Option, - #[allow(missing_docs)] - pub total_base_qty: u64, - #[allow(missing_docs)] - pub total_quote_qty: u64, - #[allow(missing_docs)] - pub total_base_qty_posted: u64, -} - -/// The serialized size of an OrderSummary object. -pub const ORDER_SUMMARY_SIZE: u32 = 41; diff --git a/hxro-print-trade-provider/agnostic-orderbook/src/processor.rs b/hxro-print-trade-provider/agnostic-orderbook/src/processor.rs deleted file mode 100644 index 2e38892..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/src/processor.rs +++ /dev/null @@ -1,74 +0,0 @@ -use borsh::BorshDeserialize; -use num_traits::FromPrimitive; -use solana_program::{ - account_info::AccountInfo, entrypoint::ProgramResult, msg, program_error::ProgramError, - pubkey::Pubkey, -}; - -use crate::instruction::AgnosticOrderbookInstruction; - -pub mod cancel_order; -pub mod close_market; -pub mod consume_events; -pub mod create_market; -pub mod new_order; - -#[allow(missing_docs)] -pub mod msrm_token { - use solana_program::declare_id; - - declare_id!("MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L"); -} - -pub struct Processor {} - -impl Processor { - pub fn process_instruction( - program_id: &Pubkey, - accounts: &[AccountInfo], - instruction_data: &[u8], - ) -> ProgramResult { - msg!("Beginning processing"); - let instruction = FromPrimitive::from_u8(instruction_data[0]) - .ok_or(ProgramError::InvalidInstructionData)?; - let instruction_data = &instruction_data[1..]; - msg!("Instruction unpacked"); - - match instruction { - AgnosticOrderbookInstruction::CreateMarket => { - msg!("Instruction: Create Market"); - let accounts = create_market::Accounts::parse(accounts)?; - let params = create_market::Params::try_from_slice(instruction_data) - .map_err(|_| ProgramError::InvalidInstructionData)?; - create_market::process(program_id, accounts, params)?; - } - AgnosticOrderbookInstruction::NewOrder => { - msg!("Instruction: New Order"); - let accounts = new_order::Accounts::parse(accounts)?; - let params = new_order::Params::try_from_slice(instruction_data) - .map_err(|_| ProgramError::InvalidInstructionData)?; - new_order::process(program_id, accounts, params)?; - } - AgnosticOrderbookInstruction::ConsumeEvents => { - msg!("Instruction: Consume Events"); - let accounts = consume_events::Accounts::parse(accounts)?; - let params = consume_events::Params::try_from_slice(instruction_data) - .map_err(|_| ProgramError::InvalidInstructionData)?; - consume_events::process(program_id, accounts, params)?; - } - AgnosticOrderbookInstruction::CancelOrder => { - msg!("Instruction: Cancel Order"); - let accounts = cancel_order::Accounts::parse(accounts)?; - let params = cancel_order::Params::try_from_slice(instruction_data) - .map_err(|_| ProgramError::InvalidInstructionData)?; - cancel_order::process(program_id, accounts, params)?; - } - AgnosticOrderbookInstruction::CloseMarket => { - msg!("Instruction: Close Market"); - let accounts = close_market::Accounts::parse(accounts)?; - close_market::process(program_id, accounts, close_market::Params {})?; - } - } - Ok(()) - } -} diff --git a/hxro-print-trade-provider/agnostic-orderbook/src/state.rs b/hxro-print-trade-provider/agnostic-orderbook/src/state.rs deleted file mode 100644 index dadb812..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/src/state.rs +++ /dev/null @@ -1,317 +0,0 @@ -use bonfida_utils::BorshSize; -use borsh::{BorshDeserialize, BorshSerialize}; -use bytemuck::{try_from_bytes_mut, Pod, Zeroable}; -use num_derive::{FromPrimitive, ToPrimitive}; -use num_traits::{FromPrimitive, ToPrimitive}; -use solana_program::{account_info::AccountInfo, program_error::ProgramError}; -use std::{ - cell::{RefCell, RefMut}, - convert::TryInto, - io::Write, - mem::size_of, - rc::Rc, -}; -extern crate base64; -use crate::critbit::IoError; - -pub use crate::orderbook::{OrderSummary, ORDER_SUMMARY_SIZE}; - -#[derive(BorshDeserialize, BorshSerialize, Copy, Clone, Debug, PartialEq)] -#[allow(missing_docs)] -#[repr(u8)] -pub enum AccountTag { - Uninitialized, - Market, - EventQueue, - Bids, - Asks, -} - -#[derive( - BorshDeserialize, - BorshSerialize, - Clone, - Copy, - PartialEq, - FromPrimitive, - ToPrimitive, - Debug, - BorshSize, -)] -#[repr(u8)] -#[allow(missing_docs)] -pub enum Side { - Bid, - Ask, -} - -impl Side { - /// Helper function to get the opposite side. - pub fn opposite(&self) -> Self { - match self { - Side::Bid => Side::Ask, - Side::Ask => Side::Bid, - } - } -} - -#[derive(BorshDeserialize, BorshSerialize, Clone, PartialEq, FromPrimitive, BorshSize)] -/// Describes what happens when two order with identical callback informations are matched together -pub enum SelfTradeBehavior { - /// The orders are matched together - DecrementTake, - /// The order on the provide side is cancelled. Matching for the current order continues and essentially bypasses - /// the self-provided order. - CancelProvide, - /// The entire transaction fails and the program returns an error. - AbortTransaction, -} - -#[derive(Debug, Copy, Clone, Pod, Zeroable)] -#[repr(C)] -/// The orderbook market's central state -pub struct MarketState { - /// Identifies the account as a [`MarketState`] object. - pub tag: u64, - /// The required signer for all market operations. - pub caller_authority: [u8; 32], - /// The public key of the orderbook's event queue account - pub event_queue: [u8; 32], - /// The public key of the orderbook's bids account - pub bids: [u8; 32], - /// The public key of the orderbook's asks account - pub asks: [u8; 32], - /// The length of an order actor's callback identifier. - pub callback_id_len: u64, - /// The length of an order's callback metadata. - pub callback_info_len: u64, - /// The current budget of fees that have been collected. - /// Cranker rewards are taken from this. This value allows - /// for a verification that the fee was payed in the caller program - /// runtime while not having to add a CPI call to the serum-core. - pub fee_budget: u64, - /// The amount of lamports the market account was created with. - pub initial_lamports: u64, - /// The minimum order size that can be inserted into the orderbook after matching. - pub min_base_order_size: u64, - /// Tick size (FP32) - pub tick_size: u64, - /// Cranker reward (in lamports) - pub cranker_reward: u64, -} - -/// Expected size in bytes of MarketState -pub const MARKET_STATE_LEN: usize = size_of::(); - -impl MarketState { - #[allow(missing_docs)] - pub fn get<'a, 'b: 'a>( - account_info: &'a AccountInfo<'b>, - ) -> Result, ProgramError> { - if account_info.data.borrow().len() != MARKET_STATE_LEN { - return Err(ProgramError::InvalidAccountData); - }; - let a = Self::get_unchecked(account_info); - if a.tag != AccountTag::Market as u64 { - return Err(ProgramError::InvalidAccountData); - }; - Ok(a) - } - - #[allow(missing_docs)] - pub fn get_unchecked<'a, 'b: 'a>(account_info: &'a AccountInfo<'b>) -> RefMut<'a, Self> { - let a = RefMut::map(account_info.data.borrow_mut(), |s| { - try_from_bytes_mut::(&mut s[0..MARKET_STATE_LEN]).unwrap() - }); - a - } -} - -//////////////////////////////////////////////////// -// Events -#[derive(BorshDeserialize, BorshSerialize, Debug)] -/// Events are the primary output of the asset agnostic orderbook -pub enum Event { - /// A fill event describes a match between a taker order and a provider order - Fill { - #[allow(missing_docs)] - taker_side: Side, - /// The order id of the maker order - maker_order_id: u128, - /// The total quote size of the transaction - quote_size: u64, - /// The total base size of the transaction - base_size: u64, - /// The callback information for the maker - maker_callback_info: Vec, - /// The callback information for the taker - taker_callback_info: Vec, - }, - /// An out event describes an order which has been taken out of the orderbook - Out { - #[allow(missing_docs)] - side: Side, - #[allow(missing_docs)] - order_id: u128, - #[allow(missing_docs)] - base_size: u64, - #[allow(missing_docs)] - delete: bool, - #[allow(missing_docs)] - callback_info: Vec, - }, -} - -impl Event { - /// Used to serialize an event object into a generic byte writer. - pub fn serialize(&self, writer: &mut W) -> Result<(), IoError> { - match self { - Event::Fill { - taker_side, - maker_order_id, - quote_size, - base_size, - maker_callback_info, - taker_callback_info, - } => { - writer.write_all(&[0])?; - writer.write_all(&[taker_side.to_u8().unwrap()])?; - writer.write_all(&maker_order_id.to_le_bytes())?; - writer.write_all("e_size.to_le_bytes())?; - writer.write_all(&base_size.to_le_bytes())?; - writer.write_all(maker_callback_info)?; - writer.write_all(taker_callback_info)?; - } - Event::Out { - side, - order_id, - base_size, - delete, - callback_info, - } => { - writer.write_all(&[1])?; - writer.write_all(&[side.to_u8().unwrap()])?; - writer.write_all(&order_id.to_le_bytes())?; - writer.write_all(&base_size.to_le_bytes())?; - writer.write_all(&[(*delete as u8)])?; - writer.write_all(callback_info)?; - } - }; - Ok(()) - } - - /// Used to deserialize an event object from bytes. - pub fn deserialize(buf: &mut &[u8], callback_info_len: usize) -> Self { - match buf[0] { - 0 => Event::Fill { - taker_side: Side::from_u8(buf[1]).unwrap(), - maker_order_id: u128::from_le_bytes(buf[2..18].try_into().unwrap()), - quote_size: u64::from_le_bytes(buf[18..26].try_into().unwrap()), - base_size: u64::from_le_bytes(buf[26..34].try_into().unwrap()), - maker_callback_info: buf[34..34 + callback_info_len].to_owned(), - taker_callback_info: buf[34 + callback_info_len..34 + (callback_info_len << 1)] - .to_owned(), - }, - 1 => Event::Out { - side: Side::from_u8(buf[1]).unwrap(), - order_id: u128::from_le_bytes(buf[2..18].try_into().unwrap()), - base_size: u64::from_le_bytes(buf[18..26].try_into().unwrap()), - delete: buf[26] == 1, - callback_info: buf[27..27 + callback_info_len].to_owned(), - }, - _ => unreachable!(), - } - } - - /// An event queue is divided into slots. The size of these slots depend on the particular market's `callback_info_len` constant. - pub fn compute_slot_size(callback_info_len: usize) -> usize { - 1 + 33 + 2 * callback_info_len - } -} - -//////////////////////////////////////////////////// -// Event Queue - -#[derive(BorshDeserialize, BorshSerialize, Clone)] -/// Describes the current state of the event queue -pub struct EventQueueHeader { - tag: AccountTag, // Initialized, EventQueue - /// The current event - pub head: u64, - /// The current event queue length - pub count: u64, - event_size: u64, - seq_num: u64, -} -#[allow(missing_docs)] -pub const EVENT_QUEUE_HEADER_LEN: usize = 33; -#[allow(missing_docs)] -pub const REGISTER_SIZE: usize = ORDER_SUMMARY_SIZE as usize + 1; // Option - -/// The event queue account contains a serialized header, a register -/// and a circular buffer of serialized events. -/// -/// This struct is used at runtime but doesn't represent a serialized event queue -pub struct EventQueue<'a> { - pub(crate) _header: EventQueueHeader, - pub(crate) _buffer: Rc>, //The whole account data - _callback_info_len: usize, -} - -/// The event queue register can hold arbitrary data returned by the AAOB. Currently only used to return [`OrderSummary`] objects. -pub type Register = Option; - -/// This method is used to deserialize the event queue's register -/// without constructing an EventQueue instance -/// -/// The nature of the serialized object should be deductible from caller context -pub fn read_register( - event_q_acc: &AccountInfo, -) -> Result, IoError> { - let mut register = - &event_q_acc.data.borrow()[EVENT_QUEUE_HEADER_LEN..EVENT_QUEUE_HEADER_LEN + REGISTER_SIZE]; - Register::deserialize(&mut register) -} - -#[cfg(feature = "no-entrypoint")] -/// Utility struct for iterating over a queue -pub struct QueueIterator<'a, 'b> { - queue_header: &'b EventQueueHeader, - buffer: Rc>, //The whole account data - current_index: usize, - callback_info_len: usize, - buffer_length: usize, - header_offset: usize, - remaining: u64, -} - -#[cfg(feature = "no-entrypoint")] -impl<'a, 'b> Iterator for QueueIterator<'a, 'b> { - type Item = Event; - - fn next(&mut self) -> Option { - if self.remaining == 0 { - return None; - } - let result = Event::deserialize( - &mut &self.buffer.borrow()[self.header_offset + self.current_index..], - self.callback_info_len, - ); - self.current_index = - (self.current_index + self.queue_header.event_size as usize) % self.buffer_length; - self.remaining -= 1; - Some(result) - } -} - -/// This byte flag is set for order_ids with side Bid, and unset for side Ask -pub const ORDER_ID_SIDE_FLAG: u128 = 1 << 63; - -/// This helper function deduces an order's side from its order_id -pub fn get_side_from_order_id(order_id: u128) -> Side { - if ORDER_ID_SIDE_FLAG & order_id != 0 { - Side::Bid - } else { - Side::Ask - } -} diff --git a/hxro-print-trade-provider/agnostic-orderbook/src/utils.rs b/hxro-print-trade-provider/agnostic-orderbook/src/utils.rs deleted file mode 100644 index 9d21054..0000000 --- a/hxro-print-trade-provider/agnostic-orderbook/src/utils.rs +++ /dev/null @@ -1,20 +0,0 @@ -use crate::state::Side; - -#[allow(dead_code)] -#[cfg(not(debug_assertions))] -#[inline(always)] -unsafe fn invariant(check: bool) { - if check { - std::hint::unreachable_unchecked(); - } -} - -/// Rounds a given price the nearest tick size according to the rules of the AOB -pub fn round_price(tick_size: u64, limit_price: u64, side: Side) -> u64 { - match side { - // Round down - Side::Bid => tick_size * (limit_price / tick_size), - // Round up - Side::Ask => tick_size * ((limit_price + tick_size - 1) / tick_size), - } -} diff --git a/hxro-print-trade-provider/dex/Cargo.toml b/hxro-print-trade-provider/dex/Cargo.toml deleted file mode 100644 index 0f5c7d0..0000000 --- a/hxro-print-trade-provider/dex/Cargo.toml +++ /dev/null @@ -1,37 +0,0 @@ -[package] -edition = "2021" -name = "dex" -version = "0.1.0" -resolver = "2" - -[features] -no-entrypoint = [] -cpi = ["no-entrypoint"] -test-bpf = [] - -[dependencies] -agnostic-orderbook = { version = "0.1.0", path = "../agnostic-orderbook", features = [ - "no-entrypoint", -] } -anchor-lang = "0.28.0" -anchor-spl = "0.28.0" -arrayref = "0.3.6" -base64 = "0.13.0" -bonfida-utils = "0.2" -borsh = "0.9" -bytemuck = { version = "1.4.0", features = ["derive", "min_const_generics"] } -pyth-client = { version = "0.3.0", features = ["no-entrypoint"] } -spl-associated-token-account = { version = "1.0.3", features = [ - "no-entrypoint", -] } -spl-token = { version = "3.1.1", features = ["no-entrypoint"] } -thiserror = "1.0" -num-traits = "0.2.14" -num-derive = "0.3" -num = "0.4" -itertools = "0.10.3" -serde = "1.0.136" -serde-big-array = { version = "0.3.2", features = ["const-generics"] } - -[lib] -crate-type = ["cdylib", "lib"] diff --git a/hxro-print-trade-provider/dex/src/error.rs b/hxro-print-trade-provider/dex/src/error.rs deleted file mode 100644 index 9425a66..0000000 --- a/hxro-print-trade-provider/dex/src/error.rs +++ /dev/null @@ -1,225 +0,0 @@ -use num_derive::FromPrimitive; -use std::{error::Error, fmt::Formatter}; - -use anchor_lang::solana_program::{ - decode_error::DecodeError, program_error::ProgramError, pubkey::PubkeyError, -}; -use thiserror::Error; - -pub type DomainOrProgramResult = std::result::Result; - -#[derive(Error, Debug, Clone, PartialEq)] -pub enum DomainOrProgramError { - DexErr(DexError), - UtilErr(UtilError), - ProgramErr(ProgramError), - Other { code: u32, msg: String }, -} - -#[derive(Error, Debug, Copy, Clone, FromPrimitive, PartialEq)] -pub enum UtilError { - #[error("AccountAlreadyInitialized")] - AccountAlreadyInitialized, - #[error("AccountUninitialized")] - AccountUninitialized, - #[error("DuplicateProductKey")] - DuplicateProductKey, - #[error("PublicKeyMismatch")] - PublicKeyMismatch, - #[error("AssertionError")] - AssertionError, - #[error("InvalidMintAuthority")] - InvalidMintAuthority, - #[error("IncorrectOwner")] - IncorrectOwner, - #[error("PublicKeysShouldBeUnique")] - PublicKeysShouldBeUnique, - #[error("NotRentExempt")] - NotRentExempt, - #[error("NumericalOverflow")] - NumericalOverflow, - #[error("Rounding loses precision")] - RoundError, - #[error("Division by zero")] - DivisionbyZero, - #[error("Invalid return value")] - InvalidReturnValue, - #[error("Negative Number Sqrt")] - SqrtRootError, - #[error("Zero Price Error")] - ZeroPriceError, - #[error("Zero Quantity Error")] - ZeroQuantityError, - #[error("Serialization Error")] - SerializeError, - #[error("Deerialization Error")] - DeserializeError, - #[error("Invalid index for bitset")] - InvalidBitsetIndex, -} - -#[derive(Error, Debug, Copy, Clone, FromPrimitive, PartialEq)] -pub enum DexError { - #[error("ContractIsExpired")] - ContractIsExpired, - #[error("ContractIsNotExpired")] - ContractIsNotExpired, - #[error("Invalid system program account provided")] - InvalidSystemProgramAccount, - #[error("Invalid AOB program account provided")] - InvalidAobProgramAccount, - #[error("A provided state account was not owned by the current program")] - InvalidStateAccountOwner, - #[error("The given order index is invalid.")] - InvalidOrderIndex, - #[error("The user account has reached its maximum capacity for open orders.")] - UserAccountFull, - #[error("The transaction has been aborted.")] - TransactionAborted, - #[error("A required user account is missing.")] - MissingUserAccount, - #[error("The specified order has not been found.")] - OrderNotFound, - #[error("The operation is a no-op")] - NoOp, - #[error("The user does not own enough lamports")] - OutofFunds, - #[error("The user account is still active")] - UserAccountStillActive, - #[error("Market is still active")] - MarketStillActive, - #[error("Invalid market signer provided")] - InvalidMarketSignerAccount, - #[error("Invalid orderbook account provided")] - InvalidOrderbookAccount, - #[error("Invalid market admin account provided")] - InvalidMarketAdminAccount, - #[error("Invalid base vault account provided")] - InvalidBaseVaultAccount, - #[error("Invalid quote vault account provided")] - InvalidQuoteVaultAccount, - #[error("Market product group has no empty slot")] - FullMarketProductGroup, - #[error("Missing Market Product")] - MissingMarketProduct, - #[error("Invalid Withdrawal Amount")] - InvalidWithdrawalAmount, - #[error("Taker Trader has no product")] - InvalidTakerTrader, - #[error("Funds negative or fraction")] - FundsError, - #[error("Product is inactive")] - InactiveProductError, - #[error("Too many open orders")] - TooManyOpenOrdersError, - #[error("No more open orders")] - NoMoreOpenOrdersError, - #[error("Non zero price tick exponent")] - NonZeroPriceTickExponentError, - #[error("Duplicate product name")] - DuplicateProductNameError, - #[error("Invalid Risk Response")] - InvalidRiskResponseError, - #[error("Invalid Operation for Account Health")] - InvalidAccountHealthError, - #[error("Orderbook is empty")] - OrderbookIsEmptyError, - #[error("Combos not removed for expired product")] - CombosNotRemoved, - #[error("Trader risk group is not liquidable")] - AccountNotLiquidable, - #[error("Funding precision is more granular than the limit")] - FundingPrecisionError, - #[error("Product decimal precision error")] - ProductDecimalPrecisionError, - #[error("Expected product to be an outright product")] - ProductNotOutright, - #[error("Expected product to be a combo product")] - ProductNotCombo, - #[error("Risk engine returned an invalid social loss vector")] - InvalidSocialLossCalculation, - #[error("Risk engine returned invalid product indices in social loss vector")] - ProductIndexMismatch, - #[error("Invalid order ID")] - InvalidOrderID, - #[error("Invalid bytes for zero-copy deserialization")] - InvalidBytesForZeroCopyDeserialization, -} - -impl From for ProgramError { - fn from(e: UtilError) -> Self { - ProgramError::Custom(e as u32) - } -} - -impl DecodeError for UtilError { - fn type_of() -> &'static str { - "UtilError" - } -} - -impl std::fmt::Display for DomainOrProgramError { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - match self { - DomainOrProgramError::ProgramErr(p) => write!(f, "{}", p), - DomainOrProgramError::UtilErr(p) => write!(f, "{}", p), - DomainOrProgramError::DexErr(p) => write!(f, "{}", p), - DomainOrProgramError::Other { code, msg } => { - write!(f, "DomainOrProgramError::Other code: {} msg: {}", code, msg) - } - } - } -} - -impl From for ProgramError { - fn from(e: DomainOrProgramError) -> Self { - match e { - DomainOrProgramError::DexErr(e) => e.into(), - DomainOrProgramError::UtilErr(e) => e.into(), - DomainOrProgramError::Other { code, msg: _ } => ProgramError::Custom(code), - DomainOrProgramError::ProgramErr(e) => e, - } - } -} - -impl From for ProgramError { - fn from(e: DexError) -> Self { - ProgramError::Custom(e as u32) - } -} - -impl From for DomainOrProgramError { - fn from(e: anchor_lang::error::Error) -> Self { - ProgramError::from(e).into() - } -} - -impl From for DomainOrProgramError { - fn from(e: PubkeyError) -> Self { - ProgramError::from(e).into() - } -} - -impl From for DomainOrProgramError { - fn from(e: ProgramError) -> Self { - DomainOrProgramError::ProgramErr(e) - } -} - -impl From for DomainOrProgramError { - fn from(e: DexError) -> Self { - DomainOrProgramError::DexErr(e) - } -} - -impl From for DomainOrProgramError { - fn from(e: UtilError) -> Self { - DomainOrProgramError::UtilErr(e) - } -} - -impl DecodeError for DexError { - fn type_of() -> &'static str { - "DexError" - } -} diff --git a/hxro-print-trade-provider/dex/src/lib.rs b/hxro-print-trade-provider/dex/src/lib.rs deleted file mode 100644 index 199ed07..0000000 --- a/hxro-print-trade-provider/dex/src/lib.rs +++ /dev/null @@ -1,760 +0,0 @@ -#![allow(unused_imports)] -#![allow(clippy::result_large_err)] -#![allow(clippy::needless_lifetimes)] -#![allow(clippy::derivable_impls)] -#![allow(clippy::match_like_matches_macro)] -#![allow(clippy::large_enum_variant)] -#![allow(clippy::should_implement_trait)] -#![allow(clippy::comparison_chain)] -#![allow(clippy::redundant_pattern_matching)] -#![allow(clippy::single_char_pattern)] -#![allow(clippy::cast_abs_to_unsigned)] -#![allow(clippy::neg_multiply)] - -use agnostic_orderbook::state::{SelfTradeBehavior, Side}; -use anchor_lang::{ - prelude::*, - solana_program::{ - account_info::AccountInfo, - entrypoint::ProgramResult, - instruction::{AccountMeta, Instruction}, - pubkey::Pubkey, - sysvar::{rent::Rent, Sysvar}, - }, -}; -use anchor_spl::token::{Mint, Token, TokenAccount}; -use borsh::{BorshDeserialize, BorshSerialize}; -use state::{ - print_trade::{PrintTrade, PrintTradeProductIndexes}, - trader_risk_group::LockedCollateralProductIndexes, -}; - -use crate::{ - state::{ - constants::NAME_LEN, - enums::OrderType, - fee_model::TraderFeeParams, - market_product_group::MarketProductGroup, - risk_engine_register::{OperationType, OrderInfo, RiskOutputRegister}, - trader_risk_group::TraderRiskGroup, - }, - utils::numeric::Fractional, -}; - -pub mod error; -/// Describes the data structures the program uses to encode state -pub mod state; -/// Helper functions -pub mod utils; - -declare_id!("FUfpR31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL"); - -#[program] -pub mod dex { - use super::*; - - pub fn initialize_market_product_group( - _ctx: Context, - _params: InitializeMarketProductGroupParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn initialize_market_product( - _ctx: Context, - _params: InitializeMarketProductParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn remove_market_product(_ctx: Context) -> ProgramResult { - Ok(()) - } - - pub fn initialize_trader_risk_group<'a, 'b, 'c, 'info>( - _ctx: Context<'a, 'b, 'c, 'info, InitializeTraderRiskGroup<'info>>, - ) -> ProgramResult { - Ok(()) - } - - pub fn new_order<'info>( - _ctx: Context<'_, '_, '_, 'info, NewOrder<'info>>, - _params: NewOrderParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn consume_orderbook_events<'a, 'b, 'c, 'info>( - _ctx: Context<'a, 'b, 'c, 'info, ConsumeOrderbookEvents<'info>>, - _params: ConsumeOrderbookEventsParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn cancel_order<'info>( - _ctx: Context<'_, '_, '_, 'info, CancelOrder<'info>>, - _params: CancelOrderParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn deposit_funds( - _ctx: Context, - _params: DepositFundsParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn withdraw_funds<'info>( - _ctx: Context<'_, '_, '_, 'info, WithdrawFunds<'info>>, - _params: WithdrawFundsParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn update_product_funding( - _ctx: Context, - _params: UpdateProductFundingParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn transfer_full_position<'info>( - _ctx: Context<'_, '_, '_, 'info, TransferFullPosition<'info>>, - ) -> ProgramResult { - // msg!("Dex Instr: Transfer full position"); - Ok(()) - } - - pub fn initialize_combo( - _ctx: Context, - _params: InitializeComboParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn update_trader_funding(_ctx: Context) -> ProgramResult { - Ok(()) - } - - pub fn clear_expired_orderbook( - _ctx: Context, - _params: ClearExpiredOrderbookParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn sweep_fees(_ctx: Context) -> ProgramResult { - Ok(()) - } - - pub fn choose_successor(_ctx: Context) -> ProgramResult { - Ok(()) - } - - pub fn claim_authority(_ctx: Context) -> ProgramResult { - Ok(()) - } - - pub fn lock_collateral<'info>( - _ctx: Context<'_, '_, '_, 'info, LockCollateral<'info>>, - _params: LockCollateralParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn initialize_print_trade( - _ctx: Context, - _params: InitializePrintTradeParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn sign_print_trade<'info>( - _ctx: Context<'_, '_, '_, 'info, SignPrintTrade<'info>>, - _params: SignPrintTradeParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn execute_print_trade<'info>( - _ctx: Context<'_, '_, '_, 'info, ExecutePrintTrade<'info>>, - ) -> Result<()> { - Ok(()) - } - - pub fn close_print_trade<'info>( - _ctx: Context<'_, '_, '_, 'info, ClosePrintTrade<'info>>, - ) -> Result<()> { - Ok(()) - } -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Debug, Clone)] -pub struct InitializeMarketProductGroupParams { - pub name: [u8; NAME_LEN], - pub validate_account_discriminant_len: u64, - pub find_fees_discriminant_len: u64, - pub validate_account_health_discriminant: [u8; 8], - pub validate_account_liquidation_discriminant: [u8; 8], - pub create_risk_state_account_discriminant: [u8; 8], - pub create_fee_state_account_discriminant: [u8; 8], - pub find_fees_discriminant: [u8; 8], - pub max_maker_fee_bps: i16, - pub min_maker_fee_bps: i16, - pub max_taker_fee_bps: i16, - pub min_taker_fee_bps: i16, -} - -#[derive(Accounts)] -pub struct InitializeMarketProductGroup<'info> { - authority: Signer<'info>, - #[account(zero)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - #[account(mut)] - market_product_group_vault: AccountInfo<'info>, - vault_mint: Account<'info, Mint>, - fee_collector: AccountInfo<'info>, - #[account(executable)] - fee_model_program: AccountInfo<'info>, - fee_model_configuration_acct: AccountInfo<'info>, - risk_model_configuration_acct: AccountInfo<'info>, - #[account(executable)] - risk_engine_program: AccountInfo<'info>, - sysvar_rent: AccountInfo<'info>, - system_program: Program<'info, System>, - token_program: Program<'info, Token>, - fee_output_register: AccountInfo<'info>, - risk_output_register: AccountInfo<'info>, - staking_fee_collector: AccountInfo<'info>, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Debug, Clone)] -pub struct InitializeMarketProductParams { - pub name: [u8; NAME_LEN], - pub tick_size: Fractional, - pub base_decimals: u64, - pub price_offset: Fractional, // Allows for negative prices in ticks up to -price_offset -} - -#[derive(Accounts)] -pub struct InitializeMarketProduct<'info> { - authority: Signer<'info>, - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - product: AccountInfo<'info>, - orderbook: AccountInfo<'info>, -} - -#[derive(Accounts)] -pub struct RemoveMarketProduct<'info> { - authority: Signer<'info>, - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - product: AccountInfo<'info>, - #[account(executable)] - aaob_program: AccountInfo<'info>, - #[account(mut)] - orderbook: AccountInfo<'info>, - market_signer: AccountInfo<'info>, - #[account(mut)] - event_queue: AccountInfo<'info>, - #[account(mut)] - bids: AccountInfo<'info>, - #[account(mut)] - asks: AccountInfo<'info>, -} - -#[derive(Accounts)] -pub struct InitializeTraderRiskGroup<'info> { - #[account(mut)] - owner: Signer<'info>, - #[account(zero)] - trader_risk_group: AccountLoader<'info, TraderRiskGroup>, - market_product_group: AccountLoader<'info, MarketProductGroup>, - risk_signer: AccountInfo<'info>, - #[account(mut)] - trader_risk_state_acct: Signer<'info>, - #[account(mut)] - trader_fee_state_acct: AccountInfo<'info>, - risk_engine_program: AccountInfo<'info>, - fee_model_config_acct: AccountInfo<'info>, - fee_model_program: AccountInfo<'info>, - system_program: Program<'info, System>, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Clone)] -pub struct NewOrderParams { - /// The order's side (Bid or Ask) - pub side: Side, - /// The max quantity of base token to match and post - pub max_base_qty: Fractional, - /// The order type (supported types include Limit, FOK, IOC and PostOnly) - pub order_type: OrderType, - /// Configures what happens when this order is at least partially matched against an order belonging to the same user account - pub self_trade_behavior: SelfTradeBehavior, - /// The maximum number of orders to be matched against. - /// Setting this number too high can sometimes lead to excessive resource consumption which can cause a failure. - pub match_limit: u64, - /// The order's limit price in ticks - pub limit_price: Fractional, -} - -#[derive(Accounts)] -pub struct NewOrder<'info> { - #[account(mut, signer)] - user: AccountInfo<'info>, - #[account(mut)] - trader_risk_group: AccountLoader<'info, TraderRiskGroup>, - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - product: AccountInfo<'info>, - #[account(executable)] - aaob_program: AccountInfo<'info>, - #[account(mut)] - orderbook: AccountInfo<'info>, - market_signer: AccountInfo<'info>, - #[account(mut)] - event_queue: AccountInfo<'info>, - #[account(mut)] - bids: AccountInfo<'info>, - #[account(mut)] - asks: AccountInfo<'info>, - system_program: Program<'info, System>, - #[account(executable)] - fee_model_program: AccountInfo<'info>, - fee_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - trader_fee_state_acct: AccountInfo<'info>, - #[account(mut)] - fee_output_register: AccountInfo<'info>, - #[account(executable)] - risk_engine_program: AccountInfo<'info>, - risk_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - risk_output_register: AccountInfo<'info>, - #[account(mut)] - trader_risk_state_acct: AccountInfo<'info>, - risk_and_fee_signer: AccountInfo<'info>, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Clone)] -pub struct ConsumeOrderbookEventsParams { - /// The maximum number of events to consume - pub max_iterations: u64, -} - -#[derive(Accounts)] -pub struct ConsumeOrderbookEvents<'info> { - #[account(executable)] - aaob_program: AccountInfo<'info>, - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - product: AccountInfo<'info>, - market_signer: AccountInfo<'info>, - #[account(mut)] - orderbook: AccountInfo<'info>, - #[account(mut)] - event_queue: AccountInfo<'info>, - #[account(mut, signer)] - reward_target: AccountInfo<'info>, - #[account(executable)] - fee_model_program: AccountInfo<'info>, - fee_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - fee_output_register: AccountInfo<'info>, - risk_and_fee_signer: AccountInfo<'info>, - // Remaining accounts are for risk engine -} -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Clone)] -pub struct CancelOrderParams { - /// The order_id of the order to cancel. Redundancy is used here to avoid having to iterate over all - /// open orders on chain. - pub order_id: u128, -} - -#[derive(Accounts)] -pub struct CancelOrder<'info> { - user: Signer<'info>, - #[account(mut)] - trader_risk_group: AccountLoader<'info, TraderRiskGroup>, - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - product: AccountInfo<'info>, - #[account(executable)] - aaob_program: AccountInfo<'info>, - #[account(mut)] - orderbook: AccountInfo<'info>, - market_signer: AccountInfo<'info>, - #[account(mut)] - event_queue: AccountInfo<'info>, - #[account(mut)] - bids: AccountInfo<'info>, - #[account(mut)] - asks: AccountInfo<'info>, - system_program: Program<'info, System>, - #[account(executable)] - risk_engine_program: AccountInfo<'info>, - risk_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - risk_output_register: AccountInfo<'info>, - #[account(mut)] - trader_risk_state_acct: AccountInfo<'info>, - risk_signer: AccountInfo<'info>, - // Remaining accounts are for risk engine -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Clone)] -pub struct DepositFundsParams { - pub quantity: Fractional, -} - -#[derive(Accounts)] -pub struct DepositFunds<'info> { - token_program: Program<'info, Token>, - user: Signer<'info>, - #[account(mut)] - user_token_account: Account<'info, TokenAccount>, - #[account(mut)] - trader_risk_group: AccountLoader<'info, TraderRiskGroup>, - market_product_group: AccountLoader<'info, MarketProductGroup>, - #[account(mut)] - market_product_group_vault: Account<'info, TokenAccount>, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Clone)] -pub struct WithdrawFundsParams { - pub quantity: Fractional, -} - -#[derive(Accounts)] -pub struct WithdrawFunds<'info> { - token_program: Program<'info, Token>, - user: Signer<'info>, - #[account(mut)] - user_token_account: Account<'info, TokenAccount>, - #[account(mut)] - trader_risk_group: AccountLoader<'info, TraderRiskGroup>, - market_product_group: AccountLoader<'info, MarketProductGroup>, - #[account(mut)] - market_product_group_vault: Account<'info, TokenAccount>, - #[account(executable)] - risk_engine_program: AccountInfo<'info>, - risk_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - risk_output_register: AccountInfo<'info>, - #[account(mut)] - trader_risk_state_acct: AccountInfo<'info>, - risk_signer: AccountInfo<'info>, - // Remaining accounts are for risk engine -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Clone)] -pub struct UpdateProductFundingParams { - pub amount: Fractional, - pub expired: bool, -} - -#[derive(Accounts)] -pub struct UpdateProductFunding<'info> { - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - product: Signer<'info>, -} - -#[derive(Accounts)] -pub struct TransferFullPosition<'info> { - liquidator: Signer<'info>, - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - #[account(mut)] - liquidatee_risk_group: AccountLoader<'info, TraderRiskGroup>, - #[account(mut)] - liquidator_risk_group: AccountLoader<'info, TraderRiskGroup>, - #[account(executable)] - risk_engine_program: AccountInfo<'info>, - risk_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - risk_output_register: AccountInfo<'info>, - #[account(mut)] - liquidator_risk_state_account_info: AccountInfo<'info>, - #[account(mut)] - liquidatee_risk_state_account_info: AccountInfo<'info>, - risk_signer: AccountInfo<'info>, - // Remaining accounts are for risk engine -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Debug, Clone)] -pub struct InitializeComboParams { - pub name: [u8; NAME_LEN], - // Fixed point number (32 integer bits, 32 fractional bits) - pub tick_size: Fractional, - pub price_offset: Fractional, - pub base_decimals: u64, - pub ratios: Vec, -} - -#[derive(Accounts)] -pub struct InitializeCombo<'info> { - authority: Signer<'info>, - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - orderbook: AccountInfo<'info>, - // Remaining accounts are for products -} - -#[derive(Accounts)] -pub struct UpdateTraderFunding<'info> { - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - #[account(mut)] - trader_risk_group: AccountLoader<'info, TraderRiskGroup>, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Clone)] -pub struct ClearExpiredOrderbookParams { - pub num_orders_to_cancel: u8, -} - -#[derive(Accounts)] -pub struct ClearExpiredOrderbook<'info> { - market_product_group: AccountLoader<'info, MarketProductGroup>, - product: AccountInfo<'info>, - #[account(executable)] - aaob_program: AccountInfo<'info>, - #[account(mut)] - orderbook: AccountInfo<'info>, - market_signer: AccountInfo<'info>, - #[account(mut)] - event_queue: AccountInfo<'info>, - #[account(mut)] - bids: AccountInfo<'info>, - #[account(mut)] - asks: AccountInfo<'info>, -} - -#[derive(Accounts)] -pub struct SweepFees<'info> { - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - fee_collector: AccountInfo<'info>, - #[account(mut)] - market_product_group_vault: Account<'info, TokenAccount>, - #[account(mut)] - fee_collector_token_account: Account<'info, TokenAccount>, - token_program: Program<'info, Token>, -} - -#[derive(Accounts)] -pub struct ChooseSuccessor<'info> { - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - authority: Signer<'info>, - new_authority: AccountInfo<'info>, -} - -#[derive(Accounts)] -pub struct ClaimAuthority<'info> { - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - new_authority: Signer<'info>, -} - -#[derive(Accounts)] -pub struct UpdateHealthState<'info> { - authority: Signer<'info>, - #[account(mut)] - trader_risk_group: AccountLoader<'info, TraderRiskGroup>, - #[account(mut)] - market_product_group: AccountLoader<'info, MarketProductGroup>, - #[account(executable)] - risk_engine_program: AccountInfo<'info>, - #[account(mut)] - risk_output_register: AccountInfo<'info>, - #[account(mut)] - trader_risk_state_acct: AccountInfo<'info>, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] -pub struct LockCollateralParams { - pub num_products: usize, - pub products: LockedCollateralProductIndexes, -} - -#[derive(Accounts)] -pub struct LockCollateral<'info> { - #[account(mut)] - pub user: Signer<'info>, - #[account(mut)] - pub trader_risk_group: AccountLoader<'info, TraderRiskGroup>, - #[account(mut)] - pub market_product_group: AccountLoader<'info, MarketProductGroup>, - #[account(executable)] - fee_model_program: AccountInfo<'info>, - fee_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - fee_output_register: AccountInfo<'info>, - #[account(executable)] - risk_engine_program: AccountInfo<'info>, - risk_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - risk_output_register: AccountInfo<'info>, - risk_and_fee_signer: AccountInfo<'info>, - #[account(mut)] - fee_state_acct: AccountInfo<'info>, - #[account(mut)] - risk_state_acct: AccountInfo<'info>, -} - -// this is for convenience. this is not supposed to derive(Accounts). -pub struct LockedCollateralAccounts { - pub fee_model_program: Pubkey, - pub fee_model_configuration_acct: Pubkey, - pub fee_output_register: Pubkey, - pub risk_engine_program: Pubkey, - pub risk_model_configuration_acct: Pubkey, - pub risk_output_register: Pubkey, - pub creator_trader_fee_state_acct: Pubkey, - pub creator_trader_risk_state_acct: Pubkey, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] -pub struct InitializePrintTradeParams { - pub num_products: usize, - pub products: PrintTradeProductIndexes, - pub price: Fractional, // quantity of quote (e.g., USDC) per base - pub side: Side, // side that creator is taking - pub operator_creator_fee_proportion: Fractional, - pub operator_counterparty_fee_proportion: Fractional, - pub is_operator_signer: bool, -} - -#[derive(Accounts)] -pub struct InitializePrintTrade<'info> { - #[account(mut)] - pub user: Signer<'info>, - pub creator: AccountInfo<'info>, - pub counterparty: AccountInfo<'info>, - pub operator: AccountInfo<'info>, - #[account(mut)] - pub market_product_group: AccountInfo<'info>, - #[account(mut)] - pub print_trade: AccountInfo<'info>, - pub system_program: AccountInfo<'info>, - pub operator_owner: Signer<'info>, - pub seed: AccountInfo<'info>, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] -pub struct SignPrintTradeParams { - pub num_products: usize, - pub products: PrintTradeProductIndexes, - pub price: Fractional, - pub side: Side, - pub operator_creator_fee_proportion: Fractional, - pub operator_counterparty_fee_proportion: Fractional, - pub use_locked_collateral: bool, -} - -#[derive(Accounts)] -pub struct SignPrintTrade<'info> { - #[account(mut)] - pub user: Signer<'info>, - #[account(mut)] - pub creator: AccountInfo<'info>, - #[account(mut)] - pub counterparty: AccountInfo<'info>, - #[account(mut)] - pub operator: AccountInfo<'info>, - #[account(mut)] - pub market_product_group: AccountInfo<'info>, - #[account(mut)] - pub print_trade: AccountInfo<'info>, - pub system_program: AccountInfo<'info>, - pub fee_model_program: AccountInfo<'info>, - pub fee_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - pub fee_output_register: AccountInfo<'info>, - pub risk_engine_program: AccountInfo<'info>, - pub risk_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - pub risk_output_register: AccountInfo<'info>, - pub risk_and_fee_signer: AccountInfo<'info>, - #[account(mut)] - pub creator_trader_fee_state_acct: AccountInfo<'info>, - #[account(mut)] - pub creator_trader_risk_state_acct: AccountInfo<'info>, - #[account(mut)] - pub counterparty_trader_fee_state_acct: AccountInfo<'info>, - #[account(mut)] - pub counterparty_trader_risk_state_acct: AccountInfo<'info>, - pub seed: AccountInfo<'info>, -} - -#[derive(Accounts)] -pub struct ExecutePrintTrade<'info> { - #[account(mut)] - pub op: Signer<'info>, - #[account(mut)] - pub creator: AccountInfo<'info>, - #[account(mut)] - pub counterparty: AccountInfo<'info>, - #[account(mut)] - pub operator: AccountInfo<'info>, - #[account(mut)] - pub market_product_group: AccountInfo<'info>, - #[account(mut)] - pub print_trade: AccountInfo<'info>, - pub system_program: Program<'info, System>, - #[account(executable)] - fee_model_program: AccountInfo<'info>, - fee_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - fee_output_register: AccountInfo<'info>, - #[account(executable)] - risk_engine_program: AccountInfo<'info>, - risk_model_configuration_acct: AccountInfo<'info>, - #[account(mut)] - risk_output_register: AccountInfo<'info>, - risk_and_fee_signer: AccountInfo<'info>, - #[account(mut)] - creator_trader_fee_state_acct: AccountInfo<'info>, - #[account(mut)] - creator_trader_risk_state_acct: AccountInfo<'info>, - #[account(mut)] - counterparty_trader_fee_state_acct: AccountInfo<'info>, - #[account(mut)] - counterparty_trader_risk_state_acct: AccountInfo<'info>, - pub seed: AccountInfo<'info>, - #[account(mut)] - pub execution_output: AccountInfo<'info>, -} - -#[derive(Accounts)] -pub struct ClosePrintTrade<'info> { - #[account(mut)] - pub op: Signer<'info>, - pub creator: AccountLoader<'info, TraderRiskGroup>, // user owns creator trg - pub counterparty: AccountLoader<'info, TraderRiskGroup>, - pub operator: AccountLoader<'info, TraderRiskGroup>, - pub market_product_group: AccountLoader<'info, MarketProductGroup>, - #[account(mut)] - pub print_trade: AccountLoader<'info, PrintTrade>, - pub system_program: Program<'info, System>, - pub seed: AccountInfo<'info>, - #[account(mut)] - pub creator_wallet: AccountInfo<'info>, -} diff --git a/hxro-print-trade-provider/dex/src/state/callback_info.rs b/hxro-print-trade-provider/dex/src/state/callback_info.rs deleted file mode 100644 index 3757c65..0000000 --- a/hxro-print-trade-provider/dex/src/state/callback_info.rs +++ /dev/null @@ -1,20 +0,0 @@ -use anchor_lang::{prelude::*, solana_program::pubkey::Pubkey}; -use bytemuck::{Pod, Zeroable}; - -#[repr(C)] -#[derive(Debug, Clone, Copy, Zeroable, Pod, AnchorSerialize, AnchorDeserialize)] -/// Buffer attached to aaob events to tie owner to events -pub struct CallBackInfo { - pub user_account: Pubkey, - pub open_orders_idx: u64, -} - -impl CallBackInfo { - pub fn to_vec(&self) -> Vec { - [ - self.user_account.to_bytes().to_vec(), - self.open_orders_idx.to_le_bytes().to_vec(), - ] - .concat() - } -} diff --git a/hxro-print-trade-provider/dex/src/state/constants.rs b/hxro-print-trade-provider/dex/src/state/constants.rs deleted file mode 100644 index f253f97..0000000 --- a/hxro-print-trade-provider/dex/src/state/constants.rs +++ /dev/null @@ -1,66 +0,0 @@ -use crate::utils::numeric::Fractional; - -use anchor_lang::prelude::*; - -#[constant] -pub const NAME_LEN: usize = 16; - -#[constant] -pub const MAX_OUTRIGHTS: usize = 128; - -#[constant] -pub const MAX_PRODUCTS: usize = 256; - -#[constant] -pub const HEALTH_BUFFER_LEN: usize = 32; - -#[constant] -pub const MAX_TRADER_POSITIONS: usize = 16; - -#[constant] -pub const MAX_OPEN_ORDERS_PER_POSITION: u64 = 256; - -#[constant] -pub const MAX_OPEN_ORDERS: usize = 100; - -#[constant] -pub const ANCHOR_DISCRIMINANT_LEN: usize = 8; - -pub const NO_BID_PRICE: Fractional = Fractional { - m: i64::MIN, - exp: 0, -}; - -pub const NO_ASK_PRICE: Fractional = Fractional { - m: i64::MAX, - exp: 0, -}; - -#[constant] -pub const SENTINEL: usize = 0; - -/// The length in bytes of the callback information in the associated asset agnostic orderbook -#[constant] -pub const CALLBACK_INFO_LEN: u64 = 40; -/// The length in bytes of the callback identifer prefix in the associated asset agnostic orderbook -#[constant] -pub const CALLBACK_ID_LEN: u64 = 32; - -#[constant] -pub const MAX_COMBOS: usize = 128; - -#[constant] -pub const MAX_LEGS: usize = 4; - -// timing constants -#[constant] -pub const SLOTS_1_MIN: u64 = 150; - -#[constant] -pub const SLOTS_5_MIN: u64 = 750; - -#[constant] -pub const SLOTS_15_MIN: u64 = 2250; - -#[constant] -pub const SLOTS_60_MIN: u64 = 9000; diff --git a/hxro-print-trade-provider/dex/src/state/enums.rs b/hxro-print-trade-provider/dex/src/state/enums.rs deleted file mode 100644 index ca9485b..0000000 --- a/hxro-print-trade-provider/dex/src/state/enums.rs +++ /dev/null @@ -1,75 +0,0 @@ -use anchor_lang::prelude::*; -use bytemuck::{Pod, Zeroable}; -use serde::{Deserialize, Serialize}; - -#[derive( - Copy, AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq, Deserialize, Serialize, -)] -#[repr(u64)] -pub enum AccountTag { - Uninitialized, - MarketProductGroup, - TraderRiskGroup, - TraderPosition, - MarketProductGroupWithCombos, - ComboGroup, - Combo, - RiskProfile, - LockedCollateral, -} - -impl Default for AccountTag { - fn default() -> Self { - AccountTag::Uninitialized - } -} - -unsafe impl Zeroable for AccountTag {} - -unsafe impl Pod for AccountTag {} - -impl AccountTag { - pub fn to_bytes(&self) -> [u8; 8] { - match self { - AccountTag::Uninitialized => 0_u64.to_le_bytes(), - AccountTag::MarketProductGroup => 1_u64.to_le_bytes(), - AccountTag::TraderRiskGroup => 2_u64.to_le_bytes(), - AccountTag::TraderPosition => 3_u64.to_le_bytes(), - AccountTag::MarketProductGroupWithCombos => 4_u64.to_le_bytes(), - AccountTag::ComboGroup => 5_u64.to_le_bytes(), - AccountTag::Combo => 6_u64.to_le_bytes(), - AccountTag::RiskProfile => 7_u64.to_le_bytes(), - AccountTag::LockedCollateral => 8_u64.to_le_bytes(), - } - } -} - -#[derive( - Eq, Copy, AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq, Deserialize, Serialize, -)] -#[repr(u64)] -pub enum ProductStatus { - Uninitialized, - Initialized, - Expired, - Expiring, -} - -impl Default for ProductStatus { - fn default() -> Self { - ProductStatus::Uninitialized - } -} - -unsafe impl Zeroable for ProductStatus {} - -unsafe impl Pod for ProductStatus {} - -#[derive(AnchorDeserialize, AnchorSerialize, Debug, PartialEq, Clone, Deserialize, Serialize)] // serde -#[repr(u64)] -pub enum OrderType { - Limit, - ImmediateOrCancel, - FillOrKill, - PostOnly, -} diff --git a/hxro-print-trade-provider/dex/src/state/fee_model.rs b/hxro-print-trade-provider/dex/src/state/fee_model.rs deleted file mode 100644 index 59bade2..0000000 --- a/hxro-print-trade-provider/dex/src/state/fee_model.rs +++ /dev/null @@ -1,84 +0,0 @@ -use crate::{utils::numeric::bps, Fractional, MarketProductGroup}; -use agnostic_orderbook::state::Side; -use anchor_lang::{prelude::*, solana_program::clock::UnixTimestamp}; -use bytemuck::{Pod, Zeroable}; - -#[repr(C)] -#[zero_copy] -#[derive(Debug)] -pub struct TraderFees { - pub valid_until: UnixTimestamp, - pub maker_fee_bps: i32, - pub taker_fee_bps: i32, -} - -#[derive(Copy, Clone, Debug, AnchorDeserialize, AnchorSerialize)] -pub struct TraderFeeParams { - pub side: Side, - pub is_aggressor: bool, - pub matched_quote_qty: Fractional, - pub matched_base_qty: Fractional, - pub product: Pubkey, -} - -// 10_000 bps == 100% -const MAX_FEE_BPS: i32 = 10_000; -const MIN_FEE_BPS: i32 = -10_000; - -fn clamp_fees(fee: i32) -> i32 { - within_or_zero(fee, MAX_FEE_BPS, MIN_FEE_BPS) -} - -fn within_or_zero(x: i32, max: impl Into, min: impl Into) -> i32 { - if x > max.into() || x < min.into() { - 0 - } else { - x - } -} - -impl TraderFees { - pub fn new(maker_fee_bps: i32, taker_fee_bps: i32, valid_until: UnixTimestamp) -> Self { - Self { - valid_until, - maker_fee_bps, - taker_fee_bps, - } - } - - pub fn maker_fee_bps(&self, market_product_group: Option<&MarketProductGroup>) -> Fractional { - let fee = market_product_group - .map(|mpg| { - within_or_zero( - self.maker_fee_bps, - mpg.max_maker_fee_bps, - mpg.min_maker_fee_bps, - ) - }) - .unwrap_or(clamp_fees(self.maker_fee_bps)); - - bps(fee as i64) - } - - pub fn taker_fee_bps(&self, market_product_group: Option<&MarketProductGroup>) -> Fractional { - let fee = market_product_group - .map(|mpg| { - within_or_zero( - self.taker_fee_bps, - mpg.max_taker_fee_bps, - mpg.min_taker_fee_bps, - ) - }) - .unwrap_or(clamp_fees(self.taker_fee_bps)); - - bps(fee as i64) - } - - pub fn set_taker_fee_bps(&mut self, taker_fee_bps: i32) { - self.taker_fee_bps = clamp_fees(taker_fee_bps); - } - - pub fn set_maker_fee_bps(&mut self, maker_fee_bps: i32) { - self.maker_fee_bps = clamp_fees(maker_fee_bps); - } -} diff --git a/hxro-print-trade-provider/dex/src/state/market_product_group.rs b/hxro-print-trade-provider/dex/src/state/market_product_group.rs deleted file mode 100644 index 5743ba3..0000000 --- a/hxro-print-trade-provider/dex/src/state/market_product_group.rs +++ /dev/null @@ -1,136 +0,0 @@ -use std::ops::{Deref, DerefMut}; - -use anchor_lang::{ - prelude::*, - solana_program::{ - entrypoint::ProgramResult, program_error::ProgramError, program_pack::IsInitialized, - pubkey::Pubkey, - }, -}; -use bytemuck::{Pod, Zeroable}; -use itertools::Itertools; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use serde_big_array::BigArray; - -use crate::{ - state::{ - constants::*, - enums::*, - products::{Combo, Outright, Product, ProductMetadata}, - }, - utils::{ - bitset::Bitset, - numeric::{Fractional, ZERO_FRAC}, - TwoIterators, - }, -}; - -/// The highest level organizational unit of the Dex. -/// Market product groups exist independently of each other. -/// i.e. each trader, product etc, corresponds to exactly one market product group. -#[account(zero_copy(unsafe))] -#[derive(Deserialize, Serialize)] // serde -pub struct MarketProductGroup { - // TODO: add aaob program id - pub tag: AccountTag, - pub name: [u8; NAME_LEN], - pub authority: Pubkey, - // The future authority of the MarketProductGroup - pub successor: Pubkey, - pub vault_mint: Pubkey, - pub collected_fees: Fractional, - pub fee_collector: Pubkey, - pub decimals: u64, - pub risk_engine_program_id: Pubkey, - pub fee_model_program_id: Pubkey, - pub fee_model_configuration_acct: Pubkey, - pub risk_model_configuration_acct: Pubkey, - pub active_flags_products: Bitset, - pub ewma_windows: [u64; 4], - pub market_products: ProductArray, - pub vault_bump: u16, - pub risk_and_fee_bump: u16, - pub find_fees_discriminant_len: u16, - pub validate_account_discriminant_len: u16, - pub find_fees_discriminant: [u8; 8], - pub validate_account_health_discriminant: [u8; 8], - pub validate_account_liquidation_discriminant: [u8; 8], - pub create_risk_state_account_discriminant: [u8; 8], - pub max_maker_fee_bps: i16, - pub min_maker_fee_bps: i16, - pub max_taker_fee_bps: i16, - pub min_taker_fee_bps: i16, - pub fee_output_register: Pubkey, - pub risk_output_register: Pubkey, - pub sequence_number: u128, - pub staking_fee_collector: Pubkey, - pub is_killed: bool, - pub create_fee_state_account_discriminant: [u8; 8], -} - -impl Default for MarketProductGroup { - fn default() -> Self { - unsafe { std::mem::zeroed() } - } -} - -impl IsInitialized for MarketProductGroup { - fn is_initialized(&self) -> bool { - match self.tag { - AccountTag::MarketProductGroup | AccountTag::MarketProductGroupWithCombos => true, - _ => false, - } - } -} - -#[zero_copy] -#[derive( - Default, Debug, Eq, PartialEq, AnchorSerialize, AnchorDeserialize, Serialize, Deserialize, -)] -pub struct PriceEwma { - pub ewma_bid: [Fractional; 4], - pub ewma_ask: [Fractional; 4], - pub bid: Fractional, - pub ask: Fractional, - pub slot: u64, - pub prev_bid: Fractional, - pub prev_ask: Fractional, -} - -impl PriceEwma { - pub fn initialize(&mut self, slot: u64) { - self.slot = slot; - for ewma in self.ewma_bid.iter_mut() { - *ewma = NO_BID_PRICE; - } - for ewma in self.ewma_ask.iter_mut() { - *ewma = NO_ASK_PRICE; - } - self.bid = NO_BID_PRICE; - self.ask = NO_ASK_PRICE; - self.prev_bid = NO_BID_PRICE; - self.prev_ask = NO_ASK_PRICE; - } -} - -#[account(zero_copy)] -#[derive(Serialize, Deserialize)] -#[repr(transparent)] -pub struct ProductArray { - #[serde(with = "BigArray")] - pub array: [Product; 256], -} - -impl Deref for ProductArray { - type Target = [Product; 256]; - - fn deref(&self) -> &Self::Target { - &self.array - } -} - -impl DerefMut for ProductArray { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.array - } -} diff --git a/hxro-print-trade-provider/dex/src/state/mod.rs b/hxro-print-trade-provider/dex/src/state/mod.rs deleted file mode 100644 index 61efc71..0000000 --- a/hxro-print-trade-provider/dex/src/state/mod.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub mod callback_info; -pub mod constants; -pub mod enums; -pub mod fee_model; -pub mod market_product_group; -pub mod open_orders; -pub mod print_trade; -pub mod products; -pub mod risk_engine_register; -pub mod trader_risk_group; diff --git a/hxro-print-trade-provider/dex/src/state/open_orders.rs b/hxro-print-trade-provider/dex/src/state/open_orders.rs deleted file mode 100644 index a0733e8..0000000 --- a/hxro-print-trade-provider/dex/src/state/open_orders.rs +++ /dev/null @@ -1,37 +0,0 @@ -use crate::{ - state::{constants::*, products::Product}, - utils::numeric::{Fractional, ZERO_FRAC}, -}; - -use agnostic_orderbook::state::{get_side_from_order_id, Side}; - -use anchor_lang::{ - prelude::*, - solana_program::{msg, program_error::ProgramError}, -}; - -#[zero_copy(unsafe)] -pub struct OpenOrdersMetadata { - pub ask_qty_in_book: i64, - pub bid_qty_in_book: i64, - pub head_index: u16, - pub num_open_orders: u16, -} - -#[zero_copy(unsafe)] -pub struct OpenOrders { - pub free_list_head: u16, - pub total_open_orders: u16, - pub max_open_orders: u16, - pub products: [OpenOrdersMetadata; MAX_PRODUCTS], - pub orders: [OpenOrdersNode; MAX_OPEN_ORDERS], -} - -#[zero_copy(unsafe)] -pub struct OpenOrdersNode { - pub id: u128, - pub qty: u64, - pub client_id: u64, - pub prev: u16, - pub next: u16, -} diff --git a/hxro-print-trade-provider/dex/src/state/print_trade.rs b/hxro-print-trade-provider/dex/src/state/print_trade.rs deleted file mode 100644 index 0fe678a..0000000 --- a/hxro-print-trade-provider/dex/src/state/print_trade.rs +++ /dev/null @@ -1,96 +0,0 @@ -use std::ops::{Deref, DerefMut}; - -use agnostic_orderbook::state::Side; -use anchor_lang::{ - prelude::*, - solana_program::{ - entrypoint::ProgramResult, program_error::ProgramError, program_pack::IsInitialized, - pubkey::Pubkey, - }, -}; -use bytemuck::{Pod, Zeroable}; -use itertools::Itertools; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use serde_big_array::BigArray; - -use crate::{ - state::{ - constants::*, - enums::*, - products::{Combo, Outright, Product, ProductMetadata}, - }, - utils::{ - numeric::{Fractional, ZERO_FRAC}, - TwoIterators, - }, -}; - -#[account(zero_copy(unsafe))] -#[derive(Default, Debug)] -pub struct PrintTradeProduct { - pub product_key: Pubkey, // verify that the product at the given index is this one - pub size: Fractional, // quantity of base (e.g. BTCUSD contract) -} - -#[account(zero_copy)] -#[derive(AnchorSerialize, AnchorDeserialize, Default, Debug)] -pub struct PrintTradeProductIndex { - pub product_index: usize, - pub size: Fractional, // quantity of base (e.g. BTCUSD contract) -} - -// #[derive(AnchorSerialize, AnchorDeserialize, Default, Debug)] not allowed on arrays -pub type PrintTradeProducts = [PrintTradeProduct; PrintTrade::MAX_PRODUCTS_PER_TRADE]; -// #[derive(AnchorSerialize, AnchorDeserialize, Default, Debug)] not allowed on arrays -pub type PrintTradeProductIndexes = [PrintTradeProductIndex; PrintTrade::MAX_PRODUCTS_PER_TRADE]; - -#[account(zero_copy(unsafe))] -#[derive(Debug)] -pub struct PrintTrade { - pub is_initialized: bool, - pub creator: Pubkey, - pub counterparty: Pubkey, - pub seed: Pubkey, - pub market_product_group: Pubkey, // technically might not need to store this - pub strange_padding: [u8; 7], // for some reason, account parsing is misaligned without this padding - pub num_products: usize, - pub products: PrintTradeProducts, - pub price: Fractional, // quantity of quote (USD) per base - pub side: Side, - pub operator: Pubkey, - pub operator_creator_fee_proportion: Fractional, - pub operator_counterparty_fee_proportion: Fractional, - pub strange_padding_2: [u8; 7], // for some reason, account parsing is misaligned without this padding - pub is_signed: bool, - pub is_cancelled: CancelStatus, - pub bump: u8, -} - -impl PrintTrade { - pub const MAX_PRODUCTS_PER_TRADE: usize = 6; - pub const SIZE: usize = std::mem::size_of::(); -} - -#[derive(AnchorSerialize, AnchorDeserialize, Copy, Clone, Debug, PartialEq)] -#[repr(u8)] -pub enum CancelStatus { - Active, - CreatorCancelled, - CounterpartyCancelled, -} - -#[account(zero_copy(unsafe))] -pub struct PrintTradeExecutionOutput { - pub result: PrintTradeExecutionResult, -} - -#[derive(Copy, Clone, Debug, PartialEq)] -#[repr(u8)] -pub enum PrintTradeExecutionResult { - CounterpartyHasntSigned, - CreatorCancelled, - CounterpartyCancelled, - CreatorNotEnoughLockedCollateral, - CounterpartyNotEnoughLockedCollateral, - Success, -} diff --git a/hxro-print-trade-provider/dex/src/state/products.rs b/hxro-print-trade-provider/dex/src/state/products.rs deleted file mode 100644 index 2263434..0000000 --- a/hxro-print-trade-provider/dex/src/state/products.rs +++ /dev/null @@ -1,169 +0,0 @@ -use std::{ - mem::size_of, - ops::{Deref, DerefMut}, -}; - -use anchor_lang::prelude::*; -use bytemuck::{Pod, Zeroable}; -use serde::{Deserialize, Serialize}; - -use crate::{ - state::{constants::MAX_LEGS, enums::ProductStatus, market_product_group::PriceEwma}, - utils::{numeric::ZERO_FRAC, TwoIterators}, - Fractional, NAME_LEN, -}; - -#[derive(Eq, Debug, PartialEq, Clone, Copy, AnchorDeserialize, Deserialize, Serialize)] -#[repr(C, u64)] -/// Unify Outright and Combo -pub enum Product { - Outright { outright: Outright }, - Combo { combo: Combo }, -} - -unsafe impl Pod for Product {} - -#[zero_copy] -#[derive(Debug, Eq, PartialEq, AnchorDeserialize, Deserialize, Serialize)] // serde -/// A market product corresponding to one underlying asset -pub struct Outright { - pub metadata: ProductMetadata, - pub num_queue_events: usize, - pub product_status: ProductStatus, - pub dust: Fractional, - pub cum_funding_per_share: Fractional, - pub cum_social_loss_per_share: Fractional, - pub open_long_interest: Fractional, - pub open_short_interest: Fractional, - pub padding: [u64; 14], -} - -#[zero_copy] -#[derive(Debug, Eq, PartialEq, AnchorSerialize, AnchorDeserialize, Deserialize, Serialize)] // serde -/// Shared fields between Outright and Combo products -pub struct ProductMetadata { - pub bump: u64, - pub product_key: Pubkey, - pub name: [u8; NAME_LEN], - pub orderbook: Pubkey, - // Negative+Fractional Price - pub tick_size: Fractional, - pub base_decimals: u64, - pub price_offset: Fractional, - pub contract_volume: Fractional, - // Prices - pub prices: PriceEwma, -} - -#[zero_copy] -#[derive(Debug, Eq, PartialEq, AnchorSerialize, AnchorDeserialize, Deserialize, Serialize)] // serde -/// A market product with multiple legs that are each outrights -pub struct Combo { - pub metadata: ProductMetadata, - pub num_legs: usize, - pub legs: [Leg; MAX_LEGS], -} - -impl Default for Combo { - fn default() -> Self { - unsafe { std::mem::zeroed() } - } -} - -impl Combo { - pub fn legs(&self) -> &[Leg] { - &self.legs[..self.num_legs] - } - - pub fn has_leg(&self, product_key: Pubkey) -> bool { - self.legs - .iter() - .take(self.num_legs) - .any(|l| l.product_key == product_key) - } - - pub fn get_product_key_seeds(&self) -> Vec { - let mut seeds = Vec::::with_capacity((size_of::() + 1) * self.num_legs); - for leg in self.legs.iter().take(self.num_legs) { - seeds.extend(leg.product_key.to_bytes().iter()); - } - for leg in self.legs.iter().take(self.num_legs) { - seeds.extend((leg.ratio as i8).to_le_bytes().iter()); - } - seeds - } -} - -#[zero_copy] -#[derive( - Debug, Default, Eq, AnchorSerialize, AnchorDeserialize, PartialEq, Deserialize, Serialize, -)] // serde -/// One part of a combo. Each leg corresponds to an outright with the ratio determining -/// relative weighting -pub struct Leg { - pub product_index: usize, - pub product_key: Pubkey, - pub ratio: i64, -} - -impl Deref for Outright { - type Target = ProductMetadata; - - fn deref(&self) -> &Self::Target { - &self.metadata - } -} - -impl DerefMut for Outright { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.metadata - } -} - -impl Deref for Combo { - type Target = ProductMetadata; - - fn deref(&self) -> &Self::Target { - &self.metadata - } -} - -impl DerefMut for Combo { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.metadata - } -} - -impl Default for Outright { - fn default() -> Self { - unsafe { std::mem::zeroed() } - } -} - -unsafe impl Zeroable for Product {} - -impl DerefMut for Product { - fn deref_mut(&mut self) -> &mut Self::Target { - match self { - Product::Outright { outright: x } => &mut x.metadata, - Product::Combo { combo: x } => &mut x.metadata, - } - } -} - -impl Deref for Product { - type Target = ProductMetadata; - - fn deref(&self) -> &Self::Target { - match self { - Product::Outright { outright: x } => &x.metadata, - Product::Combo { combo: x } => &x.metadata, - } - } -} - -impl Default for Product { - fn default() -> Self { - unsafe { std::mem::zeroed() } - } -} diff --git a/hxro-print-trade-provider/dex/src/state/risk_engine_register.rs b/hxro-print-trade-provider/dex/src/state/risk_engine_register.rs deleted file mode 100644 index 80aeafc..0000000 --- a/hxro-print-trade-provider/dex/src/state/risk_engine_register.rs +++ /dev/null @@ -1,146 +0,0 @@ -use bytemuck::{Pod, Zeroable}; - -use crate::utils::numeric::{Fractional, ZERO_FRAC}; - -use agnostic_orderbook::state::Side; - -use crate::state::constants::{HEALTH_BUFFER_LEN, MAX_OUTRIGHTS, MAX_TRADER_POSITIONS}; - -use anchor_lang::prelude::*; - -#[derive(Copy, AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Debug)] -#[repr(u8)] -#[allow(missing_docs)] -pub enum OperationType { - NewOrder, - CancelOrder, - CheckHealth, - PositionTransfer, - ConsumeEvents, -} - -#[account(zero_copy(unsafe))] -pub struct RiskOutputRegister { - pub risk_engine_output: HealthResult, -} - -#[derive(Copy, AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Debug)] -pub enum HealthResult { - Health { health_info: HealthInfo }, - Liquidation { liquidation_info: LiquidationInfo }, -} - -#[derive(Copy, AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Debug)] -pub struct HealthInfo { - pub health: HealthStatus, - pub action: ActionStatus, -} - -#[derive(Copy, AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Debug)] -pub struct LiquidationInfo { - pub health: HealthStatus, - pub action: ActionStatus, - pub total_social_loss: Fractional, - // Risk Engine mark price of portfolio - // Price liquidator pays to take on position - /* - A: Liquidatee, B: Liquidator - tsl = 20 - A's liquidation_price = 180 - A's final cash = 180 - 20 = 160 - Before - A: -1000 Cash +X Foo - B: 500 Cash - After - A: 160 Cash 0 Foo - B: 500 (start) - 180 (price) - 1000 (A's cash) = -680 - -680 Cash +X Foo - - liquidator_cash_profit = price + A's cash - liquidation_price = price (Only risk knows this) - */ - pub liquidation_price: Fractional, - /* - // Pseudocode - assert_eq( - social_losses.iter().map(|x| x.amount).sum(), total_social_loss - )?; - for social_loss in social_losses.iter().enumerate() { - let mut product = mpg.get(social_loss.product_index); - product.apply_social_loss(social_loss.amount)?; - } - */ - pub social_losses: [SocialLoss; MAX_TRADER_POSITIONS], -} - -#[derive(Copy, AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Debug)] -pub enum HealthStatus { - Healthy, - /* - 1. Allows all orders to be cancelled - 2. transfer_position is blocked - */ - Unhealthy, - /* - 1. Allows all orders to be cancelled - 2. transfer_position is allowed - 3. All posts are blocked - */ - Liquidatable, - NotLiquidatable, -} - -#[derive(Copy, AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Debug)] -#[repr(u8)] -pub enum ActionStatus { - Approved, - NotApproved, -} - -#[derive(Copy, AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Debug)] -pub struct SocialLoss { - pub product_index: usize, - pub amount: Fractional, -} - -impl Default for SocialLoss { - fn default() -> Self { - SocialLoss { - product_index: 0, - amount: ZERO_FRAC, - } - } -} - -impl SocialLoss { - pub fn is_active(&self) -> bool { - self.product_index < MAX_OUTRIGHTS && self.amount != ZERO_FRAC - } -} - -#[derive(Copy, AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Debug)] -pub struct OrderInfo { - pub total_order_qty: Fractional, - pub matched_order_qty: Fractional, - pub order_side: Side, - pub is_combo: bool, - pub product_index: usize, - pub operation_type: OperationType, - pub old_ask_qty_in_book: Fractional, - pub old_bid_qty_in_book: Fractional, -} - -impl Default for OrderInfo { - fn default() -> Self { - OrderInfo { - total_order_qty: ZERO_FRAC, - matched_order_qty: ZERO_FRAC, - order_side: Side::Bid, - is_combo: false, - product_index: 0, - operation_type: OperationType::CheckHealth, - old_ask_qty_in_book: ZERO_FRAC, - old_bid_qty_in_book: ZERO_FRAC, - } - } -} diff --git a/hxro-print-trade-provider/dex/src/state/trader_risk_group.rs b/hxro-print-trade-provider/dex/src/state/trader_risk_group.rs deleted file mode 100644 index 3b8cbfc..0000000 --- a/hxro-print-trade-provider/dex/src/state/trader_risk_group.rs +++ /dev/null @@ -1,127 +0,0 @@ -use agnostic_orderbook::{ - critbit::Slab, - state::{get_side_from_order_id, Side}, -}; -use anchor_lang::{ - prelude::*, - solana_program::{ - clock::UnixTimestamp, msg, program_error::ProgramError, program_pack::IsInitialized, - pubkey::Pubkey, - }, -}; - -use crate::{ - state::{ - constants::{ - HEALTH_BUFFER_LEN, MAX_COMBOS, MAX_OPEN_ORDERS_PER_POSITION, MAX_OUTRIGHTS, - MAX_TRADER_POSITIONS, - }, - enums::AccountTag, - market_product_group::MarketProductGroup, - open_orders::OpenOrders, - products::{Combo, Product}, - }, - utils::numeric::{Fractional, ZERO_FRAC}, -}; - -#[account(zero_copy(unsafe))] -pub struct TraderRiskGroup { - pub tag: AccountTag, - pub market_product_group: Pubkey, - pub owner: Pubkey, - // Default value is 255 (max int) which corresponds to no position for the product at the corresponding index - pub active_products: [u8; MAX_OUTRIGHTS], - pub total_deposited: Fractional, - pub total_withdrawn: Fractional, - // Treat cash separately since it is collateral (unless we eventually support spot) - pub cash_balance: Fractional, - // Keep track of pending fills for risk calculations (only for takers) - pub pending_cash_balance: Fractional, - // Keep track of pending taker fees to be collected in consume_events - pub pending_fees: Fractional, - pub valid_until: UnixTimestamp, - pub maker_fee_bps: i32, - pub taker_fee_bps: i32, - pub trader_positions: [TraderPosition; MAX_TRADER_POSITIONS], - pub risk_state_account: Pubkey, - pub fee_state_account: Pubkey, - pub locked_collateral: [LockedCollateral; MAX_TRADER_POSITIONS], // in one-to-one mapping with trader_positions - pub notional_maker_volume: Fractional, - pub notional_taker_volume: Fractional, - pub referred_takers_notional_volume: Fractional, - /// referral_fees is not necessarily REFERRER_FEES_PROPORTION * referred_takers_notional_volume, - /// because combo volume has only collects 1/8th the fees as outright volume - pub referral_fees: Fractional, - // unused - pub allocated_for_future_use: [u8; 256], - pub open_orders: OpenOrders, -} - -impl IsInitialized for TraderRiskGroup { - fn is_initialized(&self) -> bool { - unimplemented!() - } -} - -impl Default for TraderRiskGroup { - fn default() -> Self { - unsafe { std::mem::zeroed() } - } -} -#[zero_copy] -#[derive(Debug)] -pub struct TraderPosition { - pub tag: AccountTag, - pub product_key: Pubkey, - pub position: Fractional, - pub pending_position: Fractional, - pub product_index: usize, - pub last_cum_funding_snapshot: Fractional, - pub last_social_loss_snapshot: Fractional, -} -impl IsInitialized for TraderPosition { - fn is_initialized(&self) -> bool { - self.tag == AccountTag::TraderPosition - } -} -impl TraderPosition { - pub fn is_active(&self) -> bool { - self.position != ZERO_FRAC || self.pending_position != ZERO_FRAC - } -} - -/// there is one LockedCollateral for each product; the array is in one-to-one mapping with trader_positions -#[zero_copy] -#[derive(Debug)] -pub struct LockedCollateral { - pub tag: AccountTag, - pub ask_qty: Fractional, - pub bid_qty: Fractional, -} -impl IsInitialized for LockedCollateral { - fn is_initialized(&self) -> bool { - self.tag == AccountTag::LockedCollateral - } -} - -#[account(zero_copy)] -#[derive(AnchorSerialize, AnchorDeserialize, Default, Debug)] -pub struct LockedCollateralProductIndex { - pub product_index: usize, - pub size: Fractional, // quantity of base (e.g. BTCUSD contract) -} - -// #[derive(AnchorSerialize, AnchorDeserialize, Default, Debug)] not allowed on arrays -pub type LockedCollateralProductIndexes = - [LockedCollateralProductIndex; LockedCollateral::MAX_PRODUCTS_PER_LOCK_IX]; - -impl LockedCollateral { - pub const MAX_PRODUCTS_PER_LOCK_IX: usize = 6; - pub fn default() -> Self { - LockedCollateral { - tag: AccountTag::Uninitialized, - ask_qty: ZERO_FRAC, - bid_qty: ZERO_FRAC, - } - } -} diff --git a/hxro-print-trade-provider/dex/src/utils/bitset.rs b/hxro-print-trade-provider/dex/src/utils/bitset.rs deleted file mode 100644 index d27b36a..0000000 --- a/hxro-print-trade-provider/dex/src/utils/bitset.rs +++ /dev/null @@ -1,145 +0,0 @@ -use bytemuck::{Pod, Zeroable}; - -use crate::error::{DexError, DomainOrProgramResult, UtilError}; -use anchor_lang::{AnchorDeserialize, AnchorSerialize}; -use serde::{Deserialize, Serialize}; - -#[derive( - Copy, - Clone, - Debug, - Eq, - PartialEq, - Pod, - Deserialize, - Serialize, - AnchorSerialize, - AnchorDeserialize, -)] // serde -#[repr(C)] -// can make generic over number of u128s if necessary using Bitset(pub [u128; N]); -pub struct Bitset { - pub inner: [u128; 2], -} - -unsafe impl Zeroable for Bitset {} - -impl Bitset { - #[inline] - pub fn find_idx_and_insert(&mut self) -> DomainOrProgramResult { - let idx = if self.inner[0] != u128::MAX { - (u128::MAX ^ self.inner[0]).trailing_zeros() - } else if self.inner[1] == u128::MAX { - return Err(UtilError::InvalidBitsetIndex.into()); - } else { - (u128::MAX ^ self.inner[1]).trailing_zeros() + 128 - } as usize; - self.insert(idx).map(|_| idx) - } - - #[inline] - pub fn insert(&mut self, x: usize) -> DomainOrProgramResult { - if x > 255 { - return Err(UtilError::InvalidBitsetIndex.into()); - } - self.inner[idx(x)] |= mask(x, idx(x)); - Ok(()) - } - - #[inline] - pub fn remove(&mut self, x: usize) -> DomainOrProgramResult { - if x > 255 { - return Err(UtilError::InvalidBitsetIndex.into()); - } - self.inner[idx(x)] &= !mask(x, idx(x)); - Ok(()) - } - - #[inline] - pub fn contains(&self, x: usize) -> bool { - if x > 255 { - return false; - } - (self.inner[idx(x)] & mask(x, idx(x))) != 0 - } -} - -#[inline] -fn idx(x: usize) -> usize { - (x > 127) as usize -} - -#[inline] -fn mask(x: usize, idx: usize) -> u128 { - 1 << (x - idx * 128) -} - -impl Default for Bitset { - fn default() -> Self { - Self { inner: [0, 0] } - } -} - -mod bitset_tests { - use crate::{error::DomainOrProgramResult, utils::bitset::Bitset}; - - #[test] - fn insert_remove_contains() -> DomainOrProgramResult { - let mut set = Bitset::default(); - assert!(!set.contains(5)); - - set.insert(2)?; - assert!(set.contains(2)); - - set.remove(2)?; - assert!(!set.contains(2)); - - set.insert(19)?; - assert!(set.contains(19)); - - set.insert(129)?; - assert!(set.contains(129)); - - set.insert(255)?; - assert!(set.contains(255)); - - assert!(set.insert(256).is_err()); - - set.remove(129)?; - assert!(!set.contains(129)); - Ok(()) - } - - #[test] - fn find_index_and_insert() { - let mut set = Bitset::default(); - assert_eq!(set.find_idx_and_insert().unwrap(), 0); - assert!(set.contains(0)); - assert_eq!(set.inner, [1, 0]); - set.remove(0).unwrap(); - assert!(!set.contains(0)); - assert_eq!(set.inner, [0, 0]); - - // fill it up - for i in 0..256 { - assert_eq!(set.find_idx_and_insert().unwrap(), i); - } - assert_eq!(set.inner, [u128::MAX; 2]); - - for i in 0..256 { - assert!(set.contains(i)); - } - set.remove(111).unwrap(); - assert!(!set.contains(111)); - set.remove(175).unwrap(); - assert!(!set.contains(175)); - } - - #[test] - fn contains() { - let set = Bitset { inner: [4, 2] }; - assert!(set.contains(2)); - assert!(!set.contains(3)); - assert!(set.contains(129)); - } -} diff --git a/hxro-print-trade-provider/dex/src/utils/cpi.rs b/hxro-print-trade-provider/dex/src/utils/cpi.rs deleted file mode 100644 index 57b8cde..0000000 --- a/hxro-print-trade-provider/dex/src/utils/cpi.rs +++ /dev/null @@ -1,161 +0,0 @@ -use anchor_lang::{ - prelude::*, - solana_program::{ - entrypoint::ProgramResult, - msg, - program::{invoke_signed_unchecked, invoke_unchecked}, - program_error::ProgramError, - program_pack::IsInitialized, - pubkey::Pubkey, - system_instruction, - sysvar::{clock::Clock, Sysvar}, - }, -}; -use borsh::BorshSerialize; -use std::{ - borrow::BorrowMut, - cell::{Ref, RefMut}, -}; - -use crate::{ - create_trader_risk_state_acct_ix, - error::{DexError, DomainOrProgramResult, UtilError}, - find_fees_ix, - state::{ - fee_model::TraderFeeParams, - risk_engine_register::{HealthInfo, HealthResult, OrderInfo, RiskOutputRegister}, - }, - utils::{ - loadable::Loadable, - logs::DexOrderSummary, - numeric::{fp32_mul, u64_to_quote, Fractional, ZERO_FRAC}, - orderbook::{get_bbo, update_prices}, - param::WithAcct, - validation::{assert, assert_keys_equal}, - }, - validate_account_health_ix, DomainOrProgramError, MarketProductGroup, NewOrder, NewOrderParams, - TraderRiskGroup, -}; - -pub fn find_fees<'a>( - fee_model_program: &AccountInfo<'a>, - market_product_group: &AccountInfo<'a>, - trader_risk_group: &AccountLoader<'a, TraderRiskGroup>, - trader_fee_state: &AccountInfo<'a>, - fee_model_configuration_acct: &AccountInfo<'a>, - fee_output_register: &AccountInfo<'a>, - fee_signer: &AccountInfo<'a>, - discriminant: Vec, - fee_params: &TraderFeeParams, - fee_bump: u8, -) -> ProgramResult { - invoke_signed_unchecked( - &find_fees_ix( - fee_model_program.key(), - market_product_group.key(), - trader_risk_group.key(), - trader_fee_state.key(), - fee_model_configuration_acct.key(), - fee_output_register.key(), - fee_signer.key(), - fee_params, - discriminant, - )?, - &[ - fee_model_program.clone(), - market_product_group.to_account_info(), - trader_risk_group.to_account_info(), - trader_fee_state.clone(), - fee_model_configuration_acct.clone(), - fee_output_register.clone(), - fee_signer.clone(), - ], - &[&[market_product_group.key().as_ref(), &[fee_bump]]], - ) -} - -pub fn risk_check<'a, 'c>( - risk_engine_program: &AccountInfo<'a>, - market_product_group: &AccountLoader<'a, MarketProductGroup>, - trader_risk_group: &AccountLoader<'a, TraderRiskGroup>, - risk_output_register: &AccountInfo<'a>, - risk_state_account: &AccountInfo<'a>, - risk_model_configuration_acct: &AccountInfo<'a>, - risk_and_fee_signer: &AccountInfo<'a>, - remaining_risk_accounts: &'c [AccountInfo<'a>], - order_info: &OrderInfo, - discriminant: Vec, - risk_bump: u8, -) -> DomainOrProgramResult { - let mut risk_accounts = vec![]; - risk_accounts.extend_from_slice(&[ - risk_engine_program.clone(), - market_product_group.to_account_info(), - trader_risk_group.to_account_info(), - risk_output_register.to_account_info(), - risk_state_account.to_account_info(), - risk_model_configuration_acct.to_account_info(), - risk_and_fee_signer.to_account_info(), - ]); - risk_accounts.extend(remaining_risk_accounts.iter().cloned()); - let account_health_ix = validate_account_health_ix( - risk_engine_program.key(), - market_product_group.key(), - trader_risk_group.key(), - risk_output_register.key(), - risk_state_account.key(), - risk_model_configuration_acct.key(), - risk_and_fee_signer.key(), - remaining_risk_accounts.iter().map(Key::key).collect(), - discriminant, - order_info, - )?; - - invoke_signed_unchecked( - &account_health_ix, - risk_accounts.as_slice(), - &[&[market_product_group.key().as_ref(), &[risk_bump]]], - )?; - Ok(RiskOutputRegister::load(risk_output_register)?.risk_engine_output) -} - -/// This CPI will create a risk state account for each user -pub fn create_risk_state_account<'a, 'c>( - risk_engine_program: &AccountInfo<'a>, - authority: &AccountInfo<'a>, - risk_signer: &AccountInfo<'a>, - risk_state_account: &AccountInfo<'a>, - market_product_group: &AccountLoader<'a, MarketProductGroup>, - system_program_account: &Program<'a, System>, - remaining_risk_accounts: &'c [AccountInfo<'a>], - discriminant: Vec, - risk_bump: u8, -) -> DomainOrProgramResult { - let mut risk_accounts = vec![]; - risk_accounts.extend_from_slice(&[ - risk_engine_program.to_account_info(), - authority.to_account_info(), - risk_signer.to_account_info(), - risk_state_account.to_account_info(), - market_product_group.to_account_info(), - system_program_account.to_account_info(), - ]); - risk_accounts.extend(remaining_risk_accounts.iter().cloned()); - let risk_state_ix = create_trader_risk_state_acct_ix( - risk_engine_program.key(), - authority.key(), - risk_signer.key(), - &risk_state_account.to_account_info(), - market_product_group.key(), - system_program_account.key(), - remaining_risk_accounts.iter().map(Key::key).collect(), - discriminant, - ); - - invoke_signed_unchecked( - &risk_state_ix, - risk_accounts.as_slice(), - &[&[market_product_group.key().as_ref(), &[risk_bump]]], - )?; - Ok(()) -} diff --git a/hxro-print-trade-provider/dex/src/utils/loadable.rs b/hxro-print-trade-provider/dex/src/utils/loadable.rs deleted file mode 100644 index f8d7c2c..0000000 --- a/hxro-print-trade-provider/dex/src/utils/loadable.rs +++ /dev/null @@ -1,68 +0,0 @@ -use std::{ - any::type_name, - cell::{Ref, RefMut}, - mem, - mem::size_of, -}; - -use anchor_lang::solana_program::{account_info::AccountInfo, msg}; -use bytemuck::{Pod, PodCastError}; - -use crate::error::{DexError, DomainOrProgramError}; - -fn error_msg(data_len: usize) -> impl Fn(PodCastError) -> DomainOrProgramError { - move |_: PodCastError| -> DomainOrProgramError { - msg!( - "Failed to load {}. Size is {}, expected {}", - type_name::(), - data_len, - size_of::(), - ); - DomainOrProgramError::DexErr(DexError::InvalidBytesForZeroCopyDeserialization) - } -} - -pub trait Loadable: Pod { - fn load<'a>( - account: &'a AccountInfo, - ) -> std::result::Result, DomainOrProgramError> { - let size = mem::size_of::(); - Ok(Ref::map(account.try_borrow_data()?, |data| { - bytemuck::try_from_bytes(&data[..size]) - .map_err(error_msg::(data.len())) - .unwrap() - })) - } - - fn load_mut<'a>( - account: &'a AccountInfo, - ) -> std::result::Result, DomainOrProgramError> { - let size = mem::size_of::(); - Ok(RefMut::map(account.try_borrow_mut_data()?, |data| { - let data_len = data.len(); - bytemuck::try_from_bytes_mut(&mut data[..size]) - .map_err(error_msg::(data_len)) - .unwrap() - })) - } - - fn load_from_bytes(data: &[u8]) -> std::result::Result<&Self, DomainOrProgramError> { - bytemuck::try_from_bytes(data).map_err(error_msg::(data.len())) - } - - fn load_from_bytes_mut( - data: &mut [u8], - ) -> std::result::Result<&mut Self, DomainOrProgramError> { - let data_len = data.len(); - bytemuck::try_from_bytes_mut(data).map_err(error_msg::(data_len)) - } - - #[deprecated] - fn load_partial_mut<'a>( - account: &'a AccountInfo, - ) -> std::result::Result, DomainOrProgramError> { - Loadable::load_mut(account) - } -} - -impl Loadable for T {} diff --git a/hxro-print-trade-provider/dex/src/utils/logs.rs b/hxro-print-trade-provider/dex/src/utils/logs.rs deleted file mode 100644 index 500319c..0000000 --- a/hxro-print-trade-provider/dex/src/utils/logs.rs +++ /dev/null @@ -1,33 +0,0 @@ -use agnostic_orderbook::state::OrderSummary; -use anchor_lang::prelude::*; -#[event] -pub struct DexOrderSummary { - pub posted_order_id: Option, - pub total_base_qty: u64, - pub total_quote_qty: u64, - pub total_base_qty_posted: u64, -} - -impl DexOrderSummary { - pub fn new( - posted_order_id: Option, - total_base_qty: u64, - total_quote_qty: u64, - total_base_qty_posted: u64, - ) -> Self { - DexOrderSummary { - posted_order_id, - total_base_qty, - total_quote_qty, - total_base_qty_posted, - } - } - pub fn from(order_summary: &OrderSummary) -> Self { - DexOrderSummary::new( - order_summary.posted_order_id, - order_summary.total_base_qty, - order_summary.total_quote_qty, - order_summary.total_base_qty_posted, - ) - } -} diff --git a/hxro-print-trade-provider/dex/src/utils/mod.rs b/hxro-print-trade-provider/dex/src/utils/mod.rs deleted file mode 100644 index 345bd0a..0000000 --- a/hxro-print-trade-provider/dex/src/utils/mod.rs +++ /dev/null @@ -1,28 +0,0 @@ -pub mod bitset; -// pub mod cpi; -// pub mod loadable; -// pub mod logs; -pub mod numeric; -// pub mod orderbook; -// pub mod param; -// pub mod validation; - -pub enum TwoIterators { - A(X), - B(Y), -} - -impl Iterator for TwoIterators -where - X: Iterator, - Y: Iterator, -{ - type Item = (i64, usize); - - fn next(&mut self) -> Option { - match self { - TwoIterators::A(x) => x.next(), - TwoIterators::B(y) => y.next(), - } - } -} diff --git a/hxro-print-trade-provider/dex/src/utils/numeric.rs b/hxro-print-trade-provider/dex/src/utils/numeric.rs deleted file mode 100644 index 52af4ad..0000000 --- a/hxro-print-trade-provider/dex/src/utils/numeric.rs +++ /dev/null @@ -1,878 +0,0 @@ -use num::Num; -use serde::{Deserialize, Serialize}; -use std::{ - cmp::Ordering, - fmt::Display, - ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssign}, - str::FromStr, -}; - -use anchor_lang::prelude::*; -use bytemuck::{Pod, Zeroable}; - -use crate::error::{DomainOrProgramError, DomainOrProgramResult, UtilError}; - -pub const DIVISION_PRECISION: i64 = 10; -pub const SQRT_PRECISION: i64 = 4; // Should always be even -pub const FLOATING_PRECISION: i64 = 10; -pub const I64_MAX: i128 = i64::MAX as i128; -pub const EXP_UPPER_LIMIT: u64 = 15; - -pub fn num_in_i64(num: i128) -> bool { - !(num > (i64::MAX as i128) || num < (i64::MIN as i128)) -} - -const POW10: [i64; 19] = [ - 1, - 10, - 100, - 1_000, - 10_000, - 100_000, - 1_000_000, - 10_000_000, - 100_000_000, - 1_000_000_000, - 10_000_000_000, - 100_000_000_000, - 1_000_000_000_000, - 10_000_000_000_000, - 100_000_000_000_000, - 1_000_000_000_000_000, - 10_000_000_000_000_000, - 100_000_000_000_000_000, - 1_000_000_000_000_000_000, -]; - -// /// a is fp0, b is fp32 and std::result::Result is a*b fp0 -pub fn fp32_mul(a: u64, b_fp32: u64) -> u64 { - (((a as u128) * (b_fp32 as u128)) >> 32) as u64 -} -pub fn int_sqrt(m: i128) -> std::result::Result { - let mut start = 0_i128; - let mut sq_root = 0_i128; - if m < 0 { - Err(UtilError::SqrtRootError) - } else if m == 0 { - Ok(0) - } else if m > 1 { - let mut end = 2; - - // safe for big numbers - while end * end <= m { - end *= 2; - } - end += 1; - - // outer loop for [n, n+1] - while start <= end { - let mid = (start + end) / 2; - - if mid * mid == m { - sq_root = mid; - break; - } - if mid * mid < m { - sq_root = start; - start = mid + 1; - } else { - end = mid - 1; - } - } - Ok(sq_root) - } else { - Ok(1) - } -} - -pub fn int_div(m: u128, other: u128) -> std::result::Result { - if other == 0 { - Err(UtilError::DivisionbyZero) - } else { - Ok(m / other) - } -} -pub fn u64_to_quote(a: u64) -> std::result::Result { - if a > (i64::MAX) as u64 { - Err(UtilError::NumericalOverflow) - } else { - Ok(Fractional { - m: (a as i64), - exp: 0, - }) - } -} - -/// Fractional Operations -#[repr(C)] -#[derive( - Debug, - Default, - AnchorSerialize, - AnchorDeserialize, - Clone, - Copy, - Zeroable, - Pod, - Deserialize, - Serialize, -)] -pub struct Fractional { - pub m: i64, - pub exp: u64, -} - -impl Display for Fractional { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let base = POW10[self.exp as usize]; - if base == 0 { - return write!(f, "0"); - } - let lhs = self.m / base; - let rhs = format!( - "{:0width$}", - (self.m % base).abs(), - width = self.exp as usize - ); - write!(f, "{}.{}", lhs, rhs) - } -} - -pub const ZERO_FRAC: Fractional = Fractional { m: 0, exp: 0 }; - -impl Neg for Fractional { - type Output = Self; - fn neg(self) -> Self { - Self { - m: -self.m, - exp: self.exp, - } - } -} - -impl Add for Fractional { - type Output = Self; - // Can overflow - fn add(self, other: Self) -> Self { - let (m, exp) = if self.exp > other.exp { - (self.m + other.round_up(self.exp as u32).unwrap(), self.exp) - } else if self.exp < other.exp { - ( - self.round_up(other.exp as u32).unwrap() + other.m, - other.exp, - ) - } else { - (self.m + other.m, self.exp) - }; - Self { m, exp } - } -} - -impl AddAssign for Fractional { - fn add_assign(&mut self, other: Self) { - *self = self.add(other); - } -} - -impl Sub for Fractional { - type Output = Self; - fn sub(self, other: Self) -> Self { - let (m, exp) = if self.exp > other.exp { - (self.m - other.round_up(self.exp as u32).unwrap(), self.exp) - } else if self.exp < other.exp { - ( - self.round_up(other.exp as u32).unwrap() - other.m, - other.exp, - ) - } else { - (self.m - other.m, self.exp) - }; - Self { m, exp } - } -} - -impl SubAssign for Fractional { - fn sub_assign(&mut self, other: Self) { - *self = self.sub(other); - } -} - -impl Mul for Fractional { - type Output = Self; - fn mul(self, other: Self) -> Self { - let self_reduced = self.get_reduced_form(); - let other_reduced = other.get_reduced_form(); - - let m = self_reduced.m as i128 * other_reduced.m as i128; - let exp = self_reduced.exp + other_reduced.exp; - - match Fractional::reduce_from_i128_unchecked(m, exp) { - Ok(v) => v, - Err(_) => ZERO_FRAC, - } - } -} - -impl MulAssign for Fractional { - fn mul_assign(&mut self, other: Self) { - *self = self.mul(other); - } -} - -impl Div for Fractional { - type Output = Self; - - fn div(self, other: Self) -> Self { - let sign = self.sign() * other.sign(); - let self_reduced = self.get_reduced_form(); - let other_reduced = other.get_reduced_form(); - - let mut dividend: u128 = self_reduced.m.abs() as u128; - let divisor: u128 = other_reduced.m.abs() as u128; - let exp = (self_reduced.exp as i64) - (other_reduced.exp as i64); - dividend *= POW10[(DIVISION_PRECISION - exp.min(0)) as usize] as u128; - - let quotient: u128 = dividend / divisor; - let mut divided_val = Fractional::new( - quotient as i64, - (exp - exp.min(0) + DIVISION_PRECISION) as u64, - ) - .round_sf_unchecked(FLOATING_PRECISION as u32); - - if sign < 0 { - divided_val.m *= -1; - } - divided_val - } -} -impl DivAssign for Fractional { - fn div_assign(&mut self, other: Self) { - *self = self.div(other); - } -} - -impl PartialOrd for Fractional { - fn partial_cmp(&self, other: &Self) -> Option { - match (self.is_negative(), other.is_negative()) { - (false, true) => return Some(Ordering::Greater), - (true, false) => return Some(Ordering::Less), - _ => {} - } - if self.m == 0 { - return 0.partial_cmp(&other.m); - } else if other.m == 0 { - return self.m.partial_cmp(&0); - } - (self.m as i128 * POW10[other.exp as usize] as i128) - .partial_cmp(&(other.m as i128 * POW10[self.exp as usize] as i128)) - } -} - -impl PartialEq for Fractional { - fn eq(&self, other: &Self) -> bool { - if self.m == other.m && self.exp == other.exp { - return true; - } - if self.m == 0 { - return other.m == 0; - } else if other.m == 0 { - return self.m == 0; - } - match self.partial_cmp(other) { - Some(Ordering::Equal) => true, - _ => false, - } - } -} - -impl From for Fractional { - fn from(x: i64) -> Self { - Fractional::new(x, 0) - } -} - -impl Mul for Fractional { - type Output = Fractional; - - fn mul(self, rhs: i64) -> Self::Output { - self * Fractional::from(rhs) - } -} - -impl Add for Fractional { - type Output = Fractional; - - fn add(self, rhs: i64) -> Self::Output { - self + Fractional::from(rhs) - } -} - -impl Add for i64 { - type Output = Fractional; - - fn add(self, rhs: Fractional) -> Self::Output { - rhs + self - } -} - -impl Mul for i64 { - type Output = Fractional; - - fn mul(self, rhs: Fractional) -> Self::Output { - Fractional::from(self) * rhs - } -} - -pub fn bps(x: i64) -> Fractional { - Fractional::new(x, 4) -} - -impl Eq for Fractional {} - -impl Fractional { - #[must_use] - pub fn new(m: i64, e: u64) -> Fractional { - if e > EXP_UPPER_LIMIT { - panic!("Exponent cannot exceed {}", EXP_UPPER_LIMIT) - } - Fractional { m, exp: e } - } - - pub fn to_int(&self) -> i64 { - self.to_int_with_remainder().0 - } - - pub fn to_int_with_remainder(&self) -> (i64, Fractional) { - let reduced = self.get_reduced_form(); - let int = reduced.m / POW10[reduced.exp as usize]; - (int, *self + (-int)) - } - - pub fn from_str(s: &str) -> std::result::Result { - match s.split_once(".") { - Some((lhs, rhs)) => { - let m = format!("{}{}", lhs, rhs) - .parse::() - .map_err(|_| UtilError::DeserializeError)?; - Ok(Fractional::new(m, rhs.len() as u64)) - } - None => { - let m = s.parse::().map_err(|_| UtilError::DeserializeError)?; - Ok(Fractional::new(m, 0)) - } - } - } - - pub fn is_negative(&self) -> bool { - self.m < 0 - } - - pub fn sign(&self) -> i32 { - -2 * (self.is_negative() as i32) + 1 - } - - pub fn min(&self, other: Fractional) -> Fractional { - match *self > other { - true => other, - false => *self, - } - } - - pub fn max(&self, other: Fractional) -> Fractional { - match *self > other { - true => *self, - false => other, - } - } - - pub fn abs(&self) -> Fractional { - Fractional { - m: self.m.abs(), - exp: self.exp, - } - } - - pub fn reduce_mut(&mut self) { - if self.m == 0 { - self.exp = 0; - return; - } - while self.m % 10 == 0 { - self.m /= 10; - self.exp -= 1; - } - } - - pub fn get_reduced_form(&self) -> Self { - let mut reduced = Fractional::new(self.m, self.exp); - if reduced.m == 0 { - reduced.exp = 0; - return reduced; - } - while reduced.m % 10 == 0 && reduced.exp > 0 { - reduced.m /= 10; - reduced.exp -= 1; - } - reduced - } - - pub fn reduce_from_i128(m: &mut i128, exp: &mut u64) -> std::result::Result { - if *m == 0 { - *exp = 0; - } - if *m % POW10[16] as i128 == 0 && *exp >= 16 { - *m /= POW10[16] as i128; - *exp -= 16; - } - if *m % POW10[8] as i128 == 0 && *exp >= 8 { - *m /= POW10[8] as i128; - *exp -= 8; - } - if *m % POW10[4] as i128 == 0 && *exp >= 4 { - *m /= POW10[4] as i128; - *exp -= 4; - } - if *m % POW10[2] as i128 == 0 && *exp >= 2 { - *m /= POW10[2] as i128; - *exp -= 2; - } - while *m % 10 == 0 && *exp > 0 { - *m /= 10; - *exp -= 1; - } - - if !num_in_i64(*m) || *exp > EXP_UPPER_LIMIT { - return Err(UtilError::NumericalOverflow); - } - - Ok(Fractional::new(*m as i64, *exp)) - } - - pub fn reduce_from_i128_unchecked( - mut m: i128, - mut exp: u64, - ) -> std::result::Result { - if m == 0 { - exp = 0; - } - - while (exp > FLOATING_PRECISION as u64) || (!num_in_i64(m) && exp > 0) { - m /= 10; - exp -= 1; - } - - if !num_in_i64(m) { - return Err(UtilError::NumericalOverflow); - } - Ok(Fractional::new(m as i64, exp)) - } - - pub fn reduce_unchecked(m: &mut i128, exp: &mut u64, precision: u64) -> Self { - if *m == 0 { - return Fractional::new(0, 0); - } - while *exp > precision { - *m /= 10; - *exp -= 1; - } - Fractional::new(*m as i64, *exp) - } - - pub fn reduce( - m: &mut i128, - exp: &mut u64, - precision: u64, - ) -> std::result::Result { - if *m == 0 { - return Ok(Fractional::new(0, 0)); - } - while *exp > precision { - if *m % 10 != 0 { - return Err(UtilError::RoundError.into()); - } - *m /= 10; - *exp -= 1; - } - if !num_in_i64(*m) { - return Err(UtilError::NumericalOverflow.into()); - } - Ok(Fractional::new(*m as i64, *exp)) - } - - pub fn round_unchecked( - &self, - digits: u32, - ) -> std::result::Result { - let diff = digits as i32 - self.exp as i32; - if diff >= 0 { - Ok(Fractional::new( - (self.m) - .checked_mul(POW10[diff as usize]) - .ok_or(UtilError::NumericalOverflow)?, - digits as u64, - )) - } else { - Ok(Fractional::new( - self.m / POW10[diff.abs() as usize], - digits as u64, - )) - } - } - - pub fn round(&self, digits: u32) -> DomainOrProgramResult { - let num = self.round_unchecked(digits)?; - if &num != self { - return Err(UtilError::RoundError.into()); - } - Ok(num) - } - - fn round_up(&self, digits: u32) -> std::result::Result { - let diff = digits as usize - self.exp as usize; - (self.m) - .checked_mul(POW10[diff]) - .ok_or(UtilError::NumericalOverflow) - } - - pub fn round_sf(&self, digits: u32) -> Self { - if digits >= self.exp as u32 { - Fractional::new(self.m, self.exp) - } else { - let m = self.m / POW10[self.exp as usize - digits as usize]; - Fractional::new(m, digits as u64) - } - } - - pub fn round_sf_unchecked(&self, digits: u32) -> Self { - if digits >= self.exp as u32 { - Fractional::new(self.m, self.exp) - } else { - let m = self.m / POW10[self.exp as usize - digits as usize]; - Fractional::new(m, digits as u64) - } - } - - pub fn checked_add( - &self, - other: impl Into, - ) -> std::result::Result { - let other = other.into(); - let (mut m, mut exp) = if self.exp > other.exp { - ( - self.m as i128 + other.round_up(self.exp as u32)? as i128, - self.exp, - ) - } else if self.exp < other.exp { - ( - self.round_up(other.exp as u32)? as i128 + other.m as i128, - other.exp, - ) - } else { - (self.m as i128 + other.m as i128, self.exp) - }; - - if i128::abs(m) > i64::max_value() as i128 { - Fractional::reduce_from_i128(&mut m, &mut exp) - } else { - Ok(Self { m: m as i64, exp }) - } - } - - pub fn checked_sub( - &self, - other: impl Into, - ) -> std::result::Result { - let other = other.into(); - let (mut m, mut exp) = if self.exp > other.exp { - ( - self.m as i128 - other.round_up(self.exp as u32)? as i128, - self.exp, - ) - } else if self.exp < other.exp { - ( - self.round_up(other.exp as u32)? as i128 - other.m as i128, - other.exp, - ) - } else { - (self.m as i128 - other.m as i128, other.exp) - }; - - if i128::abs(m) > i64::max_value() as i128 { - Fractional::reduce_from_i128(&mut m, &mut exp) - } else { - Ok(Self { m: m as i64, exp }) - } - } - - pub fn checked_mul( - &self, - other: impl Into, - ) -> std::result::Result { - let other = other.into(); - match self.m == 0 || other.m == 0 { - true => Ok(ZERO_FRAC), - false => { - let mut m = (self.m as i128) * (other.m as i128); - let mut exp = self.exp + other.exp; - Ok(Fractional::reduce_from_i128(&mut m, &mut exp)?) - } - } - } - - pub fn saturating_mul(&self, other: impl Into) -> Fractional { - match self.checked_mul(other) { - Ok(f) => f, - _ => Fractional::new(i64::MAX, 0), - } - } - - pub fn saturating_add(&self, other: impl Into) -> Fractional { - match self.checked_add(other) { - Ok(f) => f, - _ => Fractional::new(i64::MAX, 0), - } - } - - pub fn checked_div( - &self, - other: impl Into, - ) -> std::result::Result { - let other = other.into(); - let sign = self.sign() * other.sign(); - let mut dividend: u128 = self.m.abs() as u128; - let divisor: u128 = other.m.abs() as u128; - let mut exp = (self.exp as i64) - (other.exp as i64); - dividend = dividend - .checked_mul(POW10[(DIVISION_PRECISION - exp.min(0)) as usize] as u128) - .ok_or(UtilError::NumericalOverflow)?; - - let quotient: u128 = dividend / divisor; - exp = exp - exp.min(0) + DIVISION_PRECISION; - - let divided = Fractional::reduce_from_i128(&mut (quotient as i128), &mut (exp as u64))?; - Ok(if sign >= 0 { - divided - } else { - Fractional::new(-1 * divided.m, divided.exp) - }) - } - - pub fn sqrt(&self) -> std::result::Result { - let mut exp = self.exp; - let mut m = self.m as i128; - - if exp % 2 != 0 { - if m < I64_MAX { - m *= 10; - exp += 1; - } else { - m /= 10; // huge number does not matter if we lose precision!! - exp -= 1; - } - } - let mut add_exp = 2; - - for _ in 0..SQRT_PRECISION / 2 { - let pre_m = m * POW10[2] as i128; - if pre_m > I64_MAX { - break; - } - m = pre_m; - add_exp += 2; - } - - exp += (add_exp - 2) as u64; - - let int_sqrt_m = int_sqrt(m)?; - - if !num_in_i64(int_sqrt_m) { - return Err(UtilError::NumericalOverflow); - } - Ok(Fractional::new(int_sqrt_m as i64, exp / 2)) - } - - pub fn exp(&self) -> std::result::Result { - let x = *self; - let e_x = if x > Fractional::new(-1, 0) { - Fractional::new(1, 0) - .checked_add(x)? - .checked_add(x * x * Fractional::new(5, 1))? - } else if x > Fractional::new(-15, 1) { - Fractional::new(22, 2) - } else if x > Fractional::new(-2, 0) { - Fractional::new(13, 2) - } else if x > Fractional::new(-25, 1) { - Fractional::new(8, 2) - } else if x > Fractional::new(-3, 0) { - Fractional::new(5, 2) - } else { - ZERO_FRAC - }; - - Ok(e_x) - } - - pub fn has_precision(&self, precision: i64) -> bool { - if precision > 0 { - match self.checked_div(Fractional { - m: POW10[precision as usize], - exp: 0, - }) { - Err(_) => false, - Ok(_) => true, - } - } else { - match self.round((-precision) as u32) { - Err(_) => false, - Ok(_) => true, - } - } - } -} - -impl FromStr for Fractional { - type Err = DomainOrProgramError; - - #[inline] - fn from_str(s: &str) -> std::result::Result { - match s.split_once(".") { - Some((lhs, rhs)) => { - let m = format!("{}{}", lhs, rhs) - .parse::() - .map_err(|_| UtilError::DeserializeError)?; - Ok(Fractional::new(m, rhs.len() as u64)) - } - None => { - let m = s.parse::().map_err(|_| UtilError::DeserializeError)?; - Ok(Fractional::new(m, 0)) - } - } - } -} - -#[cfg(test)] -#[test] -fn test_numeric() { - // Test square root - let big_int_0 = 1 << 103_i128; - let big_int_1 = 1 << 100_i128; - - let sq_int_0 = 1 << 51_i128; - let sq_int_1 = 1 << 50_i128; - - let sqrt_m = int_sqrt(big_int_0 + big_int_1).unwrap_or(-1); - assert_eq!(sqrt_m, sq_int_0 + sq_int_1); - - let big_int_0 = 1 << 126; - let big_int_1 = 1 << 125; - let quot = int_div(big_int_0, big_int_1).unwrap_or(0); - - assert_eq!(quot, 2); - - // Correct rounding - let m_round = match Fractional::new(1256000000000000, 12).round(6) { - Ok(v) => v, - Err(_) => ZERO_FRAC, - }; - assert_eq!(m_round.m, 1256000000); - assert_eq!(m_round.exp, 6); - - // Incorrect rounding - let m_round = match Fractional::new(1, 12).round(6) { - Ok(v) => v, - Err(_) => Fractional::new(-1, 0), - }; - assert_eq!(m_round.m, -1); - assert_eq!(m_round.exp, 0); - - // reduce from i128: success - let mut m = i64::MAX as i128; - let mut exp = 0_u64; - - let m_frac = match Fractional::reduce_from_i128(&mut m, &mut exp) { - Ok(v) => v, - Err(_) => ZERO_FRAC, - }; - let match_value = i64::MAX as i128; - assert_eq!(m_frac.m as i128, match_value); - - // failure - let mut m = i64::MAX as i128 + 1; - let mut exp = 0_u64; - let m_frac = match Fractional::reduce_from_i128(&mut m, &mut exp) { - Ok(v) => v, - Err(_) => ZERO_FRAC, - }; - assert_eq!(m_frac.m as i128, 0); - - //round_sf - let m = Fractional::new(i64::MAX, 7); - - let m_round = m.round_sf(10); - assert_eq!(m_round.m, i64::MAX); - assert_eq!(m_round.exp, 7); - - let m_round = m.round_sf(4); - - assert_eq!(m_round.m, i64::MAX / 10_i128.pow(3) as i64); - assert_eq!(m_round.exp, 4); - - // Big number comparisions: - // `big_int` 2**31 (~10**9) can only be added to dust ~10**-9 - // This is because of the shifts 2**63-1 (~10**18) - // Increasing `big_int` or increasing precision will cause failure - let big_int = (1 << 31) as i64; - let num = Fractional::new(big_int, 0); - let dust = Fractional::new(1, 9); - - let big_add = match num.checked_add(dust) { - Ok(v) => v, - Err(_) => ZERO_FRAC, - }; - - let big_sub = match num.checked_sub(dust) { - Ok(v) => v, - Err(_) => ZERO_FRAC, - }; - - assert!(big_add > num); - assert!(big_sub < num); - - // This fails - let big_int = (1 << 31) as i64; - let num = Fractional::new(big_int, 0); - let dust = Fractional::new(1, 10); - - let big_add = match num.checked_add(dust) { - Ok(v) => v, - Err(_) => ZERO_FRAC, - }; - - assert!(big_add == ZERO_FRAC); - - // checked_mul on large m - let v = match Fractional::new(1 << 62, 4).checked_div(Fractional::new(1 << 34, 0)) { - Ok(n) => n, - Err(_) => ZERO_FRAC, - }; - assert_eq!(v, Fractional::new(1 << 28, 4)); - - // This will fail in checked_mul - let v = match Fractional::new(1 << 40, EXP_UPPER_LIMIT) - .checked_mul(Fractional::new(1 << 35, EXP_UPPER_LIMIT)) - { - Ok(_) => 0, - Err(_) => 1, - }; - assert_eq!(v, 1); - - // This will not fail on * but will round down to the best value - let v = if Fractional::new(1 << 40, EXP_UPPER_LIMIT) * Fractional::new(1 << 35, EXP_UPPER_LIMIT) - > ZERO_FRAC - { - 0 - } else { - 1 - }; - assert_eq!(v, 0); -} diff --git a/hxro-print-trade-provider/dex/src/utils/orderbook.rs b/hxro-print-trade-provider/dex/src/utils/orderbook.rs deleted file mode 100644 index d9131db..0000000 --- a/hxro-print-trade-provider/dex/src/utils/orderbook.rs +++ /dev/null @@ -1,111 +0,0 @@ -use crate::{ - error::{DomainOrProgramError, DomainOrProgramResult}, - state::{ - constants::{NO_ASK_PRICE, NO_BID_PRICE}, - market_product_group::PriceEwma, - }, - utils::numeric::Fractional, -}; -use agnostic_orderbook::{ - critbit::{NodeHandle, Slab}, - state::{MarketState, Side}, -}; -use anchor_lang::solana_program::{ - account_info::AccountInfo, clock::Clock, msg, program_error::ProgramError, pubkey::Pubkey, -}; - -pub const EWMA_ROUND: u32 = 2; - -pub fn load_orderbook( - account: &AccountInfo, - market_signer: &Pubkey, -) -> std::result::Result { - let orderbook_state = MarketState::get(account)?; - if orderbook_state.tag != agnostic_orderbook::state::AccountTag::Market as u64 { - msg!("Invalid orderbook"); - return Err(ProgramError::InvalidArgument.into()); - } - if &orderbook_state.caller_authority != &market_signer.to_bytes() { - msg!("The provided orderbook isn't owned by the market signer."); - return Err(ProgramError::InvalidArgument.into()); - } - Ok(*orderbook_state) -} - -pub fn get_bbo( - node: Option, - book: &Slab, - side: Side, - tick_size: Fractional, - price_offset: Fractional, -) -> std::result::Result { - match node { - Some(nh) => { - let leaf_node = book.get_node(nh).unwrap().as_leaf().unwrap().to_owned(); - let price_aob = leaf_node.price(); - let price_dex = Fractional::new((price_aob >> 32) as i64, 0) - .checked_mul(tick_size)? - .checked_sub(price_offset)?; - Ok(price_dex) - } - None => match side { - Side::Bid => Ok(NO_BID_PRICE), - Side::Ask => Ok(NO_ASK_PRICE), - }, - } -} - -pub fn update_prices( - clock: &Clock, - prices: &mut PriceEwma, - bid_price: Fractional, - ask_price: Fractional, - windows: &[u64], -) -> DomainOrProgramResult { - let curr_slot = clock.slot; - let prev_slot = prices.slot; - let slots_elapsed = Fractional::from((curr_slot - prev_slot) as i64).round(4)?; - if curr_slot > prev_slot { - apply_ewma_transform(&mut prices.ewma_bid, windows, prices.bid, slots_elapsed)?; - apply_ewma_transform(&mut prices.ewma_ask, windows, prices.ask, slots_elapsed)?; - prices.prev_bid = prices.bid; - prices.prev_ask = prices.ask; - } else { - if prices.bid == NO_BID_PRICE { - apply_ewma_transform(&mut prices.ewma_bid, windows, bid_price, slots_elapsed)?; - } - if prices.ask == NO_ASK_PRICE { - apply_ewma_transform(&mut prices.ewma_ask, windows, ask_price, slots_elapsed)?; - } - } - prices.bid = bid_price; - prices.ask = ask_price; - prices.slot = curr_slot; - Ok(()) -} - -fn apply_ewma_transform( - ewma: &mut [Fractional], - windows: &[u64], - curr_price: Fractional, - slots_elapsed: Fractional, -) -> DomainOrProgramResult { - if curr_price == NO_BID_PRICE || curr_price == NO_ASK_PRICE { - return Ok(()); - } - for i in 0..windows.len() { - if ewma[i] == NO_BID_PRICE || ewma[i] == NO_ASK_PRICE { - ewma[i] = curr_price; - continue; - } - let window = windows[i]; - let x = -slots_elapsed - .checked_div(Fractional::new(window as i64, 0))? - .round_sf(EWMA_ROUND); - let weight = x.exp()?.round_sf(EWMA_ROUND); - let prev = weight.saturating_mul(ewma[i]); - let curr = (Fractional::new(1, 0).checked_sub(weight)?).saturating_mul(curr_price); - ewma[i] = prev.saturating_add(curr); - } - Ok(()) -} diff --git a/hxro-print-trade-provider/dex/src/utils/param.rs b/hxro-print-trade-provider/dex/src/utils/param.rs deleted file mode 100644 index 3601667..0000000 --- a/hxro-print-trade-provider/dex/src/utils/param.rs +++ /dev/null @@ -1,137 +0,0 @@ -use crate::utils::loadable::Loadable; -use anchor_lang::solana_program::{account_info::AccountInfo, pubkey::Pubkey}; -use bytemuck::{Pod, Zeroable}; -use std::{ - cell::{Ref, RefMut}, - ops::{Deref, DerefMut}, -}; - -#[repr(C)] -#[derive(Debug, Clone, Copy)] -pub struct AcctWithDisc { - pub discriminant: u64, - pub inner: T, -} - -unsafe impl Zeroable for AcctWithDisc {} - -unsafe impl Pod for AcctWithDisc {} - -impl DerefMut for AcctWithDisc { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.inner - } -} - -impl Deref for AcctWithDisc { - type Target = T; - - fn deref(&self) -> &Self::Target { - &self.inner - } -} - -pub struct WithAcct<'a, 'b, T> { - pub acct: &'a AccountInfo<'b>, - inner: T, -} - -impl<'a, 'b, T> WithAcct<'a, 'b, T> { - // pub(crate) fn new(acct: &'a AccountInfo<'b>, inner: T) -> Self { - // WithAcct { acct, inner } - // } - - pub fn load_mut( - acct: &'a AccountInfo<'b>, - ) -> std::result::Result>, DomainOrProgramError> - where - T: Loadable, - { - Ok(WithAcct { - acct, - inner: T::load_mut(acct)?, - }) - } - - pub fn load( - acct: &'a AccountInfo<'b>, - ) -> std::result::Result>, DomainOrProgramError> - where - T: Loadable, - { - Ok(WithAcct { - acct, - inner: T::load(acct)?, - }) - } -} - -impl<'a, 'b, T> DerefMut for WithAcct<'a, 'b, T> { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.inner - } -} - -impl<'a, 'b, T> Deref for WithAcct<'a, 'b, T> { - type Target = T; - - fn deref(&self) -> &Self::Target { - &self.inner - } -} - -pub struct WithKey<'a, T> { - pub key: &'a Pubkey, - inner: T, -} - -impl<'a, T> WithKey<'a, T> { - pub fn new(key: &'a Pubkey, inner: T) -> Self { - WithKey { key, inner } - } - - pub fn load_mut<'b: 'a>( - acct: &'a AccountInfo<'b>, - ) -> std::result::Result>, DomainOrProgramError> - where - T: Loadable, - { - Ok(WithKey { - key: acct.key, - inner: T::load_mut(acct)?, - }) - } - - pub fn load<'b: 'a>( - acct: &'a AccountInfo<'b>, - ) -> std::result::Result>, DomainOrProgramError> - where - T: Loadable, - { - Ok(WithKey { - key: acct.key, - inner: T::load(acct)?, - }) - } - - pub fn from_acct<'b: 'a>(acct: &'a AccountInfo<'b>, inner: T) -> Self { - WithKey { - key: acct.key, - inner, - } - } -} - -impl<'a, T> DerefMut for WithKey<'a, T> { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.inner - } -} - -impl<'a, T> Deref for WithKey<'a, T> { - type Target = T; - - fn deref(&self) -> &Self::Target { - &self.inner - } -} diff --git a/hxro-print-trade-provider/instruments/Cargo.toml b/hxro-print-trade-provider/instruments/Cargo.toml deleted file mode 100644 index fabfbde..0000000 --- a/hxro-print-trade-provider/instruments/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "instruments" -version = "0.1.0" -description = "Created with Anchor" -edition = "2018" - -[lib] -crate-type = ["cdylib", "lib"] -name = "instruments" - -[features] -no-entrypoint = [] -no-idl = [] -no-log-ix-name = [] -cpi = ["no-entrypoint"] -default = [] - -[dependencies] -anchor-lang = "0.28.0" -solana-program = "=1.14.16" -thiserror = "1.0" -spl-token = { version = "3.1.1", features = ["no-entrypoint"] } -spl-associated-token-account = { version = "1.0.3", features = [ - "no-entrypoint", -] } -dex = { path = "../dex", features = ["no-entrypoint", "cpi"] } -bytemuck = { version = "1.7.2", features = ["derive"] } -arrayref = "0.3.6" -borsh = "0.9" -pyth-client = { git = "https://github.com/pyth-network/pyth-client-rs", rev = "396b7e9" } -num-traits = "0.2.14" -num-derive = "0.3" -bincode = "1.3.1" diff --git a/hxro-print-trade-provider/instruments/Xargo.toml b/hxro-print-trade-provider/instruments/Xargo.toml deleted file mode 100644 index 475fb71..0000000 --- a/hxro-print-trade-provider/instruments/Xargo.toml +++ /dev/null @@ -1,2 +0,0 @@ -[target.bpfel-unknown-unknown.dependencies.std] -features = [] diff --git a/hxro-print-trade-provider/instruments/src/error.rs b/hxro-print-trade-provider/instruments/src/error.rs deleted file mode 100644 index 05067e5..0000000 --- a/hxro-print-trade-provider/instruments/src/error.rs +++ /dev/null @@ -1,53 +0,0 @@ -use dex::error::DomainOrProgramError; -use num_derive::FromPrimitive; -use solana_program::{decode_error::DecodeError, program_error::ProgramError}; -use thiserror::Error; - -#[derive(Error, Debug, Copy, Clone, FromPrimitive, PartialEq)] -pub enum DerivativeError { - #[error("AccountAlreadyInitialized")] - AccountAlreadyInitialized, - #[error("InvalidSettlementTime")] - InvalidSettlementTime, - #[error("InvalidCreationTime")] - InvalidCreationTime, - #[error("UninitializedAccount")] - UninitializedAccount, - #[error("InvalidSequenceNumber")] - InvalidSequenceNumber, - #[error("UnsettledAccounts")] - UnsettledAccounts, - #[error("InvalidOracleConfig")] - InvalidOracleConfig, - #[error("NumericalOverflow")] - NumericalOverflow, - #[error("CannotBeDeleted")] - CannotBeDeleted, - #[error("ContractIsExpired")] - ContractIsExpired, - #[error("InvalidDate")] - InvalidDate, - #[error("InvalidAccount")] - InvalidAccount, -} - -impl From for ProgramError { - fn from(e: DerivativeError) -> Self { - ProgramError::Custom(e as u32) - } -} - -impl DecodeError for DerivativeError { - fn type_of() -> &'static str { - "DerivativeError" - } -} - -impl From for DomainOrProgramError { - fn from(e: DerivativeError) -> Self { - DomainOrProgramError::Other { - code: e as u32, - msg: format!("{}", e), - } - } -} diff --git a/hxro-print-trade-provider/instruments/src/lib.rs b/hxro-print-trade-provider/instruments/src/lib.rs deleted file mode 100644 index 7d9a94b..0000000 --- a/hxro-print-trade-provider/instruments/src/lib.rs +++ /dev/null @@ -1,132 +0,0 @@ -#![allow(clippy::derivable_impls)] - -pub mod state; - -use crate::state::{ - derivative_metadata::DerivativeMetadata, - enums::{InstrumentType, OracleType}, -}; -use anchor_lang::prelude::*; -use bytemuck::{Pod, Zeroable}; -use dex::utils::numeric::Fractional; -use solana_program::{ - account_info::AccountInfo, - clock::UnixTimestamp, - entrypoint::ProgramResult, - pubkey::Pubkey, - sysvar::{rent::Rent, Sysvar}, -}; - -declare_id!("8981bZYszfz1FrFVx7gcUm61RfawMoAHnURuERRJKdkq"); - -#[program] -pub mod instruments { - use super::*; - pub fn initialize_derivative( - _ctx: Context, - _params: InitializeDerivativeParams, - ) -> ProgramResult { - Ok(()) - } - - pub fn settle_derivative(_ctx: Context) -> ProgramResult { - Ok(()) - } - - pub fn close_derivative_account(_ctx: Context) -> ProgramResult { - Ok(()) - } -} - -#[derive(Accounts)] -pub struct SettleDerivative<'info> { - #[account(mut)] - pub market_product_group: AccountInfo<'info>, - #[account( - mut, - seeds=[ - b"derivative", - price_oracle.key.to_bytes().as_ref(), - market_product_group.key.to_bytes().as_ref(), - (derivative_metadata.load()?.instrument_type as u64).to_le_bytes().as_ref(), - derivative_metadata.load()?.strike.m.to_le_bytes().as_ref(), - derivative_metadata.load()?.strike.exp.to_le_bytes().as_ref(), - derivative_metadata.load()?.initialization_time.to_le_bytes().as_ref(), - derivative_metadata.load()?.full_funding_period.to_le_bytes().as_ref(), - derivative_metadata.load()?.minimum_funding_period.to_le_bytes().as_ref(), - ], - bump, - )] - pub derivative_metadata: AccountLoader<'info, DerivativeMetadata>, - pub price_oracle: AccountInfo<'info>, - pub dex_program: AccountInfo<'info>, - pub clock: AccountInfo<'info>, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, Pod, Zeroable, PartialEq, Debug, Clone, Copy)] -pub struct InitializeDerivativeParams { - /// CALL or PUT (perpetuals are just calls with 0 strike price) - pub instrument_type: InstrumentType, - /// Strike price of an option, 0 for for perpetual swaps and futures - pub strike: Fractional, - /// Number of seconds for a 100% interest payment - pub full_funding_period: UnixTimestamp, - /// Number of seconds for a minimum funding period (< 100%) - pub minimum_funding_period: UnixTimestamp, - pub initialization_time: UnixTimestamp, - pub close_authority: Pubkey, - // Oracle type - pub oracle_type: OracleType, -} - -#[derive(Accounts)] -#[instruction(params: InitializeDerivativeParams)] -pub struct InitializeDerivative<'info> { - #[account( - init, - seeds=[ - b"derivative", - price_oracle.key.to_bytes().as_ref(), - market_product_group.key.to_bytes().as_ref(), - (params.instrument_type as u64).to_le_bytes().as_ref(), - params.strike.m.to_le_bytes().as_ref(), - params.strike.exp.to_le_bytes().as_ref(), - params.initialization_time.to_le_bytes().as_ref(), - params.full_funding_period.to_le_bytes().as_ref(), - params.minimum_funding_period.to_le_bytes().as_ref(), - ], - bump, - payer = payer, - space = 8 + std::mem::size_of::() - )] - pub derivative_metadata: AccountLoader<'info, DerivativeMetadata>, - pub price_oracle: AccountInfo<'info>, - pub market_product_group: AccountInfo<'info>, - #[account(mut)] - pub payer: Signer<'info>, - pub system_program: Program<'info, System>, - pub clock: AccountInfo<'info>, -} - -#[derive(Accounts)] -pub struct CloseDerivativeAccount<'info> { - #[account( - mut, - seeds=[ - b"derivative", - derivative_metadata.load()?.price_oracle.to_bytes().as_ref(), - derivative_metadata.load()?.market_product_group.to_bytes().as_ref(), - (derivative_metadata.load()?.instrument_type as u64).to_le_bytes().as_ref(), - derivative_metadata.load()?.strike.m.to_le_bytes().as_ref(), - derivative_metadata.load()?.strike.exp.to_le_bytes().as_ref(), - derivative_metadata.load()?.initialization_time.to_le_bytes().as_ref(), - derivative_metadata.load()?.full_funding_period.to_le_bytes().as_ref(), - derivative_metadata.load()?.minimum_funding_period.to_le_bytes().as_ref(), - ], - bump, - )] - derivative_metadata: AccountLoader<'info, DerivativeMetadata>, - close_authority: Signer<'info>, - destination: AccountInfo<'info>, -} diff --git a/hxro-print-trade-provider/instruments/src/state/constants.rs b/hxro-print-trade-provider/instruments/src/state/constants.rs deleted file mode 100644 index d7eab8c..0000000 --- a/hxro-print-trade-provider/instruments/src/state/constants.rs +++ /dev/null @@ -1 +0,0 @@ -pub const MAX_DATES: usize = 32; diff --git a/hxro-print-trade-provider/instruments/src/state/derivative_metadata.rs b/hxro-print-trade-provider/instruments/src/state/derivative_metadata.rs deleted file mode 100644 index b72e7d6..0000000 --- a/hxro-print-trade-provider/instruments/src/state/derivative_metadata.rs +++ /dev/null @@ -1,48 +0,0 @@ -use crate::state::enums::{AccountTag, ExpirationStatus, InstrumentType, OracleType}; -use anchor_lang::prelude::*; -use dex::utils::numeric::Fractional; -use solana_program::{clock::UnixTimestamp, program_error::ProgramError, pubkey::Pubkey}; - -#[account(zero_copy)] -pub struct DerivativeMetadata { - pub tag: AccountTag, - pub expired: ExpirationStatus, - pub oracle_type: OracleType, - pub instrument_type: InstrumentType, - pub bump: u64, - pub strike: Fractional, - pub initialization_time: UnixTimestamp, - pub full_funding_period: UnixTimestamp, - pub minimum_funding_period: UnixTimestamp, - pub price_oracle: Pubkey, - pub market_product_group: Pubkey, - pub close_authority: Pubkey, - pub clock: Pubkey, - pub last_funding_time: UnixTimestamp, -} - -impl DerivativeMetadata { - pub fn get_key(&self, program_id: &Pubkey) -> std::result::Result { - let seeds = &[ - b"derivative", - self.price_oracle.as_ref(), - self.market_product_group.as_ref(), - &(self.instrument_type as u64).to_le_bytes(), - &self.strike.m.to_le_bytes(), - &self.strike.exp.to_le_bytes(), - &self.initialization_time.to_le_bytes(), - &self.full_funding_period.to_le_bytes(), - &self.minimum_funding_period.to_le_bytes(), - &[self.bump as u8], - ]; - Ok(Pubkey::create_program_address(seeds, program_id)?) - } - - pub fn is_initialized(&self) -> bool { - self.tag == AccountTag::DerivativeMetadata && self.expired == ExpirationStatus::Active - } - - pub fn expired(&self) -> bool { - self.expired == ExpirationStatus::Expired - } -} diff --git a/hxro-print-trade-provider/instruments/src/state/enums.rs b/hxro-print-trade-provider/instruments/src/state/enums.rs deleted file mode 100644 index 1c6fff4..0000000 --- a/hxro-print-trade-provider/instruments/src/state/enums.rs +++ /dev/null @@ -1,74 +0,0 @@ -use borsh::{BorshDeserialize, BorshSerialize}; -use bytemuck::{Pod, Zeroable}; -use dex::error::UtilError; - -#[derive(Copy, Clone, Debug, PartialEq)] -#[repr(u64)] -pub enum AccountTag { - Uninitialized, - DerivativeMetadata, - FixedIncomeMetadata, -} -impl Default for AccountTag { - fn default() -> Self { - AccountTag::Uninitialized - } -} -unsafe impl Zeroable for AccountTag {} -unsafe impl Pod for AccountTag {} - -#[derive(BorshSerialize, BorshDeserialize, Copy, Debug, Clone, PartialEq)] -#[repr(u64)] -pub enum InstrumentType { - Uninitialized, - RecurringCall, - RecurringPut, - ExpiringCall, - ExpiringPut, -} -impl Default for InstrumentType { - fn default() -> Self { - InstrumentType::Uninitialized - } -} -unsafe impl Zeroable for InstrumentType {} -unsafe impl Pod for InstrumentType {} - -impl InstrumentType { - pub fn is_recurring(&self) -> std::result::Result { - match self { - InstrumentType::RecurringCall | InstrumentType::RecurringPut => Ok(true), - InstrumentType::ExpiringCall | InstrumentType::ExpiringPut => Ok(false), - InstrumentType::Uninitialized => Err(UtilError::AccountUninitialized), - } - } -} - -#[derive(BorshSerialize, BorshDeserialize, Copy, Debug, Clone, PartialEq)] -#[repr(u64)] -pub enum OracleType { - Uninitialized, - Pyth, - Dummy, -} -impl Default for OracleType { - fn default() -> Self { - OracleType::Uninitialized - } -} -unsafe impl Zeroable for OracleType {} -unsafe impl Pod for OracleType {} - -#[derive(Copy, Clone, Debug, PartialEq)] -#[repr(u64)] -pub enum ExpirationStatus { - Active, - Expired, -} -impl Default for ExpirationStatus { - fn default() -> Self { - ExpirationStatus::Active - } -} -unsafe impl Zeroable for ExpirationStatus {} -unsafe impl Pod for ExpirationStatus {} diff --git a/hxro-print-trade-provider/instruments/src/state/mod.rs b/hxro-print-trade-provider/instruments/src/state/mod.rs deleted file mode 100644 index d6ef567..0000000 --- a/hxro-print-trade-provider/instruments/src/state/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod constants; -pub mod derivative_metadata; -pub mod enums; diff --git a/hxro-print-trade-provider/js/.gitignore b/hxro-print-trade-provider/js/.gitignore deleted file mode 100644 index 54ad0e9..0000000 --- a/hxro-print-trade-provider/js/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -idl/ -generated/ \ No newline at end of file diff --git a/hxro-print-trade-provider/js/.solitarc.js b/hxro-print-trade-provider/js/.solitarc.js deleted file mode 100644 index f1bacc4..0000000 --- a/hxro-print-trade-provider/js/.solitarc.js +++ /dev/null @@ -1,16 +0,0 @@ -const path = require("path"); - -const programDir = path.join(__dirname, "..", "program"); -const idlDir = path.join(__dirname, "idl"); -const sdkDir = path.join(__dirname, "generated"); -const binaryInstallDir = path.join(__dirname, ".crates"); - -module.exports = { - idlGenerator: "anchor", - programName: "hxro_print_trade_provider", - programId: "598ZWckNjupx5sftmNC27NPRYHbwNbxi2dYBUan7Su1P", - idlDir, - sdkDir, - binaryInstallDir, - programDir, -}; diff --git a/hxro-print-trade-provider/js/README.md b/hxro-print-trade-provider/js/README.md deleted file mode 100644 index ccca4af..0000000 --- a/hxro-print-trade-provider/js/README.md +++ /dev/null @@ -1 +0,0 @@ -# @convergence-rfq/hxro-print-trade-provider diff --git a/hxro-print-trade-provider/js/package.json b/hxro-print-trade-provider/js/package.json deleted file mode 100644 index 81e8e6f..0000000 --- a/hxro-print-trade-provider/js/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@convergence-rfq/hxro-print-trade-provider", - "version": "3.12.0", - "license": "MIT", - "publishConfig": { - "access": "public", - "registry": "https://registry.npmjs.org" - }, - "repository": "https://github.com/convergence-rfq/convergence-program-library.git", - "author": "Convergence RFQ Maintainers ", - "main": "./generated/index.js", - "types": "./generated/index.d.ts", - "files": [ - "/generated", - "/idl" - ], - "scripts": { - "build": "rimraf dist && yarn solita && tsc -p tsconfig.json --declaration" - }, - "dependencies": { - "@convergence-rfq/beet": "^0.7.10", - "@convergence-rfq/beet-solana": "^0.4.11", - "@solana/spl-token": "^0.3.5", - "@solana/web3.js": "^1.56.2", - "bn.js": "^5.2.0" - }, - "devDependencies": { - "@convergence-rfq/solita": "^0.16.0", - "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", - "typescript": "^4.8.4", - "rimraf": "^4.1.2" - } -} diff --git a/hxro-print-trade-provider/js/tsconfig.build.json b/hxro-print-trade-provider/js/tsconfig.build.json deleted file mode 100644 index 6c02a57..0000000 --- a/hxro-print-trade-provider/js/tsconfig.build.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": ".", - "baseUrl": "." - }, - "include": ["./idl", "./generated"], - "exclude": ["node_modules"] -} diff --git a/hxro-print-trade-provider/js/tsconfig.json b/hxro-print-trade-provider/js/tsconfig.json deleted file mode 100644 index fd6b728..0000000 --- a/hxro-print-trade-provider/js/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "compilerOptions": { - "rootDir": "." - }, - "include": ["./generated", "./idl"] -} diff --git a/hxro-print-trade-provider/js/yarn.lock b/hxro-print-trade-provider/js/yarn.lock deleted file mode 100644 index fd0c77e..0000000 --- a/hxro-print-trade-provider/js/yarn.lock +++ /dev/null @@ -1,612 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" - -"@convergence-rfq/beet-solana@=0.4.9": - version "0.4.9" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet-solana/-/beet-solana-0.4.9.tgz#c0a0b0bc98786bc4337f9b94f780bdea9651f81c" - integrity sha512-4NBLz5Xs45O7NJqLkKhS0nuIu4qOwtJ83QVz317pFzDMd9UKbD2+VRnzKu7rcsPMIxGqKKp5BrHbaiZEh94pfQ== - dependencies: - "@convergence-rfq/beet" "=0.7.8" - "@solana/web3.js" "^1.56.2" - bs58 "^5.0.0" - debug "^4.3.4" - -"@convergence-rfq/beet-solana@^0.4.11": - version "0.4.11" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet-solana/-/beet-solana-0.4.11.tgz#92bb9bb012b2978575cd1e245cfbe4ff32265056" - integrity sha512-gBuuJQ/wh8Nfsc10RQxJVEWf07fAuJlvb5EZYhArlIrO3ZY8AqvJpUJzh6tuLnEX9rvONEVKWJfjJSes8GsFUg== - dependencies: - "@convergence-rfq/beet" "^0.7.10" - "@solana/web3.js" "^1.56.2" - bs58 "^5.0.0" - debug "^4.3.4" - -"@convergence-rfq/beet@=0.7.8": - version "0.7.8" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet/-/beet-0.7.8.tgz#80c21a7a9a931770c02c2034844388de2f433122" - integrity sha512-+nyeTlqzpr9PsLhzJ5aC594KFIYmQ6ucHcy/fsWp//KNhgRlA98ADl+E+zNoMnwS8owHTGYdW3P3adWpv8iOJA== - dependencies: - ansicolors "^0.3.2" - bn.js "^5.2.0" - debug "^4.3.3" - -"@convergence-rfq/beet@=0.7.9": - version "0.7.9" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet/-/beet-0.7.9.tgz#9fea925bc8323150d801251957a1066deb914927" - integrity sha512-8JPbjnuUVfQiV/9e9OHyLSucIQliMlzkg1w31EqOlk5p1G1cT5eR6dTLlAf2XJtu+2cTqxS1BPUIXBGLyJZMjQ== - dependencies: - ansicolors "^0.3.2" - bn.js "^5.2.0" - debug "^4.3.3" - -"@convergence-rfq/beet@^0.7.10": - version "0.7.10" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet/-/beet-0.7.10.tgz#dabce4c8645333cb530ff8f09732c2e8013343a3" - integrity sha512-mwCQjD5v+FSZiQwyhgdpoqJ9W0jpqxS8FPgwok3gXgTJQnAAwzzVRoyvNc7GhkIjtsr7H8uJAftiTAEr5DeXyg== - dependencies: - ansicolors "^0.3.2" - bn.js "^5.2.0" - debug "^4.3.3" - -"@convergence-rfq/solita@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@convergence-rfq/solita/-/solita-0.16.0.tgz#db30fe6e6ec1f048368da88a34123e8775a1768e" - integrity sha512-P3HcjI+lmEy2wNgMfe6rEU8cQwceLHpbF7I5IpSF3jAG0KdDBOWHf3+AIdQOuxm2jk397nAWi2+yNQ3Mh9PlAQ== - dependencies: - "@convergence-rfq/beet" "=0.7.9" - "@convergence-rfq/beet-solana" "=0.4.9" - "@metaplex-foundation/rustbin" "^0.3.0" - "@solana/web3.js" "^1.56.2" - camelcase "^6.2.1" - debug "^4.3.3" - js-sha256 "^0.9.0" - prettier "^2.5.1" - snake-case "^3.0.4" - spok "^1.4.3" - -"@metaplex-foundation/rustbin@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/rustbin/-/rustbin-0.3.1.tgz#bbcd61e8699b73c0b062728c6f5e8d52e8145042" - integrity sha512-hWd2JPrnt2/nJzkBpZD3Y6ZfCUlJujv2K7qUfsxdS0jSwLrSrOvYwmNWFw6mc3lbULj6VP4WDyuy9W5/CHU/lQ== - dependencies: - debug "^4.3.3" - semver "^7.3.7" - text-table "^0.2.0" - toml "^3.0.0" - -"@noble/ed25519@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.0.tgz#583ac38340a479314b9e348d4572101ed9492f9d" - integrity sha512-LeAxFK0+181zQOhOUuKE8Jnd3duzYhDNd3iCLxpmzA5K+e4I1FdbrK3Ot0ZHBwZMeRD/6EojyUfTbpHZ+hkQHg== - -"@noble/hashes@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== - -"@noble/secp256k1@^1.6.3": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" - integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== - -"@solana/buffer-layout-utils@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" - integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== - dependencies: - "@solana/buffer-layout" "^4.0.0" - "@solana/web3.js" "^1.32.0" - bigint-buffer "^1.1.5" - bignumber.js "^9.0.1" - -"@solana/buffer-layout@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734" - integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ== - dependencies: - buffer "~6.0.3" - -"@solana/spl-token@^0.3.5": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.6.tgz#35473ad2ed71fe91e5754a2ac72901e1b8b26a42" - integrity sha512-P9pTXjDIRvVbjr3J0mCnSamYqLnICeds7IoH1/Ro2R9OBuOHdp5pqKZoscfZ3UYrgnCWUc1bc9M2m/YPHjw+1g== - dependencies: - "@solana/buffer-layout" "^4.0.0" - "@solana/buffer-layout-utils" "^0.2.0" - buffer "^6.0.3" - -"@solana/web3.js@^1.32.0": - version "1.70.3" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.70.3.tgz#44040a78d1f86ee6a0a9dbe391b5f891bb404265" - integrity sha512-9JAFXAWB3yhUHnoahzemTz4TcsGqmITPArNlm9795e+LA/DYkIEJIXIosV4ImzDMfqolymZeRgG3O8ewNgYTTA== - dependencies: - "@babel/runtime" "^7.12.5" - "@noble/ed25519" "^1.7.0" - "@noble/hashes" "^1.1.2" - "@noble/secp256k1" "^1.6.3" - "@solana/buffer-layout" "^4.0.0" - agentkeepalive "^4.2.1" - bigint-buffer "^1.1.5" - bn.js "^5.0.0" - borsh "^0.7.0" - bs58 "^4.0.1" - buffer "6.0.1" - fast-stable-stringify "^1.0.0" - jayson "^3.4.4" - node-fetch "2" - rpc-websockets "^7.5.0" - superstruct "^0.14.2" - -"@solana/web3.js@^1.56.2": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.60.0.tgz#279dd95ab60d24c32dec5337b37db0d82e854bdd" - integrity sha512-gXwUPOruR786Mbce4n5cM2JA00UvRLuoUAQ5Me/XvY49Tqb8u4umifPY/rzWigJxs3XDCN2i2OT1avYjoePLMw== - dependencies: - "@babel/runtime" "^7.12.5" - "@noble/ed25519" "^1.7.0" - "@noble/hashes" "^1.1.2" - "@noble/secp256k1" "^1.6.3" - "@solana/buffer-layout" "^4.0.0" - bigint-buffer "^1.1.5" - bn.js "^5.0.0" - borsh "^0.7.0" - bs58 "^4.0.1" - buffer "6.0.1" - fast-stable-stringify "^1.0.0" - jayson "^3.4.4" - node-fetch "2" - rpc-websockets "^7.5.0" - superstruct "^0.14.2" - -"@types/chai@^4.3.0": - version "4.3.4" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" - integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== - -"@types/connect@^3.4.33": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/mocha@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== - -"@types/node@*": - version "18.7.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.16.tgz#0eb3cce1e37c79619943d2fd903919fc30850601" - integrity sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg== - -"@types/node@^12.12.54": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/ws@^7.4.4": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -ansicolors@^0.3.2, ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base-x@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" - integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bigint-buffer@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" - integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== - dependencies: - bindings "^1.3.0" - -bignumber.js@^9.0.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - -bindings@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bn.js@^5.0.0, bn.js@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -borsh@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" - integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - -bs58@^4.0.0, bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" - integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== - dependencies: - base-x "^4.0.0" - -buffer@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" - integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -buffer@^6.0.3, buffer@~6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== - dependencies: - node-gyp-build "^4.3.0" - -camelcase@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -debug@^4.1.0, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== - dependencies: - es6-promise "^4.0.3" - -eventemitter3@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -eyes@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== - -fast-stable-stringify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" - integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - -jayson@^3.4.4: - version "3.7.0" - resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.7.0.tgz#b735b12d06d348639ae8230d7a1e2916cb078f25" - integrity sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ== - dependencies: - "@types/connect" "^3.4.33" - "@types/node" "^12.12.54" - "@types/ws" "^7.4.4" - JSONStream "^1.3.5" - commander "^2.20.3" - delay "^5.0.0" - es6-promisify "^5.0.0" - eyes "^0.1.8" - isomorphic-ws "^4.0.1" - json-stringify-safe "^5.0.1" - lodash "^4.17.20" - uuid "^8.3.2" - ws "^7.4.5" - -js-sha256@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" - integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -lodash@^4.17.20: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-fetch@2: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== - -prettier@^2.5.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -rimraf@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.1.2.tgz#20dfbc98083bdfaa28b01183162885ef213dbf7c" - integrity sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ== - -rpc-websockets@^7.5.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.0.tgz#bbeb87572e66703ff151e50af1658f98098e2748" - integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ== - dependencies: - "@babel/runtime" "^7.17.2" - eventemitter3 "^4.0.7" - uuid "^8.3.2" - ws "^8.5.0" - optionalDependencies: - bufferutil "^4.0.1" - utf-8-validate "^5.0.2" - -safe-buffer@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -spok@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/spok/-/spok-1.4.3.tgz#8516234e6bd8caf0e10567bd675e15fd03b5ceb8" - integrity sha512-5wFGctwrk638aDs+44u99kohxFNByUq2wo0uShQ9yqxSmsxqx7zKbMo1Busy4s7stZQXU+PhJ/BlVf2XWFEGIw== - dependencies: - ansicolors "~0.3.2" - -superstruct@^0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" - integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== - -text-encoding-utf-8@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" - integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -"through@>=2.2.7 <3": - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tslib@^2.0.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -typescript@^4.8.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== - -utf-8-validate@^5.0.2: - version "5.0.9" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== - dependencies: - node-gyp-build "^4.3.0" - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -ws@^7.4.5: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.5.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" - integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/hxro-print-trade-provider/program/Cargo.toml b/hxro-print-trade-provider/program/Cargo.toml deleted file mode 100644 index 1ea0e9d..0000000 --- a/hxro-print-trade-provider/program/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "hxro-print-trade-provider" -version = "0.1.0" -description = "Created with Anchor" -edition = "2021" - -[lib] -crate-type = ["cdylib", "lib"] -name = "hxro_print_trade_provider" - -[dependencies] -anchor-lang = { version = "0.28.0", features = ["init-if-needed"] } -dex = { path = "../dex", features = ["cpi"] } -agnostic-orderbook = { version = "0.1.0", path = "../agnostic-orderbook", features = [ - "no-entrypoint", -] } -instruments = { path = "../instruments", features = ["cpi"] } -rfq = { path = "../../rfq/program", features = ["no-entrypoint"] } -risk-engine = { path = "../../risk-engine/program", features = [ - "no-entrypoint", -] } diff --git a/hxro-print-trade-provider/program/src/constants.rs b/hxro-print-trade-provider/program/src/constants.rs deleted file mode 100644 index ddc9c51..0000000 --- a/hxro-print-trade-provider/program/src/constants.rs +++ /dev/null @@ -1,11 +0,0 @@ -use dex::utils::numeric::Fractional; - -pub const CONFIG_SEED: &str = "config"; -pub const OPERATOR_SEED: &str = "operator"; -pub const LOCKED_COLLATERAL_RECORD_SEED: &str = "locked_collateral_record"; - -pub const MAX_PRODUCTS_PER_TRADE: usize = 6; -pub const EXPECTED_DECIMALS: u8 = 9; - -pub const OPERATOR_CREATOR_FEE_PROPORTION: Fractional = Fractional { m: 0, exp: 0 }; -pub const OPERATOR_COUNTERPARTY_FEE_PROPORTION: Fractional = Fractional { m: 0, exp: 0 }; diff --git a/hxro-print-trade-provider/program/src/errors.rs b/hxro-print-trade-provider/program/src/errors.rs deleted file mode 100644 index f7ee37c..0000000 --- a/hxro-print-trade-provider/program/src/errors.rs +++ /dev/null @@ -1,69 +0,0 @@ -//! Error handling -use anchor_lang::prelude::*; - -/// Error codes. -#[error_code] -pub enum HxroPrintTradeProviderError { - #[msg("Require protocol authority")] - NotAProtocolAuthority, - #[msg("Invalid data size")] - InvalidDataSize, - #[msg("There are too many legs on the RFQ")] - TooManyLegs, - #[msg("Not a validated Market Product Group")] - NotAValidatedMpg, - #[msg("Combos are not supported")] - CombosAreNotSupported, - #[msg("Not enough accounts")] - NotEnoughAccounts, - #[msg("Invalid decimals amount")] - InvalidDecimals, - #[msg("Passed product account does not match the one in leg")] - ProductAccountDoesNotMatch, - #[msg("Invalid Hxro oracle type")] - InvalidHxroOracleType, - #[msg("The base asset doesn't have pyth oracle stored")] - NoPythOracleForBaseAsset, - #[msg("Oracle does not match with stored in the base asset")] - OracleDoesNotMatchWithBaseAsset, - #[msg("Base asset account index doesn't match with leg info")] - InvalidBaseAssetAccountIndex, - #[msg("Base asset is disabled")] - DisabledBaseAsset, - #[msg("Invalid leg instrument type")] - InvalidLegInstrumentType, - #[msg("Hxro product can expire earlier that settment would end")] - ProductExpiresToEarly, - #[msg("Instrument type does not match")] - InstrumentTypeDoesNotMatch, - #[msg("Leg data for risk engine does not match with hxro product")] - RiskEngineDataMismatch, - #[msg("Invalid user account passed")] - InvalidUserAccount, - #[msg("Invalid operator trader risk group")] - InvalidOperatorTRG, - #[msg("Invalid trader risk group address")] - InvalidTRGAddress, - #[msg("Invalid trader risk group owner")] - InvalidTRGOwner, - #[msg("Invalid trader risk group market")] - InvalidTRGMarket, - #[msg("Another TRG is expected for this operation")] - UnexpectedTRG, - #[msg("Print trade account expected to be signed by counterparty")] - ExpectedSignedPrintTrade, - #[msg("Invalid print trade address")] - InvalidPrintTradeAddress, - #[msg("Invalid print trade parameters")] - InvalidPrintTradeParams, - #[msg("Only a lock record creator can remove it")] - NotALockCreator, - #[msg("Not a valid taker account")] - NotATaker, - #[msg("Not a valid maker account")] - NotAMaker, - #[msg("Can't remove a collateral lock record for a live settlement")] - RecordIsInUse, - #[msg("Invalid collateral lock record address")] - InvalidLockAddress, -} diff --git a/hxro-print-trade-provider/program/src/helpers/close_print_trade.rs b/hxro-print-trade-provider/program/src/helpers/close_print_trade.rs deleted file mode 100644 index 0dfdf06..0000000 --- a/hxro-print-trade-provider/program/src/helpers/close_print_trade.rs +++ /dev/null @@ -1,56 +0,0 @@ -use anchor_lang::prelude::*; -use dex::cpi::accounts::ClosePrintTrade; -use dex::cpi::close_print_trade as close_print_trade_cpi; -use rfq::state::AuthoritySide; - -use crate::constants::OPERATOR_SEED; -use crate::CleanUpPrintTradeAccounts; - -pub fn close_print_trade<'info>( - ctx: &Context<'_, '_, '_, 'info, CleanUpPrintTradeAccounts<'info>>, -) -> Result<()> { - let CleanUpPrintTradeAccounts { - response, - operator, - dex, - market_product_group, - taker_trg, - maker_trg, - operator_trg, - print_trade, - creator_wallet, - system_program, - .. - } = &ctx.accounts; - - let (creator_trg, counterparty_trg) = - if response.print_trade_initialized_by.unwrap() == AuthoritySide::Taker { - (taker_trg, maker_trg) - } else { - (maker_trg, taker_trg) - }; - - let accounts = ClosePrintTrade { - op: operator.to_account_info(), - creator: creator_trg.to_account_info(), - counterparty: counterparty_trg.to_account_info(), - operator: operator_trg.to_account_info(), - market_product_group: market_product_group.to_account_info(), - print_trade: print_trade.to_account_info(), - system_program: system_program.to_account_info(), - seed: response.to_account_info(), - creator_wallet: creator_wallet.to_account_info(), - }; - - let bump: u8 = *ctx.bumps.get("operator").unwrap(); - let context = CpiContext { - accounts, - remaining_accounts: vec![], - program: dex.to_account_info(), - signer_seeds: &[&[OPERATOR_SEED.as_bytes(), &[bump]]], - }; - - close_print_trade_cpi(context)?; - - Ok(()) -} diff --git a/hxro-print-trade-provider/program/src/helpers/common.rs b/hxro-print-trade-provider/program/src/helpers/common.rs deleted file mode 100644 index ecc9ec1..0000000 --- a/hxro-print-trade-provider/program/src/helpers/common.rs +++ /dev/null @@ -1,61 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_lang::AnchorDeserialize; - -use rfq::state::Leg; -use rfq::state::Response; -use rfq::state::Rfq; -use rfq::state::SettlementTypeMetadata; -use risk_engine::state::{FutureCommonData, InstrumentType, OptionCommonData}; - -use crate::errors::HxroPrintTradeProviderError; -use crate::state::ParsedLegData; - -pub(crate) enum ParsedRiskEngineData { - ForOption(OptionCommonData), - ForFuture(FutureCommonData), -} - -pub(crate) fn get_leg_instrument_type(leg: &Leg) -> Result { - let instrument_type_raw = match leg.settlement_type_metadata { - SettlementTypeMetadata::PrintTrade { instrument_type } => instrument_type, - SettlementTypeMetadata::Instrument { - instrument_index: _, - } => unreachable!(), - }; - instrument_type_raw - .try_into() - .map_err(|_| HxroPrintTradeProviderError::InvalidLegInstrumentType.into()) -} - -pub(crate) fn parse_leg_data( - leg: &Leg, - instrument_type: InstrumentType, -) -> Result<(ParsedRiskEngineData, ParsedLegData)> { - let mut data_slice = leg.data.as_slice(); - let risk_engine_data = match instrument_type { - InstrumentType::Option => { - ParsedRiskEngineData::ForOption(AnchorDeserialize::deserialize(&mut data_slice)?) - } - InstrumentType::TermFuture | InstrumentType::PerpFuture => { - ParsedRiskEngineData::ForFuture(AnchorDeserialize::deserialize(&mut data_slice)?) - } - _ => err!(HxroPrintTradeProviderError::InvalidLegInstrumentType)?, - }; - let parsed_leg_data = AnchorDeserialize::deserialize(&mut data_slice)?; - - require_eq!( - data_slice.len(), - 0, - HxroPrintTradeProviderError::InvalidDataSize - ); - - Ok((risk_engine_data, parsed_leg_data)) -} - -pub(crate) fn parse_taker_trg(rfq: &Rfq) -> Result { - AnchorDeserialize::try_from_slice(&rfq.quote_asset.data).map_err(Into::into) -} - -pub(crate) fn parse_maker_trg(response: &Response) -> Result { - AnchorDeserialize::try_from_slice(&response.additional_data).map_err(Into::into) -} diff --git a/hxro-print-trade-provider/program/src/helpers/conversions.rs b/hxro-print-trade-provider/program/src/helpers/conversions.rs deleted file mode 100644 index 93ab67d..0000000 --- a/hxro-print-trade-provider/program/src/helpers/conversions.rs +++ /dev/null @@ -1,55 +0,0 @@ -use anchor_lang::prelude::*; - -use agnostic_orderbook::state::Side; -use dex::utils::numeric::Fractional; -use rfq::state::{AuthoritySide, Response, Rfq}; - -use crate::state::{FractionalCopy, ParsedLegData, ProductInfo}; - -use super::common::{get_leg_instrument_type, parse_leg_data}; - -pub fn to_hxro_side(side: AuthoritySide) -> Side { - match side { - AuthoritySide::Taker => Side::Bid, - AuthoritySide::Maker => Side::Ask, - } -} - -pub fn to_hxro_product( - perspective: AuthoritySide, - rfq: &Rfq, - response: &Response, - leg_index: u8, -) -> Result { - let leg = &rfq.legs[leg_index as usize]; - let instrument_type = get_leg_instrument_type(leg)?; - let (_, ParsedLegData { product_index }) = parse_leg_data(leg, instrument_type)?; - - let mut amount = response.get_leg_amount_to_transfer(rfq, leg_index) as i64; - if response.get_leg_assets_receiver(rfq, leg_index) == perspective.inverse() { - amount = -amount; - } - - let result = ProductInfo { - product_index: product_index as u64, - size: FractionalCopy { - m: amount, - exp: leg.amount_decimals as u64, - }, - }; - - Ok(result) -} - -pub fn to_hxro_price(rfq: &Rfq, response: &Response) -> Fractional { - let mut full_amount = response.get_quote_amount_to_transfer(rfq) as i64; - - if response.get_quote_tokens_receiver() == AuthoritySide::Taker { - full_amount = -full_amount; - } - - Fractional { - m: full_amount, - exp: rfq.quote_asset.decimals as u64, - } -} diff --git a/hxro-print-trade-provider/program/src/helpers/create_print_trade.rs b/hxro-print-trade-provider/program/src/helpers/create_print_trade.rs deleted file mode 100644 index 46baaed..0000000 --- a/hxro-print-trade-provider/program/src/helpers/create_print_trade.rs +++ /dev/null @@ -1,90 +0,0 @@ -use anchor_lang::prelude::*; -use dex::cpi::initialize_print_trade as initialize_print_trade_cpi; -use dex::utils::numeric::ZERO_FRAC; -use dex::InitializePrintTradeParams; -use dex::{cpi::accounts::InitializePrintTrade, state::print_trade::PrintTradeProductIndex}; -use rfq::state::AuthoritySide; - -use crate::constants::OPERATOR_SEED; -use crate::state::ProductInfo; -use crate::{ - constants::{OPERATOR_COUNTERPARTY_FEE_PROPORTION, OPERATOR_CREATOR_FEE_PROPORTION}, - PreparePrintTradeAccounts, -}; - -use super::conversions::to_hxro_price; -use super::conversions::to_hxro_product; -use super::conversions::to_hxro_side; - -pub fn initialize_print_trade<'info>( - ctx: &Context<'_, '_, '_, 'info, PreparePrintTradeAccounts<'info>>, - authority_side: AuthoritySide, -) -> Result<()> { - let PreparePrintTradeAccounts { - rfq, - response, - dex, - market_product_group, - user, - taker_trg, - maker_trg, - operator, - operator_trg, - print_trade, - system_program, - .. - } = &ctx.accounts; - - let price = to_hxro_price(rfq, response); - let mut products = [PrintTradeProductIndex { - product_index: 0, - size: ZERO_FRAC, - }; 6]; - for (i, product) in products.iter_mut().enumerate().take(rfq.legs.len()) { - let ProductInfo { - product_index, - size, - } = to_hxro_product(AuthoritySide::Taker, rfq, response, i as u8)?; - *product = PrintTradeProductIndex { - product_index: product_index as usize, - size: size.into(), - }; - } - let params = InitializePrintTradeParams { - num_products: rfq.legs.len(), - products, - is_operator_signer: true, - price, - side: to_hxro_side(authority_side), - operator_creator_fee_proportion: OPERATOR_CREATOR_FEE_PROPORTION, - operator_counterparty_fee_proportion: OPERATOR_COUNTERPARTY_FEE_PROPORTION, - }; - - let (creator_trg, counterparty_trg) = if authority_side == AuthoritySide::Taker { - (taker_trg, maker_trg) - } else { - (maker_trg, taker_trg) - }; - - let accounts = InitializePrintTrade { - user: user.to_account_info(), - creator: creator_trg.to_account_info(), - counterparty: counterparty_trg.to_account_info(), - operator: operator_trg.to_account_info(), - market_product_group: market_product_group.to_account_info(), - print_trade: print_trade.to_account_info(), - system_program: system_program.to_account_info(), - operator_owner: operator.to_account_info(), - seed: response.to_account_info(), - }; - - let bump: u8 = *ctx.bumps.get("operator").unwrap(); - let context = CpiContext { - accounts, - remaining_accounts: vec![], - program: dex.to_account_info(), - signer_seeds: &[&[OPERATOR_SEED.as_bytes(), &[bump]]], - }; - - initialize_print_trade_cpi(context, params) -} diff --git a/hxro-print-trade-provider/program/src/helpers/execute_print_trade.rs b/hxro-print-trade-provider/program/src/helpers/execute_print_trade.rs deleted file mode 100644 index 425de28..0000000 --- a/hxro-print-trade-provider/program/src/helpers/execute_print_trade.rs +++ /dev/null @@ -1,103 +0,0 @@ -use anchor_lang::prelude::*; -use dex::cpi::accounts::ExecutePrintTrade; -use dex::cpi::execute_print_trade as execute_print_trade_cpi; -use dex::state::print_trade::PrintTradeExecutionResult; -use rfq::interfaces::print_trade_provider::SettlementResult; -use rfq::state::AuthoritySide; - -use crate::constants::OPERATOR_SEED; -use crate::SettlePrintTradeAccounts; - -pub fn execute_print_trade<'info>( - ctx: &Context<'_, '_, '_, 'info, SettlePrintTradeAccounts<'info>>, -) -> Result { - let SettlePrintTradeAccounts { - response, - dex, - operator, - market_product_group, - taker_trg, - maker_trg, - operator_trg, - print_trade, - execution_output, - fee_model_program, - fee_model_configuration_acct, - fee_output_register, - risk_engine_program, - risk_model_configuration_acct, - risk_output_register, - risk_and_fee_signer, - creator_fee_state_acct, - creator_risk_state_acct, - counterparty_fee_state_acct, - counterparty_risk_state_acct, - system_program, - .. - } = &ctx.accounts; - - let (creator_trg, counterparty_trg) = - if response.print_trade_initialized_by.unwrap() == AuthoritySide::Taker { - (taker_trg, maker_trg) - } else { - (maker_trg, taker_trg) - }; - - let accounts = ExecutePrintTrade { - op: operator.to_account_info(), - creator: creator_trg.to_account_info(), - counterparty: counterparty_trg.to_account_info(), - operator: operator_trg.to_account_info(), - market_product_group: market_product_group.to_account_info(), - print_trade: print_trade.to_account_info(), - system_program: system_program.to_account_info(), - fee_model_program: fee_model_program.to_account_info(), - fee_model_configuration_acct: fee_model_configuration_acct.to_account_info(), - fee_output_register: fee_output_register.to_account_info(), - risk_engine_program: risk_engine_program.to_account_info(), - risk_model_configuration_acct: risk_model_configuration_acct.to_account_info(), - risk_output_register: risk_output_register.to_account_info(), - risk_and_fee_signer: risk_and_fee_signer.to_account_info(), - creator_trader_fee_state_acct: creator_fee_state_acct.to_account_info(), - creator_trader_risk_state_acct: creator_risk_state_acct.to_account_info(), - counterparty_trader_fee_state_acct: counterparty_fee_state_acct.to_account_info(), - counterparty_trader_risk_state_acct: counterparty_risk_state_acct.to_account_info(), - seed: response.to_account_info(), - execution_output: execution_output.to_account_info(), - }; - - let bump: u8 = *ctx.bumps.get("operator").unwrap(); - let context = CpiContext { - accounts, - remaining_accounts: vec![], - program: dex.to_account_info(), - signer_seeds: &[&[OPERATOR_SEED.as_bytes(), &[bump]]], - }; - - execute_print_trade_cpi(context)?; - - let outcome_data = execution_output.load()?; - - let (creator_defaults, counterparty_defaults) = match response.print_trade_initialized_by { - Some(AuthoritySide::Taker) => ( - SettlementResult::TakerDefaults, - SettlementResult::MakerDefaults, - ), - Some(AuthoritySide::Maker) => ( - SettlementResult::MakerDefaults, - SettlementResult::TakerDefaults, - ), - None => unreachable!(), - }; - - msg!("Outcome data: {:?}", outcome_data.result); - - Ok(match outcome_data.result { - PrintTradeExecutionResult::CounterpartyHasntSigned => unreachable!(), - PrintTradeExecutionResult::CreatorCancelled => creator_defaults, - PrintTradeExecutionResult::CounterpartyCancelled => counterparty_defaults, - PrintTradeExecutionResult::CreatorNotEnoughLockedCollateral => creator_defaults, - PrintTradeExecutionResult::CounterpartyNotEnoughLockedCollateral => counterparty_defaults, - PrintTradeExecutionResult::Success => SettlementResult::Success, - }) -} diff --git a/hxro-print-trade-provider/program/src/helpers/initialize_trader_risk_group.rs b/hxro-print-trade-provider/program/src/helpers/initialize_trader_risk_group.rs deleted file mode 100644 index 1665f41..0000000 --- a/hxro-print-trade-provider/program/src/helpers/initialize_trader_risk_group.rs +++ /dev/null @@ -1,48 +0,0 @@ -use anchor_lang::prelude::*; -use dex::cpi::accounts::InitializeTraderRiskGroup; -use dex::cpi::initialize_trader_risk_group as initialize_trader_risk_group_cpi; - -use crate::constants::OPERATOR_SEED; -use crate::InitializeOperatorTraderRiskGroupAccounts; - -pub fn initialize_trader_risk_group<'info>( - ctx: Context<'_, '_, '_, 'info, InitializeOperatorTraderRiskGroupAccounts<'info>>, -) -> Result<()> { - let InitializeOperatorTraderRiskGroupAccounts { - operator, - dex, - operator_trg, - market_product_group, - risk_and_fee_signer, - trader_risk_state_acct, - trader_fee_state_acct, - risk_engine_program, - fee_model_config_acct, - fee_model_program, - system_program, - .. - } = &ctx.accounts; - - let accounts = InitializeTraderRiskGroup { - owner: operator.to_account_info(), - trader_risk_group: operator_trg.to_account_info(), - market_product_group: market_product_group.to_account_info(), - risk_signer: risk_and_fee_signer.to_account_info(), - trader_risk_state_acct: trader_risk_state_acct.to_account_info(), - trader_fee_state_acct: trader_fee_state_acct.to_account_info(), - risk_engine_program: risk_engine_program.to_account_info(), - fee_model_config_acct: fee_model_config_acct.to_account_info(), - fee_model_program: fee_model_program.to_account_info(), - system_program: system_program.to_account_info(), - }; - - let bump: u8 = *ctx.bumps.get("operator").unwrap(); - let context = CpiContext { - accounts, - remaining_accounts: ctx.remaining_accounts.to_vec(), - program: dex.to_account_info(), - signer_seeds: &[&[OPERATOR_SEED.as_bytes(), &[bump]]], - }; - - initialize_trader_risk_group_cpi(context) -} diff --git a/hxro-print-trade-provider/program/src/helpers/mod.rs b/hxro-print-trade-provider/program/src/helpers/mod.rs deleted file mode 100644 index fc590c7..0000000 --- a/hxro-print-trade-provider/program/src/helpers/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -mod close_print_trade; -pub mod common; -mod conversions; -mod create_print_trade; -mod execute_print_trade; -mod initialize_trader_risk_group; -mod validation; - -pub use close_print_trade::*; -pub use conversions::*; -pub use create_print_trade::*; -pub use execute_print_trade::*; -pub use initialize_trader_risk_group::*; -pub use validation::*; diff --git a/hxro-print-trade-provider/program/src/helpers/validation.rs b/hxro-print-trade-provider/program/src/helpers/validation.rs deleted file mode 100644 index 260a80d..0000000 --- a/hxro-print-trade-provider/program/src/helpers/validation.rs +++ /dev/null @@ -1,339 +0,0 @@ -use std::cell::Ref; - -use anchor_lang::prelude::*; -use dex::state::market_product_group::MarketProductGroup; -use dex::state::products::Product; -use dex::state::trader_risk_group::TraderRiskGroup; -use dex::utils::numeric::{Fractional, ZERO_FRAC}; -use dex::ID as DexID; -use instruments::state::derivative_metadata::DerivativeMetadata; -use instruments::state::enums::{InstrumentType as HxroInstrumentType, OracleType}; -use rfq::state::{AuthoritySide, BaseAssetInfo, Leg, Response, Rfq}; -use risk_engine::state::{InstrumentType, OptionType}; - -use crate::constants::EXPECTED_DECIMALS; -use crate::errors::HxroPrintTradeProviderError; -use crate::helpers::common::{get_leg_instrument_type, parse_leg_data, ParsedRiskEngineData}; -use crate::state::ParsedLegData; - -use super::common::{parse_maker_trg, parse_taker_trg}; - -pub fn validate_taker_trg( - rfq: &Rfq, - expected_mpg: Pubkey, - trg: &AccountLoader, -) -> Result<()> { - let trg_key = parse_taker_trg(rfq)?; - validate_trg(trg_key, rfq.taker, expected_mpg, trg) -} - -pub fn validate_maker_trg( - response: &Response, - expected_mpg: Pubkey, - trg: &AccountLoader, -) -> Result<()> { - let trg_key = parse_maker_trg(response)?; - validate_trg(trg_key, response.maker, expected_mpg, trg) -} - -fn validate_trg( - expected_trg: Pubkey, - expected_creator: Pubkey, - expected_mpg: Pubkey, - trg: &AccountLoader, -) -> Result<()> { - require_keys_eq!( - expected_trg, - trg.key(), - HxroPrintTradeProviderError::InvalidTRGAddress - ); - - let trg = trg.load()?; - - require_keys_eq!( - expected_mpg, - trg.market_product_group, - HxroPrintTradeProviderError::InvalidTRGMarket - ); - - require_keys_eq!( - expected_creator, - trg.owner, - HxroPrintTradeProviderError::InvalidTRGOwner - ); - - Ok(()) -} - -pub fn validate_leg_data( - rfq: &Rfq, - leg_index: usize, - mpg: &MarketProductGroup, - remaining_accounts: &mut &[AccountInfo], -) -> Result<()> { - let leg = &rfq.legs[leg_index]; - require_eq!( - leg.amount_decimals, - EXPECTED_DECIMALS, - HxroPrintTradeProviderError::InvalidDecimals - ); - - let instrument_type: InstrumentType = get_leg_instrument_type(leg)?; - let (risk_engine_data, ParsedLegData { product_index }) = parse_leg_data(leg, instrument_type)?; - - let product_loader = - extract_and_verify_hxro_product_account(mpg, product_index, remaining_accounts)?; - let product: Ref = product_loader.load()?; - - let base_asset_pyth_oracle = extract_base_asset_account_pyth_oracle(leg, remaining_accounts)?; - require!( - matches!(product.oracle_type, OracleType::Pyth), - HxroPrintTradeProviderError::InvalidHxroOracleType - ); - require_keys_eq!( - product.price_oracle, - base_asset_pyth_oracle, - HxroPrintTradeProviderError::OracleDoesNotMatchWithBaseAsset - ); - - if matches!( - product.instrument_type, - HxroInstrumentType::ExpiringCall | HxroInstrumentType::ExpiringPut - ) { - require!( - rfq.get_settle_window_end() < product.initialization_time + product.full_funding_period, - HxroPrintTradeProviderError::ProductExpiresToEarly - ); - } - - match instrument_type { - InstrumentType::Option => validate_product_as_option(product, risk_engine_data), - InstrumentType::TermFuture => validate_product_as_term_future(product, risk_engine_data), - InstrumentType::PerpFuture => validate_product_as_perp_future(product, risk_engine_data), - _ => unreachable!(), - }?; - - Ok(()) -} - -fn extract_next_account<'a, 'b>( - remaining_accounts: &mut &'a [AccountInfo<'b>], -) -> Result<&'a AccountInfo<'b>> { - require!( - !remaining_accounts.is_empty(), - HxroPrintTradeProviderError::NotEnoughAccounts - ); - let account = &remaining_accounts[0]; - *remaining_accounts = &remaining_accounts[1..]; - - Ok(account) -} - -fn extract_and_verify_hxro_product_account<'a>( - mpg: &MarketProductGroup, - product_index: u8, - remaining_accounts: &mut &[AccountInfo<'a>], -) -> Result> { - let product = mpg.market_products.array[product_index as usize]; - let outright = match product { - Product::Outright { outright } => outright, - Product::Combo { combo: _ } => err!(HxroPrintTradeProviderError::CombosAreNotSupported)?, - }; - - let product_account = extract_next_account(remaining_accounts)?; - require_keys_eq!( - outright.product_key, - product_account.key(), - HxroPrintTradeProviderError::ProductAccountDoesNotMatch - ); - AccountLoader::try_from(product_account) -} - -fn extract_base_asset_account_pyth_oracle( - leg: &Leg, - remaining_accounts: &mut &[AccountInfo], -) -> Result { - let base_asset_account = extract_next_account(remaining_accounts)?; - let base_asset: Account = Account::try_from(base_asset_account)?; - require!( - leg.base_asset_index == base_asset.index, - HxroPrintTradeProviderError::InvalidBaseAssetAccountIndex - ); - - require!( - base_asset.enabled, - HxroPrintTradeProviderError::DisabledBaseAsset - ); - - base_asset - .get_pyth_oracle() - .ok_or_else(|| error!(HxroPrintTradeProviderError::NoPythOracleForBaseAsset)) -} - -fn validate_product_as_option( - product: Ref, - risk_engine_data: ParsedRiskEngineData, -) -> Result<()> { - require!( - matches!( - product.instrument_type, - HxroInstrumentType::ExpiringCall | HxroInstrumentType::ExpiringPut - ) && product.strike > ZERO_FRAC, - HxroPrintTradeProviderError::InstrumentTypeDoesNotMatch - ); - - validate_underlying_amount_per_contract(&risk_engine_data)?; - - let option_data = match risk_engine_data { - ParsedRiskEngineData::ForOption(option_data) => option_data, - _ => unreachable!(), - }; - - let expected_instrument_type = match option_data.option_type { - OptionType::Call => HxroInstrumentType::ExpiringCall, - OptionType::Put => HxroInstrumentType::ExpiringPut, - }; - require!( - product.instrument_type == expected_instrument_type, - HxroPrintTradeProviderError::RiskEngineDataMismatch - ); - - let strike_price = Fractional::new( - i64::try_from(option_data.strike_price).unwrap(), - option_data.strike_price_decimals as u64, - ); - require_eq!( - strike_price, - product.strike, - HxroPrintTradeProviderError::RiskEngineDataMismatch - ); - - require_eq!( - option_data.expiration_timestamp, - product.initialization_time + product.full_funding_period, - HxroPrintTradeProviderError::RiskEngineDataMismatch - ); - - Ok(()) -} - -fn validate_product_as_term_future( - product: Ref, - risk_engine_data: ParsedRiskEngineData, -) -> Result<()> { - // TODO hadle put futures - require!( - product.instrument_type == HxroInstrumentType::ExpiringCall && product.strike == ZERO_FRAC, - HxroPrintTradeProviderError::InstrumentTypeDoesNotMatch - ); - - validate_underlying_amount_per_contract(&risk_engine_data)?; - - Ok(()) -} - -fn validate_product_as_perp_future( - product: Ref, - risk_engine_data: ParsedRiskEngineData, -) -> Result<()> { - // TODO hadle put futures - require!( - product.instrument_type == HxroInstrumentType::RecurringCall, - HxroPrintTradeProviderError::InstrumentTypeDoesNotMatch - ); - - validate_underlying_amount_per_contract(&risk_engine_data)?; - - Ok(()) -} - -fn validate_underlying_amount_per_contract(risk_engine_data: &ParsedRiskEngineData) -> Result<()> { - let (underlying_amount, underlying_amount_decimals) = match risk_engine_data { - ParsedRiskEngineData::ForOption(data) => ( - data.underlying_amount_per_contract, - data.underlying_amount_per_contract_decimals, - ), - ParsedRiskEngineData::ForFuture(data) => ( - data.underlying_amount_per_contract, - data.underlying_amount_per_contract_decimals, - ), - }; - - let underlying_amount_per_contract = Fractional::new( - i64::try_from(underlying_amount).unwrap(), - underlying_amount_decimals as u64, - ); - require_eq!( - underlying_amount_per_contract, - Fractional::new(1, 0), - HxroPrintTradeProviderError::RiskEngineDataMismatch - ); - - Ok(()) -} - -pub struct ValidationInput<'a, 'info: 'a> { - pub first_to_prepare: AuthoritySide, - - pub rfq: &'a Account<'info, Rfq>, - pub response: &'a Account<'info, Response>, - - pub operator: &'a UncheckedAccount<'info>, - pub taker_trg: &'a AccountLoader<'info, TraderRiskGroup>, - pub maker_trg: &'a AccountLoader<'info, TraderRiskGroup>, - pub operator_trg: &'a AccountLoader<'info, TraderRiskGroup>, - pub print_trade_key: Pubkey, -} - -pub fn validate_print_trade_accounts(input: ValidationInput) -> Result<()> { - let ValidationInput { - first_to_prepare, - rfq, - response, - operator, - taker_trg, - maker_trg, - operator_trg, - print_trade_key, - } = input; - - require_keys_eq!( - taker_trg.key(), - parse_taker_trg(rfq)?, - HxroPrintTradeProviderError::UnexpectedTRG - ); - require_keys_eq!( - maker_trg.key(), - parse_maker_trg(response)?, - HxroPrintTradeProviderError::UnexpectedTRG - ); - - let operator_trg_owner = operator_trg.load()?.owner; - require_keys_eq!( - operator.key(), - operator_trg_owner, - HxroPrintTradeProviderError::InvalidOperatorTRG - ); - - let (creator, counterparty) = if first_to_prepare == AuthoritySide::Taker { - (taker_trg, maker_trg) - } else { - (maker_trg, taker_trg) - }; - let (expected_print_trade_address, _) = Pubkey::find_program_address( - &[ - b"print_trade", - creator.key().as_ref(), - counterparty.key().as_ref(), - response.key().as_ref(), - ], - &DexID, - ); - require_keys_eq!( - print_trade_key, - expected_print_trade_address, - HxroPrintTradeProviderError::InvalidPrintTradeAddress - ); - - Ok(()) -} diff --git a/hxro-print-trade-provider/program/src/lib.rs b/hxro-print-trade-provider/program/src/lib.rs deleted file mode 100644 index 804e496..0000000 --- a/hxro-print-trade-provider/program/src/lib.rs +++ /dev/null @@ -1,514 +0,0 @@ -#![allow(clippy::result_large_err)] - -use anchor_lang::prelude::*; -use constants::{CONFIG_SEED, LOCKED_COLLATERAL_RECORD_SEED, OPERATOR_SEED}; -use dex::state::market_product_group::MarketProductGroup; -use dex::state::print_trade::{PrintTrade, PrintTradeExecutionOutput}; -use dex::{program::Dex, state::trader_risk_group::TraderRiskGroup}; -use rfq::interfaces::print_trade_provider::SettlementResult; -use rfq::state::{ProtocolState, Response, Rfq}; -use state::{Config, FractionalCopy, LockedCollateralRecord, ProductInfo}; - -// use dex_cpi::instruction::*; - -use errors::HxroPrintTradeProviderError; -use helpers::{ - close_print_trade, execute_print_trade, initialize_print_trade, initialize_trader_risk_group, - to_hxro_product, validate_print_trade_accounts, ValidationInput, -}; -use state::AuthoritySideDuplicate; - -mod constants; -mod errors; -mod helpers; -mod state; - -declare_id!("598ZWckNjupx5sftmNC27NPRYHbwNbxi2dYBUan7Su1P"); - -#[program] -pub mod hxro_print_trade_provider { - use super::*; - - pub fn initialize_config( - ctx: Context, - valid_mpg: Pubkey, - ) -> Result<()> { - ctx.accounts.config.valid_mpg = valid_mpg; - Ok(()) - } - - pub fn modify_config(ctx: Context, valid_mpg: Pubkey) -> Result<()> { - ctx.accounts.config.valid_mpg = valid_mpg; - Ok(()) - } - - pub fn initialize_operator_trader_risk_group<'info>( - ctx: Context<'_, '_, '_, 'info, InitializeOperatorTraderRiskGroupAccounts<'info>>, - ) -> Result<()> { - initialize_trader_risk_group(ctx) - } - - pub fn remove_locked_collateral_record( - ctx: Context, - ) -> Result<()> { - require!( - !ctx.accounts.locked_collateral_record.is_in_use, - HxroPrintTradeProviderError::RecordIsInUse - ); - - Ok(()) - } - - pub fn validate_print_trade(ctx: Context) -> Result<()> { - let ValidatePrintTradeAccounts { - rfq, - market_product_group, - trader_risk_group, - .. - } = &ctx.accounts; - - helpers::validate_taker_trg(rfq, market_product_group.key(), trader_risk_group)?; - - require!( - rfq.legs.len() <= constants::MAX_PRODUCTS_PER_TRADE, - HxroPrintTradeProviderError::TooManyLegs - ); - - require_eq!( - rfq.quote_asset.decimals, - constants::EXPECTED_DECIMALS, - HxroPrintTradeProviderError::InvalidDecimals - ); - - let mut remaining_accounts = ctx.remaining_accounts; - let mpg = market_product_group.load()?; - for leg_index in 0..rfq.legs.len() { - helpers::validate_leg_data(rfq, leg_index, &mpg, &mut remaining_accounts)?; - } - - Ok(()) - } - - pub fn validate_response(ctx: Context) -> Result<()> { - let ValidateResponseAccounts { - response, - config, - trader_risk_group, - .. - } = &ctx.accounts; - - helpers::validate_maker_trg(response, config.valid_mpg, trader_risk_group) - } - - pub fn prepare_print_trade<'info>( - ctx: Context<'_, '_, '_, 'info, PreparePrintTradeAccounts<'info>>, - authority_side: AuthoritySideDuplicate, - ) -> Result<()> { - let PreparePrintTradeAccounts { - rfq, - response, - user, - taker_trg, - maker_trg, - operator, - operator_trg, - market_product_group, - print_trade, - .. - } = &ctx.accounts; - - require!( - response.get_authority_side(rfq, user.key) == Some(authority_side.into()), - HxroPrintTradeProviderError::InvalidUserAccount - ); - - let first_to_prepare = response - .print_trade_initialized_by - .unwrap_or(authority_side.into()); - validate_print_trade_accounts(ValidationInput { - first_to_prepare, - rfq, - response, - operator, - taker_trg, - maker_trg, - operator_trg, - print_trade_key: print_trade.key(), - })?; - - if response.print_trade_initialized_by.is_some() { - let print_trade = AccountLoader::::try_from(print_trade)?; - let print_trade_data = print_trade.load()?; - - require_keys_eq!( - print_trade_data.operator, - operator_trg.key(), - HxroPrintTradeProviderError::InvalidPrintTradeParams - ); - - require_keys_eq!( - print_trade_data.market_product_group, - market_product_group.key(), - HxroPrintTradeProviderError::InvalidPrintTradeParams - ); - - require!( - print_trade_data.is_signed, - HxroPrintTradeProviderError::ExpectedSignedPrintTrade - ); - } else { - initialize_print_trade(&ctx, authority_side.into())?; - } - - let mut locks = [ProductInfo { - product_index: 0, - size: FractionalCopy { m: 0, exp: 0 }, - }; 6]; - for (i, lock) in locks.iter_mut().enumerate().take(rfq.legs.len()) { - *lock = to_hxro_product(authority_side.into(), rfq, response, i as u8)?; - } - let user_trg_key = if authority_side == AuthoritySideDuplicate::Taker { - taker_trg.key() - } else { - maker_trg.key() - }; - ctx.accounts - .locked_collateral_record - .set_inner(LockedCollateralRecord { - user: user.key(), - response: response.key(), - trg: user_trg_key, - is_in_use: true, - locks, - reserved: [0; 64], - }); - - Ok(()) - } - - pub fn settle_print_trade<'info>( - ctx: Context<'_, '_, '_, 'info, SettlePrintTradeAccounts<'info>>, - ) -> Result { - let SettlePrintTradeAccounts { - rfq, - response, - taker, - maker, - taker_locked_collateral_record, - maker_locked_collateral_record, - taker_trg, - maker_trg, - operator, - operator_trg, - print_trade, - .. - } = &ctx.accounts; - - validate_print_trade_accounts(ValidationInput { - first_to_prepare: response.print_trade_initialized_by.unwrap(), - rfq, - response, - operator, - taker_trg, - maker_trg, - operator_trg, - print_trade_key: print_trade.key(), - })?; - - let settlement_result = execute_print_trade(&ctx)?; - - if settlement_result == SettlementResult::Success { - taker_locked_collateral_record.close(taker.to_account_info())?; - maker_locked_collateral_record.close(maker.to_account_info())?; - } - - Ok(settlement_result) - } - - pub fn revert_print_trade_preparation<'info>( - ctx: Context<'_, '_, '_, 'info, RevertPrintTradePreparationAccounts<'info>>, - authority_side: AuthoritySideDuplicate, - ) -> Result<()> { - let RevertPrintTradePreparationAccounts { - rfq, - response, - locked_collateral_record, - .. - } = ctx.accounts; - - let lock_owner = match authority_side { - AuthoritySideDuplicate::Taker => rfq.taker, - AuthoritySideDuplicate::Maker => response.maker, - }; - let (expected_lock_address, _) = Pubkey::find_program_address( - &[ - LOCKED_COLLATERAL_RECORD_SEED.as_bytes(), - lock_owner.as_ref(), - response.key().as_ref(), - ], - &ID, - ); - require_keys_eq!( - locked_collateral_record.key(), - expected_lock_address, - HxroPrintTradeProviderError::InvalidLockAddress - ); - - locked_collateral_record.is_in_use = false; - - Ok(()) - } - - pub fn clean_up_print_trade<'info>( - ctx: Context<'_, '_, '_, 'info, CleanUpPrintTradeAccounts<'info>>, - ) -> Result<()> { - let CleanUpPrintTradeAccounts { - rfq, - response, - taker_trg, - maker_trg, - operator, - operator_trg, - print_trade, - .. - } = &ctx.accounts; - - validate_print_trade_accounts(ValidationInput { - first_to_prepare: response.print_trade_initialized_by.unwrap(), - rfq, - response, - operator, - taker_trg, - maker_trg, - operator_trg, - print_trade_key: print_trade.key(), - })?; - - close_print_trade(&ctx) - } -} - -#[derive(Accounts)] -pub struct InitializeConfigAccounts<'info> { - #[account(mut, constraint = protocol.authority == authority.key() @ HxroPrintTradeProviderError::NotAProtocolAuthority)] - pub authority: Signer<'info>, - pub protocol: Box>, - #[account( - init, - payer = authority, - seeds = [CONFIG_SEED.as_bytes()], - space = 8 + Config::INIT_SPACE, - bump - )] - pub config: Account<'info, Config>, - - pub system_program: Program<'info, System>, -} - -#[derive(Accounts)] -pub struct ModifyConfigAccounts<'info> { - #[account(constraint = protocol.authority == authority.key() @ HxroPrintTradeProviderError::NotAProtocolAuthority)] - pub authority: Signer<'info>, - pub protocol: Box>, - #[account(mut)] - pub config: Account<'info, Config>, -} - -#[derive(Accounts)] -pub struct RemoveLockedCollateralRecord<'info> { - #[account(mut)] - pub user: Signer<'info>, - - #[account(mut, close=user, constraint = locked_collateral_record.user == user.key() @ HxroPrintTradeProviderError::NotALockCreator)] - pub locked_collateral_record: Account<'info, LockedCollateralRecord>, -} - -#[derive(Accounts)] -pub struct InitializeOperatorTraderRiskGroupAccounts<'info> { - #[account(mut, constraint = protocol.authority == authority.key() @ HxroPrintTradeProviderError::NotAProtocolAuthority)] - pub authority: Signer<'info>, - pub protocol: Box>, - #[account(mut)] - pub config: Account<'info, Config>, - #[account(constraint = config.valid_mpg == market_product_group.key() @ HxroPrintTradeProviderError::NotAValidatedMpg)] - pub market_product_group: AccountLoader<'info, MarketProductGroup>, - - /// CHECK PDA account - #[account(mut, seeds = [OPERATOR_SEED.as_bytes()], bump)] - pub operator: UncheckedAccount<'info>, - pub dex: Program<'info, Dex>, - /// CHECK done inside hxro CPI - #[account(mut)] - pub operator_trg: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub risk_and_fee_signer: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - #[account(mut)] - pub trader_risk_state_acct: Signer<'info>, - /// CHECK done inside hxro CPI - #[account(mut)] - pub trader_fee_state_acct: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub risk_engine_program: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub fee_model_config_acct: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub fee_model_program: UncheckedAccount<'info>, - - pub system_program: Program<'info, System>, -} - -#[derive(Accounts)] -pub struct ValidatePrintTradeAccounts<'info> { - #[account(signer)] - pub protocol: Box>, - pub rfq: Account<'info, Rfq>, - - pub config: Account<'info, Config>, - #[account(constraint = config.valid_mpg == market_product_group.key() @ HxroPrintTradeProviderError::NotAValidatedMpg)] - pub market_product_group: AccountLoader<'info, MarketProductGroup>, - pub trader_risk_group: AccountLoader<'info, TraderRiskGroup>, -} - -#[derive(Accounts)] -pub struct ValidateResponseAccounts<'info> { - #[account(signer)] - pub protocol: Box>, - pub rfq: Account<'info, Rfq>, - pub response: Account<'info, Response>, - - pub config: Account<'info, Config>, - pub trader_risk_group: AccountLoader<'info, TraderRiskGroup>, -} - -#[derive(Accounts)] -pub struct PreparePrintTradeAccounts<'info> { - #[account(signer)] - pub protocol: Box>, - pub rfq: Box>, - pub response: Box>, - - #[account( - init, - payer = user, - seeds = [LOCKED_COLLATERAL_RECORD_SEED.as_bytes(), user.key().as_ref(), response.key().as_ref()], - space = 8 + LockedCollateralRecord::INIT_SPACE, - bump - )] - pub locked_collateral_record: Account<'info, LockedCollateralRecord>, - /// CHECK PDA account - #[account(seeds = [OPERATOR_SEED.as_bytes()], bump)] - pub operator: UncheckedAccount<'info>, - pub config: Account<'info, Config>, - pub dex: Program<'info, Dex>, - #[account(constraint = config.valid_mpg == market_product_group.key() @ HxroPrintTradeProviderError::NotAValidatedMpg)] - pub market_product_group: AccountLoader<'info, MarketProductGroup>, - #[account(mut)] - pub user: Signer<'info>, - pub taker_trg: AccountLoader<'info, TraderRiskGroup>, - pub maker_trg: AccountLoader<'info, TraderRiskGroup>, - pub operator_trg: AccountLoader<'info, TraderRiskGroup>, - /// CHECK done inside method or hxro CPI - pub print_trade: UncheckedAccount<'info>, - - pub system_program: Program<'info, System>, -} - -#[derive(Accounts)] -pub struct SettlePrintTradeAccounts<'info> { - #[account(signer)] - pub protocol: Box>, - pub rfq: Box>, - pub response: Box>, - - /// CHECK: is a taker account - #[account(mut, constraint = rfq.taker == taker.key() @ HxroPrintTradeProviderError::NotATaker)] - pub taker: UncheckedAccount<'info>, - /// CHECK: is a maker account - #[account(mut, constraint = response.maker == maker.key() @ HxroPrintTradeProviderError::NotAMaker)] - pub maker: UncheckedAccount<'info>, - #[account( - mut, - seeds = [LOCKED_COLLATERAL_RECORD_SEED.as_bytes(), rfq.taker.as_ref(), response.key().as_ref()], - bump - )] - pub taker_locked_collateral_record: Box>, - #[account( - mut, - seeds = [LOCKED_COLLATERAL_RECORD_SEED.as_bytes(), response.maker.as_ref(), response.key().as_ref()], - bump - )] - pub maker_locked_collateral_record: Box>, - /// CHECK PDA account - #[account(seeds = [OPERATOR_SEED.as_bytes()], bump)] - pub operator: UncheckedAccount<'info>, - pub config: Account<'info, Config>, - pub dex: Program<'info, Dex>, - #[account(constraint = config.valid_mpg == market_product_group.key() @ HxroPrintTradeProviderError::NotAValidatedMpg)] - pub market_product_group: AccountLoader<'info, MarketProductGroup>, - pub taker_trg: AccountLoader<'info, TraderRiskGroup>, - pub maker_trg: AccountLoader<'info, TraderRiskGroup>, - pub operator_trg: AccountLoader<'info, TraderRiskGroup>, - pub print_trade: AccountLoader<'info, PrintTrade>, - pub execution_output: AccountLoader<'info, PrintTradeExecutionOutput>, - - /// CHECK done inside hxro CPI - pub fee_model_program: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub fee_model_configuration_acct: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub fee_output_register: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub risk_engine_program: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub risk_model_configuration_acct: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub risk_output_register: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub risk_and_fee_signer: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub creator_fee_state_acct: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub creator_risk_state_acct: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub counterparty_fee_state_acct: UncheckedAccount<'info>, - /// CHECK done inside hxro CPI - pub counterparty_risk_state_acct: UncheckedAccount<'info>, - - pub system_program: Program<'info, System>, -} - -#[derive(Accounts)] -pub struct RevertPrintTradePreparationAccounts<'info> { - #[account(signer)] - pub protocol: Box>, - pub rfq: Box>, - pub response: Box>, - - #[account(mut)] - pub locked_collateral_record: Account<'info, LockedCollateralRecord>, -} - -#[derive(Accounts)] -pub struct CleanUpPrintTradeAccounts<'info> { - #[account(signer)] - pub protocol: Box>, - pub rfq: Box>, - pub response: Box>, - - /// CHECK PDA account - #[account(seeds = [OPERATOR_SEED.as_bytes()], bump)] - pub operator: UncheckedAccount<'info>, - pub config: Account<'info, Config>, - pub dex: Program<'info, Dex>, - #[account(constraint = config.valid_mpg == market_product_group.key() @ HxroPrintTradeProviderError::NotAValidatedMpg)] - pub market_product_group: AccountLoader<'info, MarketProductGroup>, - pub taker_trg: AccountLoader<'info, TraderRiskGroup>, - pub maker_trg: AccountLoader<'info, TraderRiskGroup>, - pub operator_trg: AccountLoader<'info, TraderRiskGroup>, - pub print_trade: AccountLoader<'info, PrintTrade>, - /// CHECK on hxro side - pub creator_wallet: UncheckedAccount<'info>, - - pub system_program: Program<'info, System>, -} diff --git a/hxro-print-trade-provider/program/src/state.rs b/hxro-print-trade-provider/program/src/state.rs deleted file mode 100644 index 34068f1..0000000 --- a/hxro-print-trade-provider/program/src/state.rs +++ /dev/null @@ -1,63 +0,0 @@ -use anchor_lang::prelude::*; -use dex::utils::numeric::Fractional; -use rfq::state::AuthoritySide; - -#[account] -#[derive(InitSpace)] -pub struct Config { - pub valid_mpg: Pubkey, -} - -#[account] -#[derive(InitSpace)] -pub struct LockedCollateralRecord { - pub user: Pubkey, - pub response: Pubkey, - pub trg: Pubkey, - pub is_in_use: bool, - pub locks: [ProductInfo; 6], - pub reserved: [u8; 64], -} - -#[derive(AnchorSerialize, AnchorDeserialize, Copy, Clone, PartialEq, Eq, Default, InitSpace)] -pub struct ProductInfo { - pub product_index: u64, - pub size: FractionalCopy, -} - -#[repr(C)] -#[derive(AnchorSerialize, AnchorDeserialize, Copy, Clone, PartialEq, Eq, Default, InitSpace)] -pub struct FractionalCopy { - pub m: i64, - pub exp: u64, -} - -impl From for Fractional { - fn from(value: FractionalCopy) -> Self { - Self { - m: value.m, - exp: value.exp, - } - } -} - -// Duplicate required because anchor doesn't generate IDL for imported structs -#[derive(AnchorSerialize, AnchorDeserialize, Copy, Clone, PartialEq, Eq)] -pub enum AuthoritySideDuplicate { - Taker, - Maker, -} - -impl From for AuthoritySide { - fn from(value: AuthoritySideDuplicate) -> Self { - match value { - AuthoritySideDuplicate::Taker => AuthoritySide::Taker, - AuthoritySideDuplicate::Maker => AuthoritySide::Maker, - } - } -} - -#[derive(AnchorDeserialize)] -pub struct ParsedLegData { - pub product_index: u8, -} diff --git a/migrations/deploy.ts b/migrations/deploy.ts index 82fb175..8afb42d 100644 --- a/migrations/deploy.ts +++ b/migrations/deploy.ts @@ -3,10 +3,25 @@ // configured from the workspace's Anchor.toml. const anchor = require("@coral-xyz/anchor"); +const { PublicKey } = require("solana"); module.exports = async function (provider) { // Configure client to use the provider. anchor.setProvider(provider); - // Add your deploy script here. + // Add token program initialization + const tokenProgram = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); + const token22Program = new PublicKey("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"); + + // Add token program to option market initialization + await program.methods + .initializeOptionMarket({ + // ... existing params ... + tokenProgram: tokenProgram, // or token22Program + }) + .accounts({ + // ... existing accounts ... + tokenProgram: tokenProgram, // or token22Program + }) + .rpc(); }; diff --git a/package.json b/package.json index ba5c220..3816d21 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "license": "MIT", "private": true, "devDependencies": { - "@hxronetwork/dexterity-ts": "^1.6.8", "@coral-xyz/anchor": "0.28.0", "@mithraic-labs/psy-american": "^0.2.3", "@mithraic-labs/tokenized-euros": "^0.2.3", diff --git a/psyoptions-american-instrument/program/src/american_options.rs b/psyoptions-american-instrument/program/src/american_options.rs index 514d52e..b480613 100644 --- a/psyoptions-american-instrument/program/src/american_options.rs +++ b/psyoptions-american-instrument/program/src/american_options.rs @@ -1,4 +1,5 @@ use anchor_lang::prelude::*; +use anchor_spl::token_interface::{TokenAccount, TokenInterface}; // Imported from psy_american v0.2.7 package as it has outdated dependencies // TODO: try to make project build using psy_american package and import from there @@ -87,3 +88,23 @@ impl anchor_lang::Owner for OptionMarket { ID } } + +pub fn write_option(ctx: Context) -> Result<()> { + // Validate token program + ctx.accounts.option_market.validate_token_program(&ctx.accounts.token_program.key())?; + + // Use token_interface for transfers + anchor_spl::token_interface::transfer( + CpiContext::new( + ctx.accounts.token_program.to_account_info(), + Transfer { + from: ctx.accounts.writer_token_account.to_account_info(), + to: ctx.accounts.vault.to_account_info(), + authority: ctx.accounts.writer.to_account_info(), + }, + ), + amount, + )?; + + Ok(()) +} diff --git a/psyoptions-american-instrument/program/src/errors.rs b/psyoptions-american-instrument/program/src/errors.rs index 1b4037b..5e03b88 100644 --- a/psyoptions-american-instrument/program/src/errors.rs +++ b/psyoptions-american-instrument/program/src/errors.rs @@ -28,4 +28,6 @@ pub enum PsyoptionsAmericanError { DecimalsAmountDoesNotMatch, #[msg("Base Asset doesnt match")] BaseAssetDoesNotMatch, + #[msg("Invalid token program")] + InvalidTokenProgram, } diff --git a/psyoptions-american-instrument/program/src/state.rs b/psyoptions-american-instrument/program/src/state.rs index d704861..b0d90ff 100644 --- a/psyoptions-american-instrument/program/src/state.rs +++ b/psyoptions-american-instrument/program/src/state.rs @@ -1,5 +1,6 @@ use anchor_lang::prelude::*; use risk_engine::state::OptionCommonData; +use anchor_spl::token_interface::{TokenAccount, TokenInterface}; pub const TOKEN_DECIMALS: u8 = 0; @@ -13,3 +14,18 @@ pub struct ParsedLegData { impl ParsedLegData { pub const SERIALIZED_SIZE: usize = OptionCommonData::SERIALIZED_SIZE + 32 + 32; } + +#[account] +pub struct OptionMarket { + pub token_program: Pubkey, +} + +impl OptionMarket { + pub fn validate_token_program(&self, token_program: &Pubkey) -> Result<()> { + require!( + *token_program == spl_token::ID || *token_program == spl_token_2022::ID, + ErrorCode::InvalidTokenProgram + ); + Ok(()) + } +} diff --git a/psyoptions-european-instrument/program/src/errors.rs b/psyoptions-european-instrument/program/src/errors.rs index 83b84e0..194965b 100644 --- a/psyoptions-european-instrument/program/src/errors.rs +++ b/psyoptions-european-instrument/program/src/errors.rs @@ -30,4 +30,6 @@ pub enum PsyoptionsEuropeanError { PassedExpirationTimestampDoesNotMatch, #[msg("Stablecoin as base asset is not supported")] StablecoinAsBaseAssetIsNotSupported, + #[msg("Invalid token program")] + InvalidTokenProgram, } diff --git a/psyoptions-european-instrument/program/src/euro_options.rs b/psyoptions-european-instrument/program/src/euro_options.rs index 98ad781..e4e0175 100644 --- a/psyoptions-european-instrument/program/src/euro_options.rs +++ b/psyoptions-european-instrument/program/src/euro_options.rs @@ -1,4 +1,5 @@ use anchor_lang::prelude::*; +use anchor_spl::token_interface::{TokenAccount, TokenInterface}; // TODO: Import euro options crate instead of this file when it would be available @@ -66,3 +67,23 @@ impl Owner for EuroMeta { ID } } + +pub fn write_option(ctx: Context) -> Result<()> { + // Validate token program + ctx.accounts.option_market.validate_token_program(&ctx.accounts.token_program.key())?; + + // Use token_interface for transfers + anchor_spl::token_interface::transfer( + CpiContext::new( + ctx.accounts.token_program.to_account_info(), + Transfer { + from: ctx.accounts.writer_token_account.to_account_info(), + to: ctx.accounts.vault.to_account_info(), + authority: ctx.accounts.writer.to_account_info(), + }, + ), + amount, + )?; + + Ok(()) +} diff --git a/psyoptions-european-instrument/program/src/state.rs b/psyoptions-european-instrument/program/src/state.rs index a42f3bf..2b389ad 100644 --- a/psyoptions-european-instrument/program/src/state.rs +++ b/psyoptions-european-instrument/program/src/state.rs @@ -1,5 +1,6 @@ use anchor_lang::prelude::*; use risk_engine::state::OptionCommonData; +use anchor_spl::token_interface::{TokenAccount, TokenInterface}; #[derive(AnchorDeserialize)] pub struct ParsedLegData { @@ -11,3 +12,18 @@ pub struct ParsedLegData { impl ParsedLegData { pub const SERIALIZED_SIZE: usize = OptionCommonData::SERIALIZED_SIZE + 32 + 32; } + +#[account] +pub struct OptionMarket { + pub token_program: Pubkey, +} + +impl OptionMarket { + pub fn validate_token_program(&self, token_program: &Pubkey) -> Result<()> { + require!( + *token_program == spl_token::ID || *token_program == spl_token_2022::ID, + ErrorCode::InvalidTokenProgram + ); + Ok(()) + } +} diff --git a/rfq/program/Cargo.toml b/rfq/program/Cargo.toml index 029ccee..0178c04 100644 --- a/rfq/program/Cargo.toml +++ b/rfq/program/Cargo.toml @@ -18,7 +18,7 @@ default = [] [dependencies] anchor-lang = { version = "0.28.0", features = ["init-if-needed"] } anchor-spl = "0.28.0" -solana-program = "1.14.16" borsh = { version = "0.9.1", features = ["const-generics"] } solana-security-txt = "1.1.1" spl-token-2022 = { version = "0.9", features = ["no-entrypoint"] } +solana-program = { workspace = true } \ No newline at end of file diff --git a/rfq/program/src/interfaces/mod.rs b/rfq/program/src/interfaces/mod.rs index fc2bfc7..374f658 100644 --- a/rfq/program/src/interfaces/mod.rs +++ b/rfq/program/src/interfaces/mod.rs @@ -1,3 +1,2 @@ pub mod instrument; -pub mod print_trade_provider; pub mod risk_engine; diff --git a/rfq/program/src/lib.rs b/rfq/program/src/lib.rs index 661d66f..eac949b 100644 --- a/rfq/program/src/lib.rs +++ b/rfq/program/src/lib.rs @@ -21,7 +21,6 @@ use instructions::collateral::initialize_collateral::*; use instructions::collateral::withdraw_collateral::*; use instructions::protocol::add_base_asset::*; use instructions::protocol::add_instrument::*; -use instructions::protocol::add_print_trade_provider::*; use instructions::protocol::add_user_asset::*; use instructions::protocol::change_base_asset_parameters::*; use instructions::protocol::change_protocol_fees::*; @@ -43,17 +42,13 @@ use instructions::rfq::partially_settle_escrow_legs::*; use instructions::rfq::partly_revert_escrow_settlement_preparation::*; use instructions::rfq::prepare_escrow_settlement::*; use instructions::rfq::prepare_more_escrow_legs_settlement::*; -use instructions::rfq::prepare_print_trade_settlement::*; use instructions::rfq::respond_to_rfq::*; use instructions::rfq::revert_escrow_settlement_preparation::*; -use instructions::rfq::revert_print_trade_settlement_preparation::*; use instructions::rfq::settle_escrow::*; use instructions::rfq::settle_one_party_default::*; -use instructions::rfq::settle_print_trade::*; use instructions::rfq::settle_two_party_default::*; use instructions::rfq::unlock_response_collateral::*; use instructions::rfq::unlock_rfq_collateral::*; -use instructions::rfq::validate_rfq_by_print_trade_provider::*; use instructions::whitelist::cleanup_whitelist::*; use instructions::whitelist::create_whitelist::*; @@ -105,18 +100,6 @@ pub mod rfq { ) } - pub fn add_print_trade_provider( - ctx: Context, - validate_response_account_amount: u8, - settlement_can_expire: bool, - ) -> Result<()> { - add_print_trade_provider_instruction( - ctx, - validate_response_account_amount, - settlement_can_expire, - ) - } - pub fn add_base_asset( ctx: Context, index: BaseAssetIndex, @@ -248,12 +231,6 @@ pub mod rfq { add_legs_to_rfq_instruction(ctx, legs) } - pub fn validate_rfq_by_print_trade_provider<'info>( - ctx: Context<'_, '_, '_, 'info, ValidateRfqByPrintTradeProviderAccounts<'info>>, - ) -> Result<()> { - validate_rfq_by_print_trade_provider_instruction(ctx) - } - pub fn finalize_rfq_construction<'info>( ctx: Context<'_, '_, '_, 'info, FinalizeRfqConstructionAccounts<'info>>, ) -> Result<()> { @@ -302,13 +279,6 @@ pub mod rfq { prepare_more_escrow_legs_settlement_instruction(ctx, side, leg_amount_to_prepare) } - pub fn prepare_print_trade_settlement<'info>( - ctx: Context<'_, '_, '_, 'info, PreparePrintTradeSettlementAccounts<'info>>, - side: AuthoritySide, - ) -> Result<()> { - prepare_print_trade_settlement_instruction(ctx, side) - } - pub fn settle_escrow<'info>( ctx: Context<'_, '_, '_, 'info, SettleEscrowAccounts<'info>>, ) -> Result<()> { @@ -323,12 +293,6 @@ pub mod rfq { partially_settle_escrow_legs_instruction(ctx, leg_amount_to_settle) } - pub fn settle_print_trade<'info>( - ctx: Context<'_, '_, '_, 'info, SettlePrintTradeAccounts<'info>>, - ) -> Result<()> { - settle_print_trade_instruction(ctx) - } - pub fn expire_settlement(ctx: Context) -> Result<()> { expire_settlement_instruction(ctx) } @@ -348,13 +312,6 @@ pub mod rfq { partly_revert_escrow_settlement_preparation_instruction(ctx, side, leg_amount_to_revert) } - pub fn revert_print_trade_settlement_preparation_preparation<'info>( - ctx: Context<'_, '_, '_, 'info, RevertPrintTradeSettlementPreparationAccounts<'info>>, - side: AuthoritySide, - ) -> Result<()> { - revert_print_trade_settlement_preparation_instruction(ctx, side) - } - pub fn unlock_response_collateral( ctx: Context, ) -> Result<()> { diff --git a/rfq/program/src/state/protocol.rs b/rfq/program/src/state/protocol.rs index d7980bb..8d505f5 100644 --- a/rfq/program/src/state/protocol.rs +++ b/rfq/program/src/state/protocol.rs @@ -24,7 +24,6 @@ pub struct ProtocolState { pub risk_engine: Pubkey, pub collateral_mint: Pubkey, - pub print_trade_providers: Vec, pub instruments: Vec, pub asset_add_fee: u64, // amount of sol to pay for adding user asset to the protocol @@ -78,13 +77,35 @@ impl ProtocolState { ); Ok(()) } -} -#[derive(AnchorSerialize, AnchorDeserialize, Copy, Clone)] -pub struct PrintTradeProvider { - pub program_key: Pubkey, - pub validate_response_account_amount: u8, - pub settlement_can_expire: bool, + pub fn validate_collateral_mint(&self, mint: &Pubkey, token_program: &Pubkey) -> Result<()> { + require!( + mint == &self.collateral_mint, + ProtocolError::NotACollateralMint + ); + + // Allow both SPL Token and Token-2022 for collateral + self.validate_token_program(token_program)?; + + Ok(()) + } + + pub fn validate_escrow_account( + &self, + escrow_account: &Account, + token_program: &AccountInfo, + ) -> Result<()> { + // Validate the token program + self.validate_token_program(token_program.key)?; + + // Validate escrow account mint matches collateral mint + require!( + escrow_account.mint == self.collateral_mint, + ProtocolError::NotACollateralTokenAccount + ); + + Ok(()) + } } #[derive(AnchorSerialize, AnchorDeserialize, Copy, Clone)] @@ -267,3 +288,33 @@ pub enum MintType { Stablecoin, AssetWithRisk { base_asset_index: BaseAssetIndex }, } + +impl MintInfo { + pub fn validate_stablecoin(&self, token_program: &Pubkey) -> Result<()> { + match self.mint_type { + MintType::Stablecoin => { + // USDC is only on SPL Token program + require!( + *token_program == spl_token::ID, + ProtocolError::InvalidTokenProgram + ); + Ok(()) + }, + _ => err!(ProtocolError::NotACollateralMint) + } + } + + pub fn validate_collateral(&self, token_program: &Pubkey) -> Result<()> { + // Allow any token type that's registered in the protocol + match self.mint_type { + MintType::Stablecoin | MintType::AssetWithRisk { .. } => { + // Validate the token program is supported by the protocol + require!( + *token_program == spl_token::ID || *token_program == spl_token_2022::ID, + ProtocolError::InvalidTokenProgram + ); + Ok(()) + } + } + } +} diff --git a/tests/dependencies/hxro/accounts/execution-output.json b/tests/dependencies/hxro/accounts/execution-output.json deleted file mode 100644 index e15cb5d..0000000 --- a/tests/dependencies/hxro/accounts/execution-output.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "6Prp1p7vjS6LCb8xR1oQqsbUPX9AWaHz9PBVbdzAFHT4", - "account": { - "lamports": 953520, - "data": [ - "UXUBZI2/164A", - "base64" - ], - "owner": "FUfpR31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/fee-config.json b/tests/dependencies/hxro/accounts/fee-config.json deleted file mode 100644 index 1e25ad1..0000000 --- a/tests/dependencies/hxro/accounts/fee-config.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "GBhshm4LFyYTv9iPocz7kmLpRhvvPNoxH9wgB57uNamm", - "account": { - "lamports": 946560, - "data": [ - "AAAAAAAAAAA=", - "base64" - ], - "owner": "5T9gt3frWPAvu1hxEULbsKrP2WF4ggqSxCMqpJvtWXHV", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/fee-output.json b/tests/dependencies/hxro/accounts/fee-output.json deleted file mode 100644 index 3f52f48..0000000 --- a/tests/dependencies/hxro/accounts/fee-output.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "4Ucpj5hWiz8msBQVgFSUnqxQCkJWEPn5YbpwFbbhxoa6", - "account": { - "lamports": 1002240, - "data": [ - "AAAAAAAAAAAAAAAAAAAAAA==", - "base64" - ], - "owner": "5T9gt3frWPAvu1hxEULbsKrP2WF4ggqSxCMqpJvtWXHV", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/maker-fee-state.json b/tests/dependencies/hxro/accounts/maker-fee-state.json deleted file mode 100644 index 8c9e633..0000000 --- a/tests/dependencies/hxro/accounts/maker-fee-state.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "FU68EKUppMq89TSVBELYpbsdw2FpzKwx79mPvCARmM9t", - "account": { - "lamports": 946560, - "data": [ - "/wAAAAAAAAA=", - "base64" - ], - "owner": "5T9gt3frWPAvu1hxEULbsKrP2WF4ggqSxCMqpJvtWXHV", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/maker-risk-state.json b/tests/dependencies/hxro/accounts/maker-risk-state.json deleted file mode 100644 index c0c757f..0000000 --- a/tests/dependencies/hxro/accounts/maker-risk-state.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "EDHbf67fJZBZoKFJGPEC7b9qimnave5DiYBctVWEysYb", - "account": { - "lamports": 953520, - "data": [ - "2JJrXmhLtrEB", - "base64" - ], - "owner": "BVDTB61eHY7UnCb4ueatdaV4rctTzqfLAL6sQDeMNSHA", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/maker-trg.json b/tests/dependencies/hxro/accounts/maker-trg.json deleted file mode 100644 index 5f057b8..0000000 --- a/tests/dependencies/hxro/accounts/maker-trg.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "4Lrt2YtUyEB8SrtTR3Tsb1DBGU9hRU6xNuDZd9zJrKG9", - "account": { - "lamports": 93264000, - "data": [ - "eeRuOP7P9agCAAAAAAAAAOHTkilwXhTJ/6+xI4JB3v1jOjZw3u1pPBezEe5kThdfRGcv6WZ5nR0SQFCdXFvcEqmvImWuWJkw9t9ogVLKIbf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADETaqowmWTL8A5Z1IeK5Ptu1DNZflgVf5GkHavMCpfYNb0F+C6uTJDTJYXO1cBZDZgL0bYE+kia3f+g7jx3SMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "base64" - ], - "owner": "FUfpR31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/mpg.json b/tests/dependencies/hxro/accounts/mpg.json deleted file mode 100644 index d5d7e36..0000000 --- a/tests/dependencies/hxro/accounts/mpg.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "GCXr6LDZurWK8Hkm18gZzJ7jUgvrYEVFFeWUR346fd42", - "account": { - "lamports": 1002852480, - "data": [ - "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+wD/AAEACAAAAAAAAAAAACe0x+xjNoToMGnEntp6lbrI+G8kQ3zXB+gDnP/oA5z/M6Y/ZkVsV2u0C1JA/H+eDE/RUCFSWkoDAAaIGPHlD8/TfgL6AAguhJ7Kqw4mwH8Lc5n8ysQ9R+yzRg3bXJGGDgIAAAAAAAAAAAAAAAAAAACd2BM5IMatN7QacL9qYfDUoSp7lW4gLLShlIwVOfE7tQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAA=", - "base64" - ], - "owner": "FUfpR31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/product-0-orderbook.json b/tests/dependencies/hxro/accounts/product-0-orderbook.json deleted file mode 100644 index b6c4673..0000000 --- a/tests/dependencies/hxro/accounts/product-0-orderbook.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "CTc7swEKXFCD1gsnvVcQyozXK2zJ3roQr3fuU7G6uerC", - "account": { - "lamports": 2227200, - "data": [ - "AQAAAAAAAAAcqYy6A1iSjP3wy3cOv6ZrEgOTumirhDdQ4K7/QLUAOyGtE4dJIGYBPjoaCDKI2FCzA3XwKXWYVkRLO43DdPsRB192kPMPxijVOerYoBe4JKaoj7bMWca2a9cQQZgC2tH1QHjNnhjt4+PmLihbEBIAEg1w8r86g76alyQbT0UDRSAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAD8IQAAAAAAAQAAAAAAAAABAAAAAAAAAOgDAAAAAAAA", - "base64" - ], - "owner": "DchhQ6g8LyRCM5mnao1MAg3g9twfqBbDmUWgpQpFfn1b", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/product-0.json b/tests/dependencies/hxro/accounts/product-0.json deleted file mode 100644 index a439ae3..0000000 --- a/tests/dependencies/hxro/accounts/product-0.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "3fw72yL2pG7cKmPs4TYJa6C9496NyypFpj5UQVLe515j", - "account": { - "lamports": 2449920, - "data": [ - "2iV+Bk5nKRMBAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAPsAAAAAAAAAM9QAAAAAAAACAAAAAAAAAIA8dWQAAAAAgFEBAAAAAACAcAAAAAAAAO8Ni2/aLOukHaFdQJXR2jkqDS+O0MbHvA9M+sjCgLVt4dOSKXBeFMn/r7EjgkHe/WM6NnDe7Wk8F7MR7mROF1+d2BM5IMatN7QacL9qYfDUoSp7lW4gLLShlIwVOfE7tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDx1ZAAAAAA=", - "base64" - ], - "owner": "8981bZYszfz1FrFVx7gcUm61RfawMoAHnURuERRJKdkq", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/product-1-orderbook.json b/tests/dependencies/hxro/accounts/product-1-orderbook.json deleted file mode 100644 index 37535a2..0000000 --- a/tests/dependencies/hxro/accounts/product-1-orderbook.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "3q4UnqSY7ARzcbX8B647soB5Xji4Qr23idLQGpZGLzJa", - "account": { - "lamports": 2227200, - "data": [ - "AQAAAAAAAAAqISmMdoAJaCx8HkO5xjNJW4Dqhq7wvw7C/zMdSp1BKSvPsRm6t+ZQfVcpMdTDwQtk4Zamrgk1d/lUI78uAz8f0id22k7YqBKMg7Gi65pFk8QC3IRbMJwgHEgYEMWlql/RuFuAeWjKnshatotZZbvqvvWuZRELzUhKRmHw68odHSAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAD8IQAAAAAAAQAAAAAAAAABAAAAAAAAAOgDAAAAAAAA", - "base64" - ], - "owner": "DchhQ6g8LyRCM5mnao1MAg3g9twfqBbDmUWgpQpFfn1b", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/product-1.json b/tests/dependencies/hxro/accounts/product-1.json deleted file mode 100644 index 67034e0..0000000 --- a/tests/dependencies/hxro/accounts/product-1.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "8qBD1ZewtfoxNAy3E45f5fRtwQUhLku55cVVxT5cMPef", - "account": { - "lamports": 2449920, - "data": [ - "2iV+Bk5nKRMBAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAPwAAAAAAAAA6d0BAAAAAAAEAAAAAAAAAMBJeGQAAAAAgFEBAAAAAACAcAAAAAAAAO8Ni2/aLOukHaFdQJXR2jkqDS+O0MbHvA9M+sjCgLVt4dOSKXBeFMn/r7EjgkHe/WM6NnDe7Wk8F7MR7mROF1+d2BM5IMatN7QacL9qYfDUoSp7lW4gLLShlIwVOfE7tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEl4ZAAAAAA=", - "base64" - ], - "owner": "8981bZYszfz1FrFVx7gcUm61RfawMoAHnURuERRJKdkq", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/risk-output.json b/tests/dependencies/hxro/accounts/risk-output.json deleted file mode 100644 index d28717e..0000000 --- a/tests/dependencies/hxro/accounts/risk-output.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "FEaUEZkFnyTfkWm8GgYR7sbyMkoW5nYSyqECDmKfQQoo", - "account": { - "lamports": 3897600, - "data": [ - "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "base64" - ], - "owner": "BVDTB61eHY7UnCb4ueatdaV4rctTzqfLAL6sQDeMNSHA", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/taker-fee-state.json b/tests/dependencies/hxro/accounts/taker-fee-state.json deleted file mode 100644 index 1f95807..0000000 --- a/tests/dependencies/hxro/accounts/taker-fee-state.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "12fr3WXr7Mh1wGMPQe1qe5VUeexz1BRzJ6SfAhHPgC1b", - "account": { - "lamports": 946560, - "data": [ - "/wAAAAAAAAA=", - "base64" - ], - "owner": "5T9gt3frWPAvu1hxEULbsKrP2WF4ggqSxCMqpJvtWXHV", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/taker-risk-state.json b/tests/dependencies/hxro/accounts/taker-risk-state.json deleted file mode 100644 index 5135e9a..0000000 --- a/tests/dependencies/hxro/accounts/taker-risk-state.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "78haJHMHdjdp6phofBzQwbHdNobFyYDrGRdgfAWQfwxL", - "account": { - "lamports": 953520, - "data": [ - "2JJrXmhLtrEB", - "base64" - ], - "owner": "BVDTB61eHY7UnCb4ueatdaV4rctTzqfLAL6sQDeMNSHA", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/taker-trg.json b/tests/dependencies/hxro/accounts/taker-trg.json deleted file mode 100644 index 0641af8..0000000 --- a/tests/dependencies/hxro/accounts/taker-trg.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "A3tmPza8B4rvHFiUkPHLsL7Nnv4ERK8utFfwPa1yAn18", - "account": { - "lamports": 93264000, - "data": [ - "eeRuOP7P9agCAAAAAAAAAOHTkilwXhTJ/6+xI4JB3v1jOjZw3u1pPBezEe5kThdfyxkDb26bL0vjVHOsyuI/i4PC7QTivY42lYqpvanXNlf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbHxCDdmnV3uGtewPNfLWiEg7yUEx+GkcUMsP5U8zx4QBtgO580OoEwhjDNQ76YOLkCPYvJ+HIPiRngfboEZqmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "base64" - ], - "owner": "FUfpR31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/accounts/vault.json b/tests/dependencies/hxro/accounts/vault.json deleted file mode 100644 index f1fe021..0000000 --- a/tests/dependencies/hxro/accounts/vault.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "G6b2JSF5M7SySosNC4GkHHmqXczSCGUycppRiYvTQ7aK", - "account": { - "lamports": 2039280, - "data": [ - "e2UTGuRioXUH1thtTs+0Qj7hdyxRnoHwm55RQpy8WkbgTa1eL6Zbjxal5nIpE/kYcpnP9RQiZgx7paDu540f/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "base64" - ], - "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", - "executable": false, - "rentEpoch": 0 - } -} \ No newline at end of file diff --git a/tests/dependencies/hxro/dex.json b/tests/dependencies/hxro/dex.json deleted file mode 100644 index e50bf8d..0000000 --- a/tests/dependencies/hxro/dex.json +++ /dev/null @@ -1,4605 +0,0 @@ -{ - "version": "0.1.0", - "name": "dex", - "constants": [ - { - "name": "NAME_LEN", - "type": "u64", - "value": "16" - }, - { - "name": "MAX_OUTRIGHTS", - "type": "u64", - "value": "128" - }, - { - "name": "MAX_PRODUCTS", - "type": "u64", - "value": "256" - }, - { - "name": "HEALTH_BUFFER_LEN", - "type": "u64", - "value": "32" - }, - { - "name": "MAX_TRADER_POSITIONS", - "type": "u64", - "value": "16" - }, - { - "name": "MAX_OPEN_ORDERS_PER_POSITION", - "type": "u64", - "value": "256" - }, - { - "name": "MAX_OPEN_ORDERS", - "type": "u64", - "value": "1024" - }, - { - "name": "ANCHOR_DISCRIMINANT_LEN", - "type": "u64", - "value": "8" - }, - { - "name": "SENTINEL", - "type": "u64", - "value": "0" - }, - { - "name": "CALLBACK_INFO_LEN", - "type": "u64", - "value": "std :: mem :: size_of :: < CallBackInfo > () as u64" - }, - { - "name": "CALLBACK_ID_LEN", - "type": "u64", - "value": "32" - }, - { - "name": "MAX_COMBOS", - "type": "u64", - "value": "128" - }, - { - "name": "MAX_LEGS", - "type": "u64", - "value": "4" - }, - { - "name": "SLOTS_1_MIN", - "type": "u64", - "value": "150" - }, - { - "name": "SLOTS_5_MIN", - "type": "u64", - "value": "750" - }, - { - "name": "SLOTS_15_MIN", - "type": "u64", - "value": "2250" - }, - { - "name": "SLOTS_60_MIN", - "type": "u64", - "value": "9000" - } - ], - "instructions": [ - { - "name": "initializeMarketProductGroup", - "accounts": [ - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroupVault", - "isMut": true, - "isSigner": false - }, - { - "name": "vaultMint", - "isMut": false, - "isSigner": false - }, - { - "name": "feeCollector", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "sysvarRent", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeOutputRegister", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": false, - "isSigner": false - }, - { - "name": "stakingFeeCollector", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializeMarketProductGroupParams" - } - } - ] - }, - { - "name": "updateMarketProductGroup", - "accounts": [ - { - "name": "authority", - "isMut": true, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "feeModelProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "feeOutputRegister", - "isMut": false, - "isSigner": false - }, - { - "name": "feeCollector", - "isMut": false, - "isSigner": false - }, - { - "name": "stakingFeeCollector", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdateMarketProductGroupParams" - } - } - ] - }, - { - "name": "setAddressLookupTable", - "accounts": [ - { - "name": "authority", - "isMut": true, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "addressLookupTable", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "initializeMarketProduct", - "accounts": [ - { - "name": "authority", - "isMut": false, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - }, - { - "name": "orderbook", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializeMarketProductParams" - } - } - ] - }, - { - "name": "changeOrderbook", - "accounts": [ - { - "name": "authority", - "isMut": false, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - }, - { - "name": "oldOrderbook", - "isMut": false, - "isSigner": false - }, - { - "name": "oldEventQueue", - "isMut": false, - "isSigner": false - }, - { - "name": "oldBids", - "isMut": false, - "isSigner": false - }, - { - "name": "oldAsks", - "isMut": false, - "isSigner": false - }, - { - "name": "newOrderbook", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "deactivateMarketProduct", - "accounts": [ - { - "name": "authority", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - }, - { - "name": "aaobProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "orderbook", - "isMut": true, - "isSigner": false - }, - { - "name": "marketSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "eventQueue", - "isMut": true, - "isSigner": false - }, - { - "name": "bids", - "isMut": true, - "isSigner": false - }, - { - "name": "asks", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "removeMarketProduct", - "accounts": [ - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "removeMarketProductGroup", - "accounts": [ - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lockCollateral", - "accounts": [ - { - "name": "user", - "isMut": true, - "isSigner": true - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "feeModelProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "feeOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskAndFeeSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "feeStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "riskStateAcct", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "LockCollateralParams" - } - } - ] - }, - { - "name": "unlockCollateral", - "accounts": [ - { - "name": "user", - "isMut": true, - "isSigner": true - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "feeModelProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "feeOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskAndFeeSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "feeStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "riskStateAcct", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "LockCollateralParams" - } - } - ] - }, - { - "name": "initializePrintTrade", - "accounts": [ - { - "name": "user", - "isMut": true, - "isSigner": true - }, - { - "name": "creator", - "isMut": false, - "isSigner": false - }, - { - "name": "counterparty", - "isMut": false, - "isSigner": false - }, - { - "name": "operator", - "isMut": false, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "printTrade", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "operatorOwner", - "isMut": false, - "isSigner": true - }, - { - "name": "seed", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializePrintTradeParams" - } - } - ] - }, - { - "name": "initializePrintTradeExecutionOutput", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "executionOutput", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "signPrintTrade", - "accounts": [ - { - "name": "user", - "isMut": true, - "isSigner": true - }, - { - "name": "creator", - "isMut": true, - "isSigner": false - }, - { - "name": "counterparty", - "isMut": true, - "isSigner": false - }, - { - "name": "operator", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "printTrade", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "feeOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskAndFeeSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "creatorTraderFeeStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "creatorTraderRiskStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "counterpartyTraderFeeStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "counterpartyTraderRiskStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "seed", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SignPrintTradeParams" - } - } - ] - }, - { - "name": "executePrintTrade", - "accounts": [ - { - "name": "op", - "isMut": true, - "isSigner": true - }, - { - "name": "creator", - "isMut": true, - "isSigner": false - }, - { - "name": "counterparty", - "isMut": true, - "isSigner": false - }, - { - "name": "operator", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "printTrade", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "feeOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskAndFeeSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "creatorTraderFeeStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "creatorTraderRiskStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "counterpartyTraderFeeStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "counterpartyTraderRiskStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "seed", - "isMut": false, - "isSigner": false - }, - { - "name": "executionOutput", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "cancelPrintTrade", - "accounts": [ - { - "name": "user", - "isMut": true, - "isSigner": true - }, - { - "name": "creator", - "isMut": false, - "isSigner": false - }, - { - "name": "counterparty", - "isMut": false, - "isSigner": false - }, - { - "name": "operator", - "isMut": false, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "printTrade", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "seed", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "closePrintTrade", - "accounts": [ - { - "name": "op", - "isMut": true, - "isSigner": true - }, - { - "name": "creator", - "isMut": false, - "isSigner": false - }, - { - "name": "counterparty", - "isMut": false, - "isSigner": false - }, - { - "name": "operator", - "isMut": false, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "printTrade", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "seed", - "isMut": false, - "isSigner": false - }, - { - "name": "creatorWallet", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "initializeTraderRiskGroup", - "accounts": [ - { - "name": "owner", - "isMut": true, - "isSigner": true - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "riskSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "traderRiskStateAcct", - "isMut": true, - "isSigner": true - }, - { - "name": "traderFeeStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelConfigAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "closeTraderRiskGroup", - "accounts": [ - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "owner", - "isMut": true, - "isSigner": true - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "traderRiskStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "receiver", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "newOrder", - "accounts": [ - { - "name": "user", - "isMut": true, - "isSigner": true - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - }, - { - "name": "aaobProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "orderbook", - "isMut": true, - "isSigner": false - }, - { - "name": "marketSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "eventQueue", - "isMut": true, - "isSigner": false - }, - { - "name": "bids", - "isMut": true, - "isSigner": false - }, - { - "name": "asks", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelConfigurationAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "traderFeeStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "feeOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "riskAndFeeSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "referrerTrg", - "isMut": true, - "isSigner": false, - "docs": [ - "referrer_trg receives a programmatic percentage of taker fees", - "sdks route this back to the user's trg", - "frontends will want to route this to their own trg" - ] - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "NewOrderParams" - } - } - ] - }, - { - "name": "clearOpenOrders", - "accounts": [ - { - "name": "authority", - "isMut": true, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ClearOpenOrdersParams" - } - } - ] - }, - { - "name": "reinitializeTraderPositions", - "accounts": [ - { - "name": "authority", - "isMut": true, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "setNumRiskStateAccounts", - "accounts": [ - { - "name": "authority", - "isMut": true, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetNumRiskStateAccountsParams" - } - } - ] - }, - { - "name": "updateVarianceCache", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "riskAndFeeSigner", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "consumeOrderbookEvents", - "accounts": [ - { - "name": "aaobProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - }, - { - "name": "marketSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "orderbook", - "isMut": true, - "isSigner": false - }, - { - "name": "eventQueue", - "isMut": true, - "isSigner": false - }, - { - "name": "rewardTarget", - "isMut": true, - "isSigner": true - }, - { - "name": "feeModelProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "feeModelConfigurationAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "feeOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "riskAndFeeSigner", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ConsumeOrderbookEventsParams" - } - } - ] - }, - { - "name": "cancelOrder", - "accounts": [ - { - "name": "user", - "isMut": false, - "isSigner": true - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - }, - { - "name": "aaobProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "orderbook", - "isMut": true, - "isSigner": false - }, - { - "name": "marketSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "eventQueue", - "isMut": true, - "isSigner": false - }, - { - "name": "bids", - "isMut": true, - "isSigner": false - }, - { - "name": "asks", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "riskSigner", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "CancelOrderParams" - } - } - ] - }, - { - "name": "depositFunds", - "accounts": [ - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "user", - "isMut": false, - "isSigner": true - }, - { - "name": "userTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marketProductGroupVault", - "isMut": true, - "isSigner": false - }, - { - "name": "capitalLimits", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DepositFundsParams" - } - } - ] - }, - { - "name": "withdrawFunds", - "accounts": [ - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "user", - "isMut": false, - "isSigner": true - }, - { - "name": "userTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "marketProductGroupVault", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskStateAcct", - "isMut": true, - "isSigner": false - }, - { - "name": "riskSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "capitalLimits", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "WithdrawFundsParams" - } - } - ] - }, - { - "name": "updateProductFunding", - "accounts": [ - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": true - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdateProductFundingParams" - } - } - ] - }, - { - "name": "updateProductMarkPriceConfig", - "accounts": [ - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdateProductMarkPriceConfigParams" - } - } - ] - }, - { - "name": "transferFullPosition", - "accounts": [ - { - "name": "liquidator", - "isMut": false, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidateeRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidatorRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidatorRiskStateAccountInfo", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidateeRiskStateAccountInfo", - "isMut": true, - "isSigner": false - }, - { - "name": "riskSigner", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "initializeCombo", - "accounts": [ - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "orderbook", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializeComboParams" - } - } - ] - }, - { - "name": "updateTraderFunding", - "accounts": [ - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "riskEngineProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "riskOutputRegister", - "isMut": true, - "isSigner": false - }, - { - "name": "traderRiskStateAccountInfo", - "isMut": true, - "isSigner": false - }, - { - "name": "riskModelConfigurationAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "riskSigner", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "clearExpiredOrderbook", - "accounts": [ - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - }, - { - "name": "aaobProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "orderbook", - "isMut": true, - "isSigner": false - }, - { - "name": "marketSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "eventQueue", - "isMut": true, - "isSigner": false - }, - { - "name": "bids", - "isMut": true, - "isSigner": false - }, - { - "name": "asks", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ClearExpiredOrderbookParams" - } - } - ] - }, - { - "name": "popEvents", - "accounts": [ - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "product", - "isMut": false, - "isSigner": false - }, - { - "name": "aaobProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "marketSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "orderbook", - "isMut": true, - "isSigner": false - }, - { - "name": "eventQueue", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "PopEventsParams" - } - } - ] - }, - { - "name": "sweepFees", - "accounts": [ - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "feeCollector", - "isMut": false, - "isSigner": false - }, - { - "name": "stakingFeeCollector", - "isMut": false, - "isSigner": false - }, - { - "name": "marketProductGroupVault", - "isMut": true, - "isSigner": false - }, - { - "name": "feeCollectorTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "stakingFeeCollectorTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "chooseSuccessor", - "accounts": [ - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "newAuthority", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "claimAuthority", - "accounts": [ - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "newAuthority", - "isMut": false, - "isSigner": true - } - ], - "args": [] - }, - { - "name": "setupCapitalLimits", - "accounts": [ - { - "name": "authority", - "isMut": true, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "capitalLimitsState", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "updateCapitalLimits", - "accounts": [ - { - "name": "authority", - "isMut": true, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "capitalLimitsState", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "CapitalLimitsParams" - } - } - ] - }, - { - "name": "updateTraderRiskGroup", - "accounts": [ - { - "name": "authority", - "isMut": true, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "traderFeeStateAcct", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "updateTraderRiskGroupOwner", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": false - }, - { - "name": "traderRiskGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "newOwner", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "disableKillswitch", - "accounts": [ - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "enableKillswitch", - "accounts": [ - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "marketProductGroup", - "isMut": true, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "CapitalLimits", - "type": { - "kind": "struct", - "fields": [ - { - "name": "depositLimit", - "type": { - "defined": "Fractional" - } - }, - { - "name": "withdrawalLimit", - "type": { - "defined": "Fractional" - } - }, - { - "name": "marketProductGroup", - "type": "publicKey" - }, - { - "name": "bump", - "type": "u8" - } - ] - } - }, - { - "name": "MarketProductGroup", - "docs": [ - "The highest level organizational unit of the Dex.", - "Market product groups exist independently of each other.", - "i.e. each trader, product etc, corresponds to exactly one market product group." - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "tag", - "type": { - "defined": "AccountTag" - } - }, - { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } - }, - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "successor", - "type": "publicKey" - }, - { - "name": "vaultMint", - "type": "publicKey" - }, - { - "name": "collectedFees", - "type": { - "defined": "Fractional" - } - }, - { - "name": "feeCollector", - "type": "publicKey" - }, - { - "name": "decimals", - "type": "u64" - }, - { - "name": "riskEngineProgramId", - "type": "publicKey" - }, - { - "name": "feeModelProgramId", - "type": "publicKey" - }, - { - "name": "feeModelConfigurationAcct", - "type": "publicKey" - }, - { - "name": "riskModelConfigurationAcct", - "type": "publicKey" - }, - { - "name": "activeFlagsProducts", - "type": { - "defined": "Bitset" - } - }, - { - "name": "ewmaWindows", - "type": { - "array": [ - "u64", - 4 - ] - } - }, - { - "name": "marketProducts", - "type": { - "defined": "ProductArray" - } - }, - { - "name": "vaultBump", - "type": "u16" - }, - { - "name": "riskAndFeeBump", - "type": "u16" - }, - { - "name": "findFeesDiscriminantLen", - "type": "u16" - }, - { - "name": "validateAccountDiscriminantLen", - "type": "u16" - }, - { - "name": "findFeesDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "validateAccountHealthDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "validateAccountLiquidationDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "createRiskStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "maxMakerFeeBps", - "type": "i16" - }, - { - "name": "minMakerFeeBps", - "type": "i16" - }, - { - "name": "maxTakerFeeBps", - "type": "i16" - }, - { - "name": "minTakerFeeBps", - "type": "i16" - }, - { - "name": "feeOutputRegister", - "type": "publicKey" - }, - { - "name": "riskOutputRegister", - "type": "publicKey" - }, - { - "name": "sequenceNumber", - "type": "u128" - }, - { - "name": "stakingFeeCollector", - "type": "publicKey" - }, - { - "name": "isKilled", - "type": "bool" - }, - { - "name": "createFeeStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "addressLookupTable", - "type": "publicKey" - }, - { - "name": "closeRiskStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "closeFeeStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - } - ] - } - }, - { - "name": "ProductArray", - "type": { - "kind": "struct", - "fields": [ - { - "name": "array", - "type": { - "array": [ - { - "defined": "Product" - }, - 256 - ] - } - } - ] - } - }, - { - "name": "PrintTradeProduct", - "type": { - "kind": "struct", - "fields": [ - { - "name": "productKey", - "type": "publicKey" - }, - { - "name": "size", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "PrintTrade", - "type": { - "kind": "struct", - "fields": [ - { - "name": "isInitialized", - "type": "bool" - }, - { - "name": "creator", - "type": "publicKey" - }, - { - "name": "counterparty", - "type": "publicKey" - }, - { - "name": "seed", - "type": "publicKey" - }, - { - "name": "marketProductGroup", - "type": "publicKey" - }, - { - "name": "numProducts", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "products", - "type": { - "array": [ - { - "defined": "PrintTradeProductIndex" - }, - 6 - ] - } - }, - { - "name": "price", - "type": { - "defined": "Fractional" - } - }, - { - "name": "side", - "type": { - "defined": "Side" - } - }, - { - "name": "operator", - "type": "publicKey" - }, - { - "name": "operatorCreatorFeeProportion", - "type": { - "defined": "Fractional" - } - }, - { - "name": "operatorCounterpartyFeeProportion", - "type": { - "defined": "Fractional" - } - }, - { - "name": "isSigned", - "type": "bool" - }, - { - "name": "isCancelled", - "type": { - "defined": "CancelStatus" - } - }, - { - "name": "bump", - "type": "u8" - } - ] - } - }, - { - "name": "RiskOutputRegister", - "type": { - "kind": "struct", - "fields": [ - { - "name": "riskEngineOutput", - "type": { - "defined": "HealthResult" - } - } - ] - } - }, - { - "name": "TraderRiskGroup", - "docs": [ - "State account corresponding to a trader on a given market product group" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "tag", - "type": { - "defined": "AccountTag" - } - }, - { - "name": "marketProductGroup", - "type": "publicKey" - }, - { - "name": "owner", - "type": "publicKey" - }, - { - "name": "activeProducts", - "type": { - "array": [ - "u8", - 128 - ] - } - }, - { - "name": "totalDeposited", - "type": { - "defined": "Fractional" - } - }, - { - "name": "totalWithdrawn", - "type": { - "defined": "Fractional" - } - }, - { - "name": "cashBalance", - "type": { - "defined": "Fractional" - } - }, - { - "name": "pendingCashBalance", - "type": { - "defined": "Fractional" - } - }, - { - "name": "pendingFees", - "type": { - "defined": "Fractional" - } - }, - { - "name": "validUntil", - "type": "u64" - }, - { - "name": "makerFeeBps", - "type": "i32" - }, - { - "name": "takerFeeBps", - "type": "i32" - }, - { - "name": "traderPositions", - "type": { - "array": [ - { - "defined": "TraderPosition" - }, - 16 - ] - } - }, - { - "name": "riskStateAccount", - "type": "publicKey" - }, - { - "name": "feeStateAccount", - "type": "publicKey" - }, - { - "name": "clientOrderId", - "type": "u128" - }, - { - "name": "openOrders", - "type": { - "defined": "OpenOrders" - } - }, - { - "name": "lockedCollateral", - "type": { - "array": [ - { - "defined": "LockedCollateral" - }, - 16 - ] - } - }, - { - "name": "notionalMakerVolume", - "type": { - "defined": "Fractional" - } - }, - { - "name": "notionalTakerVolume", - "type": { - "defined": "Fractional" - } - }, - { - "name": "referredTakersNotionalVolume", - "type": { - "defined": "Fractional" - } - }, - { - "name": "referralFees", - "docs": [ - "referral_fees is not necessarily REFERRER_FEES_PROPORTION * referred_takers_notional_volume,", - "because combo volume has only collects 1/8th the fees as outright volume" - ], - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "PrintTradeExecutionOutput", - "type": { - "kind": "struct", - "fields": [ - { - "name": "result", - "type": { - "defined": "PrintTradeExecutionResult" - } - } - ] - } - }, - { - "name": "CapitalLimitsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "depositLimit", - "type": { - "defined": "Fractional" - } - }, - { - "name": "withdrawalLimit", - "type": { - "defined": "Fractional" - } - } - ] - } - } - ], - "types": [ - { - "name": "LockedCollateralProductIndex", - "type": { - "kind": "struct", - "fields": [ - { - "name": "productIndex", - "type": "u64" - }, - { - "name": "size", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "PrintTradeProductIndex", - "type": { - "kind": "struct", - "fields": [ - { - "name": "productIndex", - "type": "u64" - }, - { - "name": "size", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "ProductArray", - "type": { - "kind": "struct", - "fields": [ - { - "name": "array", - "type": { - "array": [ - { - "defined": "Product" - }, - 256 - ] - } - } - ] - } - }, - { - "name": "Side", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Bid" - }, - { - "name": "Ask" - } - ] - } - }, - { - "name": "Params", - "type": { - "kind": "struct", - "fields": [ - { - "name": "quantity", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "CallBackInfo", - "docs": [ - "Buffer attached to aaob events to tie owner to events" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "userAccount", - "type": "publicKey" - }, - { - "name": "openOrdersIdx", - "type": "u64" - }, - { - "name": "orderNonce", - "type": "u128" - }, - { - "name": "clientOrderId", - "type": "u64" - } - ] - } - }, - { - "name": "TraderFees", - "type": { - "kind": "struct", - "fields": [ - { - "name": "validUntil", - "type": "i64" - }, - { - "name": "makerFeeBps", - "type": "i32" - }, - { - "name": "takerFeeBps", - "type": "i32" - } - ] - } - }, - { - "name": "TraderFeeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "side", - "type": { - "defined": "Side" - } - }, - { - "name": "isAggressor", - "type": "bool" - }, - { - "name": "matchedQuoteQty", - "type": { - "defined": "Fractional" - } - }, - { - "name": "matchedBaseQty", - "type": { - "defined": "Fractional" - } - }, - { - "name": "product", - "type": "publicKey" - } - ] - } - }, - { - "name": "PriceEwma", - "type": { - "kind": "struct", - "fields": [ - { - "name": "ewmaBid", - "type": { - "array": [ - { - "defined": "Fractional" - }, - 4 - ] - } - }, - { - "name": "ewmaAsk", - "type": { - "array": [ - { - "defined": "Fractional" - }, - 4 - ] - } - }, - { - "name": "bid", - "type": { - "defined": "Fractional" - } - }, - { - "name": "ask", - "type": { - "defined": "Fractional" - } - }, - { - "name": "slot", - "type": "u64" - }, - { - "name": "prevBid", - "type": { - "defined": "Fractional" - } - }, - { - "name": "prevAsk", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "OpenOrdersMetadata", - "type": { - "kind": "struct", - "fields": [ - { - "name": "askQtyInBook", - "type": { - "defined": "Fractional" - } - }, - { - "name": "bidQtyInBook", - "type": { - "defined": "Fractional" - } - }, - { - "name": "headIndex", - "type": "u64" - }, - { - "name": "numOpenOrders", - "type": "u64" - } - ] - } - }, - { - "name": "OpenOrders", - "type": { - "kind": "struct", - "fields": [ - { - "name": "freeListHead", - "type": "u64" - }, - { - "name": "totalOpenOrders", - "type": "u64" - }, - { - "name": "products", - "type": { - "array": [ - { - "defined": "OpenOrdersMetadata" - }, - 256 - ] - } - }, - { - "name": "orders", - "type": { - "array": [ - { - "defined": "OpenOrdersNode" - }, - 1024 - ] - } - } - ] - } - }, - { - "name": "OpenOrdersNode", - "type": { - "kind": "struct", - "fields": [ - { - "name": "id", - "type": "u128" - }, - { - "name": "qty", - "type": "u64" - }, - { - "name": "clientId", - "type": "u64" - }, - { - "name": "prev", - "type": "u64" - }, - { - "name": "next", - "type": "u64" - } - ] - } - }, - { - "name": "Outright", - "docs": [ - "A market product corresponding to one underlying asset" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "metadata", - "type": { - "defined": "ProductMetadata" - } - }, - { - "name": "numRiskStateAccounts", - "docs": [ - "num_risk_state_accounts is the number of risk state accounts that have an untidied entry related to this product.", - "The DEX assumes that the attached risk engine will tidy (this likely means \"remove\")", - "risk entries related to this product during the first risk check after removing a TraderPosition." - ], - "type": "u64" - }, - { - "name": "productStatus", - "type": { - "defined": "ProductStatus" - } - }, - { - "name": "dust", - "type": { - "defined": "Fractional" - } - }, - { - "name": "cumFundingPerShare", - "type": { - "defined": "Fractional" - } - }, - { - "name": "cumSocialLossPerShare", - "type": { - "defined": "Fractional" - } - }, - { - "name": "openLongInterest", - "type": { - "defined": "Fractional" - } - }, - { - "name": "openShortInterest", - "type": { - "defined": "Fractional" - } - }, - { - "name": "markPriceQualifyingCumValue", - "type": { - "defined": "Fractional" - } - }, - { - "name": "markPriceMaxQualifyingWidth", - "type": { - "defined": "Fractional" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 10 - ] - } - } - ] - } - }, - { - "name": "ProductMetadata", - "docs": [ - "Shared fields between Outright and Combo products" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "bump", - "type": "u64" - }, - { - "name": "productKey", - "type": "publicKey" - }, - { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } - }, - { - "name": "orderbook", - "type": "publicKey" - }, - { - "name": "tickSize", - "type": { - "defined": "Fractional" - } - }, - { - "name": "baseDecimals", - "type": "u64" - }, - { - "name": "priceOffset", - "type": { - "defined": "Fractional" - } - }, - { - "name": "notionalTradedVolume", - "type": { - "defined": "Fractional" - } - }, - { - "name": "prices", - "type": { - "defined": "PriceEwma" - } - } - ] - } - }, - { - "name": "Combo", - "docs": [ - "A market product with multiple legs that are each outrights" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "metadata", - "type": { - "defined": "ProductMetadata" - } - }, - { - "name": "numLegs", - "type": "u64" - }, - { - "name": "legsArray", - "type": { - "array": [ - { - "defined": "Leg" - }, - 4 - ] - } - } - ] - } - }, - { - "name": "Leg", - "docs": [ - "One part of a combo. Each leg corresponds to an outright with the ratio determining", - "relative weighting" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "productIndex", - "type": "u64" - }, - { - "name": "productKey", - "type": "publicKey" - }, - { - "name": "ratio", - "type": "i64" - } - ] - } - }, - { - "name": "HealthInfo", - "type": { - "kind": "struct", - "fields": [ - { - "name": "health", - "type": { - "defined": "HealthStatus" - } - }, - { - "name": "action", - "type": { - "defined": "ActionStatus" - } - } - ] - } - }, - { - "name": "LiquidationInfo", - "type": { - "kind": "struct", - "fields": [ - { - "name": "health", - "type": { - "defined": "HealthStatus" - } - }, - { - "name": "action", - "type": { - "defined": "ActionStatus" - } - }, - { - "name": "totalSocialLoss", - "type": { - "defined": "Fractional" - } - }, - { - "name": "liquidationPrice", - "type": { - "defined": "Fractional" - } - }, - { - "name": "socialLosses", - "type": { - "array": [ - { - "defined": "SocialLoss" - }, - 16 - ] - } - } - ] - } - }, - { - "name": "SocialLoss", - "type": { - "kind": "struct", - "fields": [ - { - "name": "productIndex", - "type": "u64" - }, - { - "name": "amount", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "OrderInfo", - "type": { - "kind": "struct", - "fields": [ - { - "name": "totalOrderQty", - "type": { - "defined": "Fractional" - } - }, - { - "name": "matchedOrderQty", - "type": { - "defined": "Fractional" - } - }, - { - "name": "orderSide", - "type": { - "defined": "Side" - } - }, - { - "name": "orderPrice", - "type": { - "defined": "Fractional" - } - }, - { - "name": "isCombo", - "type": "bool" - }, - { - "name": "productIndex", - "type": "u64" - }, - { - "name": "operationType", - "type": { - "defined": "OperationType" - } - }, - { - "name": "oldAskQtyInBook", - "type": { - "defined": "Fractional" - } - }, - { - "name": "oldBidQtyInBook", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "TraderPosition", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tag", - "type": { - "defined": "AccountTag" - } - }, - { - "name": "productKey", - "type": "publicKey" - }, - { - "name": "position", - "type": { - "defined": "Fractional" - } - }, - { - "name": "pendingPosition", - "type": { - "defined": "Fractional" - } - }, - { - "name": "productIndex", - "type": "u64" - }, - { - "name": "lastCumFundingSnapshot", - "type": { - "defined": "Fractional" - } - }, - { - "name": "lastSocialLossSnapshot", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "LockedCollateral", - "docs": [ - "there is one LockedCollateral for each product; the array is in one-to-one mapping with trader_positions" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "tag", - "type": { - "defined": "AccountTag" - } - }, - { - "name": "askQty", - "type": { - "defined": "Fractional" - } - }, - { - "name": "bidQty", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "Bitset", - "type": { - "kind": "struct", - "fields": [ - { - "name": "inner", - "type": { - "array": [ - "u128", - 2 - ] - } - } - ] - } - }, - { - "name": "Fractional", - "docs": [ - "Fractional Operations" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "m", - "type": "i64" - }, - { - "name": "exp", - "type": "u64" - } - ] - } - }, - { - "name": "InitializeMarketProductGroupParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } - }, - { - "name": "validateAccountDiscriminantLen", - "type": "u64" - }, - { - "name": "findFeesDiscriminantLen", - "type": "u64" - }, - { - "name": "validateAccountHealthDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "validateAccountLiquidationDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "createRiskStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "createFeeStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "closeRiskStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "closeFeeStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "findFeesDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "maxMakerFeeBps", - "type": "i16" - }, - { - "name": "minMakerFeeBps", - "type": "i16" - }, - { - "name": "maxTakerFeeBps", - "type": "i16" - }, - { - "name": "minTakerFeeBps", - "type": "i16" - } - ] - } - }, - { - "name": "UpdateMarketProductGroupParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "findFeesDiscriminantLen", - "type": "u16" - }, - { - "name": "findFeesDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "createFeeStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "closeFeeStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - }, - { - "name": "closeRiskStateAccountDiscriminant", - "type": { - "array": [ - "u8", - 8 - ] - } - } - ] - } - }, - { - "name": "InitializePrintTradeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "numProducts", - "type": "u64" - }, - { - "name": "products", - "type": { - "array": [ - { - "defined": "PrintTradeProductIndex" - }, - 6 - ] - } - }, - { - "name": "price", - "type": { - "defined": "Fractional" - } - }, - { - "name": "side", - "type": { - "defined": "Side" - } - }, - { - "name": "operatorCreatorFeeProportion", - "type": { - "defined": "Fractional" - } - }, - { - "name": "operatorCounterpartyFeeProportion", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "LockCollateralParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "numProducts", - "type": "u64" - }, - { - "name": "products", - "type": { - "array": [ - { - "defined": "LockedCollateralProductIndex" - }, - 6 - ] - } - } - ] - } - }, - { - "name": "SignPrintTradeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "numProducts", - "type": "u64" - }, - { - "name": "products", - "type": { - "array": [ - { - "defined": "PrintTradeProductIndex" - }, - 6 - ] - } - }, - { - "name": "price", - "type": { - "defined": "Fractional" - } - }, - { - "name": "side", - "type": { - "defined": "Side" - } - }, - { - "name": "operatorCreatorFeeProportion", - "type": { - "defined": "Fractional" - } - }, - { - "name": "operatorCounterpartyFeeProportion", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "InitializeMarketProductParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } - }, - { - "name": "tickSize", - "type": { - "defined": "Fractional" - } - }, - { - "name": "baseDecimals", - "type": "u64" - }, - { - "name": "priceOffset", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "NewOrderParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "side", - "docs": [ - "The order's side (Bid or Ask)" - ], - "type": { - "defined": "Side" - } - }, - { - "name": "maxBaseQty", - "docs": [ - "The max quantity of base token to match and post" - ], - "type": { - "defined": "Fractional" - } - }, - { - "name": "orderType", - "docs": [ - "The order type (supported types include Limit, FOK, IOC and PostOnly)" - ], - "type": { - "defined": "OrderType" - } - }, - { - "name": "matchLimit", - "docs": [ - "The maximum number of orders to be matched against.", - "Setting this number too high can sometimes lead to excessive resource consumption which can cause a failure." - ], - "type": "u64" - }, - { - "name": "limitPrice", - "docs": [ - "The order's limit price in ticks" - ], - "type": { - "defined": "Fractional" - } - }, - { - "name": "referrerFeeBps", - "docs": [ - "In addition to taker fees; routed to referrer_trg; can be zero", - "Should be used like this: 3bps -> use the value Fractional{ m: 3, exp: 4 }", - "Min: 0; Max: 100bps." - ], - "type": { - "defined": "Fractional" - } - }, - { - "name": "clientOrderId", - "docs": [ - "Order id that can be specified by client. Can be arbitrary u64. Defaults to the value 0." - ], - "type": "u64" - } - ] - } - }, - { - "name": "ClearOpenOrdersParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "productIndex", - "type": "u64" - } - ] - } - }, - { - "name": "SetNumRiskStateAccountsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "numRiskStateAccounts", - "type": "u64" - } - ] - } - }, - { - "name": "ConsumeOrderbookEventsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "maxIterations", - "docs": [ - "The maximum number of events to consume" - ], - "type": "u64" - } - ] - } - }, - { - "name": "CancelOrderParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "orderId", - "docs": [ - "The order_id of the order to cancel. Redundancy is used here to avoid having to iterate over all", - "open orders on chain. If order_id == 0, then client_order_id is used." - ], - "type": "u128" - }, - { - "name": "noErr", - "docs": [ - "do not fail when order is not found" - ], - "type": "bool" - }, - { - "name": "clientOrderId", - "docs": [ - "The client_order_id of the order to cancel. Used when order_id == 0." - ], - "type": "u64" - } - ] - } - }, - { - "name": "DepositFundsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "quantity", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "WithdrawFundsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "quantity", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "UpdateProductFundingParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "amount", - "type": { - "defined": "Fractional" - } - }, - { - "name": "newProductStatus", - "type": { - "defined": "ProductStatus" - } - } - ] - } - }, - { - "name": "UpdateProductMarkPriceConfigParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "markPriceQualifyingCumValue", - "type": { - "defined": "Fractional" - } - }, - { - "name": "markPriceMaxQualifyingWidth", - "type": { - "defined": "Fractional" - } - } - ] - } - }, - { - "name": "InitializeComboParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } - }, - { - "name": "tickSize", - "type": { - "defined": "Fractional" - } - }, - { - "name": "priceOffset", - "type": { - "defined": "Fractional" - } - }, - { - "name": "baseDecimals", - "type": "u64" - }, - { - "name": "ratios", - "type": { - "vec": "i8" - } - } - ] - } - }, - { - "name": "PopEventsParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "numEventsToPop", - "type": "u64" - } - ] - } - }, - { - "name": "ClearExpiredOrderbookParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "numOrdersToCancel", - "type": "u8" - } - ] - } - }, - { - "name": "DomainOrProgramError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "DexErr", - "fields": [ - { - "defined": "DexError" - } - ] - }, - { - "name": "UtilErr", - "fields": [ - { - "defined": "UtilError" - } - ] - }, - { - "name": "ProgramErr", - "fields": [ - { - "name": "msg", - "type": "string" - } - ] - }, - { - "name": "Other", - "fields": [ - { - "name": "code", - "type": "u32" - }, - { - "name": "msg", - "type": "string" - } - ] - } - ] - } - }, - { - "name": "UtilError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "AccountAlreadyInitialized" - }, - { - "name": "AccountUninitialized" - }, - { - "name": "DuplicateProductKey" - }, - { - "name": "PublicKeyMismatch" - }, - { - "name": "AssertionError" - }, - { - "name": "InvalidMintAuthority" - }, - { - "name": "IncorrectOwner" - }, - { - "name": "PublicKeysShouldBeUnique" - }, - { - "name": "NotRentExempt" - }, - { - "name": "NumericalOverflow" - }, - { - "name": "RoundError" - }, - { - "name": "DivisionbyZero" - }, - { - "name": "InvalidReturnValue" - }, - { - "name": "SqrtRootError" - }, - { - "name": "ZeroPriceError" - }, - { - "name": "ZeroQuantityError" - }, - { - "name": "SerializeError" - }, - { - "name": "DeserializeError" - }, - { - "name": "InvalidBitsetIndex" - }, - { - "name": "PushToFullBitvec" - }, - { - "name": "U8MaxNotAllowedInBitvec" - } - ] - } - }, - { - "name": "DexError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "ContractIsExpired" - }, - { - "name": "ContractIsNotExpired" - }, - { - "name": "InvalidSystemProgramAccount" - }, - { - "name": "InvalidAobProgramAccount" - }, - { - "name": "InvalidStateAccountOwner" - }, - { - "name": "InvalidOrderIndex" - }, - { - "name": "UserAccountFull" - }, - { - "name": "TransactionAborted" - }, - { - "name": "MissingUserAccount" - }, - { - "name": "OrderNotFound" - }, - { - "name": "NoOp" - }, - { - "name": "OutofFunds" - }, - { - "name": "UserAccountStillActive" - }, - { - "name": "MarketStillActive" - }, - { - "name": "InvalidMarketSignerAccount" - }, - { - "name": "InvalidOrderbookAccount" - }, - { - "name": "InvalidMarketAdminAccount" - }, - { - "name": "InvalidBaseVaultAccount" - }, - { - "name": "InvalidQuoteVaultAccount" - }, - { - "name": "FullMarketProductGroup" - }, - { - "name": "MissingMarketProduct" - }, - { - "name": "InvalidWithdrawalAmount" - }, - { - "name": "InvalidTakerTrader" - }, - { - "name": "FundsError" - }, - { - "name": "InactiveProductError" - }, - { - "name": "TooManyOpenOrdersError" - }, - { - "name": "NoMoreOpenOrdersError" - }, - { - "name": "NonZeroPriceTickExponentError" - }, - { - "name": "DuplicateProductNameError" - }, - { - "name": "InvalidRiskResponseError" - }, - { - "name": "InvalidAccountHealthError" - }, - { - "name": "OrderbookIsEmptyError" - }, - { - "name": "CombosNotRemoved" - }, - { - "name": "AccountNotLiquidable" - }, - { - "name": "FundingPrecisionError" - }, - { - "name": "ProductDecimalPrecisionError" - }, - { - "name": "ProductNotOutright" - }, - { - "name": "ProductNotCombo" - }, - { - "name": "InvalidSocialLossCalculation" - }, - { - "name": "ProductIndexMismatch" - }, - { - "name": "InvalidOrderID" - }, - { - "name": "InvalidBytesForZeroCopyDeserialization" - }, - { - "name": "IncorrectPrintTradeSize" - }, - { - "name": "IncorrectPrintTradePrice" - }, - { - "name": "IncorrectPrintTradeSide" - }, - { - "name": "IncorrectPrintTradeOperatorCreatorFees" - }, - { - "name": "IncorrectPrintTradeOperatorCounterpartyFees" - }, - { - "name": "InvalidPrintTradeOperatorFees" - }, - { - "name": "DepositLimitExceeded" - }, - { - "name": "WithdrawLimitExceeded" - }, - { - "name": "NegativeDepositLimit" - }, - { - "name": "NegativeWithdrawLimit" - }, - { - "name": "DepositDeniedInsufficientBalanceOnWhitelistAtaToken" - }, - { - "name": "DepositDeclinedUnfrozenWhitelistAtaToken" - }, - { - "name": "DepositDeclinedNonExistentWhitelistAtaTokenOnTraderRiskGroup" - }, - { - "name": "InvalidProductStatusInUpdateFunding" - }, - { - "name": "ContractIsNotExpiring" - }, - { - "name": "ContractHasNonZeroOpenInterest" - }, - { - "name": "ContractHasNonZeroOpenInterestOrRiskStateAccounts" - }, - { - "name": "ContractIsActive" - }, - { - "name": "FailedToGetOrderQuantity" - }, - { - "name": "SelfTradeBehaviorDecrementTakeIsDisallowed" - }, - { - "name": "PriceBandViolation" - }, - { - "name": "UnexpectedImbalancedOpenInterest" - }, - { - "name": "MaximumOpenInterestExceeded" - }, - { - "name": "MarketProductGroupKillswitchIsOn" - }, - { - "name": "InvalidFutureExpiry" - }, - { - "name": "MaxReferrerFeeBpsExceeded" - }, - { - "name": "PrintTradeOperatorDidNotSign" - }, - { - "name": "PrintTradeInvalidProductsLength" - }, - { - "name": "ContractIsNotActive" - }, - { - "name": "PrintTradeInvalidNumProducts" - }, - { - "name": "PrintTradeProductMismatch" - }, - { - "name": "InsufficientLockedCollateral" - }, - { - "name": "OracleNotWhitelisted" - } - ] - } - }, - { - "name": "AccountTag", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Uninitialized" - }, - { - "name": "MarketProductGroup" - }, - { - "name": "TraderRiskGroup" - }, - { - "name": "TraderPosition" - }, - { - "name": "MarketProductGroupWithCombos" - }, - { - "name": "ComboGroup" - }, - { - "name": "Combo" - }, - { - "name": "RiskProfile" - }, - { - "name": "LockedCollateral" - } - ] - } - }, - { - "name": "ProductStatus", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Uninitialized" - }, - { - "name": "Initialized" - }, - { - "name": "Expired" - }, - { - "name": "Expiring" - } - ] - } - }, - { - "name": "OrderType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Limit" - }, - { - "name": "ImmediateOrCancel" - }, - { - "name": "FillOrKill" - }, - { - "name": "PostOnly" - } - ] - } - }, - { - "name": "CancelStatus", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Active" - }, - { - "name": "CreatorCancelled" - }, - { - "name": "CounterpartyCancelled" - } - ] - } - }, - { - "name": "Product", - "docs": [ - "Unify Outright and Combo" - ], - "type": { - "kind": "enum", - "variants": [ - { - "name": "Outright", - "fields": [ - { - "name": "outright", - "type": { - "defined": "Outright" - } - } - ] - }, - { - "name": "Combo", - "fields": [ - { - "name": "combo", - "type": { - "defined": "Combo" - } - } - ] - } - ] - } - }, - { - "name": "OperationType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "NewOrder" - }, - { - "name": "CancelOrder" - }, - { - "name": "CheckHealth" - }, - { - "name": "PositionTransfer" - }, - { - "name": "ConsumeEvents" - }, - { - "name": "CheckWithdrawalHealth" - }, - { - "name": "LockCollateral" - }, - { - "name": "SignPrinTrade" - } - ] - } - }, - { - "name": "HealthResult", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Health", - "fields": [ - { - "name": "health_info", - "type": { - "defined": "HealthInfo" - } - } - ] - }, - { - "name": "Liquidation", - "fields": [ - { - "name": "liquidation_info", - "type": { - "defined": "LiquidationInfo" - } - } - ] - } - ] - } - }, - { - "name": "HealthStatus", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Healthy" - }, - { - "name": "Unhealthy" - }, - { - "name": "Liquidatable" - }, - { - "name": "NotLiquidatable" - } - ] - } - }, - { - "name": "ActionStatus", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Approved" - }, - { - "name": "NotApproved" - } - ] - } - }, - { - "name": "PrintTradeExecutionResult", - "type": { - "kind": "enum", - "variants": [ - { - "name": "CounterpartyHasntSigned" - }, - { - "name": "CreatorCancelled" - }, - { - "name": "CounterpartyCancelled" - }, - { - "name": "CreatorNotEnoughLockedCollateral" - }, - { - "name": "CounterpartyNotEnoughLockedCollateral" - }, - { - "name": "Success" - } - ] - } - } - ], - "events": [ - { - "name": "DexOrderSummary", - "fields": [ - { - "name": "postedOrderId", - "type": { - "option": "u128" - }, - "index": false - }, - { - "name": "totalBaseQty", - "type": "u64", - "index": false - }, - { - "name": "totalQuoteQty", - "type": "u64", - "index": false - }, - { - "name": "totalBaseQtyPosted", - "type": "u64", - "index": false - } - ] - } - ] -} \ No newline at end of file diff --git a/tests/dependencies/hxro/keypairs/operator-trg-risk-state.json b/tests/dependencies/hxro/keypairs/operator-trg-risk-state.json deleted file mode 100644 index f6df655..0000000 --- a/tests/dependencies/hxro/keypairs/operator-trg-risk-state.json +++ /dev/null @@ -1 +0,0 @@ -[140,178,122,123,227,247,157,74,161,95,3,229,95,104,226,238,52,99,225,143,191,9,207,105,165,96,181,108,122,42,224,92,84,158,145,6,32,178,169,177,129,126,50,241,104,37,63,149,247,11,107,47,229,67,102,38,124,59,72,103,2,43,159,205] \ No newline at end of file diff --git a/tests/dependencies/hxro/keypairs/operator-trg.json b/tests/dependencies/hxro/keypairs/operator-trg.json deleted file mode 100644 index 5d9fa53..0000000 --- a/tests/dependencies/hxro/keypairs/operator-trg.json +++ /dev/null @@ -1 +0,0 @@ -[168,232,99,222,141,177,104,101,96,34,154,127,107,161,69,146,61,70,137,231,19,89,170,99,230,152,30,139,167,26,198,40,43,19,34,66,232,78,251,245,249,45,22,99,93,237,77,172,8,223,244,200,34,239,11,197,250,204,83,185,19,165,141,176] \ No newline at end of file diff --git a/tests/dependencies/hxro/programs/aaob_DchhQ6g8LyRCM5mnao1MAg3g9twfqBbDmUWgpQpFfn1b.so b/tests/dependencies/hxro/programs/aaob_DchhQ6g8LyRCM5mnao1MAg3g9twfqBbDmUWgpQpFfn1b.so deleted file mode 100644 index f07616264622d866ea871f976eaff24e3d822fd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358768 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 zPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC z0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI z6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^c zPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC z0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI z6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^c zPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC z0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI z6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^c zPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC z0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI z6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^c zPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC z0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI z6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC0ToaI6;Ofy H_X7V5Lwhh| diff --git a/tests/dependencies/hxro/programs/constant_fees.so b/tests/dependencies/hxro/programs/constant_fees.so deleted file mode 100755 index 5ef894b2c162e564e27cb1ffa91178d644312a76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138968 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 NQ>=G7!ZpwTe*+LKLnHtI diff --git a/tests/dependencies/hxro/programs/dex_FUfpR31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL.so b/tests/dependencies/hxro/programs/dex_FUfpR31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL.so deleted file mode 100644 index c9ec58625fa93447cd00343798f44298a87125d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10000000 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 z zvf$~<67)x8`u*AX8Xgcn8NTtaz3Ku6J{fv+G3(J(?k_%X+pFdY9mHR7x}-kqydR{` z)DBlkefIb?hv~rEzx2)B_`I6*axOP~<4b(rn7m5%=gpt#)L(wW^BA}I9YxWzB-htv z-a2(dtMJ+FkafZQc&Fblfqj{Zb#}X~A8tOA7r2XHwP=1_Ocjt`BJqTvZ5@|~ z*XB5N5AEYQ7wsz+ER_4_HAy;C?3As`rgyGNaH8)KP0De7#5W*+(09p{;`f5gp6#Le zglnjE`b#$z*RP@0>912e;PN_sKEsfoHE?|nua|WuTqNTiYG1hKk`wV4Wxm;ZkMY=e zr_*@j&u94ef4#goKHp!2U9|7J6#Ye^-|R$KFZyQR0|GxG;lc*tgYQ409McJO`T7li z+4mp6dYkx<_|nW^yCZ&suit2oddKTOj`j2#{v*@hOr6u^>-Co|O~Zebd2~GfWBUkt zi6uJH%b7f!pm3U`t{I~w{*szKbY@{=Aw}%)_}cocrEd)Kj-y>_>ZTEt>OlU1w4n&fCOe zfggAV^7R`z-%;~XPP1j>SpV{6@*N|a|Mq<&v*`+gC9`kg=Meb=M# zT;!tXDY<{1Hx+)lt_wX<4|4b@_oMU4D?dQx{`fFnjPEY86X+kDhy4JDP`>3wMf)<; z{Wp8|C0eH@ivHPtA)F}uw(lN?a+~|ZD9kQFFE+;X;?-{|55n=%KD=ATm!V%Pz-9X) zj2DppxOUUHurAb5ImR)M>`ugQohRYlN|(+T;83%proXn|15ajL*4{!%@VO_~z0}HW zT?uP(Cy2gNhx)(m|F6%Ytnbwo?~CfAfG*4Xb`|C3KbZdoIUn%8n`rwplyCCByJ+9x z^7RaI#<(wSF3zih+6kxQxAh(Me)AT{S@_|X|CYUbw&M$oI!bXe&yBsnD_l})Pn`Y zc)v*Fvi^qSOMeNzd~1|^X&-?v7mdJ|k9&L>j?RB7LFZ>jN#`3zptE5FI(s}iO@83> zd*+lye2(;Phsbq2?I#bBo|?X4{(st+7p*_1sJwR4IKs7R=eBEmy3g@|X30Y@3VwUS zgXZG9dHtEJRHA=D*T2!ah3AK$H>1Jb7sDlJ#@*u0PvG_wu8jxzJIMbSjh<~NA-_9D zDZg*58GinKkne-)q37Rqp8ST>vs+5g`PNa=`Nk3GeAx(eHh6T7q)*`gyNIqxzP&vB zAc`ZI-Vj@s#^iWC#T|V)zJc;4M_<2Jp6BVe+AH)sXUWj@AAjxOax)vGeqtE*J6=1cpITGcE2{+RAR!`Z@zuwC#>uiUg{-0;}>vyR)f z&*+l&)0c8OGJjg6eq#LT6ui1NPTS8A!_<)wf9&_=e0y~l`5n*NtKsdHo3>Zva?JDY zF_Ghp1JZu_Zcazmt9?>GF}>;+yt@6Iwx98RP7~8BT?cHvcDFJ-$H(y3%@`DoaQ8|&sQ;U!e5n2p!mqng?t_kB z-cIp5>K{E@oN*7)jr`5_91G=fIsH8`I~QuWRp>%0uU@ntnk5|;U}xw;dt5h{544|=UDdch>?G(-%&v}AJ*DjxOvE5NIv-S# z981|zwL3%EG1$?9Y}C`GO0) zQug#K{yB*9Á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

o@-HmDl6*XSX{Z$MAT++sFJlcK2WWeV-roUi0-j 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 z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq z7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX= zZ~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^ z0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*xq7jOX=Z~+%^0T*zA z|BoFy5C8xG008oTZG;2|4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`zya;hu>b%70Kg!B>oM#v zgbWxkV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 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�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 z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk P1PBlyK!5;&|3Totr?+Z= diff --git a/tests/dependencies/hxro/programs/noop_risk_engine.so b/tests/dependencies/hxro/programs/noop_risk_engine.so deleted file mode 100755 index 1dffbf0997055eb069666d2fd63ef1c7bfc348c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236928 zcmeEv3!Gh5dGDTtlLVwD1kNNmiaA3@#OFff=;-=Z48X>-DW~eebpQ+H3#xbw9ppT1!jh*YxN+5mT#cn$v9s-M=*5ennAt zv^+Wk|DGAmlDavR6b(f7KIa^5=l5uif?@R;`0JXh<=OkX*J?e#hwaWl(egKGyX^hY zk83->d%J1KW`8^1sO_@%1KKR|`z%Y>TJ=ZVra7e+jy8&Fy_!E017XRN=->}t5=B3Q z@!foB6y>7DQi0{q;Y#Le`*@MIt1YXy@50YyuH{$j`D@XxcCn@j_qXx0HfZJOZyn0x z>e}a+Q))R|3TnevJ~N6&zK8Z@O+SfYvme4)(9?*2?XJdp=b_${z@Jwx!r*X?2Y&?R zg#RNw{ssKz^?c~wF-3I$F7cTJy8rua&I2?H)&OPaaH?GTDt{aE>cC0PaAKA*NC?YY#ndyC&c@6qwsdT9B-{($6Mjm@rDrK zimNLBwe^yW2!8}WNtgHB7DcJuTB_x4ziRt6J@ZV+9Oc~PnC+egUh%g1QlZvw?H<)T z;TQ2!=nnWLqg$=2<@758&+InqeQqW3oG*ONx4cp+#?>xKCxt_Dj|Z1)y5q2>hl+aN z+phU*G@YzaI7z|sI}}dV?}d6ye2B-IS5ZEd&!OH6zV45vL08RRRxSbF{Yr z2OwNY;fSSYS=#XKmn6z{Tp?YK86KYoeH-u{(sr~DhsckBeg}YeYPT}}h<4*+z&9RI zdc;+u+qsI@ldvcJ)p-e{4AeVEZenkqVmnLIzQtd9w+P|)KK1m-`OC(RCrHP&po`;^ zi_{RuW$iDXtMF?V>U}1_KqR6k@yC1TTllZ0c`x6s@=&g{Ga1D;?xbUm^8E(MhMY}H z^&R99e)1mQqx^{9qV;M;y(7%fej(q|?=ympiL-9_Q6gB-;lb2S*t7_wDRr;j%+V~jvOS34A$Fw=*^#2Gx zwbRhs2PUYu_ue)!y}fNE`0)dvw|@;5oQ~dp_cg$K3iS4t)70B5UL?J3edBWvP>P0L zdBp?c>Fwu1mmliw_eXED{&YU<_H`G*=-L(f)oG%ioK3<{l(how?r(N8o_w8Tj0Nwj z`LW@hd^_8^`rz1RsbG@wi0r zH96?Da?q0$C%--c|IK=D5A-@aUyZBQZ(*meYU$rZ|m$#Tdzo(taD85^6QKH#c4`|}Yx2ask_iO!d9fCb@ywcyf z)*sTmlC!ob-nVSi`Ny{r&+#LM7Y50A zC|RKCQj78L5xuAJ#R5&2T1>92J?UFSQ})Li9N#r<;9tMOOWQkLTU3wY{tW#24&UNz zYft#?8Tgk0elAjjQLf$~{Hdh#Gv!C6RpYL>s(h}rE)#^}s`9&%&hM0;Nh^B+fA1~o z{QQZrZqt`s^g+Qh8<&k`kDJ-|Rc~kf)o9(7s>sBHQ-|ic@Rfw*&rvTl=nVBwgxL5I;rS>G(OkhT&nkm^^+T0q=4%wyvpyhc%A72l}!YF&Dti5n^OpqtirCyR*_et)h6<54@_jt|ic6R)v`yU$Jzl0Dc7kyFiV!pI* z)4R7Pwoh+3Dnz*YPtN3wt|@He?DojH0Q7uLIUO}$@V zhxd7Ftxx+SynEgT`fk7vT*(HNujFwpPw};N#hS?r+sy**vCjvLUk&TC;0N(e*Jr6n zxMGvP@^mFY`HWXee&Y586G0y@>Bjzek8_G=e6v)KYKABI&iYRRed#aeznbPfxrhJ4 zPR??_ZtJo$i;^GDQavq4YCkKh6rajvieF-KS(%~biO2tMHM&{c@AHH4==RSr%|E2u z_;ho-U)v|_iDu4-q9fpcst?oa&-c%V{D$-D!>Gq~utUM~%~0My^5($am|Vvjw4dzr z2Chd??vgewFHKVcb~{!thv4BV+4Dr|VG-$Y-rEPgjm^*b^Nf0Xwr2Z@!>441@NXjg zyOs-_^!Z@9OVX@Iji4UAh4p$RTjm2B@iT<;CX~DU`Z!Z~X17CltAqO9&YuUyy-JtK z7;iCy=M^#zm7~dkpQUG~z*l-s2K+4kZ34d=qXIw7eom%5#7Xc~6{~H2-VA9}c<>$)+|L~;2F9K4C|K|n%kx7G}#s4n=|Hahj znv7@a^!a}Y{HfFDVS(R0W&HRhfj@Qn{PO~T>h$@3fj=;5^eF;Ts1I8O{>Y@k&+5Zw zfj@crmc{=zfq!($@V^o8v--?<;2-fkA?}?#y~~d4^)jycQ#P*UO~&;JJ}0p_hwJUL zfC0z*hce#D!zVl5B{E*-PK{qIj4|G+jI+*`@l2k4Wc4Z%_)}+>zjZ$2i0&!l$8mwb zanj%y0V%X=Ul90PCJla;{znAfxmIm;1>aj{HBDG-+w9aw@e!RtiFF-;7?t=@w)D&3{e zt@1N_B_lrr4}Wl_&#?-sx2}gdJdxwY^=;~@KbNaLB-!ac&HRkjl94_~+iUuNhCT@5 zb0c1^x5)}EXPTGWgZP}H*l}NHEKPe>?1k6cG!{Dqgt8QyR0a?SVWG@BO8k$(L7m#mi~C-2Wyv3|aT>1k@uLiyYd`sbpr z3Etj+ijRs_#C@pjpk~k2^3%@~1o(K1B=P5qv+q;9;-y9x6p|15>1sdYt=W7*8~uM* z?Joy}i_Zr)oomEKn&WvD^O1G%s(L>4>zX&Ho(aE=Uip@n5lplce53`Q{fHz%N410b zX}>4^`Myf$GvTchdORuRsU3H`fd~6>KIdl|pCE6%azc%|{M8=R{QNAFE3_vC@-uYY z9M=x~jJH|6X`|&i4UfF}v3QA&mwt~udcOO?_yX;BgO%s- zRxU4>yHbljxIZ0!%nA5WnxS%%&%H_B6Z7ZMrJU+%im&_2bG8U!vig*7S*3V^UaS$) z?+EGVaybnZh(APxqCkGW0(7H2AYiu>`I%R;8u<0J@;PVEeSKfYVkwUDx#fblzrX5q zaeCIQKI02s`Dx04I5UpCz1QM$o^6-hqI}=9>@0!P*{=gi?ZwPb37(tET3-90REu0s zJNsu##*?Z(QM^pc^S*x+JmJOn$Vi7x%T-ZapDBkz*E3kE`bN6Cz3_d$Azi--70X3m z6}%h|$1AlLj>j2_cWN&ze|EoghxeP*ZhqSfBC{n|_v8O7*Bx7#4nWUlPlci?v_M6Z=W7 z(R$Perb{iVryfUaw&&Kl=*Og@&NyeE${m+rO%|i~S@X*HoE;UZ8xK<0`2C4)GX4ez<@A5YnX6$?KGk^nau`DZ>2i zpm)jMGs#6}Hvs>hyD{E*tgZfcWAQ!j;P2w5cW+7Np&>5fdB^R=ck=fg@7{2CGEeEu z{L;Jc*v9-Vcl05jzsBzWPU&9_Ch3;N?=bLoKC_(ilFZTmlR4U7vPHm)oY2G6jC70- ziorew!ug%oqx}qRM|k)@s-*n>5djoe4=SImpSY^_!~2V?BUV1~e)k3aR_@hyZjZA2 z(p^6{0J$QnZne9_2S|6$wK&7Z+1H`*63fZhP7NbrkMqa?J<4*6ZUUUE@$-7zci>(r zXneXA@<|Q29`{4c-)``bCdize_5i!EUg_@Z2e;b0@ctZt^u2=iBdv$VxMsKMy<&LK zp96&`v3Mls@7r7XSmS1k`nZ%&HvvBx5AHhvud@An!WWM}x1yi3k$*kz$5?K3B0V|Y zX7r%GVi*|rIrta#8v1#zp&y1`?B@jT-cN{!^oMf67xx`fPw^!_#B)4+&Omv*aWwrG z_9GM5Rb{j5y_!z#w9O;PmoD-pZLjs*--h<$yR;ucyI;Nu{1Z(EzaG&3vwpAHe!IFK zQGGidKU5&TsUI_ZAIXfbPtzRVPU3kgKXkdZH+_#68$H_pMMEq{2U$YHX5i{9_l_r~J&QXD0F)@gpnTD$L%drquB=sT$C{4^zu$7AvS zol^@1#TP$G^zYWBkwyUYkCk_$Pa`9pg$;F4?n9`(3fy`b7aQmXk6*UyX;f zoaaXnF!g{9^7g(G>p?7^tC<|;qT>Ruwj7mkonQGENym>Uoom->e&A4ynFXy6T ziswG1Q#`m)(&@a?&OR8qgvsxQ>J|DYUU8*)7SS^r|)Ol{?53n^l|@b$#+q~MzrR378u6OxYisl1J)_iq7zvipU{s`pXAXFrq=mh!uPB(j&>WzmdrSw zfsIJVF|2y(@zd;H?WcT>+4sU~#lK(km!coa|7=@_@qOVlkxz=(ZnSzB59=kjD8Ja> z0qCOdmv^~N<=*H+IP5tds<+#ZcAGaSUHn`bU)S;d+sPiKQ(RU4`n)8rD*w~>L{j-b zrsFa_bNpSe{C(o3prhzJ|G_nzM8)OjJ*Ddl_bPs!n}9s7T%>$S<;2>j`aeG-FZON-wXOR;;~W2pIEq6sz-B`Qqyf@!(O#v*VE56dsVD~zu1({!y*?>Ui%(2gEZIH{Z|9(6fX zeB!~~qx-jhYX;x(@qS7zv_kAh;rskJotN3XxPC6wae>cq@4#Oex9x#Qm7?PU&*w|Y z3Z+NQS4!XXC9!-{vZW{be@d;|y6;A-$Q>zS)|x z!;0so2kQM~@qM4*3xkhqtnvI4;Jf`w_H0bY&H9O|RcdF3p}+JuoBFjsr?-#W^*K39 ziH;J!hEy|IN8#rs)_yoA(f9~h3 z3H0ojoA9lf|GD-}^>No?t?%~7=N;$w3wvOHu2Op2d14+g@Bw|qe%tw9ZqL0v+x-XI8D5*qO7FV995K9=Zq4kr_2C$v&T;EBTKL=ghZpC|dNxwdixvC!n!sUM8DjvXxD;_qxV&{P5TXfyP{i3hq z`#gOEz(~Izkmk|sMS71fCRUJFxx zsT|f!jy6E3M6T|$@{9GJrK8tNZrLK^;y8AZZck|1$Kmf6yWVU7u7p3^{FToi5=(Es zN#*3KO=k<-4R9ZVkHvRR2g+SL{`~oJa+l({`B9a3m&;Vn9(zXMVb(79cyOKElcMU2 z>#MJCxc_neNk~Lo@!(o%=kq)Ega4twJqmB0RErWahWR#+y>%`Ysc~(ZuH(CKdK~e| zQjLvq5svWD=uJMdXmio@#{84dpK5A0qS@C;^C-4`0LgVq$awDw#pgOO23NfIxTO`Z zn!4r4{a)pLI#2L@1Vtlld3vowN5meZ9!_*zrv5 zh}oBg>$N@3F%o>7Ua37Xy`er_6xtEPD~QTzAxfOtsp zV1GsFZ;RknaXOgZYyd3kQ5?V*c{6-{9_a9#|Gr-C?S0-$d8K5r-*ecntl51>NKL8JDu%7c%=kiq>vjrrq?Qov#aKpR43& zDIMaKq%zkR=gK|4M)kKeP0RB$ZJud-cDW#4=Yi&VdoJMT8ieNtaQwb5nv3`}3Vd8C zwvw)mjpI|>AeBaWA5FB!V zc*>nZi_7;br0dx>uS+`A?t1){bevSXQPp;oLwTQhuccv^Wxek%O^55NPeIONi^KeU zt+;A&nwLJ9pUEvs`}WLw$Az=XCq}XMCCJd9p(J>-%Cn z{!Z>xzUCs0>wMmo^;hA%jJ^~dhd zJ8w6BVywJ;op#|8O?PgveKs~9%SHb#^6zq&^s64bT<4;=x7MY2NM^{uey*=WZQEj;g!&pX|Y z`}jKbb%NAhFT70QcJ}_A+L?5o^m$324&AhomAk$BBd_S54h&XZI==37ke z%3vTapGU-H<<r0SFFD6(@CF)S-bc(3YYeD3FZQ|UP6bR1Te}k?Kw4D z>@dswS*qo~j|C&f0 zXPhheHP{6X2AA`>M2E|?uk+e|RbM|(?S;$heNsKD+lj9zAC2C*=-(twJ3v0fgUaVb z!ywoJmG8#>bbqY-FW+BUYEi!V_~>`Z2lBKh z`2+d-M^6Xm{+OJf4t~Er#rVDJ+W~${4S&Ovb}T&q*T+S9E}|;O_Z`Sj$*iHrgUsi- zAbHDoem2A@cFvdUVZ-@B=mRL!&kw?HUQN$;zd_4Sd9M4-TCcWC@01eu!~L?-pDvT9 z`-;=^y=JvYd3vt_i!#yJVts%f0~`gTYo+>qIlSO%1Os=Ntfd; zffM$>8~yP-ogG2E656v*z5@0`)eQ53qPCx~U4EU^&$nEq?QC5i_)t!}F)J*?r?n=>Jy1 zb~s*R`M+yeUKR9Z{fqL=dhQ4LOefyIR^&JjJw#C&|AprUlP9_HlBRV2Cg5YAsFc^R2ZxvMvr6{|YM2iCM`AC0{hIbK^n;{Z5$#F0 zdE)FGtejd{ne$U z*DS%4>jIPy+83RVDE@tE+@wFolOMuQ^%mnB0X+6oru>*aXL>vB5DRf}y;9_^U(=yn zdHYRhA6Jc@_h~)C`8$vxU9Y%Hwxx=E^1Q{kUF%Vg(1m=zs{32Nzm2)W|F-F@^H*Oa z6>1O2E!v7@rseqQ^VY4HM0FvZtT`@x2=fUV^Ht5?fdsCt_$%Vi*QK_?tuWLL+X3bD zdCk_G;&l^{qd?s;>%!=WIs#j8Z;}3U(R+}>enHe{y;AO75vQa#0Y6Efu{rt# z)96pqGdD#aW*UEzjy6Ppi{Dt+7kumOZjZK0zK*Y+-zzlb`$kWpJQv-De=*(;rEgMD zdCbaH?Fp%tK2O7Q1?i7``Z#dUMZZOKUJx9J0pRQxIQdzxi4G%8I(<>{*WllfPOBrL zR3F!>=r5Q~>Gb;Omzc(%(&?J$4fx$ir>mn|BtJ{1E2BS0erd*QqZ;lngg!%%ygcQJw~l{D)F*gm`Mfl`O!Bk%FOJ@aeDe7??m2l|{DqC< zJmK>_nQ_dEP6B>?9C?xG`Z&&w7PB0G%7=5JYw^304=;`0EBV=Ryd?S?Irv?slNAT#9^at)g8fXEc0D>I=@9lQ& zC&R$Ay|oMDx0k|Cy1gg8Xa~c1=q#4^N^|jR@4!!v^XL-t?{zIK>8<{ujIXb7MCjC8 z{e-3eTIsm|u%ydXrNbR9w@RFmZ~1uv>~XU1OGwwR29=K4byeSI62?PZPft3`-VF*^ ziQ5lL{+tucfuEOq10RR1KFD+cd`#`*U7FADDf%~DnZxmK!;~ZJ{}AM%&UYaT=yR6* z2>s{bX92%o;gZhuV}y4f=Ca}W;75taBU;a&w}kcI%lcI9-=)1g|&2_158h9baBS`(Z7oyvcZi_M}59PZ-|-suG`f5Z_*F z2YiW17(aNuUerq-(0U=B#EWpQ$NCD^xm2!9AL{Y9wtFG*|3?r|VV(FC@Q+GIeqL(5 zf2D6}+GnIZ7d?fM0^Z1p!DMPS5kU zN1q}7y+WpO=gFT!z47ePv2XEt&07VK>v3JK{`=_dR_JYWxzd?igWWGH{pgomANL1z z9ZO%IV0pDpch}dazSCS^DL-pbo}bkv4af3}v^1>uEj-G|$!Q!qKV}2Bi*6_D_VWi% zzaPY-x8{8K4IO{h|Bk_jZKSiw_gH+mo8hNl*846)z47eW%VEc+GOp@}UYkMlX6k7JCJA!omjM^tqJtDzLu1S3g2ci8iDyM$(&sCe3)+#Nr&ZJKtFrHQajWu(HOQy) zai_h5n|&_6>kzY3J45~zk!JaE$WC+SX8?c!%-dPPE7Of3@BR74I4sHE|K{PXqsQRq@H&{<~ zr1crkbc4>^=kdYJK4yd?^4w)ku#cIqEgcWi>~HVYb$)pqPCot{V6(i0`5E39Ko6vA zuhHd@j<EHT~Z7IvIa_ zE*j$U?=}y^;=-hZQCVYn=buPsktQ1^E$tiQkNuar~Fc`1!ny zI}`j|zxZ73H#nC|+9fNF=)L1;!??xY+$ZP?eFwnrP`K*Zj@3HZ}McZZHukq)luBT;w+!R;&-gddiTjUlcSd->en%?BQVSY}_2eh8Q zC*seyDX+w*Gy5HAvs3l&J==G~?&hoo_+KlxXrl1S72SB0tSAaS%9V8jAX(8a>A2Em z>E)I#T3Y#7uIT=vWJQ;i&$se!NhesVm6a-y#l3B6dOkuG{3U~;Fb&5VV;XPVy;}gs*C~8IzoMa^Jh`HL;XT=NNZ~wuSnlO}KgMi)AN`=*<9l|=J-J2a zA@MysEPYVx-}A86+qO;fA3mV)8sz42Rmj$%=!PZ}Q^%$EqrK@JCjDQs7hy zgO*mkt`w@4R=uv+KD)T8a*Fd?tX$<1>l~IgJuB?AwCY7t*kS4ABFA`t+0tE-t`zRF zw8}-LP`0$nU&ZzpxxSjowZkagqVh|WSl$R^LEA~Vg0P1k$C6{m9Hn^XYjxH!SgTWdXV~So-aa?PTvz&ahLrnUC0md z_Bi79O#CbT1b%iW8hTve{yjep!3VDR35ySI(f;GXjY6NK!{Uh{qu*YoYvS?43Z-Lm zi{)FK5su&SdltUP-`DCL)aToM9Yxivp`TEFSutPJdw*QhYvySBiPvlTmRWM|^SI^~ z%U@&lS16pm4tst+D8rNIrsRu{n|}N&z-KHvz7}+h2O}AOdfxrMlOm^K{f&?p_v_^2 z1?Y;rVxcJGv}AOAt;v+BFSc@Jb3Q=OMmX{ao5b zdZ<3-TV_i;&`0&qpZbZi)?^n6t{;Fxf$ln)B=jp(em-EHr4nGIgze}CI=TcSvhkEi!j5*{7?KJ67 zm30P<9~$I1&xr<`E4A>0rZ)R zHc5H*eO%6qS7z2HUT%0&pM3q@@g)9VMy%v?_3s?Vi_i#HyjbNsz7Q3ezCZ)3q^(EN z$qnoDzH+VJm#vn2$~Wv4=H>ROao_4m83*ycHG?;&NW_nL`+Ki0ckxC68^w>?J?@qt zahcWt&v;C)<98_DSM|=2{BZnT$nkY?-v`V7euvN9Q+TX}b07?!$CF|GMc}Kyca%Kd zE%p7mlgnecUj{>!acxCkPN#TK>EQ1THPCCRfQ|ed0@CZQ481}=r~F($nqPj7Y|^HD zi|sov2|qH9D>k`J+A@4pFm*n*D?a{QlKA{w1|O=d^UuE%?)$XkR;6n^uUi0R-_Q1W z9ow(PU-mpe=VMs!*H_g0bA5C@49{Qv+K*$L56qH&p&ZoFn@e1w6HRwONSMf~l z)%wX}RuAKz21rf$r(}-&oYPePjh~2XpCKZo-*AS07a%{SAIfUX>6a9`l)ewQ>wUZ8AJSFu9yEGDI7lDj z{W;*@JFrpaBY4k8`saD58u#mjmhz1M)A?w6?x=3}k#lmgbQwW?!hcl8sc=I&c=^wf zZdJnzxRB3mHzdz3ls@sG(j^{Jda(Qo@sDcAdk5bq`1jfQ0P)a!C7qr-w)bvLuQ{&% z>xp-2`j%so?mNrm^OnU*zcsJc`-)5C-q&%Z+(S8W`thug5P$NW`2Ef|!2dDEwG()! zcJws#@RJ!mq^hzX`XSnDUjLo-@YR!~hp#_PJ$&5{h#uYu1)EAeY&(S>p5H_dFFu7H z9{#`e_v*i&dN{3#9=^Vb9?m;0JuHg7pg%m3(L;KOMm=1v_NCBe_tkb^D|ftCs`jPO zt@(R;^nT|$xrcV6UH0!Z`onI?pSV9g#lt-XZjh zt4`;gmNq)3>vT#_U#CkR?oqn$(Q$-y7Q6=)AFj)iUc~#4sh74sP+t#wxl|ml{bADg z0}79Du9AJTI-e}HyjuJzzk>wuQL;hn`THm1(bN6ru+Ycozh2vu-d;XLdRH}{^D4>< z@i+*5b-KobDxdL?(vjtF5`CU04SNUQE9)YC9b43I4&5zjKL;@0`%X=-=`p{0yQXhh zr+(Gv{kObL>AvQ6y{~wu-1|E2mU}2?BBy1=oA^8kRKjskZkXSCVzhtt@qGyRr~WmF zPXz9u(E~)!%Bj=sy&1Z#gMW4Td#Z$S51Vs|6y-_KnM?Ssgt(LL1vMPeUxTrR(1`NE8x57@fXCD0$zffwuZB3^$6 zKbniMn2gKM0~!wxiYVL7Wj|CdTzqaX&)xeq9pdHn&qn>qo|8hivG8~*VTrq6MB0}XcYP{s}pm>qoEMYJ1-rGH;nkL^7?U&jx}aRlu`y`GOW=?c-2 z{Xt6uzd|}Md=262d=>jlbewh`UD9z((?drEUz~HM>AgoZz2=DFrShNncVSknw(@Qr z=UqB(^8X}$hI&fBrEHRkyRsFQ(br&%?)aV`)#gJA?DAV1Lv6p7Yt0UcMd};=e=sJJEm#$L-&D zBm7xK5GRG>{7|}w@JJ7TpDE1WiTsf714xrj*TUe%BfF%3|1OK4Bkt>jtcU7&KZ8$a zLH|b-k&x~{QRse%exs`8v=<^@K%I0Wod1jR^8WeKU+K)eo{y&PP4=zySiNuON5c`h zH4+fcKfjuCsdAQYd4+UXms6#`uQR9mWpWztJ*MM*LiIMeaK5xp@&Jr0xz6C3iaRKSuuk|U1OYu|a3wv1Eqj-jN`84YXa_jZ4qCFo}IMfG@+u#2pygi^_ zF1lGN`1xV}p5lema?wXYbIR!f(jIus59FQg-+7JV1+dShbTGT)aneobmzFs{?Mms# z&v|sX9=C<#dA@pcu!-L63eG3;=Ni<5ZDV|=(9cs0@yY7Xwo!W6s5j)N>kY?w2}TZm z75l}0FAern0w2i_`=gwPd~^N!8|>$cM~bFjD);eVyQE!@$QSZsBKq|c;6L$;UP=5+ zuEvoU)^~qIePmOAF6igVmG3%)+^FaF-+M~^t@**!9-L|Z*7E&%tjBAt_g80+=1STex`h6=^oDW#Z6LSqZ{Ljiq212<+mC?0 zx#$MLXCnS~bs+Dg>rcVvIX~n57I&N@;L>%8y1zv*hU-%{(oUam2rA^1-^JeDrqPz~G0`YkVnd|6?3~na)pl3*Z;SU+#Q0?Z(v2Pk(F~;ZL!@4Cbd@pjGPp1^+m&|gN;dql6zU)pzKQ-5jt(V*9sKbBs9^(CYEll7Oc zfF9TVPQOz+a#-W*VT-c|4`|xHV^IGtps(vUJ~uqZIMSc{ z*?Os;&&Pgw&NBB!@#?kjTIE~L)_Fzx-AKbD{obGAS+@sm2PwOu~ z>s;w~DdMCq{0h$x2WqhMI+=`nrCNG!7vpIR>v^41+73{(59m_-!sFl{&nsvDjMo^K zlxAU35|_(=ewsRja6AL3M>xFrT!`(%eb~>y?!;tYWm*p-%5M>zarp;{cM+hJ}2dVezUKy21}8$eiZ96o~%x*q-ZXui|I*GWV9#dJSi_jJDaI)~d~U+?jCSmM2Hl;2c4!2H#t)_qit!~Uo* zzP=RZk03v^uZNK4IDYw3@M)jfyWtVl3p;hkOq4a=%afo&`R6`Fbkw8nW>KL>I?{ zcE260Gtxd`dM@_mM9>f4lO74ug!>#S${lcgUX1;ZDi7udlfrUKACtSkf84j-{g#eD zvF|$j_e;|AqEkP&E~OhyO~syDknUuDpMC$5X|8}Jg)LH_<2yUpCxrbcipQQFxrg)X zEZs>Tms^gr2evdTH@*%;zN`!6f_?`i6Z*XWU*V5{2mX&Lx=pe!?~9O$E0ueDj?Q&# znl84ZBoqG5K);F4-B$_eM5O($MFracYW@-8fn5k`E~9qPn;YYFn1d+6kD_KA*RhM^v zFE8Gwe2wpu;`;suMJu%fFXTMaxzNiv&`YS{bN*eHQVYEq%N0M4SIaeBYSDl?r7!fJ zsF4n=LB7ub{9J@h2Dm~#iTw=tGGg_gIE8%ud`7^6{r{wXB{LCY@1NoUJ$<$9K+jpzn?b#vstp1W; z#FTWrNAP$1bX@A!_4I_LN9!q`b85cZr&LdOT7A`1yw@)2?gI!iWnq5ocj6C|fv)i*_l>_V-k#^1AOD?r2ocIyF zr}oF}rGNj@?J?tyBKQ&7pL;R&37=n!{WAT)cW|ZuQp=4JpW*u)A}47-rdOqwH*36G zmSQ>Qqdn8lCiIhw)<`{^Kc)1zbEDkH)3=$U^exKx#aUzeMZ9mV`3?HEP3dX-<`Bm> z^iO>XNr8pl?eRN7Q^eWF`n4Zg&R32bV%mY>oectv-w??wzy$Fr6aKO z^NW)9xSjIVjhrxU@c#Y?{UzJX&hG|caHaZX-;4IRIMHfYPp~*4t5+k+f4q05a?vK> zByJNuu=Ti9&)PEbZ|iZXo>}{`^z2OPS$_t;;a6(8U-hd$1K-9|YWZo^FKbWuS^atz zO>@z9)34PHa_w<8IYW8+knqj@*nE=@k2i~!c0bl`>Cy6p`MBmc=-FDOXR2rGEUo(P z?|mi{^=rcibUb${{bKiT`$jbXcFpIwegl7#sjpj4p|4-e=<6$tzI(p>gAs4tCVW;s zjE7A>Co%52k@|R=aaTN1eXN??>@|71R{6~R^rD}(9$lJ_AR1SEt?5r%uIbWr7-U?2 zKGj(I`3tCu_q9|`-5%KbcG{nW9jRIsFI6x9Vyw< zrE**qG}Cz_{d58rlSQ;$2lGx}rux}!>CyTbS1tZ5Of3HN z^(xoT@SMmKd~Q2v6vdSN`;BUp=VGphYcPUv&4^D{Na9s^X=y{`iW&C zr6=?=>__Isy$a9ALHdta{cpb>@?rWD&PT{;?=P%>0`*frC3|>TZn3S zE^;$D7|e|SRC4ek)(_-hM-w@Coa3BAIXF1Ua?qclLo+$JD z{^Fi-<>KX3iwUilUCnVdp_kij`ib{tsdA~>f_%p1>8IJxmrpmd#{zx-);@~=I^)0PpIEw z{i5KdaaK4^=_lydpRdpX*FK1Uc(>;$#N$rcXQ%I@*Plaflkp{mc8vq8I^OzwV*0$q z-xDkE+bQ)!c@#X%U-S9zDE|bxbpLc4pT}hMx7Me462G^9b+rG=j!*1+K-Zr{$Q;IF z^AS*|>(uDC2+)Mv3%=*04(X^F-i&WQhZv0YpM_{N@YnivyF+~&HO@2Y~K6n0v=D0koQ7gy(7dYjxsJ1KN?ID#>Mpti302c#nuMPCup3ml@KNP@j&*K+SpDL%&r}7y3^nCRw-m7+= ze3~{&f7TjbTz^(u+V!W~(yl+tB|Q=S8Rgd@XYSX(!{>X>*Sn0beR?N;-^Tm8q1<8o9}qe2K?-so*ym<) zeB}h?c+@x{$3D)BPa(%LjzEt4MUIspbvagk)a6+DQI})o2jo-a=5+kPyAhwBjvx5? zHI072?SCkT92e<*#=l|x@D%F>VLR$I+dYd7U12``CG(%j=I$bCCbuwRGLs-gDnn7T9rU}zApJm zYrEis{U??#TKc4=dn|pz(q>1i$1T0q%IC=XUDCSC()zqBY29gQeIAyy?y$73<0q{L zEUoMKN$WvN>pFhYddSkcexI}+wzRG*CauRUt?Pj_KidScRgQqmqTGX9D17y3iW z7wtzEiYR|S2l)@{cV+5RPQ&^;Gxd8i^(pUR{rfWYcV+5RufqE8Mg6#{a+|aslkwo3 zDWm^UOY8hAX+2`;byhxN>9v*~uymKDcUyXkrMFpno29o{dbOoDT6&kIS6h0grMoTN zW9j9VK4j_nmfme?5F8i$l%;1$ntqX&?_bG9|0w1DeWCcRy6+&}f3VKief1vSWbYen zZ`_B#^<3YFkaU>btuT38qjE_(_)%?>1$S!z)_BzsiuLp!z_`;_q9Nc17( zesHQ`>%TdqikUVU3IK{YQKPS!N%Xmn~ zAMdS?fA%=z&$sjmB4HdP^Pk>2ek1rvIxfzPgY*g4Gn%b?U;j_E_dR0AKu?{YS2tRE zj-|I)dcLJsTiV7mvR2YK?_KU8zC!;&#h3d8;cb~fke@T>=TkMlhcQzI=I24w%T>Qh)6{W}<=5Vj6MG}_ z+Z_G{r-1(oDId#kT?P2*_Z#*Z{o%`+$ z`VqdHoO)bJeR6sIOZNAO;niaE<@K5l>wOaSXs7Uh6{rlB=d*U1F>&MY9kZYCC zx?Ed&v|M9dM)OBhj^q6%*LEJEf43mt@_W*8vPbPnyifJP_rc)23H8&qA0U3E;u(&& zi{s%W4OeJ?Xg8_PPmrF2S}uAM*u~^wwI3yX_na5@`Kw*OQ{#mYUY0JuGKwxfKXH9; zZ$g(Yql=C+_^y@8@3858zz=zzXLR6rW?`RqC?BDn&$m1&+R;Apcf|Z@9}D7{xU7Mc(#)6-_h|T>HZxZZ({p*u-`|l4tEKyNdet7gekQGE zpIb1&#N~15Sa$k@sM35toa^B#fzy0H9GnmPG5Hrf`=-+F0+rHBg z_t`jBoX~M}oV4*oGM-Q#x*5NWs6Pnb7rd6wQ%z2(SATK=?Ai>2YjHq+#ubtg#;4t! zM+D=Sd7If+!f8Qh9?kkwofB(0$ zM+--P#Yc`J0j4_Uozu!T*^P^!r8urM0LZoCopnjoq zk{hvC4~RR}-W1f%`}1i&7YV=b?9Zw3ok)?3N@1?_@AjfnILFdzH!A6O&D7pv zJweKoJ(1qGpOk)6zia3ErR$`2-YMx$i;4IB8tn-6-t?z-KS!f_ME#4O(D;($J%qn_ zSnX>b26Gz9bJ3?+9r3a9Ig~Hjhfw~vk2C+ux4cv&BaF|*9`y=%*?%#DpTy%ES3{mp zF^^%q*6e)obB_V9X7>NC#{T{p{kgo?*Y#G7i!b*XtepoW>>}P@!A1kZ$>BHC)AASx zY$~siZtK90vD#l`dPllf3cJKF5Z*SV`wBbLG(9Jtzeu|A{poFKJyb)zEt2lrepK#F z?Yqeb@qQBVTF57frw0j5-$NF^VSHo#74!#HD<{5uj(eY`S$-MI1AYqM&F{GX2%o>b z3jX+X`1fmL^6z0mAg(AL6Sl(^XV&eUWD!1AqSy-cs1m^!JjNsdN4jCX&4vq-tb-Q2LI^a`Mq5D z^TPRjQ3Ic|a?kOk^IoWa7w{w7PyUm;)vp%`iVca^da*bpR~05 ziNlt5KXFLX$)1CH-+n;L_uD$!o)N3Baj2hTLitm9+$rTDzeKK$&-8;HpXK?Sc39); zx?gxRhdWB|sRtpyzs_~?4@k8Mf3MuvE9-I4xfTaKqkb*$<5~X5`fIQDNBjryll)nF zHSphW^8t%zDQ_qmwZ7x^+fcvh`-SOz;6Ahl+*8;Wk9Qj6xxvo-!zss?wKFb%F9E)F zyRu98`hAnX^gA>!O#b4bdR%hFDEa%3@4-Zj@=w`$4cAF?e0afnRk=yLJ`4Gji{;3o zTzu(uqsuwpV*ay;<4I5a54oQsd`bD7iGQxadou(`ukON`5Y~mS^4&TI`Gp1Ki;o; zS=qB&(jos`UXxMsx(TBO9ZzBRo7sDRAH5!5E>t{Tu)ennoXVa}O8->v^*KtNZaTlK z)9p^H?{r%y>EupZhqL#xu@6x5x9fUbNGIA~%GbR`^+U8jDSZODW`5RQCJlD*S;gmc z>2cN$wL1-R^i6^1cFmu!G_!|wy12b_y4ZSS#$IOSDWpp_K5=>42s*_>J>sXa9xL~J ziz+jnLB z{VTTpvc&t>m%#2}j>#*;%kiDw1m6hx{QelPTy&k>8}JF}l%4l(#(GD2SpB8X3y9Ct znCIkYmIU5J=ufz`(_Lu6_Mg5Ae6P+@eQRB-aH?}Gz0T6}E!`t&@1J&dBXYuZ-fZ0S zM*_b~+T*#q-iL~M-)r-YRVTHdy*3|N^`Dj=QG2{fK7WgSen(XAR-LeNUH?v29k;al zuVmFROWXWp)lo~^{AAS;OP@4&2P_?_oUa#eFk>uZ(jI7dzWU!_&lryf_EUCBkClZp*;(kozP{`y(SE&2F~x!}XF z=JR`O5~r3m?dx<z$j)_mK0`SjT!8e9h{w#~qD}k!k@)^^*K&DZ+ODu`2mfa z%R?3?uTXzl-v3JJr##f5_^mMi+phhUT2@MYOZqb|^m`~*;%7{*NC#>P>#e?Ov^^x9 z!u=i1)=xK6?i%QorKgV5;{w<#qp#v0SLayT;|Qe#&N(!C`#eJ9k#ahJP<Qx?7##SEC2?+MF37(a7U$Wv^ z-1ZLBD_-<2kpT-`w;$H(nOQ<KE$k9^P;B{SY>ergEYWYMaRkN2MOq4}Yuv-3g`#GwEt3eOpKU+~e{hrTZPzXNo<}Psb)? zT;;{eC_ksW?*^^cw^GMnn*LH*7tciqQgP*{zg*J2i?zIYyP4K*p|m@7KmNQVu{`EQH?{e?`_;HF?^ZS)vVg1j9^)J(oYVCG6`^odINvZq{{J`aQf%by=?Ds?9n}1iJ|2>{&z0Y3Gas=GC#wve8%4r?OE`JlY&N!ZaetQ`2^PKUNjsVjI zIPAB8affl~Vbr5M^<1reNq>F(SL^Tp(Rx1~562s{-1kK`U#HXYxg0gF(`lbs|4cl4 zfLC0`4_uQ0pCae}mhgXq@b6kK@bk8xKQ4Dk+Vzgd@KjO)c1&&#KHJaYuT%Ewgj;|zh{4K7WMe4j+z zmCBdd+4x@RE{eCQ9Hietxl83PKaFqYjy?+VtS&B@;;rW>;f*n*vaXp(1dbbl#;O+f?4*fTN2Sy#G( z@w&b@+O>a?^0DmN9|4bC^iSH}>;vg@A@Ri@FXx;4(bKW-Z-4D*{+-Icf9;}rf3=K% zj$LkIatVC4ICtSAl8mnE)p#uRUyo{j=x6_w?b7yIKHJ)l<(F3h|Jj?go}cfWrAuw8 z^<(o;?|%c_ZV^RW?N0jdK)Q3T#)VAt>g)J!${z|y=Ugv7+K zd!_KKwA%`|2GNbK$NdoVw;Md9*+ovI8{@Y9!hUY}t@e!!*AMdjy{KQWhXk(KZF;Yi z^-lRBhRG7;LoT{h3LMX|#?2P>ap^qZCg3OI!F>lHRJMOl#^c{B-im(sX7}~DA7i=E ziS*=no6&>c$DxUEJ#OshxrTn`qCWdM5%d${A^o9T@Wp+H)Kh$k5AhripEFP%Z#20z zzq+s=nYgYho80zlI+a6Pw;*5mv)*3o&9?U8x*wLsp9{~8`T7d*Z=2Tl`E-N)X7tSC z%etP>YGFU|Y3SLls9$d{&7<-3?DNF)RC=cFFUsm$ewMCh#4DA)`4(~${a>Sam!@fX zex}azTuzrpV9{X%Jg4*P_j`@X{zH>+abv)nNi1=Ildl|+^ckPJMQt2 z&zE?ffs7CT@ZNc`;=ytAqFnQ5spWi0yZvxE*??iPyz_ExP`g~JMHgaWiWre@a);jV z%G>);@p?`Bcbbxpcayj?!i!gl;Y~$v6^QD~oIyV;I^A0A8 zo8G-8nWy7r{vEd$-^u(t-o4>&e_x*YrFY*UUTn)9eaL4G?S~LaNA^rUZ^C#=W}kDi zTB`M4tp0D7{wXD6qx4I*NOPehCClIE;X3r8*HOat;&}HiLHoe& zgH);Acf02HDPE@VOD$@s$QQn6*jIR4gPoptwK2k*nV9=IGb|0<|nKGMJ?{Qeu)X(%t( z6PR6;54xoJV9TxmKEMCAI!F`l)g5*HqCEh(=Mp<-JHA)}*4p&W@-F;L&egQrq1e(j z7UF{Y6FsFLM3bn~zH906MESy3vKrRK+vOfFl3SFpGOiK`#h=8F`1n08A_G@!cBA&V zBqKgIXZ4jGKjZeI)GJ>AV&JMQ(ScXq3ggT4Djitz zfa06nTa^4{hPHRRlU$}9`u75Jk;Y$f)%V-_exBVXKe`VG`-v>A`*`pi+tS+<&#KB< z{X8v~znxO<^BMAo6bj{y^1(QPBOo0g#=2#y2dyJA4yGY8_^w@#q?6Wexu^2ps^dx? zlkEEZ_ySG)`hT*_=xNUnl4ZmO{IdOriRoi(?Xv6RHQ>f88}G)u6|U(#_w{kifv z7|#)oXP;D;b(}wEdcCGOzPFFES0@$U!U?&j{rh(-_ZuAOmC$L>($g&7G`~2Oz53Hv z1IJ#iAJTUiQ~t5OSIK=NFT`H$e`Vb+c)aWTls&#m&p}MTm%KyynSNh=r=^u1=|0c& zJC%+5JV_Tn$0yV;jwjTwS3n+n`;{Kp_aOaj>R11W_n0MJ?zj0)VXfj}-$TT{2TN<5 zh3{-yTICtv;k5P(r31WQsO4o^T*y;F_g}5nn#=NRXodE z6~B0YT@D4leecMh>$ts%2WJV~kPgo-hh73LYQmfERrnhKw#f8GOT(Od1QibvS5pqueS6? zNhb@|$=&rgS?C%gbl?69RdIKtR{PEyA$>03SlH|X6 zuG}#09?9=paD&!|z7_H7&23uF_N34CxZ{7E)6*jb9_QdaDbZ)pPwx)*9JZo7n0(tj zGv2NFzE8>RfIp{Ye8PUR`)|u1fYK4(3LRg0SG%NRLnP58=F3g|_T!`i=wRzR6W;HA zmhtHp$y`%l)heJa>FGBz8 z{$h#1Z}y%f^N{WDFHGhBihuqujH@iesqgb~ zy0&Qi=G31Ba zQ;+?soTclgI-cqoNco1*j?^ju1@{sDQ%D3Bv%7S+EM!Tf= z`S&)l-%I6g!F(xCY+XHhh*+_{+Yw2QI)|$ZS)n{-$9WUR84sFVKdSIJ9$ty-^`Ods z+@|>{Kdd|#y;tnO^NFKAjsBlc9CZ*Ay1HKc{})GHiiPf!4~40VqpGiheDo?`-7ZjW ze+qHjRK!s`AmVksI3jZMgA_+SefbaLDDvkspu-R2s2|2r;=leI#!I|)H72XNBsuizmPcU$BZ5u;bOu#stULhiKD)^IP@19$NeD2Q5R88 zCM%9=RewC0>&UOddXBFTrsp#3IUxQwmDhr<|GkiPdR!i^Bj1g9CXfGkP3AiC zy-Vxzk;bLIj(myIv9?n0EN49I>&R)`bFG$3+=J%|e$MU>()#H?U8Z(Lo+F%M{WN?& zgdsP7P668S;=0&%7h&>bS3K9|866s*`SZb~>ukM-eBqU>IAZ-C)_cdHhJFum9ToH8owlcm?ZSEY zD^XT6`s8QrWO4dF&P^a6yYl@$T=xMukqi99`i}}yzD4=r`!Hf#XLNap%et@V{b<8> zGtr;KDHU=Ib%1aU&#~6Q{|zEPmc9LB z;GGw#yRdWyMPJlzZ&)|q~8e$LReqgmz6GI zyOnI$YxDwr$!Vv1Sno>Ii>t>)ezD&~??XrB&i$;y*Hr@oh-u1EWz{-KC##mH`TUWr zk|f^K?Uo`EygYyIvv!1w(W&R^os5r=X{dqln$kx#k$MbO6WPifYb0-wj= z((dr$bN;x}&7b1;NDoQipU!g;q~MCTQcCf>eudi6Y=5DgioUA2i2dM-Ao18qJnk1T zDL(mG2xf8R@jRH9$JKEY`I$=oy=FrEgAu{ioPR1mWASgP@K34k_K9?PHAFfeO&6L| zUMa`E-t5m88t83)ob7K7_?w@ldgS);CX}(qiTan=o`0o&rGK8qFbE44eJT=l#_ zx%$mOt|mL~@p#+6Ll?#;5am(pP#i}Xr!2ix^;r0Iig_LR%FFj5X7|OozD(x2!D7k- z{-j?&&v6RY4ftqxEO~gB$OFAL%7^48->rM0^6;KO9vapSF4lgU?LTw=(oSs#KYtL{ z3%&r`NO_sm^@3&eUfiFq1~i5LJoYty9-vZrp2B^N*ENx=3q-CkNx(Ika<%vc$kh+` zHQIcql~xmW?!Upl#`m0to~82MWM5-Vhn?a+807=Lcv_?~yN?H$GS_xL_p=D(-7Rb~^L?!Kewew6v|=-s6CZ!g~M^AW<8xE=VB z;>7P^;8&8j6BMs(`SG^VcoFZ0edj&M#6|e?a362q`DcrqCw^YzY@62;-?7(gPfES| zdhH2ItGxJoKlS%Zk7;?Y3RpO=J!WwVx|eZ(2y&i&*A;oZHUN(z?py87eOSCg|M+g; z?ELolg#MNoF%BBQophaHdW2-de6YUHx5#4b>s7g`@B6j!`M%!^q#Dk_(0s}lF{`w# zmV(6Q6E1g2o7Q(ceLm=ThVLoe2S7QIR>k|*(bU`36nvEKgVF6;SpVB$bk=_S{VwvK zm&eyl*9V8S9_OKBt`C;Ae601sJC=eUrk5UPhwqo%_9~gj34qWKzR-ExwFnX1F1#4y zTz!ghUL)gFf~W6cr~BV^U9`UceV6hp-T%JZ_}4CUx*lLCPx+Rd+~f7jB|lwn?(LE^ z<(oZ{4msEj(t+vvIbF6MYxBKyUSj7gVf{z?^?mXFzGQvh{zUOs{2K9Afvw}+-GKMk zza8SOaME?;R;^#hTjAC5UMuk8s>;9b6DM6pP(r#q_?kd}Okezc$JqAu`#JTo={LS3 zqWrLU)Zdejmq~ZfCtFWlR+NmSV0Lbq@-MOd=kc;GD>pm2OvjhleyeaDY6t9LXde%m zee4DVj^o`JN8Bsm5Fei-Kgzx9PzftaWdiO{=l#@fCcf5W_rrx%OdcPO& zrP8YXxZS1Q;-jpb>;lGfv0mj%9S^Nv$75{+{ErGATQYbk{vp15vYD~eM(!P25$4^oI zt+bp^4)QJcMA$Z&ez$?oD=49%9a#(cr`-3pDILkrKDTGp9<}#wpX~hQ)P7ahTKQ4A z=c0bJX1^Qd&G&rErV00d!=&{8E7t$ptp8gl-2ci+>Hm+c|FyFAn{T;6+oZk(0MJbzGY6%alK!rm6qANF6QPYnrD}XnRdR zlBW4aP%c97g^TqyeN!g=vuTYVWe`A`~_WfyE%YQmeQ&0W< zNa90%&Dncg>?!skQ8ucw=k^hyc? z4fx4>iGx~ByE|axpIt=UHLUhB{(tPf37nNzeK-ExAs0wohV25567E1)#7r_|A&6qg zPH+iEuh7&OE|U?Gn8;*e;Nfv$l9;WFkeGDHz&)ljU)0)`7)GWO8=q! zS~m>8RG;v@593#j9}64sBZhla^rXfg)r*4yCoXq9eNw&-1pM|z@8h40K0P-5WcZ`w zn(LXL5hF`zeoEU?3AsGHkvn4yIJn1xGy-CkCFPHZ5!I}eGU4ZHRz|> zsT1$#^(WQOKdbA1ynf*Q{0912Og<&$sHYFVpf*l$eUEbQbc^R>mst8#yhp}*TXXej z&%7Sxs*1SRXZm>5D<&UP{KCAn6Q$@U&XKTEc!S6-<&9YRx*N+G56yK_#C;Gz~5WX`I=$CY&l0Cj|>EnKOv+6~R zzuYSljk^a-p3Bo|CscmZ0h8+;`?dW(ZNTYU8q*~S#pF#Avfpa2p3?IDTAuwo9=&uN zIvDyh?u6*IRoki7+EKdPAK=u}MfKC^GnCGorJmcHm_KT-)&{us}KU(T#qB2 zkJl$c|D$J~4E=Td^m~Mcw)>3WTa(9==S%EYkX{Gs?8^axAGfP=T%&)z9B&#@UiqbT zBm8=P)$;@IaR>U>*>Ur4WBRInTdD2!*W_b3x&O11qWkg3$5+6<^;DNj!>2Mnt`xaB zD)`fmtz*2w_{jeFe4u8BluotrQR$v-Q#mD_>&Hi>)6nrz?LbUd9UljV(3SQh9v`Xi zv=fh#uDcIP`E-xUOSuabj+K9I5}=wxRv5A0M^f*@Hv-sq%B;{Y+1)pT{2` zfAVjqHa@-e+r)w&)qrH^)0$rgnvV*vo$I(s;U4%emiQDR9*U^gW%UGvwqF3Bo-TgUXgV zzJ3Jo{QPujjM+((k4E!|_p|+~!mSkcA48YIzAXJfu4_5H`2Nas+mzR=;dJx)1@r6n z*X=tKwf$!0!%5#WWqJ_yw^p-t&|^SD?mw)e{p-^>>3S#p%=o?!`te~u*XolWov6a{ z)9@p$ZV~|L>J1WR^W?f+_zz=`G9k9Z`v~tbDVBu&;fFQO_aaC~!kvhN3LF6A^5Qg)SQve80>ieow&|y3dw|B}?iDy&hhIF>?_YmU! zN|C=(%XrC8_vknj_h&i!LwfKb{xcZT`M|?|{4dCm%P;QP5P1B~Eg!F!?pSW^sNC%V zJb*p60wGKKyo>ObQSNr=_z>)eeJ9b|VYw?<&hFt1=L!Ww_-^0nhj&`~`4~r2^G}-5ZaLTPne3PCqc#J6zF!jn-}Qd*6!dc)#<`Qx zPkvY9+0f6AU=Hef^y{pjuW7P=e)UHurk`JAxo1&7KP&K`J^lP7;5X9GLD8S(&??9s zHw*AI^F6TNW51q7{roWC2mPec!81fpyEMc7%WRpAch?Oa?>cF3+op=04C9`fd9iaZ zgsT_GGu%PUNS!4 zC)IHO!9syk8=pIs&i$ItaieVXU`nI$`L8;4+#y_iw_WNF9iPkA&hf|RH&8yqcn(Gg z+@(@K9-m)J{fY1--$~C|xp8k5>NEZIqF0*`dv^5dV$rMnn+AU_AjRYP`LSNH)}eZt2a;o@Wk}yUr;WV3)h=Z zQ=h8BE?H+@g`bp@?~7b-l8k3#JUUFgtIwX^d;#!%Jo5Xa{k{QzuW;~6>7Lw=OFI_s zqrQSx9MTFTB5_hmuT<*rMgX>obY|rcN*OMebg6~B_mx3CC1Zp z{yYhL3yNRwYZX8L{$cNY&CmL@d{zZx@%a2Y>nTgz=@iaGYw^1AQN9yu^H0jh3a-oT zkm};6?8E!rweKsxK{B!jxBiSjV!7i*67e|ua@dP%zka8;tL=c4ulAq)3)bsu`*Vro z{y>T2KHHx&9p?`$y=>`oEq%YH?@lDW_C4Y4nm#a2(tGyIm9W~c@VnYRD*4rZZNIB+ zK;kjpasT7@DHe=Chf+b$Da7|MbDh-njdU15e@M?4($4N-@8I`wIfwTw^hh-LEj%|q zIa&|lxa|JKEZ)T?=2QA^f>WkKtbh_(eHQihf7*8;(!^h^4_;E`(33rMZOsdDRs4U6?}t z(DNaGe<<(q*UNEg_ZnwyD!<3mgFyebXGGr9ewA~a3sCtE-_KUQrh81@_o}?d{S*1v zp?HfwOnIwnob=gXcppT6;oqr#O(pdhH$9wMmblZG{9TBYSbiMNAmH?F?UeGF-M0gO zSMc`tk8obz;>thQ&*~16(j4D8s30kll`D8}C;*H*bL)QG ze?CgSM*1i8$>|^4_wtYB54Tf8+iP zC#PF-?dIil=`eEo!4r^E$b;G4&YT=7-BbJSeY#iWFUI#oF_(%kF~!2wan!XuVV94Qr~B@Aj_$pz!0_@QeQND96!5 zBf?JyR30iVy8b!*y&tdA`BMYCH-L7EiO#R`_AHk3rNRfdTSpbIV7H#Jc)dJiZHe-2 z$T+;t%Bx&pA5-FS`@`wS)g$OfsqjkSPb_D{>BTw6(Tl0M@%8zDO#ATC|0a4d`B~PB zGkzJp*rWVR2aL~s!j{^&uj+9B__)%@FIY}JiToDvJ4{b2h2Ijn_xtIB z-(h-PDcmRdZYLV~1(%C{+@xX==BN_)~+{lfC^mAtC^n@-e_2kRX0FTIzI-Vc;DbnvG z{Lnu_`QQiT?ebowm%opK^RhxeoQG06MtBY92mBu3pNt={i{&HvDAVu0UF9W~laEM0 zb$oHTNXH9XK^NB(E)KHXr5e&-D8Ljidter9V!J~$` zPtm@smcCcZohbZF!2_;;SHZrQ^en7ff9YxH`4+`5=rQ(k_yjw$MeRu~U*lnZVf7p7 z`4fQees8I8nZU(9sOsVFttvm0=UVzciKfvH1NK z*KsqOyxHPvPqNATEUxw>o4nuRYDcok2P7Wja}X)9J)m61_`DkU^xoMi^|E`_FbDtJ z?sdTXpoX8)v)XU-oOGw!uWZ3~i<|x}*lO_&3U9#%i?6fzI*YHg z_*#h*Uq0Ca4ZCK~mmgh|)!)Z^RpN)n_D1}Ns+K3e{|1JM`t+Mnkyx*vp`JFdYmMe_ z{=L$X+BszHyygVk8EzhbHtc6=au@TH9Ej}-Db9XP0w04toUHxEcX@=4v0WkmS$;Oh z&EUt{c=Igi?HfnX+cf7VR0{tod`yScN6_QfpuJ-9Ln%kT;~&y}3Y=-lw*-#` z$u|(P{$UBz^~NzCJa#nCN?~-7POlc%Nu@%LQ_;80#NEywvjE&+46*{E4*laPmnBA5H$)+FSp^ zM)*Ey_2wskZ~gnWgzrm^AY^;}IXX>~_P%BHI+KrJd@Qv*k~|^pZA}hZd-ueC37S^= ze9h{en>>ZIQp=-qr!m`kGS@HV#}}>qImzdYe+P|!Kh5=Lyx{eDE8mfPQ~L2x^0(HH z=jY&S`OjMUvy;yV{+p9OH~f#}@GlAcK`Z}~js*K56CW$-Ppg zmfx293)$aS=kV9^pRn>TPQEMfA56Yu@ZX-}1IP~eAG7j!ZyN$sYPmnzjts(InZut$ zburl^T3O+`E&%Gd#ba!*imP({ZQN za!>MEqwm`%)yrd9$~|oG?oPgH@NUZCr*!&VD|c7&X@fT-haZlCp}!AUxxVBd4Bi`Z z_$eLlv2vS|BIroEbmZvA^KixFT~dzuOLKNeGjjA){kidmHtY3=y+0Dp+t_qFR@?YeWj5Q=mM>F|Bsl@ibFUZKDb^Xngx zTEi5XCA6vM*Abu>`iS4hyj~Utt-!IeiZ%oHO z@cpp#Ti(~XLS>ch7n9#1+Q8#X^?wVC)c?iz48;E}EGdZpTUb^Q|F;S4FS#sk{~gx; zOVw}2eyjM+g{unUHy2)85Wl$z?UpZ(+r7=&U8w$c;VtTK7hY2kf4i`kWL{8MSCDx@6WZHXCqEZjduw$*QMj!j^NGTSg3KqH(B9GLy~biP$J$$? z^N_-wg*DKhX7KGu9pBoloj2?JrEo_<<}Xd?Pq~hM&$D*Ab>36By&&_RCbW~(^+(Jj z?97ciUxGZye5ncTEUA;fe*;9?vo4)yK^|nD)r5A|)%E8et)106KP$YY!29K!AqV^F z`tx;br>gV1!p#Ml*EOL(o9pD@3)apmoe#o3$b7H~?HsDpAHCVKR9I7xd1MpdAE@KY zC!`-G*d3XFHUWN8N2fgozq=sw)+WF|QV0J72LHx_%y*jrzg#Cz?=kpY1(_!|0sitj z`rmEvR~KY{-30iX>+oN1@T&!xmp1|ax;pybV(?cLWIo>n`1|VQ{|15I3_DS-^W$FM zG`QpH;9lJ{xU1^u{EDW*U0w(G{HDQOQYY7Qn+CVD4(_z3!QE7+Cli_mcU>J^?vyoY zoU5aQYt&_7|O@rH6N8k514eq!)e03eX8GKt_N8h`fhVQ02d^a==?twad zZ*3af?R9)x-88sI>ih>=2Zt5@W!DJ~)zSA=O~ZFw9UU%d8r-9Ga2GTUZfBi5*gAL< z=)0#F|!pTYAqo$I|n z$A+=5m-@PRdKOPn;M~w@*j&WJ^-b=d@Vo$i$~y67{|b1zT#xs9dReStx$PibSXbua zHJ+Z=YB=~h4aZ>Vj&L)>Yw)sKI@hB!`#xQ7o1RDPE{u}$r9xQ>mI}Wsao-={ch$Jy zQYxG)I|ijfr@UVfuk+)02i}{lt=|%m)6L&+$~Hcw>)0C)hIQS}$Zz-i%4pxGwzCKN zG`es7K56f$z=`n~?%t(`KsVBz`+B51IYK&40^KV~SsE%PO2Ap8&X#*v8}aG+b$mL< z>izE_cyND$@Zb1-uKyp9{F2=x;rGARzWb@``2K!**0x#7vwhONnEa-+!#G%r_;nJG z`|a&rh>fS7(B9QjF17nNT;8(Tk{rGh=J%?FeT8vA98b81W1Pxw*q6|3p(pntNBTa= zB`A=M*816<0v7l$mmj>g1)n`Qmc9-h!;@XA<@gokZ<-Z-Kq8<-J$8(?74z)xPa@6 zRN%gq%1hP0)6q3q?Q6AP@#~uWTq&2?`;hDpAAe8m5sfDK?)_)Z_6yzt+D> z&UsY|7b~0xpOOh+I#H-MN4p+Fc{f)V2R~)c&B2>x1TpmI{9*71F*{65>5mwI6*e zEpGbWx7^}pZ~B&6-0aa7)7v(CpJfZB7yN9q_g(DVZg}r&i)17J8KHBmZ{uh`BfX{m zuzzJ#q5Pi)Ub35vueY$2+=E{_?sC7otL>Z8j~MO|!rddqE%-vH+||qYH_pg{fZy%eYf(8Km2=(Tff>4OFX8J*vE+O`*L>Um9QJ6 zgVHyVb{U5VCcSO@bzE)RYU8VpzcGBmi|ItVkv_xO(`#r??cNx?2PklT{K0*^7PoPy zO~>`LU*!?^99zE17tZ5YJdu9m`@R-e`Gg;Dah2c9`Vr$Ve2wTs{3(}9(0|I$9I>m) zr%GX>@UO?-w@!DP|FK8yUif~~4t+1IcHf-7_ei)Pt-xIm{Y`gt3VyY6`o36P?sk-O zIqhv5E9GPSPY1q5`N{<69nYvd42zf6ueFy5ytus^1+Q`rFYQlU?uI(NwA~o5|H#P& z>CF00SAIu)q;pd)rvpZ>pP;z@-!c8fzliLb*w4tWJ<0FW{|fBdYlpFG=ZIZfD;@Ir$>Zn`-={d0{(Syd)Srun z>CYtTkDlj@*O~BI&M$Qiaq?u~MaT`(fezz#df)`pcxhuRnzM1A9~- z^L`%N|MRDSZ&mX{eejY`rErVb$KmfcStI%0Pr{#zdbEGUi0~f={9>|N;rus}i>sd{ zxo9*G_U}UYI&EzKcn=2Y^d_8t#yXhLiQlgUDHGZ~hQ(wW{$d=7h{&ii}dp`El+$u!}p0JI&23WaL(N1 zR{0Ur{}Abam)0kr*$&}+9Yxdrr_|4ATWI6LQHw9JxcXb}?}87Oe#pv|Eq>VIb1i~0f7y7puXva6eH1>a-y_zh_0zjh5KlHw;iq>i{jx>ceyY>9BwKb++q3tm zv)N^>x4`_QD-}*LStaSQJc`_yzQlAQiHYYQfKD;~LQfkW8a}G>#(ex6 zvYw3jq~g4on1`nVM4h-NJQoF!@<9kL*_wj;Wl3G|QER}@pL6r~EmFIE0+VmcanE(0l z5!d|%|A6gXh>5|kVtnk!-k94Dw}Wi|ofw~M>q;*)x-Azu2=dr$eePF!lK&jvM$+fR z^jYa!TW=HjZab>_&~`|}ZCfRb?I`U-3}5uIN82a=H{{mqp`J1>jDmf4IVPTzm)K4Y zSh?@bRC|LW!G5GW%x<(J5l@iw2^udZTU3twHO_p&>miND`%4dDpSor*@G=^nxIaR_ z$p4c5TK{4{^=rU$@BxEQI` zLXYg`scL`rs@`VXHmm;ilfiZSp>ad6ZpjMI|`mghq(UvtRKmP@WteT@O}h% z=}sLdQyV`^h4Te|+P_xm*S1ROw_}yY=jk|{?y~W8nd)`=n9?~b&6WDutg?nz*f??_ z8pIRE&C+tsFLj1=h-{LTAV3mIQ0GUnpTv7R=o|No^2ziMiJgWMjVGqJ(8uK$eDr%! zJ_k=@$wA$r|FetR0pZ*H87`$f56zg9@UrVP>V4V1^o5150k zoFE?&-<@vhFm$^U>D~_?w<}aAJpO&-bdTB}m&cLTGrxs?u0h>0{@3Q@ujGYZ6`s`3%W8Pgw*Gux3xKK*P4>`;C^<07p$sA3t`HR674 zGCKaXjIZjyR|;Ao-D~ryZDU2g^Yz?r$K&*0L~u%lR|o>}IDJ3$Ka#uU^aI__p+5uG zpYNbQaeIg9zgWLHE)TaK_I<8z4IEZ{qjsj|{GTI?N9}I6cE7}SBYIO~z1^7Jey#C~5a^hgIxZXPs0qF<85|D(J$IzMzT z&K2hAg?rOPuS7UbiztStv z`GCa};d|C*bg+GT&U1;M&x=p^T+J@E2iY>)U*4sB%9iQ=QMya{h41J{`#tZ|h2Z0z zv&pvU`MC7`v=YGUy%L=Gc^g}AuAR5}H{t8EaUb%-Pr@#4QT+1rj21xg|1Sn0#|mLl%+E}jRGxcT*zk23NpA0LB!tif-_YknAishySmT|Zya zFUew8M86_?-%o zr$c;h<#rqluB|V02tb?%6nU$iJ1JXS|Xm=Pi5SV`oZ(Yv<-Hf*uhDg;;HQOq zu*^?u({Tm+L_*KZ#+91ASf_OM?=7@#u(+)kv~9Au(iQuX5+BmfoyuRn9~F;Fu7B+J zCxExVpA+{#)^F0u*OzV}o%R}Bh`rbaqo>0iiB5|f*@I}D9{_0LH5>d4{kB^ ze)rFa!L#89-A+BMTK@|9@9gx8og98&=R=b3_Aak~?AMzCzlc?Aw%~riNb64TX(-nK zga_|AsXt)*ba?N|;_hGVw|J+OSNhfF33fhea#`}TJ568jb@=L^#r{7F7LzL!|Hz-p z%ZslMz2F4prO~_#_p7R0&k^(*u21+n<R~P+RBmb0XT0cs+C_{l3VKu)d#{pgnQ< z`)V2d>DP8?hh;u?m&QjL@BW_aO<{efP4-jyohcdjB6!lStyfSkc)q-b|0t>F;Chvzw&nc9duTexL1E5y2z$MCkS+ zF1M%LV4ceKzg_(VmgldIiS76cJ1pamwFJ%-vcA{ z3vlrd=Z~yk1JbPQi#6<5pXN8}*N<_w$K}J<2ic#$k^VH_AOA976F#~N{W_@pviI?7 z@9%Aw^xFHV0~Xi*;yZX2S3di_otVEGyaN)tTv5K!WZnMbRQ}$=ll?lHljD59&b5B=-oh^POWcn2+IkJ+*8^mi`Hz(I zmgqiKe}5+1R@Q!OdrHO|)}sgPer8N>+JjiXD3_GKcjor3S)cSj8+L8TdiYFa;_>s5 z{vFFk=OI?+&O@Ayp)<(Ye1*gJ0I@xCEStAn`r&pjoa5`aa_H9ql#B7_z9!+l9|-&V z&6NU-0-oA?sUH=%wf9n8Zk_+DB)=xtYb9QLFLj;f?>Q)8Jl+k5&vvd8?bY(N_q^XE zcooG;Kprih{NjD}U2VhMlN$(UM{8(JH{Byq@YkxtD^cK~DNN3*GUajq<_2OWmw{a{IO4l)F4#*pJvA z?Vk?0H$Q#_%5yXtoM81K$55y6-R+LK<0Ye1KxgozTj1a@wDReeW741BK^m&oeUBAj zj-?M6CmI{IhYA{xm&QAOD&Ev+qQ5V(&-Cc7Y&by&@gre!n06 z4svRCxcA;ws0I1DcZq~S-pmj2b?l&5wtpMOlgWxdzT+Zv=$fpCrP{Ch*=7EAZ9VRQ zl&hUjQ2pxZSN-g5Gkv~uj^LBoc|6y@Y_guq2;EtCoXv{?e^&8|bl6*>OpS;X)1>Ci7bU+MRT z`1`|dAN~8SZYLeCx0gMr>j;iVI-qh#e|90->3Bc|A|2Q#@=;9md;|4``P1)KJpJB` z>3tgab^FEhb)737NA{r~v7fgP9ZvVUylXo?-nMR0c(cZiO%~uM=|f4LexIhhyvF;< z_k%92sph+!IUFzF+phWCS0KFy*BU(IOCDdpcRW4^znONc|9+th-kX$=_X{inD3@cd zvk*S^B_;p*iMH;?L_B$Ttk0*I=z718Q;ToX3RowQ{GLt;lG12>f6nnAG`;JwadQpW zN6Bh6y&f!UJ<^bP4k|jy9E6NdzgF{m)vU<-ylk20-O$}*CA@FJ2j8uc{y38&qp1s6Z6 zeuv9f>uRg-HtJ?)a5^p-SqIh(e? z>nYwGr^u3ys>w-J%dbZ|OS*k+z02UBF!3HVz3#a{(|cxV*sIH@N$;ig<-L9S71Hl; z&(BYVKk1(R62^LUnC)1*gIx-bbejSC`8ZlK{}%5HNPWLgDcx~I)jh6o4 zVaq>i^`4P1);G3KzirLj8vke?UIJ96LO%9Ke4ScMlBc3L@q7+Q>U>W7&5l-)fhV)| z_^eN&HTz%Hcq~6j4(?Zj5wk2N~3 z(t3keDO{ho&4K|Tro@wBY%dN#U)^u=d7-yUyV}WmkUKu4=RZ$J9L=z$bcfoBN{hDZ z{q=RbirFj1$-#7o`Xi;WW;go@Ro5xSf0?auw_hXSaTs{Go%Q>}TyF8+j@Tuv^GX=L z3j%f$j|_)4*-}i0L$sT_w0-j9DaIexIQ!j?xX(K(1to~v({#sxwsX76X=dYz^V#hx z?}_0f@GxIz2(W;ASn4zW@hIK(YVa(@qt(U@r+<(WC4aI4A%9j1)1-p$pSb@roSaZT zh&km$LPZnz@_`U|($x}R9l-4VJf$z~DBH{Cogh7LS2*M=>#@Ig*3s44GkUn*x&Dkq z&-D@AVtT$iN)Pjs2J@0vmumBgbiDG>=Pw*5$R}ct;9VUv0TfSc$GQH*aqpVkxHlE$ zIPPtT>^ALqautBuLpq!t+wqy2;p2Zc9|iEF6A2Arrv#W!YI>l{3@bNNL$=HH1eO-O zFEjeiC<}nh*ZGa#xW7Ttxt>M{4xfBxkK^*f_jV~B#^H3lwQux&Ht04rN4H``w{(12 z5PBSciJ#w#$T*)9r<08jXK6j!1NJQN<2>zWX5$>`Mb5i`=-4FJ`_i4=TXWP_& z^m|Qx-stu^-KlmZ-KB7|3rx;;s-4L$(0-;n%@4gm^^?Omf4N?_n!V00C<~(5q`4A$ zd+z6F##fhzY@YgU`SBo(>kkPSSr6l{M&sh>>G8Oz_B=l>hVjtsY|UODmIl&+Lqb>g zquhV=ahZ1Ffg>0%+|Lv#ulXsB%0CI0jP)olgX^>(UO(HmRoV;tYDUi?{5(VH&VKXp zak(g8jRpNL(eybG>Q4O3&#U}9WW5vSNx|OLDoDL|DSxu_%98Hmc;@%b+z!O?gmK*7 zoAmoTtNs5a_;*csiInTXAk81W6V8>m`&HR8lP{y2-wWyb>~e(n+N6F**vH%}@x0vj zsC$a{Z4XL*w#@vR!b=k-bWBn^>i50T4tD13*5%Ku@nu-L%~3f|-zMEj^7rtPAG9MK z7xJ&lCBvTCO5dKjO5b!AQ(-4I?o)g((s<>x#`o3@;oltNgZb6oFWMWn?BjX<+*mfp z+6muP|B=!Y_4v3xrZdYD?`c>0$o$^VcC`cU$NGFV-KF%tevt>%~ZRKZ9*j$cnzJL35DRFx0D zE=WBpqde_DIm!0N1Hp={9w6QFi&(+s6ZFpR$z>e>aPO+hL8fd7>%4H=VB^JQpbW zD*kvsa6sso%~izNK1+mh+ARD>Etl@tC*@t9g8fvoL*F#t{eH?H`<2bxF7>#M#V+~% zo8jI~Tkmwc*V;}jb>6WOVK&v|Y(tsJVV#q9;RZCY0wMjoydCiMc$drTCn-UXCy$ha zC6q&#KetOJe|dZA@;PX9Xf=NHzE1VU?Pl*p)qA&>y%R|t^sl!pq4P5{KQg;p`4YY( zY4?R>T~a*B+s|UMQuzbAv#0FG3!?Fb@zGJ7d}Pbne5FffboX(0(DW*GdvEgy_q(%s zs*k=tk=eY%{RTfLLBIR{IYu0|XWw^>&tV)O|8^h~59NmIEKw4wTXCD1)R|L6_`s7LazDvd^@bu z*nQltFYL#C-$wmaQoQEx&NTU+Z}!3F2ktkfGmSsSr*wwaAHuJzG=1=;78?J2y_)TR z8lZa2U&?M)yV~6{T4omAEzc9n$MptIWlJsX0;q&^(u?W5QPl6l?QR(*a#q6k?MZ@C z%UHQDp_u%q$YD3)5I3ZsA@>iH53iE?IzMAQN=2#VG+FoX^>wyG7qDpSOoYoCOsB;x zCYV$(4tTGZII+|C8xi`t0R0ErkKpH{82c6HFF`zAfIoOz&5!o^iOWrCG<%17RSCq- zvPIJKmEdP7`GE+f(>0VckyyEG8e6l-9Bo6FM=W3;6P(evyv8F5u^PrngIWlKMR- z07l8{n8;HqgjQ)5A}iVlYU>rxw&+^ z(j(oWbc*q2`@`aG^OET^2^D-aygTNrBDmf6@gy_;vHygN@5z#lpzBq7o@Sf+8>N<` zDz7YrhjPcKM&Aw6lh##|EcB(E2Rtzz5irL)p|h=Lh4oNd*Kaj^dV3U(@ALTj7x$kC zr!w|=Nf}|_lhq6Rhg&J-$ba8b31=0aQ@|9aZv9Nw%T`Oa(4So+{r8amyOr)(FJ*J# z{6lM>mhYLOp|^j1^`AsOV|$y2Pe6qKfjanVZ%QrG@Z|~W{c>5sa=CE+%>wq!&%^g} zvHZN}IPyci348(9Mw0tkg-;%9L^rnQ^y*`KCa3=1b*be|1+h;e6|tPWOy#5uB=FFl zsQrAo(Ank6`*kw?UN=I&yH>Ha6VdazQqKF=F|kANJ)YhSZ#Oyx-Yl%Y9*>SIBRUS( zp3{eZ9tq}p>+Sowh>n4(NcVF-u7^Y9yj}MbhsYu1fp96`7f1al zCO;6paJ)~2uNRKMSIQ6D4e}h(C6?<`r_1+}X3^zEO{U9)C%eJg!eCV;{c| z)5XTOc)W({45iDE@md|iU|*_&P7>@3%8R_%_+A^YTZJw@UQV}qsqL?&b8Nhxu~Y!g zDm>ZHUWWT9R%^R%r)hWgp?|&)R~x^-DFuUF>(hEe>{|876CS^Jl8(VY_?Fbm)5G`s z!~EXpk?;TFK2nQ**PG=>9*(c0`aUuHd2bv1@_V%({+=wygLWjjpEShYRki%__*5GE znxu@P$ER20alqF($QO2q_`ai#UV1;P<9#Y}+@X}^8A^TmghG# zl;=M|?@ok2Coa!d*YQW?`BcW~B{5$b%v(4fJ70#(xBRrT`@rCXP1 z{r4%IW)(&^mg5HY_!qdx-Rz;mXyZsI#$Nd!S`vr^#Kig-mjta@A|5pqwLpou9FWpfBaI^ z&tmeu#^X;ke`XIHzjUvzPr7~gad>eLd(ClZr-bQ%t;h69G;z6!&)5DT>365*JN)T4 zX*}Jd>jr7hDoL1i`spe+<{u8n&v-olBlOev2OS@mr`EOBuEF#1gzrr#cg$b)Nyf$o}4ltb>qwF=5%bt$G1Pre0;}A@G;Lf*AJJ|bb~V9 z`FS$-=q(YwhtS#NJjjvxQ+a$&U4CXZU4E{O`cq8o-ur&l3%4IWj#IBV{?Z?NCF|wp zN5$lgKWELnUN)+KSzJH(!JAIF{>$R}VcqCY8`lTkv|q&g0@e%V|FU8EM&m*U>jgX? z{zapHdcD~G%&x09^gc?l&vOY4bhGgq6)@1HH&FXh92&%Av)j@bFE^xCmU2`QVmNz<=QEWSbFrNT04 z$oD_fITB5HE?@?J`grU6qPq1Kp7$Vb}j5P z{R*D<=-b- zOrRxp0?|v2Jn)3+%4z|x%szxX7cS5wV z@ADj?Xm`sbu^*)tmFKD2ypRH_0J^IFcVi!uJCEHh69qoYbKfT}uj~7lOI?;Ds8Y); zz^E?=RYBUtp&a$F)G|}PG#tYlFXi|)1oLOu{@+=$KN6QC{9&h(TBowRUZmdR3GdNBwmzVe=VsO7Nv(deSI=FFNSKo4glf!H$mK)-w@fRCjZE^ylRCuB29qUtW zx@N0hu{@t*GE+j2cP-F-*E6Q8KG*1__TojMp4tU0w&G!VwR<&su_^aYn6GwD^^9@V zBcm7MYTw8eg{OK$s%l*A8lh-h^@Lbzoc(k?BVBKM>-yWe#t{qTBVM`f7Q`i*g!`K8 z{hjcB4~nzJF0(s9Z&ql%!K*D?XyIfH3BMgbJGPJt+8&aC54l5sNXJ1xpF}^2^38j4 z{ycua0PUBMPX1p6QdUG74IawgV(s}k-E5=zS=$cEIG8=C{s8eQvt2tk<>#J!oDb(2 zNpzOmsD4(q@u_f5B#h@hJSP>OLpg#t{b^F#>UlSu{o7Y5J1yYBPWY%;mZ zd~1I)oH;zbcS=yRTT3+V_RG(4XE{8>c^IP$>A(*3w*9sCW0%6=IXL=@eqZt!2=`w{ zcF^B*_49e&uaZ~|@C|SeyhLS-5ZxcI(NXEf_DKQf1M4lNvtf_Fry0|icu_7^M&;Q4 zm%%H?qef5Fw;H`wz|(&7wSd+~IrN=}rH16H2C4DW06$ zt|7~h1IxmDNhrsM>CXXbe$LJPcBcO)1l+$%;OhyV@AGMv`zXq-0jx6qKVjjmHZK_5 zfCM~VkMsiBgvZB@J$)JLe~#^d-h6!gdIIq>;*aA$%Xh<`^6~flyx+c`>+f07|KEgi ze$V2$HV(3#qv)sK#~Az1|2n1CPuF{v{|50=wuF63&yV~6TMhc}@8R7#+VFmW*aKdV zhK=Yj&k5u8b4QRM=yM(=qHb_W1LIpr~v!niA zpPw7tA?V3@g_WRdY`-@!zRU7Kd#>B~_tMCRKf(76d+fb!_xnolQ2HJG-v;Mq%aF4muPdb*zVoMY znLqF9_eznDZ${BrUQ2-E_Nqcd$b2j3^QW}0e3a>azZSkjXz_)DC+;7y_!5n8GP&-v zbtC`oeU(tqzttwc=CGtUs@%!>e6)Sbin5f;t}=PNNa>x;G5LY*;p6K<*_0U;_k5G@ zEmm)e$+z8KJE(3;l1))LXMbrJZkcka!r85K^zk5@a=E5g9sa8z&A z*Z;C-k14rhtHMn=v2P73pn8Sev4aw+xjhT{cY3tjMDJF%m2{)s@GS2PODnJ z#&4xhx=ZCITc&zUF7z3^ak=qe z+@(_gMCCBsxJl%ODp#k+a&-#!=omJLMzTlO$8r_;YU57ey9!E8 zE>u2hawBX%WqU;a6Jp@M$;Go_U%Gxx<=`Or7{(DbGIsuCjc&ZbTfydVmt6YSWH~`{F zC#oZw*>|*iCK7A#eL-2mbUarP0e809AG`n2?TNoP#`xRrp#Q1;;X2CN@>}VuC*_-N zTbE5yd1ZR{jpes6z5BK`cVtr(F4HTwb#Gw$y6!Hd^Ow?(5J^9lZ|m_dwDtH`$~-Nu|LBYB>+3q} z+pYdATbI8Yb2Id_U6N&8vnAIqXNbk*ZJ{1HRw`U2_{8-(bM1|ndbdfvQsGJ&H@Lq} ztm1mJa_uReTtQ+xSKE61t7Y9eevg!LAJ$I*v=X#QyR#IXLU0 z^*dj$Efp@c_53SE-eUa!G;SAoP;QFJHAElyUt#O|SIfG7T(6p|r~42~rQS&W+#J_K zKRLr@Kc8d$L{c~xH&Q=0NBv~|&jXOtlksz4D*U@gG2VOQ_CtT?E8dYDP0I0A<>Blh zX|#xpIW$ z`;9TYFXqZ|<=poh;&Nx@%4xggZhgC_=gRR0Q}S;ImS(~@G*hZ2wSDpDs~u{2q1vIA z3)Bv^tdoMYyN%Y#-M-i6p*qiHI{slkb6EUD)<3iq!eI~I_myAWEp2MITFzIyh4)*z zg4B%mI_uhd(%O5u+PRiHLF4AMv#G9~!=W9J9Q)>X=)Qh4=ojf{G5Nf-Q)=l|JKFLN zv7^nP+xEKteA?Q1yV~8Bd)4mlkYrhh+)sbQ?gQZX%g4_pxj*CU@Yy_*2b3#E?f5w( zj&oz}&I^TeK;$R3TL-1R{gO_9hvPlIKQHlOvX|9B_qVHk2ENR123?j%_!g57SUc}l zd*1RMJs;5oK98$w=Xa$Y_EYS*^)udQ68hUZG5dLc-F{YHA8p>>_LR^o*3TnRyS|@A zcnf2Gv>8A81+DO%5Z{+9CaGjJgWgLbe2U4fO@q6+4({rv!97x^pDUUM_dp%KuWB0H zeRXgzX&T(54(@`c!97|>-7S{@O!sPcK>Dx^IDjWI=?>lU;KPW?B6u@zlQoZjr=eAH}^*P#Orlj z`RcX(G}@);S>pTs^jEgxAdBBm8rxUyqY*xWaQ};sJAS{v@3Z>7jOh+rSG9S5YVUbv z?b^EgO@2R#&nwx^^`UFPjNoT`2y>AM|5!h_<3Nz?@ z&d;^_xir7ehj72yz<+F1?t@YLgBNK#exH!vN5lT*=i~iftzYlT=X1bvKJ;z^LU^)u z9NiJFl0e3MfDUrW@=h1>kNoeA=>|HUgYqm#Nn?m*roeB;No9tt@1fJn<#Aw+E1U4`8j;H`x6#v3wq(67vl38;9VMx$tNB^N0Zm5*sgHC&GnS>)ruqQ5zarsLFc)0Qh@Vy(!VnL z$Kto-;j#RaDDVAXob?#89>Y&YaW5D5w+$5@M;Si(eD^O0cWXZJ5qntGIQ6d+KiSUH zm|({E(O;#$9*xF>`2P2I0+zSu=VX1~%ITb@0F1}ar%c}>(PVLzvlz73qjA4yJ%-N_ zqE=ta`MsO|o<&^#YrwztCM}n}PutDY#qI0=%l9ACboqI!ir=^F=dtcIyOXoejqa0P z0XQy)ex8f*?kGLbbEeXL4CIOO>*GMjd5meC;R-~Va@_l*FVcE$hyQQhC(U!B&7fxo z;54G=%cAtKf2Yev;d^F&e`|V)%Jr$-ga3uEH1{6-zYusZba=u!8@>R8C+PKE5|w^` zO3Eu={d|qz$L;ds_s{>b_uzB99Eirt*k2+>C$jFdDzfXruk6?U(2w$SlIx;!?N6CPylRXMN{Cs5PG`**WURTrVNEsBiBd zxV>XL(og=u!~PRq$6adpeEevgA=zTDq#XW8J)={{Tm|5KSz+lu&Q(TnH52f?p0!sR zYkJTp*>(G4zX|^Pc^}^=^|-G)Q9ign;&S5r%jU2b;J587WvYJgS9BdIUT>Fi-pAL~ zh6nKP#81NgAxL=K@xE8Lg5Zh$;TM9B zwQ`c3`2Bw2z83%m3fPBKcz&+W@ody@)~NN1qZDWf{G>k!HzD4;@fXq`fB$kl+M&c= zh42XTjZUN|`#T&xc;1~o^Y@X4wxegC<94`T!FG;D?Zo-g9`XfWgqx(C;!Avp=ScXR zhWymN%jWc--iJgyi+dnwc$^Qe@A3P;pXPnJp}rJP{N8}r&&Ty2$KrYqLT_3(X!*>( zw;klx{3<`MmCn_2sp)P0J28|`@}2U3_{(TV%|=o=oxKD8roVBy3nRPW=MNk8?`^=- zzYpW%Z1$*t4da5_^LT#1bpxjx=Qs1tRhec@j!Tp@;`;z(BFvL^DO}oX&Wl2Q^sgM( z2Pkrec3^wX4(vl&&YL)YJ`uRHhJkw^2lp|+b$p2TY~bMhV*GbNbA~`$?Co1}@z-NY z==t%y%gcMXGpZNE|FOaKayX_K?0Pzhy@ec41Og20ebKm`r=#-31D_iY^?iQsd}RI~ zgF*h@fsad-0(YYUf3*r^S}ijw->X^}(J@=3>pwo;g?nHZ>3Tfn;YdW^Y>}S#bpIi< z_pyo50Lo--dQRQnmvZ?a-{xIdgG0W}LwWig?~KwZe?JDP2oL`f|DIPR$q-}zg->z zj#M69tSe6gHd1-&Rg4dNFj9GRIh5an$^d_C1w!`Q{Z;av{ak@R6+F|`oQ3|aK&Q^f zvmW)>Kh|g5zhmg@=!C=m_Ozt$5}jEZ`wsdESia7bDz*kP==@F2!Hv%YU6; zlZRNY&IQa^uF4W0Uao%Yyc!(J)m*{{l7AbeQ!ak5pn@gvL&g*l>mx^n(9l)Vx_b%XRCd>=`eOo*4*L5YO z4(Yk|FphJ}zXu}P6TZu0_p&g5+|f9HKolIs;tAA1eH6sW!IzsilQ(>xu~(cUkM=cQXo2m5|Y zoG$dS^8=J8g{$_NaYBvH39O3g(q?`Od^T3~bH79AR28t{z8uo)BcNBs>`gIgmjdYn zTF%ca`}Zf@KPO#?5BvL^AANELOFyyr|J#2(UtY!I-%Vovx?eMTyhG?wmVWsAB|gs^ zgHDSc%u_v}+|=one;3xjmu2H8>xrJ&y+^E9r*HN?`>DtUwWGHFcUbh6bg$DJlaCXT z2cBp5dE4M-Aw$q7ju&}bg$DNJ4Y3l z-#ik%uT_4s-(NC1AUGEG{Wu8Y;XI5_X|xWg{$1JB^xDTW|E^=uL;DVNQM4Z8;XOLu z_&p7NUzxub>Eld(K3S2kNWjl{ROd6(9;GzU2hjOX>-!{{Ot*Cq$G2kdv->#c_d)pi zkV;{rRCK-dc`5Y*BuP5j&yjqeFSK5w?Zodd&`(_f`Q-Y@bn_E@+^USy3Vx1({t*5D zj`<4LzkB2NO$@$G;kRC4?JT!Ak-?LWg`LF}z_Fe{uYTLC53%(Bg^u zeU5ZM?QyzC?LoR*^>gur=Sg|W-vac-^{>=&sif!WPCLNI_ZeDkUffgB^ipw#%(qEr zO31YHUMd+y?0WFWwDyZ6?(2T7mq|3hn?6h9{@pD4+k6H)HEb$^l zF0U_FN?t4pMY}i7=S3YeSsLZ%OOWLG9{TCTM#rl5E|Ah3<`|0b@E~lZN7ifE2 z&m#tuQ-&RvDLyW@D=fWY>o|+epLYG2uIx!VZdCpi6Mb(v@XPw;ddBr23aQh<^^o*s z%f0RRgQw$4H7J8OX?)t1`ktuY_Y>D+39mPJqn7u5ue_b1pRsU?2@i^rz92#HYlqq! zZ};tL?~U-T|K6`PKzE2`e8{7vVA1Vd)>$62V{`IUr9jUMr#*gY26-1Y-6-LKw*=C_r zcHR9FRz|%<>bbm={vVF!6{P|a@G$*@Q99{EF8TT)<1CqODdR7~_i9Jd%XJ*_@xt-< zex*AV|B8Q~(CgcMkA7cSi?@J@2QqL+|W;?XEL)AGs?!?|q=ouTguSU8nXx zGk-YDyKVju`zz|-n16VeG>7j)DnBXL-@`&xMOKGkKl?S`{n6q0!Fo@kUdg`W=5+0y zt@7P#=Vu02DZJn>3?nye=Y2W8lV8qv=Zm*fN%VWBu0O@(pz^EVS1gY;Ir_H1@%3)E1FrA>UFVAJ!>>S_tl;BCMYKfY z#K+4!-ROU*JyCm}u4XB`*V*1FA;%ZmU-#?M_OhfmTEE}Xpg(@jWTblixq8IM`O`aE z<-C~ugVI6OCD_NFDg*{k$^1@V_wfD5-bXc`a!0tC-G??ft zxBJd7r@#9r72K*ucur5x@7-p0@b)sZleAacIbl0^yHrEHv0DEQ<#YNrvxDo*4z4#l zxbYdm<3#OX-d_24NsnhA)Bbus&H3TycTd?)s9A)aQGOQ_y@w{)i`@ALKi5&Q z^Y$y?PmnOd4p31n&M?>s_dD?39iMcq1h5N5k>j4~cu6S9SNg#3KGh$$AEkm!eQ?i2 zS<0pMop2xDsVDLL-}S@g%I#sVtsfWNz77M=?KXJ7-+vE&llud61Z9x_@`B_Y!5V;I;lJjq!-;|Sq5#-(BRgymyczHj^?FRj@kHD|VkCSdEdhDD8 z&p-0<^`*4E%xJ^?{ofk_FPBH+$ER!2&r}a*YJAAP6b9o>$m+PDBn4z$2&i;ipbG2j zIF0IYHR zv9Uk+2fg7cFyU%F=Y!ujP=#uix~GxQdXb%J%ryx zlD89|gD$T1$pE5MDucRGIIBhlaxE^g||n0MA7QKWFf^%&Mn9f z{3+vqc8U5&+5EYZoV7C*ei)S*PdHC*L2a|S5HT09GIHGbB z$`Y>{{#|Xl4%5>o$>IIdYM+h^zCM%oDIe2&bRD5|n)=UfuNW@?gx?=Bgr2L1qvz$) zu=ktr6pq4Qg9!QQ?+>)9dz++JkeiTW{9n7lgcQH8FH*{D^V#$giQ;_#4PD>-97fuw z>mTVohlTE?(`xlugK@=&+Ejz9tLS=CXKskMp%X-ycZN({?*%D57Xb!^MWPw|Fr)2q*|r6Kz?*N zNzRE8&fr!_4)2SwJXfCmK3~Q=@ITbI^3*@pPs8_>R3BUqYV%7ah<^_v+h+PxMP)p` zel@sO<9?1Net-H)$Z|irk|+aw9XIV(Ixb$>E&v=)w$GgGW|L>zhbhW!kF=|5XR|X@ z?)_Xr&uU7A@{yRAS_(2=_&WUbcT0A{^%6d8hnkXIr}9}U{D!2L3cA8KsL^CS$`c;n z-(kq}uME9jF}YUiQGUuycf4$Uq~ns3K;Mmu^>n7L)%e`8{W8dA@H&&OTwG+t=>Xekl7)F1N+x zX@zTit5$Wr%HMM%e~4n&WLw9os=T;8b-MQ6sp*a6IYs?SqH>w;)UfBgUa_jZ{J=f|4qlcZd zNhi;hdg;`%gx-JFBi~A=E8o&C&G&US=R4(z`cp~%Na*hSj}FK8D@z6Pb3Dd*quUPc zckMe{2cE-nC{&&3KVaaElPchMZf@}OzIt&`WIi8V~)%h;B3O`+F ze0ph_V1oX$yzptX@#${O_x=p!liou-JfGeHe8Hzvru*Bpzlu(c-%}0$7bt%2k4~#X z(D0LXe<|e$uaxGKFb+?(c)N!5 zSIYRg-a_3E0e$+IO1!OK=WE>MW9WW*i@QgiXD=SkRem)Z%JU$@VtmexA|(Z8d3e81#q z&M*1FF*X$Xm)CQ{+s|bc6Lnywi=0J%>do#iOccDi&q0n4u90Z69^GQx?WOw?@KMJuN|}1Pj|n{&(%y@O}>*~MlUvo$Jav~510Gu11ivIpYqes zMW*+cr5^nu!54VTIL3;2+;2!HmL=}vYJMN3k}QyXKUd}OT+a9%JoP(l9JTin9iHC{ zmF`qJxP1-Zku&$q4T9j)n4qH*iYCihSZA#Xu#JSZZ-Y)eI=JOfB((jx6E#~@xj)Wd|dSJ zm-)G*Vq)Jj=qsZo@GB?J!_n2hTeZUY?)E>7gOd#2c+>yVRDtjNdgKqfSQ|HU{@mbz z6c696bv~0`G+nee-v{f0y;!Z~{e2zgzcX6jtd3(X=pX(gORNw~WN1ImFI#?$pVQUf zV@<2|{YtB>1$-!`3@_8r`{{P5cZ$keui3rK^xf&^^R)bXoUV6aJ+QAV4TSc3YwfXL zy`$Mn=<~f2g!K@P^OVn$`7J)~_s$+K1^xU-z-PABAJT7sFSuHk0^C>IJHr0e3HRUH z^Y>!Xixht9>%ewTX0Ruw$Lz-pV3OH;z@$5eI?fx|-%8TKAkd*SdYZ)D&-C?}?B?xa z-&UM0;L^Lt8!8u>js425$+Y?t&IjO-5m z3%ASHT+7;^7nI;A!VdFq0(`sIeg%LK-)nUGD*ny{#EG}~RaY~_IEL;q$=AocoyzHK zb$sB9>u$$!6b=6YgyT_1)`GfMKW8rOxp`Ee19^P?}%GtD~P&7Qn;m!e5Z#ll*I-yJIl}0JyIxgTYCC<6qdG2CzgT#G4>+k1Izgv>wXB-f^x_$I< zq2>qNC-9=9IoGTse6B%R#< zb^nF^dn3!g0Dth5MwOJWu78F<^@t63kD9FcN>17DdI!>L^`9s0I2`9+Y19}=cRsn^ zkk6Y?-{mabu~qul(cXbn;yX)1_fvd+?d>@o)1618p4-(*vdHRxQ_@SLCaL@Ze~~}n z&(P1qxP7JlqQtDgA9_gX&H<_au9*T(_RV?Xhji;?2q2U+Kaaq4j^VAQ*N^LP8tiIgp(n^n5aIoJXj#@z73)GpLAh5>`Q%pG8=U|+SyCg^ZHB& zCpy~YhorMaD+d8QxW`%G1pQF=JQ+?ux(od>|M2oY4*2-s_LBDM^XL;p_SgIG{q+6} z$4`|??FTXU^#u3735Rk#ocz1Imqz{DG18s>sM76YO1EL;DL;R8^7fTFxv0t87eo5Ua;586&fiv-2M(fm^8SO5dmJAI!Dp}M z?`8P>j&kroBoD!E8r_gq>%03=rBOc;y>>h2@9EUW zEz@JS#~_D{TZU(8)W78PSkLVb88=X0#|=HV?ea2o+)%!p^0)ze#E0Vt`&%k}RrM8d za{z3)A^t0o7>_1KA!W@`7#_ooqt2^@c*c@ zM<>s}ydB;n@P^poz`x_!;b!yC?C=o&HMYYwKB@hs{(tx<@q5z)(!Z?1y$(lUH{3s@ zf5qoS-a}s!oyYV0HR5^5fWTEd!}q68^gZy7xNm1$d>Sd zXSv@SqV|84{oWe2%l?kb^?UWR-0yu+`@hP5ABx&#zki5v&H3%?wm$yS&ixQ_;Ooeo z?^C2Z=Br>c&ZmO=y!Z_2b`AWlt2M6E2RToHp-=W%K;~oq{;})FROlt&uVy8Nv{QWi zeiFCC?nibfpGe*VIPOOfHtn*{Qx0pb_AIK;ZlO`QQevpQl5|-AdP@tnx(dZPM~R z>^L4D5AyxFwa_m4rQ$TvXMb;d`X))1xe`HC5}kl9UJ6Fw3H{n6(ImC^$Wo1l{V;!D zz9Q7exCp*Mq>_$%ek%5H@j`t+BM)yl`rKO3_6dhQ@3`C6-F-ejpU{Dyt)pc#RZv`x z{QG#d`d=43eBWRy>i%mdIjN8H&GF%T?({GCKD+Q6=nxN=i%N21ot(w;A^7(4FXi?I z2}8e4KD?bgpN7i!3XzXu@+X3SEa#378(7?Vt+q2;g2d%~IQcG(>6G=l(wIk%{X42q z{>Y&f2-#2`k6B~%dx81%ZoF>{^*feNr$2iD=^bN!+vxrZLCp0s-;WN=1Nr#*mb|_W z-;XnsBdAvzGb8yv!ofT72M^aRrz2c}(EG!cv5uR(opu%*($8-2dk}cX{H(Jl7pWo3 z^OOA-dm>OrvM1AwpSqs{G9?rVu2ndm&Q}Rhpc8o=W4ervCB(G+kp^@x;eD>{NDuRh zoZONx%)fPv`pv#?O1}RBaPxeuKrnvLAiW#f0Wc%*{cD16YUjRsA0AJ%lin`X+wAU| zzOtX0>2cUkm?FhRE=eQe$MM4NJDhIgOUGG#QgGI3o8lBZT|77L$1le}?qje%4IanG`PXBHmh0&%Oy+6Z-Rgp?m8p0Vnq@5g*>l$YZ6E#SQ^cuohUstcFX;EEhU<~f zB71;8@mP%d0SsA)oS%; zX}p-&yj7#v-Z`Cm-L3$9FiTe{47Aub-#BVS<)lk3jhB@XMMm_=?3bK3hJ^ zcjABR5-sQVOosC@>?g8_ANx_kxoJLbe|yX><pCTrcF}OhOp`-4ia7RB1#$9kA(Ec3uzS>V zWSk}c37}`9fDt~|mm3|*as2C<$iFHN_2mko+|Q9eX#MVJA@>oVDM2!=tPCc;d4h?~~P|^`o-`%rQW_F@HQcx>mTc)evn_S(Y(K7 zmeS4l!L#eu4S{n!`jJYF==W4K56{|$qo2}&^sc9$+Q)FdpkLT5>yk>p;pnt~2>$Di zL!YTR`ur;{g!lD=QqlH#uT}Y-b}g+HWmZF$v_L;H$tf!g{6atWd1bqa@Y`S?99VP9;yrc;Yqa`6&XSU-Q{c9{MAG#c>! zx?k9OrPdGqGgX-0W$CEL$HxPXJM16V_xTWSM341oRK^mjjLQ(;&s& zUs!|RMEROB{@|H~b)Rn|EP}#(xDLCjJdX6E z2s_^JN{I(}s>2h1_N|#%wi~YFW@;%Qv=XvKn4-ob1y&N2r}nE$tR^yWM&*146!8`@R21N^QO4hO@2KgNI*PC_`euw>s(sqgZhdh?`6 zpVob4l`BMqwEv{%ZC5Nb%!u$lrl13vCh# zWpBJ(xU{dJ--n@m;r&}E?+3Q;1V5wp zU-TXp%AdB$sorS+fa3>O1|DIZVIEZd>zM)YgbPcD424XCi}}6VmS39Bu)m4ti69+6{9Wdd?TYg? z%IG^ul+N9<8ex3Oacs9=qC9H+;(e1egrD}iAFIFc>A5cIEHUkIny~_3U_^^(_1I->;s32lsKwUeGy1WCL0?=!dI?Bi6}aTHt*_ zIltg~-vq|@=kcO_8$EAGb_(s$146z{=%GJe)9t<7m&`85)Xy^?m_lq=^8utI)(`5b>-aZiJg+~$YW|uv zztiWh$Km(su^mKx1ZBF@^FPb{rP6uT`HSUe+We*FH|iJXo4+3ZFYJ%>Jrqh8>jArj zM}7C0`dd$tte33)zF2t7E}tjl|F`Xnb{$N;vBv#c`=6X(XgxFgIz-;j$@W9}ot?iu zpRd;M zUEB|S8`r(pNXByzNYcRja38g;0}EQEyzL*Qd#vRm@ka~%7xl4j@e6x+zefuPj8|J& zIL0yW8u5o0$`8}oxiy|2o;x@3iU)ZeNY=o2MVr9Idcl@2E5g{Z-Q@ld^@P3opzs#^ z8j=5Pib35Ee#5JmTKf%*@1Ys= zX0osEw(0e(GDQxo=d5ktGhQBm%&QCcDNwc6_hGI4td$Bqi=}(~xO5LXaCZuOorsA} z_V+z)@gG>M$B$Km&q1S0?rE(um=U_N)QDptD z>%&4#oVQOvJ=wo!1g8iSnu6t3k#K?HT%0f9X-rh0yP!TkmbD^#|qG(w~p9$ni1&24W`vmu>#E z9;SZJzw<@sHKN^Y^GMIyQjt#2I#asp9Qw7qk9;H46}=xp?M=_yV>-Wr^GV9Ll|T0V zF?+slx8;kzOHK1u&vBJc8V|>1ezCn)vGIy4O{!1c|E=+Hn>^n-b*nt5v;R&zz9(V- z?l|^;Dkr9Q2}^Gdq=)u5&BjOX@6MgWb1Ae4RyvOWz=d|1$6L+f#d2W0t?XRvc8K@* z!*ZM-f4>|*^qy{!Q?AFXe(8`6O6OdWReq5^jW7BR+WG9^f5&(HaeUxH3fo7FAMszw zm_aHJ^&eXAqCGZIE{iG71F`;bzDIvL=fwL_7_ardxVm3gauImKMfX8H;@9xx`7`Pl zC^`LZPz(4$lZ$mp(AGZmTw){)Lby;5^MS4j|LA!aTn{0ignzo7<3dq>E4;qzVT?2i@wS_vF_&=Ng}dw5WfP|M3ek7U)N7q)X?|c;C+iuan9xTL6E+h4ulG zg5P73&(9Qu(Rcd%LHARzUa@_#9069Ze}D(u(e7gT?fNFfhx#Vd&)D>fK?lQuBQCT% z#NeK$`@)T?KjAt(du2|SHDL@;AFHKrquN*Tc*~mQM7XC)>Y<&&tH=!*hl~1Sqf~?U zgL6bacsw1e)V>bFVEwIFB|9j6_i~#40@?4$F0N4TtJ3?#l#dpO%Y=W=E0^pK*6Y>a zN6h2@|Mey7jp~Q$v!hV%yXd((?El#GhrvAuO@{UyUu-SA2uCq6{KI}n{Xp13*yycs z%@_B{@%zTvepz5NZWh6`?%YWyFUQ{$HdIy*;){hNt_Bn4gUh zhUSUGm_N`vt=4ILUczye%@2%|)iSw6oG%`!Zd>m;CPA8@gK$iDG*%bu@p z5D}pL48mVUZhQ&>!fg|d^}SJgkDI=;LG##22nS7K%;XQvFrz=Nr)JVe3o?_xY4fM~ z0mm!;K01hmOY6;(P-d+E#=|IqevptZKDUa$la7Qg<-f5@%CUa19F0n!+kcc}dB`8v zk@!367#iKiHTW0UY4Eo{w^^b5v7Q1Te-h;QoJq+()Q0&3{IP2t2KOp(V+YU|>c2?3 zjZx_yG*ml5KL~+Yx=(vj%|mpaLC>$y{t4xfwDq2h-Cwj*7=&=y{Y5*4g}3G} z+Gz%V6I3bPv+y_eSM0Z1J3%|(Wwld_WIC6c)=m%}FY7sD_#4a77)M{IdnJD+EYSK+ z68WQ@*V;+xqrcWp${*`Vv=hihJB8s7xNx2q?F6o9C)F;GE4xC^DeLoU+SsG?TA-5A zbWlGnQT0IWb6aL0^ow8T?IKJZDwDr`bi--X}p9^V=AL|G-7(oH!0NyGV9N)eH6? zG2SpRTm?!_=a?wR@{m8)pElli-&>5I3s%)1SPoib~V!0 zIuq^}{uTNLeLqOo%beb$)}ypv^B5H(z9%tX@K=Ymo}4TEX&r$3eC!X0!4>^g)k|!f zP!s3%7@poY#q|naC99-+7=#$^v}%VvLFte40ABWSibIgEkF0q>rHA_voZo4l+#{z2 zF}|Vr@O2#dz97wSMNm4-lJ$EskRQx1J#R$cmE_}pMKx++IJAO>@%RGai1Q5j7yftZ zv>wh#(>i2@dX}8N-$eF?@=N;ELisgM*S!`h!a6Fb(e3>r`C2UI>rzVL!*H$_~hU-(D%>r|+Q9?=w(6(YT`DSx&0) zfbn5G9T&*+FZ%92eRsjyM}|QOE~}p9cG~*=V;sMtUex@t4(dtN3wAQN*0@)Rdb#4r zYQa>WI394k-d?4~%NijT<-_qp^@Dv?#W7BiKa49Z5AIil3woGt)bYo2 zSkJGuerfza3GJ-)AILXe=#LlGPeD+iwJxChaMSvaD!0{t;ASF*yuC_&cRnKHq4)f( z{{|CNX*``eECtp$ z0>u26DZ6lcC7!lIy*3NSpmCI3Ejc@0{-o>(_7=5|1@~3QO|?+B-dCji<!*hN5ET@f17+BzXcdebbFPY z=%~L^JKs*@MU8*!eStMHUHaX7>LAo!H z->K#Q=jSm0Sg%;Vj-Ee0534dbyqf6&z^qlr-RS&f9p>+>^SDoIg;p@V(O4-3_-IjfR9|jU!m@lk} zf`mY*4TaXLPp^#i&P7jzEk}qP!Rsjdakxbs2h9sOPBU1C!ty}#+m%V)X(S- zCTd219D*~&W7_=BLVIKXn6`iPgA!aP;UBh$wSNSCyii};KPr9F!+wP2p!*K=d_BFl zigGLu`D4G)_Kzw)^w;)}wtNL3JhqECuTgdwx|2Mw0T=sw3=@H?OucvDF?I-V!p7vbRT9D07wx0;3zVGh1EO5CkMhTUueFcOUuz%bkM)S{Q?g0s z2iMm)LJor~+C|wDuWCPd&P%ilt&1>y6ZG|Q?B7QARr+HM;^lu9=flr}eYfu0g4r=a zqK{Yq7HfWh`0=830)~GI!oO2`8x>pRA9RjeAcwd0J|B(?6aLY6A+fxImA$A?^LjxP zl;Fa3nhEYn<STx@b?*Y>t_ov6R^nNj0^aX1STS zJ<`@5Z8lRevpp7R2A}SUrV6*W(`#@eIik*=dhqlt*QwJjNMkMx*r9r5;PN3=5)Nwvi~ z%|tZSmFR>-BAsS5k%%SCu1-q0y{Doz))B2pbai${6BQ?8iDMN<;z!F;u~>W3_E)Sc z1v<%8MSI(kL?qEu5ovFaHB}@N@Gq5U>uf1cB%7n%b#+NdG+I}eXiFYzjCQuPbw(Q# z(U!JkDw?RP+XudTx>E73)IR0c1o1%5!h7PF)w;T_&Xb8qy!7I*2^o)=;oY&$XxKav zY43`X>b_{Qt3Ab4JI(O6L_(?V=!6h$&E^p(1r$G?h$g8v>dZ(o8BK_ak+oT8wl#N~ zmz!HQhc<87ap3yRX0ojXD#L7wbwb%9ZJjCeWF%>xXp6N&*_t&Dc@MVOM8!vd&DkM$PtUC-#cXO-c>tnnX*&UtDKCsv^vJGM*=Tc1w7fOi*3z0XueicYM%#}PmYJ2)^`SqNLp79MjM~k~l!X6|97j&H zwLr~6uHW-Q^)D|N`NLN_T0?(4TfRSi!H*w%rTjm>QuOxR!@sLuH|Jnn)_1Z3`?Tos zFa{vp4(uIWq8{qZ9nI}q5>bdyHPXz&tHnU&vcou(x##|9YI9erH3qVt8DulWbO^hA zHV5_5NPDVP3(7QhwjJ-n5YUjCnk)#8)%`e_XDZQ_)<|bdl&gR(g=;_96Z7&b%%@<( zcO;UG9!8ZXrd7tMS8%9vP_NiZtFY>^#^iclp57=Xhd(R z&;k9ny%EOw(YBVZgiIW?Aax8RtUxw=Jkk?QBzwS;bzn|#48FM3|K4{z+OoCu8=t=C zl}z{Ip3b>9jlJvc@jqOX$qe>9wD|9Cl9eG;CSyl)xhc)Y?yim_V35s=VFm$1k%Y+$ zY`7WTVwt@9NODhSG|T&CZD6yT(avU5S~1l(z*b2)#lHnAwhm@GncA*sG8t(>50w$= zooY>hA%&RCI?X@U)YJu?!OEP% zXSTNHcC>0DfjWRxOmBYG3%23}(*z@>`9Puvs_{Ty9?bSwtxdovV8eCt{r~ zdQqWI?9x=hV_RpetEClJNh1;yd%(W#i-P@2M6XFj52>l$@?jpBTTm{(>y4e?BG)Q z+>t~Znf2Zuk2KkE7pz2}1GRNT+LKu&^xY1VFw`E+7rGD?W)O)b1vXzIt1kRdKkIcv zG!e^^>Y7=PE$y+SEsNO|3-+t5TGl`7C%SwVvt29ew;#K97Wcs-4%9m0wwPH7_C-!+ z^`Za4ylk7>^v21oF=jLPMd5y4ACQzreo9rZ6X+tNi+_yI@=uDVIGO1 z!4-=)Se`XoCIlAg&1SMS*45q&i#FIXfWb|Gwotu3)&(oR&dyk>!cs|r0i_`nY{Js@(mcfmDjq$$-EX}2k5SC?W^r6{vuTO%i; zA|GN#Z%UaFY0fZUL|PcJoNgw&)@;HoZFa;G7!0;3Fa%)DE^M8ck?jHP{;+uxrcWfc zYjZckJG>Z`VraW@TY&kLvlcbt^f1lP_So#W;!#H2N?H{+Y8ie~*s)bKBZh-MM){r|IYeM( zCSo?X;Z_yKG37?KIR)Phu|>rsVPyc?DXI1|Pz_j|w(PWqyokVi-!R|T*>)_0>erB~O%%53b69)ESs*Q6w(do8iO2Ax;U5}aQs^MUpP zE4ay8t>P9J=T6wW$j~Zov~nETc7QF&C#PRt!=j+>*$Qdk0+9;t`jG_dv3$K1+VKe98QE0mP%|qfq;>GCa{HJg5_ry*Sd<5f>wESEO4tMH2UocycXwoUk*5Q^1x; zyI6o9>`YRZkh@P62iPh#0Hz#V-tCrO z`C{b@QzEW#VIhaJT}Pz5t)r`hOg(HGa1EKndkJEN3mFw7O`T4wg&VG;p{LmzNUdyf zc2M)FweA;dceVa%k96P|Phw|*#V6X;GHF+>grq4}_d8&50>|<&sIgax(|6UGWJ}^< zH{x zs?N-=6XnQ+A|#?>oeFCSD8E%vP~+>ZB^!-mw6AsxNDD=reW9PlI$;AvG2n^`Yd!_% zEAbS@9gAa;qqz8k%@66pPAFxcK84HJZIz*nQN0!Ywk5MfB zMZXt|OKTH!1m+;L;$mHk<)r-48rj&YaC-blJ8-5E zcPT|Nx5MfF!PL=!$i8uLdAYRC0^!CabVbpuc*_e$JxzG8;dWnLJkr_LbPTKojD&UT z)|=rv(>#^8K5soZ=I!R~rFo_6^KQJ^-|hGNEBzb%8~s)OYJZKt)*tY1s`OV@R&J== zSXotBU0G9ETN$X_w86ija>IrV8#h#KsNPVsp>{)H!={b?jg=cWz#|-08>=_gY^>cF z*tn_6UsYMPp=x7QRaJFWO;v4GplVaKzq+z|L-oe$s_N?Mn(Er>K=q~?e@$i0hMJ8v zRW;Q$H8r(0ftpRV{@Tjg4YeC`uJlg||gYQ3ow%#B6Gfz`-3J2*CaF%S;??IQ1l9 zH4OJ%FyyqPyP(Izim?LjdcnvsO>&*c?Y-E?!~5AVA7t@pp}!%sZ*sb`=2!WX~) zWB3VP_xuGHS60>5U3SHeYj3{mtswmPQ=fY7i(h@=$3HRLbLRxj^USl)fAxj$e7C;;(_eY+t1s->z31@tw=}-#t@l0gi6@`=*XN#pasHyk zH{SGz|NYl<>5k*y|G~VH&e-x5jkmwyvByt;>gh#`SC(wQX7`?k8*aMg4X6L**>8OF zdzs(7l1Sc{>U!7O@`|&MKl#k_FTD7J2ZImv`|m6Hw{Lv)-0nR$-01Zc6t1iI^~;^H z+AFTQdRyQ9`&+t3zcBW-@o)bOK6Yd_UUYiZ6Me{o&!U6fm#yD)!Y{;fHAIZJb{_g?DR zp10ne?{>H<=d5=x&6(p$|1*dxDtEckkN7Tk6}T?<27H%#?l?EU*jF*X%(bduRYCeK z?mHe>GN-8b9i9r$WnSmJ;@tFSE==X8zqK^qlRoE3{~-Uj?{n4Wp1EmZdf1o#k|(eD zGFM(sz_;C(pOc!i(shIT`rP!L#mn;+$LYtC=ve>3-6&KI5EaZGq#a{kOc>HM{saZfp+qdM}}U3TT} zJ@-BI&_A8J=k4!$|Hq#C$0u^Uxiwc@dFXdzUvn=kuBknA`1D5}d;HVY6ASKs(_0_1 zdLnkj-Fup&H+|yCWy`(3yg3UO*KDdA{P6gHTNBP;8DdFc<`a^bc) zc{y`0sLRQ#S?^w){^aG&`}6B_^R{nWR`1(CcgGp;_PiCYYj)JS=K1n+HhJ^T)GSFq z=_uGR_s;hm?V6MR{F`?+&AqGQzOUVJ&BLF(W0Ut1_f0u#^S0-edM>zQ=*H-E?oHnL zLF@w$O!@Bm)+M>`|Jj+1Wv=;d--(=b3ry-Oc%j^3sn5R?J=R&V_!TlYa2daVYd$S1SK{FN~sse0Kl}Q|h~L z_n8Cv@Y~cbZ|(}$98XSOUXBl}YWhoS^6tu+)fy|S+=y#OFvwzQV=Z~aR;RHm-k6Gs z^-v>B%rLvaM&wSnY25D#8#iAtU@TZ{mgJk^l9$&HTzZM$Tp#<;#CqpoxNPO0!sW(a z&6~`eB;PqVUy4-h3vBRu|0B#>x9dDj6cRRt#IaWGdjycF4P;e}CE&>|>+7P$T;dSLXS2`|(u=xs$u$IUKd~9FU@C zj$?JMtbUM5~hjUJ@18lFO%Xy*Wgv;&B zb>z6d3zY!5^Ma~*4aOXifj{7^QhbDd)g)V$M~ z59O+GY=l^yP7jp(5~t7cYpgc>iKxQDLU69H*-s zDjPnu2HN`;K}H~!+j1ZQsBh?Ln3My`0TYnnxXQg3|1NhfhKHBoaLwm)dRMyN;WBF7 z8+?v=jzu0v0mL+4#Dbqbaa`dxyd7R6oX%udX#NE*^=p{YZwIh?98!2(3rzcd^wbX5z8+d8AcfLPx&Sn)#CWz zF@CH41c0NUH1AN_?65b%E_Nx)DIk$@@Fn^8LCJkn(r-i88@g1)1aarO*icR zcg^De33zVUqr%$tx5LU^z4D>ObEnP!twk>578Uj?i2soK+wMOMe(RKf{vwyv&hx>K z%4YY+ufS0L?f&?-$&wl3!N;Fx(yyIGe~(Qc`@8+Jr-$XD{MEy6&77})&L-#mbKpvu z-dKr@c~ZHCDVh2w$!Ci}3gZk%tp}(1=0B&H3%Nh&lJr4PR#}KV+JIJxU={gK-kGBEXZVzHi{

-hxlwm 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 X2uo$RB85Mu9+bZIc2D@5r~iKdJrU=Y diff --git a/tests/dependencies/hxro/pubkey-naming.json b/tests/dependencies/hxro/pubkey-naming.json deleted file mode 100644 index e5ae781..0000000 --- a/tests/dependencies/hxro/pubkey-naming.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "12fr3WXr7Mh1wGMPQe1qe5VUeexz1BRzJ6SfAhHPgC1b": "taker-fee-state", - "3fw72yL2pG7cKmPs4TYJa6C9496NyypFpj5UQVLe515j": "product-0", - "3q4UnqSY7ARzcbX8B647soB5Xji4Qr23idLQGpZGLzJa": "product-1-orderbook", - "4Lrt2YtUyEB8SrtTR3Tsb1DBGU9hRU6xNuDZd9zJrKG9": "maker-trg", - "4Ucpj5hWiz8msBQVgFSUnqxQCkJWEPn5YbpwFbbhxoa6": "fee-output", - "5T9ApZtB3yTKRv6ssmHdr15hB3d9XnA3WwrYAZTScetY": "risk-config", - "5T9gt3frWPAvu1hxEULbsKrP2WF4ggqSxCMqpJvtWXHV": "fees-program", - "6Prp1p7vjS6LCb8xR1oQqsbUPX9AWaHz9PBVbdzAFHT4": "execution-output", - "78haJHMHdjdp6phofBzQwbHdNobFyYDrGRdgfAWQfwxL": "taker-risk-state", - "8qBD1ZewtfoxNAy3E45f5fRtwQUhLku55cVVxT5cMPef": "product-1", - "A3tmPza8B4rvHFiUkPHLsL7Nnv4ERK8utFfwPa1yAn18": "taker-trg", - "BVDTB61eHY7UnCb4ueatdaV4rctTzqfLAL6sQDeMNSHA": "risk-program", - "CTc7swEKXFCD1gsnvVcQyozXK2zJ3roQr3fuU7G6uerC": "product-0-orderbook", - "EDHbf67fJZBZoKFJGPEC7b9qimnave5DiYBctVWEysYb": "maker-risk-state", - "FEaUEZkFnyTfkWm8GgYR7sbyMkoW5nYSyqECDmKfQQoo": "risk-output", - "FU68EKUppMq89TSVBELYpbsdw2FpzKwx79mPvCARmM9t": "maker-fee-state", - "FUfpR31LmcP1VSbz5zDaM7nxnH55iBHkpwusgrnhaFjL": "dex-program", - "G6b2JSF5M7SySosNC4GkHHmqXczSCGUycppRiYvTQ7aK": "vault", - "GBhshm4LFyYTv9iPocz7kmLpRhvvPNoxH9wgB57uNamm": "fee-config", - "GCXr6LDZurWK8Hkm18gZzJ7jUgvrYEVFFeWUR346fd42": "mpg" -} \ No newline at end of file diff --git a/tests/integration/hxro.spec.ts b/tests/integration/hxro.spec.ts deleted file mode 100644 index 45086fa..0000000 --- a/tests/integration/hxro.spec.ts +++ /dev/null @@ -1,294 +0,0 @@ -import { Context, getContext } from "../utilities/wrappers"; -import { attachImprovedLogDisplay, expectError, runInParallelWithWait, sleep } from "../utilities/helpers"; -import { - HxroPrintTradeProvider, - HxroContext, - getHxroContext, - DEFAULT_SETTLEMENT_OUTCOME, -} from "../utilities/printTradeProviders/hxroPrintTradeProvider"; -import { AuthoritySide, Quote, QuoteSide } from "../utilities/types"; -import { - DEFAULT_LEG_MULTIPLIER, - DEFAULT_LEG_SIDE, - DEFAULT_PRICE, - SOLANA_BASE_ASSET_INDEX, -} from "../utilities/constants"; -import { expect } from "chai"; - -describe("RFQ HXRO instrument integration tests", () => { - beforeEach(function () { - attachImprovedLogDisplay(this, context); - }); - - let context: Context; - let hxroContext: HxroContext; - - before(async () => { - context = await getContext(); - hxroContext = await getHxroContext(context); - }); - - it("Create a HXRO RFQ, don't verify it, try to finalize, fail and clean up", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - verify: false, - finalize: false, - }); - await expectError(rfq.finalizeRfq(), "RfqIsNotInRequiredState"); - - await rfq.cleanUp(); - }); - - it("Create a HXRO RFQ, verify, don't finish and clean up", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - finalize: false, - }); - await rfq.cleanUp(); - }); - - it("Create a HXRO RFQ, cancel and clean up", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - }); - await rfq.cancel(); - await rfq.cleanUp(); - }); - - it("Create a HXRO RFQ, it expires and is removed", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - activeWindow: 1, - }); - await sleep(1.5); - await rfq.cleanUp(); - }); - - it("Create a Hxro RFQ, respond, active period ends and remove response and rfq", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - activeWindow: 2, - }); - const response = await runInParallelWithWait(() => rfq.respond(), 2.5); - - await response.cleanUp(); - await rfq.cleanUp(); - }); - - it("HXRO maker forgets to sign a print trade and preparations fail", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - }); - const response = await rfq.respond(); - await response.confirm(); - await response.preparePrintTradeSettlement(AuthoritySide.Taker, DEFAULT_SETTLEMENT_OUTCOME); - await expectError( - response.preparePrintTradeSettlement(AuthoritySide.Maker, DEFAULT_SETTLEMENT_OUTCOME, { skipPreStep: true }), - "ExpectedSignedPrintTrade" - ); - }); - - it("HXRO successful settlement flow", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - }); - const response = await rfq.respond(); - await response.confirm(); - await response.preparePrintTradeSettlement(AuthoritySide.Taker, DEFAULT_SETTLEMENT_OUTCOME); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, DEFAULT_SETTLEMENT_OUTCOME); - await response.settlePrintTrade(); - await response.cleanUp(); - await rfq.cancel(); - await rfq.cleanUp(); - }); - - it("Create a Hxrp RFQ, respond, confirm, but settle after settling period ends", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - activeWindow: 3, - settlingWindow: 1, - }); - const response = await runInParallelWithWait(async () => { - const response = await rfq.respond(); - await response.confirm(); - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, DEFAULT_SETTLEMENT_OUTCOME); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, DEFAULT_SETTLEMENT_OUTCOME); - return response; - }, 4.5); - - await response.settlePrintTrade(); - await response.cleanUp(); - await rfq.cleanUp(); - }); - - it("Create a Hxro RFQ, respond and confirm, maker prepares but taker defaults", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - activeWindow: 2, - settlingWindow: 1, - }); - - const response = await runInParallelWithWait(async () => { - const response = await rfq.respond(); - await response.confirm(); - - await response.preparePrintTradeSettlement(AuthoritySide.Maker, DEFAULT_SETTLEMENT_OUTCOME); - - return response; - }, 3.5); - - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Maker); - - await response.cleanUp(); - await rfq.cleanUp(); - }); - - it("Create a Hxro RFQ, respond and confirm, taker prepares but maker defaults", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - activeWindow: 2, - settlingWindow: 1, - }); - - const response = await runInParallelWithWait(async () => { - const response = await rfq.respond(); - await response.confirm(); - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, DEFAULT_SETTLEMENT_OUTCOME); - - return response; - }, 3.5); - - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Taker); - - await response.cleanUp(); - await rfq.cleanUp(); - }); - - it("Create a Hxro RFQ, respond and confirm, but both parties defaults", async () => { - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext), - activeWindow: 2, - settlingWindow: 1, - }); - - const response = await runInParallelWithWait(async () => { - const response = await rfq.respond(); - await response.confirm(); - - return response; - }, 3.5); - - await response.cleanUp(); - await rfq.cleanUp(); - }); - - it("Create a Hxro RFQ, both parties prepare but taker does not have enough collateral", async () => { - const printTradeProvider = new HxroPrintTradeProvider(context, hxroContext, [ - { amount: 100, side: DEFAULT_LEG_SIDE, baseAssetIndex: SOLANA_BASE_ASSET_INDEX, productIndex: 0 }, - ]); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider, - }); - - const response = await rfq.respond({ ask: Quote.getStandard(DEFAULT_PRICE, DEFAULT_LEG_MULTIPLIER) }); - await response.confirm({ side: QuoteSide.Ask }); - - const expectedSettlement = { price: "-100", legs: ["100"] }; - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedSettlement); - await printTradeProvider.manageCollateral("unlock", AuthoritySide.Taker, expectedSettlement); - - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedSettlement); - - await response.settlePrintTrade(); - - const responseData = await response.getData(); - expect(responseData.defaultingParty).to.be.deep.equal(AuthoritySide.Taker); - - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Taker); - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Maker); - await response.cleanUp(); - }); - - it("Create a Hxro RFQ, both parties prepare but maker does not have enough collateral", async () => { - const printTradeProvider = new HxroPrintTradeProvider(context, hxroContext, [ - { amount: 200, side: DEFAULT_LEG_SIDE, baseAssetIndex: SOLANA_BASE_ASSET_INDEX, productIndex: 0 }, - ]); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider, - }); - - const response = await rfq.respond({ ask: Quote.getStandard(DEFAULT_PRICE, DEFAULT_LEG_MULTIPLIER) }); - await response.confirm({ side: QuoteSide.Ask }); - - const expectedSettlement = { price: "-100", legs: ["200"] }; - - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedSettlement); - await printTradeProvider.manageCollateral("unlock", AuthoritySide.Maker, expectedSettlement); - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedSettlement); - - await response.settlePrintTrade(); - - const responseData = await response.getData(); - expect(responseData.defaultingParty).to.be.deep.equal(AuthoritySide.Maker); - - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Taker); - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Maker); - await response.cleanUp(); - }); - - it("Create a Hxro RFQ, both parties prepare but taker cancels print trade and defauls", async () => { - const printTradeProvider = new HxroPrintTradeProvider(context, hxroContext); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider, - }); - - const response = await rfq.respond(); - await response.confirm(); - - const expectedSettlement = { price: "100", legs: ["-10"] }; - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedSettlement); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedSettlement); - - await printTradeProvider.cancelPrintTrade(response, AuthoritySide.Taker); - - await response.settlePrintTrade(); - - const responseData = await response.getData(); - expect(responseData.defaultingParty).to.be.deep.equal(AuthoritySide.Taker); - - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Taker); - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Maker); - await response.cleanUp(); - }); - - it("Create a Hxro RFQ, both parties prepare but maker cancels print trade and defauls", async () => { - const printTradeProvider = new HxroPrintTradeProvider(context, hxroContext); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider, - }); - - const response = await rfq.respond(); - await response.confirm(); - - const expectedSettlement = { price: "100", legs: ["-10"] }; - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedSettlement); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedSettlement); - - await printTradeProvider.cancelPrintTrade(response, AuthoritySide.Maker); - - await response.settlePrintTrade(); - - const responseData = await response.getData(); - expect(responseData.defaultingParty).to.be.deep.equal(AuthoritySide.Maker); - - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Taker); - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Maker); - await response.cleanUp(); - }); -}); diff --git a/tests/scripts/fixturesGenerator.ts b/tests/scripts/fixturesGenerator.ts index 430ebc9..acd8aa7 100644 --- a/tests/scripts/fixturesGenerator.ts +++ b/tests/scripts/fixturesGenerator.ts @@ -27,11 +27,12 @@ import { OracleSource, RiskCategory } from "../utilities/types"; import { fixtureAccountsPath, getKeypairPath, - loadHxroPubkeyNaming, pubkeyNamingFilePath, readKeypair, } from "../utilities/fixtures"; -import { HxroPrintTradeProvider } from "../utilities/printTradeProviders/hxroPrintTradeProvider"; + +// This script is used to generate test fixtures including risk parameters +// and feed them into the contract during testing/deployment const ledgerPath = path.join(".anchor", "test-ledger"); const buildDirectoryPath = path.join("target", "deploy"); @@ -119,17 +120,7 @@ async function main() { await saveAccountAsFixture(context, configAddress, "spot-instrument-config"); }, async () => { - await HxroPrintTradeProvider.addPrintTradeProvider(context); - - const hxroAddresses = inversePubkeyToName(await loadHxroPubkeyNaming()); - const mpgAddress = hxroAddresses["mpg"]; - await HxroPrintTradeProvider.initializeConfig(context, mpgAddress); - - const configAddress = HxroPrintTradeProvider.getConfigAddress(); - await saveAccountAsFixture(context, configAddress, "hxro-print-trade-provider-config"); - }, - // initialize and fund collateral accounts` - async () => { + // initialize and fund collateral accounts` await context.initializeCollateral(context.taker); await context.fundCollateral(context.taker, DEFAULT_COLLATERAL_FUNDED); await saveCollateralPdas(context, context.taker.publicKey, "taker"); diff --git a/tests/unit/hxroCollateralLockedRecords.ts b/tests/unit/hxroCollateralLockedRecords.ts deleted file mode 100644 index 8fae8ca..0000000 --- a/tests/unit/hxroCollateralLockedRecords.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { Context, getContext } from "../utilities/wrappers"; -import { attachImprovedLogDisplay, expectError } from "../utilities/helpers"; -import { - HxroPrintTradeProvider, - HxroContext, - getHxroContext, - DEFAULT_SETTLEMENT_OUTCOME, - getHxroProviderProgram, -} from "../utilities/printTradeProviders/hxroPrintTradeProvider"; -import { AuthoritySide, Quote, QuoteSide } from "../utilities/types"; -import { - DEFAULT_LEG_MULTIPLIER, - DEFAULT_LEG_SIDE, - DEFAULT_PRICE, - SOLANA_BASE_ASSET_INDEX, -} from "../utilities/constants"; -import { expect } from "chai"; - -describe("RFQ HXRO collateral lock records", () => { - beforeEach(function () { - attachImprovedLogDisplay(this, context); - }); - - let context: Context; - let hxroContext: HxroContext; - - before(async () => { - context = await getContext(); - hxroContext = await getHxroContext(context); - }); - - it("Successful settlement removes locks", async () => { - const printTradeProvider = new HxroPrintTradeProvider(context, hxroContext); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider, - }); - const response = await rfq.respond(); - await response.confirm(); - await response.preparePrintTradeSettlement(AuthoritySide.Taker, DEFAULT_SETTLEMENT_OUTCOME); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, DEFAULT_SETTLEMENT_OUTCOME); - - const hxroProgram = getHxroProviderProgram(); - const takerLockAddress = HxroPrintTradeProvider.getLockedCollateralRecordAddress( - context.taker.publicKey, - response.account - ); - const makerLockAddress = HxroPrintTradeProvider.getLockedCollateralRecordAddress( - context.maker.publicKey, - response.account - ); - const [takerLockBefore, makerLockBefore] = await hxroProgram.account.lockedCollateralRecord.fetchMultiple([ - takerLockAddress, - makerLockAddress, - ]); - await response.settlePrintTrade(); - const [takerLockAfter, makerLockAfter] = await hxroProgram.account.lockedCollateralRecord.fetchMultiple([ - takerLockAddress, - makerLockAddress, - ]); - - expect(takerLockBefore).to.be.not.equal(null); - expect(makerLockBefore).to.be.not.equal(null); - expect(takerLockAfter).to.be.equal(null); - expect(makerLockAfter).to.be.equal(null); - }); - - it("Successfully remove lock records after a failed settlement", async () => { - const printTradeProvider = new HxroPrintTradeProvider(context, hxroContext, [ - { amount: 200, side: DEFAULT_LEG_SIDE, baseAssetIndex: SOLANA_BASE_ASSET_INDEX, productIndex: 0 }, - ]); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider, - }); - const response = await rfq.respond({ ask: Quote.getStandard(DEFAULT_PRICE, DEFAULT_LEG_MULTIPLIER) }); - await response.confirm({ side: QuoteSide.Ask }); - - const expectedSettlement = { price: "-100", legs: ["200"] }; - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedSettlement); - await printTradeProvider.manageCollateral("unlock", AuthoritySide.Taker, expectedSettlement); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedSettlement); - await response.settlePrintTrade(); - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Taker); - await response.revertPrintTradeSettlementPreparation(AuthoritySide.Maker); - - await printTradeProvider.unlockCollateralAndRemoveRecord(AuthoritySide.Maker, rfq, response); - - const hxroProgram = getHxroProviderProgram(); - const makerLockAddress = HxroPrintTradeProvider.getLockedCollateralRecordAddress( - context.maker.publicKey, - response.account - ); - const makerLock = await hxroProgram.account.lockedCollateralRecord.fetchNullable(makerLockAddress); - expect(makerLock).to.be.equal(null); - }); - - it("Can't remove record while in use", async () => { - const printTradeProvider = new HxroPrintTradeProvider(context, hxroContext, [ - { amount: 300, side: DEFAULT_LEG_SIDE, baseAssetIndex: SOLANA_BASE_ASSET_INDEX, productIndex: 0 }, - ]); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider, - }); - const response = await rfq.respond({ ask: Quote.getStandard(DEFAULT_PRICE, DEFAULT_LEG_MULTIPLIER) }); - await response.confirm({ side: QuoteSide.Ask }); - - const expectedSettlement = { price: "-100", legs: ["300"] }; - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedSettlement); - await printTradeProvider.manageCollateral("unlock", AuthoritySide.Taker, expectedSettlement); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedSettlement); - await response.settlePrintTrade(); - - await expectError( - printTradeProvider.unlockCollateralAndRemoveRecord(AuthoritySide.Maker, rfq, response), - "RecordIsInUse" - ); - }); -}); diff --git a/tests/unit/hxroSettlementResults.ts b/tests/unit/hxroSettlementResults.ts deleted file mode 100644 index 5be8c44..0000000 --- a/tests/unit/hxroSettlementResults.ts +++ /dev/null @@ -1,255 +0,0 @@ -import { Context, getContext } from "../utilities/wrappers"; -import { attachImprovedLogDisplay, toAbsolutePrice, toLegMultiplier, withTokenDecimals } from "../utilities/helpers"; -import { - HxroPrintTradeProvider, - HxroContext, - getHxroContext, - getPositionChangeMeasurer, - inverseExpectedSettlement, - assertSettlementOutcome, -} from "../utilities/printTradeProviders/hxroPrintTradeProvider"; -import { AuthoritySide, FixedSize, LegSide, OrderType, Quote, QuoteSide } from "../utilities/types"; -import { SOLANA_BASE_ASSET_INDEX } from "../utilities/constants"; - -describe("RFQ HXRO settlement result tests", () => { - beforeEach(function () { - attachImprovedLogDisplay(this, context); - }); - - let context: Context; - let hxroContext: HxroContext; - - before(async () => { - context = await getContext(); - hxroContext = await getHxroContext(context); - }); - - it("HXRO open size two way + override, taker sells, taker prepares first", async () => { - const positionMeasurer = await getPositionChangeMeasurer(hxroContext); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext, [ - { - amount: 20, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Long, - productIndex: 0, - }, - { - amount: 1.5, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Short, - productIndex: 1, - }, - ]), - fixedSize: FixedSize.None, - orderType: OrderType.TwoWay, - }); - const response = await rfq.respond({ - bid: Quote.getStandard(toAbsolutePrice(withTokenDecimals(123)), toLegMultiplier(5)), - }); - await response.confirm({ side: QuoteSide.Bid, legMultiplierBps: toLegMultiplier(3) }); - - const expectedOutcome = { legs: ["-60", "4.5"], price: "369" }; - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedOutcome); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedOutcome); - await response.settlePrintTrade(); - - const difference = await positionMeasurer.measureDifference(); - assertSettlementOutcome(expectedOutcome, difference.taker); - assertSettlementOutcome(inverseExpectedSettlement(expectedOutcome), difference.maker); - }); - - it("HXRO open size two way, taker buys, maker prepares first", async () => { - const positionMeasurer = await getPositionChangeMeasurer(hxroContext); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext, [ - { - amount: 0.1, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Long, - productIndex: 0, - }, - { - amount: 1.5, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Short, - productIndex: 1, - }, - ]), - fixedSize: FixedSize.None, - orderType: OrderType.TwoWay, - }); - const response = await rfq.respond({ - ask: Quote.getStandard(toAbsolutePrice(withTokenDecimals(3)), toLegMultiplier(2.5)), - }); - await response.confirm({ side: QuoteSide.Ask }); - - const expectedOutcome = { legs: ["0.25", "-3.75"], price: "-7.5" }; - - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedOutcome); - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedOutcome); - await response.settlePrintTrade(); - - const difference = await positionMeasurer.measureDifference(); - assertSettlementOutcome(expectedOutcome, difference.taker); - assertSettlementOutcome(inverseExpectedSettlement(expectedOutcome), difference.maker); - }); - - it("HXRO fixed base size, duplicated legs, taker buys, taker prepares first", async () => { - const positionMeasurer = await getPositionChangeMeasurer(hxroContext); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext, [ - { - amount: 0.1, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Long, - productIndex: 0, - }, - { - amount: 1.5, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Short, - productIndex: 1, - }, - { - amount: 1.1, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Long, - productIndex: 0, - }, - { - amount: 4, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Long, - productIndex: 1, - }, - ]), - fixedSize: FixedSize.getBaseAsset(toLegMultiplier(0.1)), - orderType: OrderType.Buy, - }); - const response = await rfq.respond({ - ask: Quote.getFixedSize(toAbsolutePrice(withTokenDecimals(1.234))), - }); - await response.confirm({ side: QuoteSide.Ask }); - - const expectedOutcome = { legs: ["0.01", "-0.15", "0.11", "0.4"], price: "-0.1234" }; - const dedupExpectedOutcome = { legs: ["0.12", "0.25"], price: "-0.1234" }; - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedOutcome); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedOutcome); - await response.settlePrintTrade(); - - const difference = await positionMeasurer.measureDifference(); - assertSettlementOutcome(dedupExpectedOutcome, difference.taker); - assertSettlementOutcome(inverseExpectedSettlement(dedupExpectedOutcome), difference.maker); - }); - - it("HXRO fixed size, taker sells, negative, maker prepares first", async () => { - const positionMeasurer = await getPositionChangeMeasurer(hxroContext); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext, [ - { - amount: 0.1, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Short, - productIndex: 0, - }, - { - amount: 1.5, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Short, - productIndex: 1, - }, - ]), - fixedSize: FixedSize.getBaseAsset(toLegMultiplier(10)), - orderType: OrderType.Sell, - }); - const response = await rfq.respond({ - bid: Quote.getFixedSize(toAbsolutePrice(withTokenDecimals(-23_000))), - }); - await response.confirm({ side: QuoteSide.Bid }); - - const expectedOutcome = { legs: ["1", "15"], price: "-230000" }; - - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedOutcome); - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedOutcome); - await response.settlePrintTrade(); - - const difference = await positionMeasurer.measureDifference(); - assertSettlementOutcome(expectedOutcome, difference.taker); - assertSettlementOutcome(inverseExpectedSettlement(expectedOutcome), difference.maker); - }); - - it("HXRO fixed quote, taker sells, taker prepares first", async () => { - const positionMeasurer = await getPositionChangeMeasurer(hxroContext); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext, [ - { - amount: 5, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Long, - productIndex: 0, - }, - { - amount: 1.5, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Short, - productIndex: 1, - }, - ]), - fixedSize: FixedSize.getQuoteAsset(withTokenDecimals(20_000)), - orderType: OrderType.Sell, - }); - const response = await rfq.respond({ - bid: Quote.getFixedSize(toAbsolutePrice(withTokenDecimals(2_500))), - }); - await response.confirm({ side: QuoteSide.Bid }); - - const expectedOutcome = { legs: ["-40", "12"], price: "20000" }; - - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedOutcome); - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedOutcome); - await response.settlePrintTrade(); - - const difference = await positionMeasurer.measureDifference(); - assertSettlementOutcome(expectedOutcome, difference.taker); - assertSettlementOutcome(inverseExpectedSettlement(expectedOutcome), difference.maker); - }); - - it("HXRO fixed quote, taker buys, maker prepares first", async () => { - const positionMeasurer = await getPositionChangeMeasurer(hxroContext); - const rfq = await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext, [ - { - amount: 5, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Long, - productIndex: 0, - }, - { - amount: 1.5, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Short, - productIndex: 1, - }, - ]), - fixedSize: FixedSize.getQuoteAsset(withTokenDecimals(500)), - orderType: OrderType.Buy, - }); - const response = await rfq.respond({ - ask: Quote.getFixedSize(toAbsolutePrice(withTokenDecimals(2_500))), - }); - await response.confirm({ side: QuoteSide.Ask }); - - const expectedOutcome = { legs: ["1", "-0.3"], price: "-500" }; - - await response.preparePrintTradeSettlement(AuthoritySide.Maker, expectedOutcome); - await response.preparePrintTradeSettlement(AuthoritySide.Taker, expectedOutcome); - await response.settlePrintTrade(); - - const difference = await positionMeasurer.measureDifference(); - assertSettlementOutcome(expectedOutcome, difference.taker); - assertSettlementOutcome(inverseExpectedSettlement(expectedOutcome), difference.maker); - }); -}); diff --git a/tests/unit/requiredCollateralCalculations.ts b/tests/unit/requiredCollateralCalculations.ts index 15c4152..7e7203b 100644 --- a/tests/unit/requiredCollateralCalculations.ts +++ b/tests/unit/requiredCollateralCalculations.ts @@ -12,16 +12,10 @@ import { import { EuroOptionsFacade, PsyoptionsEuropeanInstrument } from "../utilities/instruments/psyoptionsEuropeanInstrument"; import { SpotInstrument } from "../utilities/instruments/spotInstrument"; import { FixedSize, LegSide, OrderType, Quote, QuoteSide } from "../utilities/types"; -import { Context, getContext } from "../utilities/wrappers"; -import { - HxroContext, - HxroPrintTradeProvider, - getHxroContext, -} from "../utilities/printTradeProviders/hxroPrintTradeProvider"; +import { Context, getContext } from "../utilities/wrappers" describe("Required collateral calculation and lock", () => { let context: Context; - let hxroContext: HxroContext; let taker: PublicKey; let maker: PublicKey; @@ -31,7 +25,6 @@ describe("Required collateral calculation and lock", () => { before(async () => { context = await getContext(); - hxroContext = await getHxroContext(context); taker = context.taker.publicKey; maker = context.maker.publicKey; }); @@ -299,23 +292,4 @@ describe("Required collateral calculation and lock", () => { ]); }); - it("Correct collateral locked for fix base asset Hxro rfq creation", async () => { - let measurer = await TokenChangeMeasurer.takeSnapshot(context, ["unlockedCollateral"], [taker]); - - await context.createPrintTradeRfq({ - printTradeProvider: new HxroPrintTradeProvider(context, hxroContext, [ - { - amount: 20, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - side: LegSide.Long, - productIndex: 0, - }, - ]), - fixedSize: FixedSize.getBaseAsset(toLegMultiplier(1)), - orderType: OrderType.Buy, - settlingWindow: 90 * 24 * 60 * 60, // 90 days - }); - - await measurer.expectChange([{ token: "unlockedCollateral", user: taker, delta: withTokenDecimals(0) }]); - }); }); diff --git a/tests/utilities/constants.ts b/tests/utilities/constants.ts index 1e4e0e9..912fe59 100644 --- a/tests/utilities/constants.ts +++ b/tests/utilities/constants.ts @@ -1,46 +1 @@ -import { BN } from "@coral-xyz/anchor"; -import { PublicKey } from "@solana/web3.js"; -import { LegSide, OrderType } from "./types"; - -export const PROTOCOL_SEED = "protocol"; -export const COLLATERAL_SEED = "collateral_info"; -export const COLLATERAL_TOKEN_SEED = "collateral_token"; -export const RFQ_SEED = "rfq"; -export const RESPONSE_SEED = "response"; -export const QUOTE_ESCROW_SEED = "quote_escrow"; -export const BASE_ASSET_INFO_SEED = "base_asset"; -export const MINT_INFO_SEED = "mint_info"; - -export const LEG_MULTIPLIER_DECIMALS = 9; -export const ABSOLUTE_PRICE_DECIMALS = 9; -export const FEE_BPS_DECIMALS = 9; -export const DEFAULT_MINT_DECIMALS = 9; - -export const DEFAULT_SOL_FOR_SIGNERS = 100_000_000_000; -export const DEFAULT_TOKEN_AMOUNT = new BN(10_000_000).mul(new BN(10).pow(new BN(9))); -export const DEFAULT_COLLATERAL_FUNDED = new BN(0); - -export const DEFAULT_SETTLE_FEES = { taker: 0.02, maker: 0.01 }; -export const DEFAULT_DEFAULT_FEES = { taker: 0.1, maker: 0.5 }; -export const DEFAULT_ADD_ASSET_FEES = 1; -export const DEFAULT_ORDER_TYPE = OrderType.TwoWay; -export const DEFAULT_LEG_AMOUNT = new BN(1_000_000_000); -export const DEFAULT_LEG_SIDE = LegSide.Long; -export const DEFAULT_PRICE = new BN(100).mul(new BN(10).pow(new BN(DEFAULT_MINT_DECIMALS + ABSOLUTE_PRICE_DECIMALS))); -export const DEFAULT_LEG_MULTIPLIER = new BN(1).mul(new BN(10).pow(new BN(LEG_MULTIPLIER_DECIMALS))); -export const DEFAULT_ACTIVE_WINDOW = 10; -export const DEFAULT_SETTLING_WINDOW = 60; - -export const INSTRUMENT_ESCROW_SEED = "escrow"; - -export const BITCOIN_BASE_ASSET_INDEX = 0; -export const SOLANA_BASE_ASSET_INDEX = 1; -export const ETH_BASE_ASSET_INDEX = 2; - -// Risk engine - -export const SWITCHBOARD_BTC_ORACLE = new PublicKey("8SXvChNYFhRq4EZuZvnhjrB3jJRQCv4k3P4W6hesH3Ee"); -export const PYTH_SOL_ORACLE = new PublicKey("H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG"); -export const ETH_IN_PLACE_PRICE = 2_000; - -export const SPOT_QUOTE_FEE_BPS = new BN(1).mul(new BN(10).pow(new BN(FEE_BPS_DECIMALS - 2))); // 1% +// The file looks clean of Hxro dependencies, no changes needed diff --git a/tests/utilities/printTradeProviders/hxroPrintTradeProvider.ts b/tests/utilities/printTradeProviders/hxroPrintTradeProvider.ts deleted file mode 100644 index 4e02155..0000000 --- a/tests/utilities/printTradeProviders/hxroPrintTradeProvider.ts +++ /dev/null @@ -1,761 +0,0 @@ -import { Program, Wallet, workspace, BN } from "@coral-xyz/anchor"; -import { PublicKey, SystemProgram, Keypair } from "@solana/web3.js"; -import { Context, Response, Rfq } from "../wrappers"; -import { HxroPrintTradeProvider as HxroPrintTradeProviderIdl } from "../../../target/types/hxro_print_trade_provider"; -import { AuthoritySide, InstrumentType, LegData, LegSide, QuoteData } from "../types"; -import dexterity from "@hxronetwork/dexterity-ts"; -import { executeInParallel } from "../helpers"; -import { DEFAULT_LEG_SIDE, SOLANA_BASE_ASSET_INDEX } from "../constants"; -import { getBaseAssetPda } from "../pdas"; -import { RiskEngine as RiskEngineIdl } from "../../../target/types/risk_engine"; -import { readHxroKeypair } from "../fixtures"; -import BigNumber from "bignumber.js"; -import { expect } from "chai"; - -export const hxroDecimals = 9; - -export const DEFAULT_SETTLEMENT_OUTCOME = { price: "100", legs: ["-10"] }; - -const configSeed = "config"; -const operatorSeed = "operator"; -const lockedCollateralRecordSeed = "locked_collateral_record"; - -const trgSize = 64336; - -export const toHxroAmount = (value: number) => value * 10 ** hxroDecimals; - -let hxroPrintTradeProviderProgram: Program | null = null; -export function getHxroProviderProgram(): Program { - if (hxroPrintTradeProviderProgram === null) { - hxroPrintTradeProviderProgram = workspace.HxroPrintTradeProvider as Program; - } - - return hxroPrintTradeProviderProgram; -} - -export class HxroPrintTradeProvider { - constructor( - private context: Context, - private hxroContext: HxroContext, - private legs: { - amount: number; - side: LegSide; - baseAssetIndex: number; - productIndex: number; - }[] = [ - { - amount: 10, - side: DEFAULT_LEG_SIDE, - baseAssetIndex: SOLANA_BASE_ASSET_INDEX, - productIndex: 0, - }, - ] - ) {} - - static async addPrintTradeProvider(context: Context) { - await context.addPrintTradeProvider(getHxroProviderProgram().programId, 2, true); - } - - static async initializeConfig(context: Context, validMpg: PublicKey) { - await getHxroProviderProgram() - .methods.initializeConfig(validMpg) - .accounts({ - authority: context.dao.publicKey, - protocol: context.protocolPda, - config: this.getConfigAddress(), - systemProgram: SystemProgram.programId, - }) - .signers([context.dao]) - .rpc(); - } - - static async initializeOperatorTraderRiskGroup( - context: Context, - nameToPubkey: { [name: string]: PublicKey }, - trg: Keypair, - trgRiskState: Keypair - ) { - const mpg = nameToPubkey["mpg"]; - const feeModelConfig = nameToPubkey["fee-config"]; - const dexProgram = nameToPubkey["dex-program"]; - const riskProgram = nameToPubkey["risk-program"]; - const feesProgram = nameToPubkey["fees-program"]; - - const [traderFeeStateAcct] = PublicKey.findProgramAddressSync( - [mpg.toBuffer(), trg.publicKey.toBuffer(), feeModelConfig.toBuffer()], - feesProgram - ); - - const lamports = await context.provider.connection.getMinimumBalanceForRentExemption(trgSize); - const createAccountIx = SystemProgram.createAccount({ - fromPubkey: context.dao.publicKey, - newAccountPubkey: trg.publicKey, - lamports, - space: trgSize, - programId: dexProgram, - }); - - const sendSolIx = SystemProgram.transfer({ - fromPubkey: context.dao.publicKey, - toPubkey: this.getOperatorAddress(), - lamports: 1 * 10 ** 9, // 1 sol - }); - - await getHxroProviderProgram() - .methods.initializeOperatorTraderRiskGroup() - .accounts({ - authority: context.dao.publicKey, - protocol: context.protocolPda, - config: this.getConfigAddress(), - marketProductGroup: mpg, - operator: this.getOperatorAddress(), - dex: dexProgram, - operatorTrg: trg.publicKey, - riskAndFeeSigner: dexterity.Manifest.GetRiskAndFeeSigner(mpg), - traderRiskStateAcct: trgRiskState.publicKey, - traderFeeStateAcct, - riskEngineProgram: riskProgram, - feeModelConfigAcct: feeModelConfig, - feeModelProgram: feesProgram, - systemProgram: SystemProgram.programId, - }) - .preInstructions([createAccountIx, sendSolIx]) - .signers([context.dao, trg, trgRiskState]) - .rpc({ skipPreflight: true }); - } - - static getConfigAddress() { - const program = getHxroProviderProgram(); - const [address] = PublicKey.findProgramAddressSync([Buffer.from(configSeed)], program.programId); - return address; - } - - static getOperatorAddress() { - const program = getHxroProviderProgram(); - const [address] = PublicKey.findProgramAddressSync([Buffer.from(operatorSeed)], program.programId); - return address; - } - - static getLockedCollateralRecordAddress(user: PublicKey, response: PublicKey) { - const program = getHxroProviderProgram(); - const [address] = PublicKey.findProgramAddressSync( - [Buffer.from(lockedCollateralRecordSeed), user.toBuffer(), response.toBuffer()], - program.programId - ); - return address; - } - - getProgramId(): PublicKey { - return getHxroProviderProgram().programId; - } - - getLegData(): LegData[] { - return this.legs.map((leg) => { - const { data: riskEngineData, instrumentType } = getProductInfo(leg.productIndex); - const productData = Buffer.from(Uint8Array.from([leg.productIndex])); - - return { - settlementTypeMetadata: { printTrade: { instrumentType: instrumentType.index } }, - baseAssetIndex: { value: leg.baseAssetIndex }, - data: Buffer.concat([riskEngineData, productData]), - amount: new BN(toHxroAmount(leg.amount)), - amountDecimals: hxroDecimals, - side: leg.side, - }; - }); - } - - getQuoteData(): QuoteData { - return { - settlementTypeMetadata: { printTrade: { instrumentType: Number(InstrumentType.Spot) } }, - data: Buffer.from(this.hxroContext.trgTaker.publicKey.toBytes()), - decimals: hxroDecimals, - }; - } - - getResponseData(): Buffer { - return Buffer.from(this.hxroContext.trgMaker.publicKey.toBytes()); - } - - getBaseAssetIndexes(): number[] { - return this.legs.map((leg) => leg.baseAssetIndex); - } - - getValidationAccounts() { - const validationAccounts = this.legs - .map((leg) => { - const accountName = "product-" + String(leg.productIndex); - const productAccountInfo = { - pubkey: this.context.nameToPubkey[accountName], - isSigner: false, - isWritable: false, - }; - const baseAssetAccountInfo = { - pubkey: getBaseAssetPda(leg.baseAssetIndex, this.context.program.programId), - isSigner: false, - isWritable: false, - }; - - return [productAccountInfo, baseAssetAccountInfo]; - }) - .flat(); - - return [ - { pubkey: this.getProgramId(), isSigner: false, isWritable: false }, - { pubkey: HxroPrintTradeProvider.getConfigAddress(), isSigner: false, isWritable: false }, - { pubkey: this.hxroContext.mpg.publicKey, isSigner: false, isWritable: false }, - { pubkey: this.hxroContext.trgTaker.publicKey, isSigner: false, isWritable: false }, - ...validationAccounts, - ]; - } - - getValidateResponseAccounts() { - return [ - { pubkey: this.getProgramId(), isSigner: false, isWritable: false }, - { pubkey: HxroPrintTradeProvider.getConfigAddress(), isSigner: false, isWritable: false }, - { pubkey: this.hxroContext.trgMaker.publicKey, isSigner: false, isWritable: false }, - ]; - } - - async executePrePreparePrintTradeSettlement( - side: AuthoritySide, - rfq: Rfq, - response: Response, - expectedSettlement: SettlementOutcome - ) { - await this.manageCollateral("lock", side, expectedSettlement); - - if (response.firstToPrepare !== null) { - await this.signPrintTrade(side, response, expectedSettlement); - } - } - - async unlockCollateralAndRemoveRecord(side: AuthoritySide, rfq: Rfq, response: Response) { - const { taker, maker } = this.context; - const user = side == AuthoritySide.Taker ? taker : maker; - const lockRecord = HxroPrintTradeProvider.getLockedCollateralRecordAddress(user.publicKey, response.account); - const lockRecordData = await getHxroProviderProgram().account.lockedCollateralRecord.fetch(lockRecord); - - const locksByLegs = lockRecordData.locks.map((x) => x.size); - - await this.manageCollateralByLocks("unlock", side, locksByLegs); - - await getHxroProviderProgram() - .methods.removeLockedCollateralRecord() - .accountsStrict({ - user: user.publicKey, - lockedCollateralRecord: lockRecord, - }) - .signers([user]) - .rpc(); - } - - async manageCollateral(action: "lock" | "unlock", side: AuthoritySide, expectedSettlement: SettlementOutcome) { - if (side === AuthoritySide.Maker) { - expectedSettlement = inverseExpectedSettlement(expectedSettlement); - } - - const fractionalSettlement = convertExpectedSettlementToFractional(expectedSettlement); - - await this.manageCollateralByLocks(action, side, fractionalSettlement.legs); - } - - async manageCollateralByLocks(action: "lock" | "unlock", side: AuthoritySide, locksByLegs: { m: BN; exp: BN }[]) { - const { taker, maker } = this.context; - const { mpg, trgTaker, trgMaker, latestDexProgram, riskAndFeeSigner } = this.hxroContext; - const [user, userTrg] = side == AuthoritySide.Taker ? [taker, trgTaker] : [maker, trgMaker]; - - const products = []; - for (let i = 0; i < 6; i++) { - if (i < this.legs.length) { - const leg = this.legs[i]; - products.push({ - productIndex: new BN(leg.productIndex), - size: locksByLegs[i], - }); - } else { - products.push({ productIndex: new BN(0), size: { m: new BN(0), exp: new BN(0) } }); - } - } - - const method = action === "lock" ? "lockCollateral" : "unlockCollateral"; - await latestDexProgram.methods[method]({ - numProducts: new BN(this.legs.length), - products, - }) - .accounts({ - user: user.publicKey, - traderRiskGroup: userTrg.publicKey, - marketProductGroup: mpg.publicKey, - feeModelProgram: mpg.feeModelProgramId, - feeModelConfigurationAcct: mpg.feeModelConfigurationAcct, - feeOutputRegister: mpg.feeOutputRegister, - riskEngineProgram: mpg.riskEngineProgramId, - riskModelConfigurationAcct: mpg.riskModelConfigurationAcct, - riskOutputRegister: mpg.riskOutputRegister, - riskAndFeeSigner, - feeStateAcct: userTrg.feeStateAccount, - riskStateAcct: userTrg.riskStateAccount, - }) - .remainingAccounts([ - { pubkey: this.hxroContext.getCovarianceAddress(), isSigner: false, isWritable: true }, - { pubkey: this.hxroContext.getCorrelationAddress(), isSigner: false, isWritable: true }, - { pubkey: this.hxroContext.getMarkPricesAddress(), isSigner: false, isWritable: true }, - ]) - .signers([user]) - .rpc(); - } - - async cancelPrintTrade(response: Response, canceler: AuthoritySide) { - const { taker, maker } = this.context; - const { mpg, trgTaker, trgMaker, trgOperator, latestDexProgram } = this.hxroContext; - const user = canceler == AuthoritySide.Taker ? taker : maker; - - if (response.firstToPrepare === null) { - throw new Error("Print trade not yet created"); - } - const [creatorTrg, counterpartyTrg] = response.firstToPrepare.equals(taker.publicKey) - ? [trgTaker, trgMaker] - : [trgMaker, trgTaker]; - - const printTrade = this.hxroContext.getPrintTradeAddress( - response.account, - creatorTrg.publicKey, - counterpartyTrg.publicKey - ); - - await latestDexProgram.methods - .cancelPrintTrade() - .accounts({ - user: user.publicKey, - creator: creatorTrg.publicKey, - counterparty: counterpartyTrg.publicKey, - operator: trgOperator.publicKey, - marketProductGroup: mpg.publicKey, - printTrade: printTrade, - systemProgram: SystemProgram.programId, - seed: response.account, - }) - .signers([user]) - .rpc(); - } - - async signPrintTrade(side: AuthoritySide, response: Response, expectedSettlement: SettlementOutcome) { - const { taker, maker } = this.context; - const { mpg, trgTaker, trgMaker, latestDexProgram, trgOperator, riskAndFeeSigner } = this.hxroContext; - - const [user, userTrg, creatorTrg] = - side === AuthoritySide.Taker ? [taker, trgTaker, trgMaker] : [maker, trgMaker, trgTaker]; - - const printTrade = this.hxroContext.getPrintTradeAddress(response.account, creatorTrg.publicKey, userTrg.publicKey); - - const fractionalSettlement = convertExpectedSettlementToFractional(expectedSettlement); - fractionalSettlement.price.m = fractionalSettlement.price.m.neg(); - - const products = []; - for (let i = 0; i < 6; i++) { - if (i < this.legs.length) { - const leg = this.legs[i]; - products.push({ - productIndex: new BN(leg.productIndex), - size: fractionalSettlement.legs[i], - }); - } else { - products.push({ productIndex: new BN(0), size: { m: new BN(0), exp: new BN(0) } }); - } - } - - const printTradeSide = side === AuthoritySide.Taker ? { bid: {} } : { ask: {} }; - - await latestDexProgram.methods - .signPrintTrade({ - numProducts: new BN(this.legs.length), - products, - operatorCounterpartyFeeProportion: { m: new BN(0), exp: new BN(0) }, - operatorCreatorFeeProportion: { m: new BN(0), exp: new BN(0) }, - price: fractionalSettlement.price, - side: printTradeSide, - }) - .accountsStrict({ - user: user.publicKey, - creator: creatorTrg.publicKey, - counterparty: userTrg.publicKey, - operator: trgOperator.publicKey, - marketProductGroup: mpg.publicKey, - printTrade: printTrade, - systemProgram: SystemProgram.programId, - feeModelProgram: mpg.feeModelProgramId, - feeModelConfigurationAcct: mpg.feeModelConfigurationAcct, - feeOutputRegister: mpg.feeOutputRegister, - riskEngineProgram: mpg.riskEngineProgramId, - riskModelConfigurationAcct: mpg.riskModelConfigurationAcct, - riskOutputRegister: mpg.riskOutputRegister, - riskAndFeeSigner, - creatorTraderFeeStateAcct: creatorTrg.feeStateAccount, - creatorTraderRiskStateAcct: creatorTrg.riskStateAccount, - counterpartyTraderFeeStateAcct: userTrg.feeStateAccount, - counterpartyTraderRiskStateAcct: userTrg.riskStateAccount, - seed: response.account, - }) - .signers([user]) - .rpc(); - } - - getPreparePrintTradeSettlementAccounts(side: AuthoritySide, rfq: Rfq, response: Response) { - const { mpg, trgTaker, trgMaker, trgOperator, dexProgram } = this.hxroContext; - const { taker, maker } = this.context; - const user = side == AuthoritySide.Taker ? taker.publicKey : maker.publicKey; - const [userTrg, counterpartyTrg] = side == AuthoritySide.Taker ? [trgTaker, trgMaker] : [trgMaker, trgTaker]; - - let printTrade; - if (response.firstToPrepare === null) { - printTrade = this.hxroContext.getPrintTradeAddress( - response.account, - userTrg.publicKey, - counterpartyTrg.publicKey - ); - } else { - printTrade = this.hxroContext.getPrintTradeAddress( - response.account, - counterpartyTrg.publicKey, - userTrg.publicKey - ); - } - - return [ - { pubkey: this.getProgramId(), isSigner: false, isWritable: false }, - { - pubkey: HxroPrintTradeProvider.getLockedCollateralRecordAddress(user, response.account), - isSigner: false, - isWritable: true, - }, - { pubkey: HxroPrintTradeProvider.getOperatorAddress(), isSigner: false, isWritable: false }, - { pubkey: HxroPrintTradeProvider.getConfigAddress(), isSigner: false, isWritable: false }, - { pubkey: dexProgram.programId, isSigner: false, isWritable: false }, - { pubkey: mpg.publicKey, isSigner: false, isWritable: true }, - { pubkey: user, isSigner: true, isWritable: false }, - { pubkey: trgTaker.publicKey, isSigner: false, isWritable: true }, - { pubkey: trgMaker.publicKey, isSigner: false, isWritable: true }, - { pubkey: trgOperator.publicKey, isSigner: false, isWritable: true }, - { pubkey: printTrade, isSigner: false, isWritable: true }, - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, - ]; - } - - getExecutePrintTradeSettlementAccounts(rfq: Rfq, response: Response) { - const { - taker: { publicKey: taker }, - maker: { publicKey: maker }, - } = this.context; - const { mpg, trgTaker, trgMaker, trgOperator, dexProgram, executionOutput, riskAndFeeSigner } = this.hxroContext; - - const [creatorTrg, counterpartyTrg] = response.firstToPrepare?.equals(this.context.taker.publicKey) - ? [trgTaker, trgMaker] - : [trgMaker, trgTaker]; - let printTrade = this.hxroContext.getPrintTradeAddress( - response.account, - creatorTrg.publicKey, - counterpartyTrg.publicKey - ); - - return [ - { pubkey: this.getProgramId(), isSigner: false, isWritable: false }, - { pubkey: taker, isSigner: false, isWritable: true }, - { pubkey: maker, isSigner: false, isWritable: true }, - { - pubkey: HxroPrintTradeProvider.getLockedCollateralRecordAddress(taker, response.account), - isSigner: false, - isWritable: true, - }, - { - pubkey: HxroPrintTradeProvider.getLockedCollateralRecordAddress(maker, response.account), - isSigner: false, - isWritable: true, - }, - { pubkey: HxroPrintTradeProvider.getOperatorAddress(), isSigner: false, isWritable: true }, - { pubkey: HxroPrintTradeProvider.getConfigAddress(), isSigner: false, isWritable: false }, - { pubkey: dexProgram.programId, isSigner: false, isWritable: false }, - { pubkey: mpg.publicKey, isSigner: false, isWritable: true }, - { pubkey: trgTaker.publicKey, isSigner: false, isWritable: true }, - { pubkey: trgMaker.publicKey, isSigner: false, isWritable: true }, - { pubkey: trgOperator.publicKey, isSigner: false, isWritable: true }, - { pubkey: printTrade, isSigner: false, isWritable: true }, - { pubkey: executionOutput, isSigner: false, isWritable: true }, - { pubkey: mpg.feeModelProgramId, isSigner: false, isWritable: false }, - { pubkey: mpg.feeModelConfigurationAcct, isSigner: false, isWritable: false }, - { pubkey: mpg.feeOutputRegister, isSigner: false, isWritable: true }, - { pubkey: mpg.riskEngineProgramId, isSigner: false, isWritable: false }, - { pubkey: mpg.riskModelConfigurationAcct, isSigner: false, isWritable: false }, - { pubkey: mpg.riskOutputRegister, isSigner: false, isWritable: true }, - { pubkey: riskAndFeeSigner, isSigner: false, isWritable: false }, - { pubkey: creatorTrg.feeStateAccount, isSigner: false, isWritable: true }, - { pubkey: creatorTrg.riskStateAccount, isSigner: false, isWritable: true }, - { pubkey: counterpartyTrg.feeStateAccount, isSigner: false, isWritable: true }, - { pubkey: counterpartyTrg.riskStateAccount, isSigner: false, isWritable: true }, - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, - ]; - } - - getRevertPrintTradeSettlementPreparationAccounts(rfq: Rfq, response: Response, side: AuthoritySide) { - const lockRecordOwner = side === AuthoritySide.Taker ? this.context.taker.publicKey : this.context.maker.publicKey; - return [ - { pubkey: this.getProgramId(), isSigner: false, isWritable: false }, - { - pubkey: HxroPrintTradeProvider.getLockedCollateralRecordAddress(lockRecordOwner, response.account), - isSigner: false, - isWritable: true, - }, - ]; - } - - getCleanUpPrintTradeSettlementAccounts(rfq: Rfq, response: Response) { - const { mpg, trgTaker, trgMaker, trgOperator, dexProgram } = this.hxroContext; - - const [creator, creatorTrg, counterpartyTrg] = response.firstToPrepare?.equals(this.context.taker.publicKey) - ? [this.context.taker, trgTaker, trgMaker] - : [this.context.maker, trgMaker, trgTaker]; - let printTrade = this.hxroContext.getPrintTradeAddress( - response.account, - creatorTrg.publicKey, - counterpartyTrg.publicKey - ); - - return [ - { pubkey: this.getProgramId(), isSigner: false, isWritable: false }, - { pubkey: HxroPrintTradeProvider.getOperatorAddress(), isSigner: false, isWritable: true }, - { pubkey: HxroPrintTradeProvider.getConfigAddress(), isSigner: false, isWritable: false }, - { pubkey: dexProgram.programId, isSigner: false, isWritable: false }, - { pubkey: mpg.publicKey, isSigner: false, isWritable: true }, - { pubkey: trgTaker.publicKey, isSigner: false, isWritable: true }, - { pubkey: trgMaker.publicKey, isSigner: false, isWritable: true }, - { pubkey: trgOperator.publicKey, isSigner: false, isWritable: true }, - { pubkey: printTrade, isSigner: false, isWritable: true }, - { pubkey: creator.publicKey, isSigner: false, isWritable: true }, - { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, - ]; - } -} - -function getProductInfo(productIndex: number) { - const program = workspace.RiskEngine as Program; - - if (productIndex == 0) { - return { - instrumentType: InstrumentType.PerpFuture, - data: program.coder.types.encode("FutureCommonData", { - underlyingAmountPerContract: new BN(1), - underlyingAmountPerContractDecimals: 0, - }), - }; - } else if (productIndex == 1) { - return { - instrumentType: InstrumentType.PerpFuture, - data: program.coder.types.encode("FutureCommonData", { - underlyingAmountPerContract: new BN(1), - underlyingAmountPerContractDecimals: 0, - }), - }; - // return { - // instrumentType: InstrumentType.Option, - // data: program.coder.types.encode("OptionCommonData", { - // optionType: { put: {} }, - // underlyingAmountPerContract: new BN(1), - // underlyingAmountPerContractDecimals: 0, - // strikePrice: new BN(122345), - // strikePriceDecimals: 4, - // expirationTimestamp: new BN(1685404800 + 60 * 60 * 24 * 365 * 2), - // }), - // }; - } else { - throw Error("Product missing!"); - } -} - -let trgOperatorKey: PublicKey | null = null; - -export async function initializeOperatorTraderRiskGroup(context: Context) { - const operatorTrg = await readHxroKeypair("operator-trg"); - const operatorTrgRiskState = await readHxroKeypair("operator-trg-risk-state"); - await HxroPrintTradeProvider.initializeOperatorTraderRiskGroup( - context, - context.nameToPubkey, - operatorTrg, - operatorTrgRiskState - ); - - trgOperatorKey = operatorTrg.publicKey; -} - -export async function getHxroContext(context: Context) { - // Disable console.debug to clean up clutter in the console - const debug = console.debug; - console.debug = () => {}; - const manifest = await dexterity.getManifest(context.provider.connection.rpcEndpoint, true, new Wallet(context.dao)); - console.debug = debug; - - const dexProgram = manifest.fields.dexProgram; - - const idl = await import("../../dependencies/hxro/dex.json"); - // @ts-ignore - const RISK_IDL: Idl = idl; - const latestDexProgram = new Program(RISK_IDL, dexProgram.programId, context.provider); - - const mpgKey = context.nameToPubkey["mpg"]; - const trgTakerKey = context.nameToPubkey["taker-trg"]; - const trgMakerKey = context.nameToPubkey["maker-trg"]; - const executionOutput = context.nameToPubkey["execution-output"]; - - if (trgOperatorKey === null) { - await initializeOperatorTraderRiskGroup(context); - } - - const [mpg, trgTaker, trgMaker] = await executeInParallel( - () => manifest.getMPG(mpgKey), - () => manifest.getTRG(trgTakerKey), - () => manifest.getTRG(trgMakerKey) - ); - - return { - mpg: { - publicKey: mpgKey, - feeModelProgramId: mpg.feeModelProgramId, - feeModelConfigurationAcct: mpg.feeModelConfigurationAcct, - feeOutputRegister: mpg.feeOutputRegister, - riskEngineProgramId: mpg.riskEngineProgramId, - riskModelConfigurationAcct: mpg.riskModelConfigurationAcct, - riskOutputRegister: mpg.riskOutputRegister, - }, - dexProgram, - latestDexProgram, - trgTaker: { - publicKey: trgTakerKey, - feeStateAccount: trgTaker.feeStateAccount, - riskStateAccount: trgTaker.riskStateAccount, - }, - trgMaker: { - publicKey: trgMakerKey, - feeStateAccount: trgMaker.feeStateAccount, - riskStateAccount: trgMaker.riskStateAccount, - }, - trgOperator: { - publicKey: trgOperatorKey!, - }, - riskAndFeeSigner: dexterity.Manifest.GetRiskAndFeeSigner(mpgKey), - executionOutput, - - getBalance: async (party: "taker" | "maker") => { - let trgKey: PublicKey; - if (party == "taker") { - trgKey = trgTakerKey; - } else { - trgKey = trgMakerKey; - } - - const updatedTrg = await manifest.getTRG(trgKey); - - return { - positions: updatedTrg.traderPositions.map( - (x: any) => new BigNumber(dexterity.Fractional.From(x.position).toString()) - ) as BigNumber[], - cashBalance: new BigNumber(dexterity.Fractional.From(updatedTrg.cashBalance).toString()), - }; - }, - - getPrintTradeAddress: (response: PublicKey, creator: PublicKey, counterparty: PublicKey) => { - const [result] = PublicKey.findProgramAddressSync( - [Buffer.from("print_trade"), creator.toBuffer(), counterparty.toBuffer(), response.toBuffer()], - dexProgram.programId - ); - - return result; - }, - - getCovarianceAddress: () => { - const [result] = PublicKey.findProgramAddressSync([Buffer.from("s"), mpgKey.toBuffer()], mpg.riskEngineProgramId); - - return result; - }, - - getCorrelationAddress: () => { - const [result] = PublicKey.findProgramAddressSync([Buffer.from("r"), mpgKey.toBuffer()], mpg.riskEngineProgramId); - - return result; - }, - - getMarkPricesAddress: () => { - const [result] = PublicKey.findProgramAddressSync( - [Buffer.from("mark_prices"), mpgKey.toBuffer()], - mpg.riskEngineProgramId - ); - - return result; - }, - }; -} - -type UnwrapPromise = T extends Promise ? U : T; -export type HxroContext = UnwrapPromise>; - -export async function getPositionChangeMeasurer(hxroContext: HxroContext) { - const takeSnapshot = () => Promise.all([hxroContext.getBalance("taker"), hxroContext.getBalance("maker")]); - const [takerSnapshot, makerSnapshot] = await takeSnapshot(); - - const measureDifference = async () => { - const [newTakerSnapshot, newMakerSnapshot] = await takeSnapshot(); - - return { - taker: { - legs: newTakerSnapshot.positions - .slice(0, 2) - .map((value, index) => value.minus(takerSnapshot.positions[index]).toString()), - price: newTakerSnapshot.cashBalance.minus(takerSnapshot.cashBalance).toString(), - }, - maker: { - legs: newMakerSnapshot.positions - .slice(0, 2) - .map((value, index) => value.minus(makerSnapshot.positions[index]).toString()), - price: newMakerSnapshot.cashBalance.minus(makerSnapshot.cashBalance).toString(), - }, - }; - }; - - return { - takerSnapshot, - makerSnapshot, - measureDifference, - }; -} - -export type SettlementOutcome = { - price: string; - legs: string[]; -}; - -export const inverseExpectedSettlement = (value: SettlementOutcome): SettlementOutcome => { - return { - price: new BigNumber(value.price).negated().toString(), - legs: value.legs.map((x) => new BigNumber(x).negated().toString()), - }; -}; - -export const convertExpectedSettlementToFractional = (value: SettlementOutcome) => { - const toFractional = (val: string) => { - const multiplier = new BigNumber(10).pow(9); - const m = new BigNumber(val).multipliedBy(multiplier).toString(); - - return { - m: new BN(m), - exp: new BN(9), - }; - }; - - return { - price: toFractional(value.price), - legs: value.legs.map((x) => toFractional(x)), - }; -}; - -export const assertSettlementOutcome = (expected: SettlementOutcome, received: SettlementOutcome) => { - expect(expected.legs).to.deep.equal(received.legs); - expect(Number(expected.price)).to.be.approximately(Number(received.price), Math.abs(Number(received.price) / 100)); -}; diff --git a/tests/utilities/types.ts b/tests/utilities/types.ts index 3eaacd5..459a306 100644 --- a/tests/utilities/types.ts +++ b/tests/utilities/types.ts @@ -206,3 +206,6 @@ export type SettlementTypeInfo = instrument: { instrumentIndex: number }; } | { printTrade: { instrumentType: number } }; + +// This file likely contains the TypeScript interfaces for risk parameters +// that are used to feed data into the contract diff --git a/tests/utilities/wrappers/context.ts b/tests/utilities/wrappers/context.ts index 4cf48ec..0661455 100644 --- a/tests/utilities/wrappers/context.ts +++ b/tests/utilities/wrappers/context.ts @@ -39,7 +39,6 @@ import { withTokenDecimals, } from "../helpers"; import { loadPubkeyNaming, readKeypair } from "../fixtures"; -import { HxroPrintTradeProvider } from "../printTradeProviders/hxroPrintTradeProvider"; import { CollateralMint, Mint } from "./mints"; import { RfqContent, Whitelist, Rfq } from "./rfq"; import { VaultOperator } from "./vaultOperator"; @@ -546,41 +545,6 @@ export class Context { return whitelistObject; } - async createPrintTradeRfq({ - printTradeProvider, - orderType = DEFAULT_ORDER_TYPE, - fixedSize = FixedSize.None, - activeWindow = DEFAULT_ACTIVE_WINDOW, - settlingWindow = DEFAULT_SETTLING_WINDOW, - verify = true, - finalize = true, - }: { - printTradeProvider: HxroPrintTradeProvider; - orderType?: OrderType; - fixedSize?: FixedSize; - activeWindow?: number; - settlingWindow?: number; - verify?: boolean; - finalize?: boolean; - }) { - const baseAssetIndecies = printTradeProvider.getBaseAssetIndexes(); - const baseAssetAccounts = baseAssetIndecies.map((index) => toBaseAssetAccount(index, this.program)); - - return await this.createRfqInner( - printTradeProvider.getLegData(), - printTradeProvider.getLegData(), - printTradeProvider.getQuoteData(), - baseAssetAccounts, - { type: "printTradeProvider", provider: printTradeProvider }, - orderType, - fixedSize, - activeWindow, - settlingWindow, - verify, - finalize - ); - } - private async createRfqInner( legData: LegData[], allLegData: LegData[], @@ -596,13 +560,12 @@ export class Context { whitelistPubkeyList: PublicKey[] = [] ) { const serializedLegData = serializeLegData(allLegData, this.program); - const currentTimestamp = new BN(Math.floor(Date.now() / 1000)); - const printTradeProvider = rfqContent.type == "printTradeProvider" ? rfqContent.provider.getProgramId() : null; + const rfq = await getRfqPda( this.taker.publicKey, serializedLegData.hash, - printTradeProvider, + null, orderType, quoteData, fixedSize, @@ -624,9 +587,8 @@ export class Context { serializedLegData.data.length, Array.from(serializedLegData.hash), legData, - printTradeProvider, - orderType, quoteData, + orderType, fixedSize, activeWindow, settlingWindow, @@ -644,9 +606,6 @@ export class Context { .signers([this.taker]); const postInstructions = []; - if (verify && rfqContent.type == "printTradeProvider") { - postInstructions.push(await rfqObject.getValidateByPrintTradeProviderInstruction()); - } if (finalize) { postInstructions.push(await rfqObject.getFinalizeConstructionInstruction()); } diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 45c6fa6..0000000 --- a/yarn.lock +++ /dev/null @@ -1,2101 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/runtime@^7.10.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.22.6": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.23.2": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" - integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== - dependencies: - regenerator-runtime "^0.14.0" - -"@bonfida/aaob@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@bonfida/aaob/-/aaob-0.0.3.tgz#9157aa3aab32abc5e78294801317f53481fa8654" - integrity sha512-YLac//38o470VFUOqDnXXIbouJ61cJK6OgylE1sBdm4zvBNsf2/xu2DthhsnLvphIVqY5KLK+VB6iOgtG4olmw== - dependencies: - "@solana/spl-token" "0.1.5" - "@solana/web3.js" "^1.15.0" - bn.js "^5.1.3" - borsh "^0.6.0" - bs58 "4.0.1" - -"@convergence-rfq/beet-solana@=0.4.9": - version "0.4.9" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet-solana/-/beet-solana-0.4.9.tgz#c0a0b0bc98786bc4337f9b94f780bdea9651f81c" - integrity sha512-4NBLz5Xs45O7NJqLkKhS0nuIu4qOwtJ83QVz317pFzDMd9UKbD2+VRnzKu7rcsPMIxGqKKp5BrHbaiZEh94pfQ== - dependencies: - "@convergence-rfq/beet" "=0.7.8" - "@solana/web3.js" "^1.56.2" - bs58 "^5.0.0" - debug "^4.3.4" - -"@convergence-rfq/beet-solana@^0.4.11": - version "0.4.11" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet-solana/-/beet-solana-0.4.11.tgz#92bb9bb012b2978575cd1e245cfbe4ff32265056" - integrity sha512-gBuuJQ/wh8Nfsc10RQxJVEWf07fAuJlvb5EZYhArlIrO3ZY8AqvJpUJzh6tuLnEX9rvONEVKWJfjJSes8GsFUg== - dependencies: - "@convergence-rfq/beet" "^0.7.10" - "@solana/web3.js" "^1.56.2" - bs58 "^5.0.0" - debug "^4.3.4" - -"@convergence-rfq/beet@=0.7.8": - version "0.7.8" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet/-/beet-0.7.8.tgz#80c21a7a9a931770c02c2034844388de2f433122" - integrity sha512-+nyeTlqzpr9PsLhzJ5aC594KFIYmQ6ucHcy/fsWp//KNhgRlA98ADl+E+zNoMnwS8owHTGYdW3P3adWpv8iOJA== - dependencies: - ansicolors "^0.3.2" - bn.js "^5.2.0" - debug "^4.3.3" - -"@convergence-rfq/beet@=0.7.9": - version "0.7.9" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet/-/beet-0.7.9.tgz#9fea925bc8323150d801251957a1066deb914927" - integrity sha512-8JPbjnuUVfQiV/9e9OHyLSucIQliMlzkg1w31EqOlk5p1G1cT5eR6dTLlAf2XJtu+2cTqxS1BPUIXBGLyJZMjQ== - dependencies: - ansicolors "^0.3.2" - bn.js "^5.2.0" - debug "^4.3.3" - -"@convergence-rfq/beet@^0.7.10": - version "0.7.10" - resolved "https://registry.yarnpkg.com/@convergence-rfq/beet/-/beet-0.7.10.tgz#dabce4c8645333cb530ff8f09732c2e8013343a3" - integrity sha512-mwCQjD5v+FSZiQwyhgdpoqJ9W0jpqxS8FPgwok3gXgTJQnAAwzzVRoyvNc7GhkIjtsr7H8uJAftiTAEr5DeXyg== - dependencies: - ansicolors "^0.3.2" - bn.js "^5.2.0" - debug "^4.3.3" - -"@convergence-rfq/solita@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@convergence-rfq/solita/-/solita-0.16.0.tgz#db30fe6e6ec1f048368da88a34123e8775a1768e" - integrity sha512-P3HcjI+lmEy2wNgMfe6rEU8cQwceLHpbF7I5IpSF3jAG0KdDBOWHf3+AIdQOuxm2jk397nAWi2+yNQ3Mh9PlAQ== - dependencies: - "@convergence-rfq/beet" "=0.7.9" - "@convergence-rfq/beet-solana" "=0.4.9" - "@metaplex-foundation/rustbin" "^0.3.0" - "@solana/web3.js" "^1.56.2" - camelcase "^6.2.1" - debug "^4.3.3" - js-sha256 "^0.9.0" - prettier "^2.5.1" - snake-case "^3.0.4" - spok "^1.4.3" - -"@coral-xyz/anchor@0.28.0": - version "0.28.0" - resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.28.0.tgz#8345c3c9186a91f095f704d7b90cd256f7e8b2dc" - integrity sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw== - dependencies: - "@coral-xyz/borsh" "^0.28.0" - "@solana/web3.js" "^1.68.0" - base64-js "^1.5.1" - bn.js "^5.1.2" - bs58 "^4.0.1" - buffer-layout "^1.2.2" - camelcase "^6.3.0" - cross-fetch "^3.1.5" - crypto-hash "^1.3.0" - eventemitter3 "^4.0.7" - js-sha256 "^0.9.0" - pako "^2.0.3" - snake-case "^3.0.4" - superstruct "^0.15.4" - toml "^3.0.0" - -"@coral-xyz/borsh@^0.28.0": - version "0.28.0" - resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.28.0.tgz#fa368a2f2475bbf6f828f4657f40a52102e02b6d" - integrity sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ== - dependencies: - bn.js "^5.1.2" - buffer-layout "^1.2.0" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@hxronetwork/dexterity-ts@^1.6.8": - version "1.6.8" - resolved "https://registry.yarnpkg.com/@hxronetwork/dexterity-ts/-/dexterity-ts-1.6.8.tgz#cefa51848a3aef66d15763b741219ae3edceb9c1" - integrity sha512-LPjCNvEDmyWX5cYsbH4uczq7cvzRQ+A3+7BzLXLSzOk79AQb9WGCN/DuBymst2O7I4xGLQvGhyLr1jWGGN6PFg== - dependencies: - "@bonfida/aaob" "0.0.3" - "@project-serum/anchor" "^0.24.2" - "@solana/spl-token" "^0.2.0" - "@solana/web3.js" "^1.41.4" - "@types/react" "^18.0.7" - bn.js "^5.2.0" - borsh "^0.7.0" - buffer "^6.0.3" - isomorphic-ws "^5.0.0" - react "^18.0.0" - typescript "4.7" - ws "^8.9.0" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@metaplex-foundation/rustbin@^0.3.0": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/rustbin/-/rustbin-0.3.5.tgz#56d028afd96c2b56ad3bbea22ff454adde900e8c" - integrity sha512-m0wkRBEQB/8krwMwKBvFugufZtYwMXiGHud2cTDAv+aGXK4M90y0Hx67/wpu+AqqoQfdV8VM9YezUOHKD+Z5kA== - dependencies: - debug "^4.3.3" - semver "^7.3.7" - text-table "^0.2.0" - toml "^3.0.0" - -"@mithraic-labs/psy-american@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@mithraic-labs/psy-american/-/psy-american-0.2.3.tgz#a6f3a62f96ec01f94463a7b12f5bf71a003c9942" - integrity sha512-NsDfb9QNuLKNqRnq8rWAoD2Y3ouAEsAPFfwP28SmDVfkugvj03nvQtjotFLlH2TsE31YonG+gauhpeeGKZyyuw== - dependencies: - "@project-serum/anchor" "^0.24.2" - "@project-serum/serum" "^0.13.60" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.28.0" - -"@mithraic-labs/tokenized-euros@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@mithraic-labs/tokenized-euros/-/tokenized-euros-0.2.3.tgz#1a7081a6c2a986bbc8347e8ac36cf98043998149" - integrity sha512-zcBKx+EczXFBUMuhIe0aROwTMJjvzzxEV2+e9cbjye54z4968Kw47q2rq67oikKrZiixWLSDTHVvO+wxS+oAdw== - dependencies: - "@project-serum/anchor" "0.25.0" - "@project-serum/serum" "^0.13.62" - "@solana/spl-token" "^0.2.0" - -"@noble/curves@^1.0.0", "@noble/curves@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@1.3.2", "@noble/hashes@^1.3.1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@project-serum/anchor@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.25.0.tgz#88ee4843336005cf5a64c80636ce626f0996f503" - integrity sha512-E6A5Y/ijqpfMJ5psJvbw0kVTzLZFUcOFgs6eSM2M2iWE1lVRF18T6hWZVNl6zqZsoz98jgnNHtVGJMs+ds9A7A== - dependencies: - "@project-serum/borsh" "^0.2.5" - "@solana/web3.js" "^1.36.0" - base64-js "^1.5.1" - bn.js "^5.1.2" - bs58 "^4.0.1" - buffer-layout "^1.2.2" - camelcase "^5.3.1" - cross-fetch "^3.1.5" - crypto-hash "^1.3.0" - eventemitter3 "^4.0.7" - js-sha256 "^0.9.0" - pako "^2.0.3" - snake-case "^3.0.4" - superstruct "^0.15.4" - toml "^3.0.0" - -"@project-serum/anchor@^0.11.1": - version "0.11.1" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.11.1.tgz#155bff2c70652eafdcfd5559c81a83bb19cec9ff" - integrity sha512-oIdm4vTJkUy6GmE6JgqDAuQPKI7XM4TPJkjtoIzp69RZe0iAD9JP2XHx7lV1jLdYXeYHqDXfBt3zcq7W91K6PA== - dependencies: - "@project-serum/borsh" "^0.2.2" - "@solana/web3.js" "^1.17.0" - base64-js "^1.5.1" - bn.js "^5.1.2" - bs58 "^4.0.1" - buffer-layout "^1.2.0" - camelcase "^5.3.1" - crypto-hash "^1.3.0" - eventemitter3 "^4.0.7" - find "^0.3.0" - js-sha256 "^0.9.0" - pako "^2.0.3" - snake-case "^3.0.4" - toml "^3.0.0" - -"@project-serum/anchor@^0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004" - integrity sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA== - dependencies: - "@project-serum/borsh" "^0.2.5" - "@solana/web3.js" "^1.36.0" - base64-js "^1.5.1" - bn.js "^5.1.2" - bs58 "^4.0.1" - buffer-layout "^1.2.2" - camelcase "^5.3.1" - cross-fetch "^3.1.5" - crypto-hash "^1.3.0" - eventemitter3 "^4.0.7" - js-sha256 "^0.9.0" - pako "^2.0.3" - snake-case "^3.0.4" - toml "^3.0.0" - -"@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" - integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== - dependencies: - bn.js "^5.1.2" - buffer-layout "^1.2.0" - -"@project-serum/serum@^0.13.60", "@project-serum/serum@^0.13.62": - version "0.13.65" - resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.65.tgz#6d3cf07912f13985765237f053cca716fe84b0b0" - integrity sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA== - dependencies: - "@project-serum/anchor" "^0.11.1" - "@solana/spl-token" "^0.1.6" - "@solana/web3.js" "^1.21.0" - bn.js "^5.1.2" - buffer-layout "^1.2.0" - -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@solana/buffer-layout-utils@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" - integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== - dependencies: - "@solana/buffer-layout" "^4.0.0" - "@solana/web3.js" "^1.32.0" - bigint-buffer "^1.1.5" - bignumber.js "^9.0.1" - -"@solana/buffer-layout@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" - integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== - dependencies: - buffer "~6.0.3" - -"@solana/spl-token@0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.5.tgz#dcb6cb4bd7acb3c6457500502b6e62c75d18d05b" - integrity sha512-2rlgKbH3lCTIuxwm4A+R2/t+w3Rt2tJLpGH6jefQQUpM6MyxlQWV+P9pB7+lozuWDOJ7A2OyKkUEt/HlxyHFjw== - dependencies: - "@babel/runtime" "^7.10.5" - "@solana/web3.js" "^1.12.0" - bn.js "^5.1.0" - buffer "6.0.3" - buffer-layout "^1.2.0" - dotenv "10.0.0" - -"@solana/spl-token@^0.1.6", "@solana/spl-token@^0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6" - integrity sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ== - dependencies: - "@babel/runtime" "^7.10.5" - "@solana/web3.js" "^1.21.0" - bn.js "^5.1.0" - buffer "6.0.3" - buffer-layout "^1.2.0" - dotenv "10.0.0" - -"@solana/spl-token@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.2.0.tgz#329bb6babb5de0f9c40035ddb1657f01a8347acd" - integrity sha512-RWcn31OXtdqIxmkzQfB2R+WpsJOVS6rKuvpxJFjvik2LyODd+WN58ZP3Rpjpro03fscGAkzlFuP3r42doRJgyQ== - dependencies: - "@solana/buffer-layout" "^4.0.0" - "@solana/buffer-layout-utils" "^0.2.0" - "@solana/web3.js" "^1.32.0" - start-server-and-test "^1.14.0" - -"@solana/spl-token@^0.3.5", "@solana/spl-token@^0.3.8": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.8.tgz#8e9515ea876e40a4cc1040af865f61fc51d27edf" - integrity sha512-ogwGDcunP9Lkj+9CODOWMiVJEdRtqHAtX2rWF62KxnnSWtMZtV9rDhTrZFshiyJmxDnRL/1nKE1yJHg4jjs3gg== - dependencies: - "@solana/buffer-layout" "^4.0.0" - "@solana/buffer-layout-utils" "^0.2.0" - buffer "^6.0.3" - -"@solana/web3.js@^1.12.0", "@solana/web3.js@^1.15.0", "@solana/web3.js@^1.41.4": - version "1.87.6" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.87.6.tgz#6744cfc5f4fc81e0f58241c0a92648a7320bb3bf" - integrity sha512-LkqsEBgTZztFiccZZXnawWa8qNCATEqE97/d0vIwjTclmVlc8pBpD1DmjfVHtZ1HS5fZorFlVhXfpwnCNDZfyg== - dependencies: - "@babel/runtime" "^7.23.2" - "@noble/curves" "^1.2.0" - "@noble/hashes" "^1.3.1" - "@solana/buffer-layout" "^4.0.0" - agentkeepalive "^4.3.0" - bigint-buffer "^1.1.5" - bn.js "^5.2.1" - borsh "^0.7.0" - bs58 "^4.0.1" - buffer "6.0.3" - fast-stable-stringify "^1.0.0" - jayson "^4.1.0" - node-fetch "^2.6.12" - rpc-websockets "^7.5.1" - superstruct "^0.14.2" - -"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.28.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.68.0": - version "1.78.5" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.78.5.tgz#591cd47423cdb0b5e5cb7e8dc4dc70b2abe02f80" - integrity sha512-2ZHsDNqkKdglJQrIvJ3p2DmgS3cGnary3VJyqt9C1SPrpAtLYzcElr3xyXJOznyQTU/8AMw+GoF11lFoKbicKg== - dependencies: - "@babel/runtime" "^7.22.6" - "@noble/curves" "^1.0.0" - "@noble/hashes" "^1.3.1" - "@solana/buffer-layout" "^4.0.0" - agentkeepalive "^4.3.0" - bigint-buffer "^1.1.5" - bn.js "^5.2.1" - borsh "^0.7.0" - bs58 "^4.0.1" - buffer "6.0.3" - fast-stable-stringify "^1.0.0" - jayson "^4.1.0" - node-fetch "^2.6.12" - rpc-websockets "^7.5.1" - superstruct "^0.14.2" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/chai@^4.3.0": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" - integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== - -"@types/connect@^3.4.33": - version "3.4.36" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" - integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== - dependencies: - "@types/node" "*" - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/mocha@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== - -"@types/node@*", "@types/node@^20.4.2": - version "20.8.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.2.tgz#d76fb80d87d0d8abfe334fc6d292e83e5524efc4" - integrity sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w== - -"@types/node@^12.12.54": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react@^18.0.7": - version "18.2.16" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.16.tgz#403dda0e933caccac9efde569923239ac426786c" - integrity sha512-LLFWr12ZhBJ4YVw7neWLe6Pk7Ey5R9OCydfuMsz1L8bZxzaawJj2p06Q8/EFEHDeTBQNFLF62X+CG7B2zIyu0Q== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - -"@types/ws@^7.4.4": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agentkeepalive@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansicolors@^0.3.2, ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base-x@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" - integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== - -base64-js@^1.3.1, base64-js@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bigint-buffer@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" - integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== - dependencies: - bindings "^1.3.0" - -bignumber.js@^9.0.1, bignumber.js@^9.1.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bluebird@3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -borsh@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.6.0.tgz#a7c9eeca6a31ca9e0607cb49f329cb659eb791e1" - integrity sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - -borsh@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" - integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -bs58@4.0.1, bs58@^4.0.0, bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" - integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== - dependencies: - base-x "^4.0.0" - -buffer-from@^1.0.0, buffer-from@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-layout@^1.2.0, buffer-layout@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" - integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== - -buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== - dependencies: - node-gyp-build "^4.3.0" - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0, camelcase@^6.2.1, camelcase@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -chai-bn@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.3.1.tgz#677cd3c0b58bae83ffe51604a811d0b3c6f41544" - integrity sha512-vuzEy0Cb+k8zqi2SHOmvZdRSbKcSOJfS1Nv8+6YDJIyCzfxkTCHLNRyjRIoRJ3WJtYb/c7OHjrvLoGeyO4A/gA== - -chai@^4.3.6: - version "4.3.10" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" - integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" - -check-more-types@2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== - -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@^3.1.5: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-hash@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" - integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== - -csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -debug@4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debug@4.3.4, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" - -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^3.1.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -dotenv@^14.3.2: - version "14.3.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-14.3.2.tgz#7c30b3a5f777c79a3429cb2db358eef6751e8369" - integrity sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ== - -duplexer@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== - dependencies: - es6-promise "^4.0.3" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -event-stream@=3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -eventemitter3@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -execa@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -eyes@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== - -fast-stable-stringify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" - integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-process@^1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.4.7.tgz#8c76962259216c381ef1099371465b5b439ea121" - integrity sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg== - dependencies: - chalk "^4.0.0" - commander "^5.1.0" - debug "^4.1.1" - -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8" - integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw== - dependencies: - traverse-chain "~0.1.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -follow-redirects@^1.14.9: - version "1.15.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" - integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^9.2.0: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - -isomorphic-ws@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" - integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== - -jayson@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.0.tgz#60dc946a85197317f2b1439d672a8b0a99cea2f9" - integrity sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A== - dependencies: - "@types/connect" "^3.4.33" - "@types/node" "^12.12.54" - "@types/ws" "^7.4.4" - JSONStream "^1.3.5" - commander "^2.20.3" - delay "^5.0.0" - es6-promisify "^5.0.0" - eyes "^0.1.8" - isomorphic-ws "^4.0.1" - json-stringify-safe "^5.0.1" - uuid "^8.3.2" - ws "^7.4.5" - -joi@^17.7.0: - version "17.10.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.2.tgz#4ecc348aa89ede0b48335aad172e0f5591e55b29" - integrity sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -js-sha256@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" - integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -jsonc-parser@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -lazy-ass@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -loose-envify@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loupe@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== - dependencies: - get-func-name "^2.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== - -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== - -marked@^4.0.16: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1, minimatch@^5.1.0: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mocha@^9.2.1: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.3" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "4.2.1" - ms "2.1.3" - nanoid "3.3.1" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-fetch@^2.6.12: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@^4.3.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" - integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -pako@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" - integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-scurry@^1.6.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== - dependencies: - through "~2.3" - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -prettier@^2.5.1, prettier@^2.7.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -ps-tree@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" - integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== - dependencies: - event-stream "=3.3.4" - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -react@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -rimraf@^4.1.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" - integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== - dependencies: - glob "^9.2.0" - -rpc-websockets@^7.5.1: - version "7.6.0" - resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.6.0.tgz#d3f4c0dac108ca35566b0e31552c32e58928cd04" - integrity sha512-Jgcs8q6t8Go98dEulww1x7RysgTkzpCMelVxZW4hvuyFtOGpeUz9prpr2KjUa/usqxgFCd9Tu3+yhHEP9GVmiQ== - dependencies: - "@babel/runtime" "^7.17.2" - eventemitter3 "^4.0.7" - uuid "^8.3.2" - ws "^8.5.0" - optionalDependencies: - bufferutil "^4.0.1" - utf-8-validate "^5.0.2" - -rxjs@^7.8.0: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -semver@^7.3.7: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shiki@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" - integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== - dependencies: - jsonc-parser "^3.0.0" - vscode-oniguruma "^1.6.1" - vscode-textmate "5.2.0" - -signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== - dependencies: - through "2" - -spok@^1.4.3: - version "1.5.5" - resolved "https://registry.yarnpkg.com/spok/-/spok-1.5.5.tgz#a51f7f290a53131d7b7a922dfedc461dda0aed72" - integrity sha512-IrJIXY54sCNFASyHPOY+jEirkiJ26JDqsGiI0Dvhwcnkl0PEWi1PSsrkYql0rzDw8LFVTcA7rdUCAJdE2HE+2Q== - dependencies: - ansicolors "~0.3.2" - find-process "^1.4.7" - -start-server-and-test@^1.14.0: - version "1.15.5" - resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.15.5.tgz#5c9103bd87c06678fc62658fbe97d09501714011" - integrity sha512-o3EmkX0++GV+qsvIJ/OKWm3w91fD8uS/bPQVPrh/7loaxkpXSuAIHdnmN/P/regQK9eNAK76aBJcHt+OSTk+nA== - dependencies: - arg "^5.0.2" - bluebird "3.7.2" - check-more-types "2.24.0" - debug "4.3.4" - execa "5.1.1" - lazy-ass "1.6.0" - ps-tree "1.2.0" - wait-on "7.0.1" - -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== - dependencies: - duplexer "~0.1.1" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -superstruct@^0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" - integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== - -superstruct@^0.15.4: - version "0.15.5" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" - integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -text-encoding-utf-8@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" - integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through@2, "through@>=2.2.7 <3", through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -traverse-chain@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" - integrity sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg== - -ts-mocha@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-9.0.2.tgz#c1ef0248874d04a0f26dd9bd8d88e617a8d82ab1" - integrity sha512-WyQjvnzwrrubl0JT7EC1yWmNpcsU3fOuBFfdps30zbmFBgKniSaSOyZMZx+Wq7kytUs5CY+pEbSYEbGfIKnXTw== - dependencies: - ts-node "7.0.1" - optionalDependencies: - tsconfig-paths "^3.5.0" - -ts-node@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" - integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== - dependencies: - arrify "^1.0.0" - buffer-from "^1.1.0" - diff "^3.1.0" - make-error "^1.1.1" - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map-support "^0.5.6" - yn "^2.0.0" - -ts-node@^10.4.0: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tsconfig-paths@^3.5.0: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^2.0.3, tslib@^2.1.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -typedoc@^0.22.15: - version "0.22.18" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.18.tgz#1d000c33b66b88fd8cdfea14a26113a83b7e6591" - integrity sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA== - dependencies: - glob "^8.0.3" - lunr "^2.3.9" - marked "^4.0.16" - minimatch "^5.1.0" - shiki "^0.10.1" - -typescript@4.7: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== - -typescript@^4.3.5, typescript@^4.8.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -utf-8-validate@^5.0.2: - version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - dependencies: - node-gyp-build "^4.3.0" - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -vscode-oniguruma@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== - -vscode-textmate@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" - integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== - -wait-on@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9" - integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog== - dependencies: - axios "^0.27.2" - joi "^17.7.0" - lodash "^4.17.21" - minimist "^1.2.7" - rxjs "^7.8.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@2.0.2, which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^7.4.5: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.5.0, ws@^8.9.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yn@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" - integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==