@aztec/end-to-end 4.0.0-devnet.1-patch.0 → 4.0.0-devnet.2-patch.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bench/client_flows/client_flows_benchmark.d.ts +2 -2
- package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
- package/dest/bench/client_flows/client_flows_benchmark.js +3 -3
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +4 -2
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
- package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +10 -0
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +2 -2
- package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
- package/dest/e2e_deploy_contract/deploy_test.d.ts +2 -2
- package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.d.ts +9 -7
- package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
- package/dest/e2e_epochs/epochs_test.js +53 -34
- package/dest/e2e_fees/fees_test.d.ts +2 -2
- package/dest/e2e_fees/fees_test.d.ts.map +1 -1
- package/dest/e2e_fees/fees_test.js +5 -5
- package/dest/e2e_p2p/p2p_network.d.ts +2 -2
- package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
- package/dest/e2e_p2p/p2p_network.js +2 -2
- package/dest/e2e_p2p/reqresp/utils.d.ts +3 -3
- package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
- package/dest/e2e_p2p/reqresp/utils.js +32 -8
- package/dest/e2e_p2p/shared.d.ts +2 -2
- package/dest/e2e_p2p/shared.d.ts.map +1 -1
- package/dest/e2e_p2p/shared.js +2 -1
- package/dest/e2e_token_contract/token_contract_test.d.ts +4 -2
- package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
- package/dest/e2e_token_contract/token_contract_test.js +10 -0
- package/dest/fixtures/authwit_proxy.d.ts +15 -0
- package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
- package/dest/fixtures/authwit_proxy.js +30 -0
- package/dest/fixtures/e2e_prover_test.d.ts +4 -4
- package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
- package/dest/fixtures/e2e_prover_test.js +27 -34
- package/dest/fixtures/fixtures.d.ts +5 -1
- package/dest/fixtures/fixtures.d.ts.map +1 -1
- package/dest/fixtures/fixtures.js +6 -0
- package/dest/fixtures/ha_setup.d.ts +1 -1
- package/dest/fixtures/ha_setup.d.ts.map +1 -1
- package/dest/fixtures/ha_setup.js +3 -1
- package/dest/fixtures/setup.d.ts +27 -10
- package/dest/fixtures/setup.d.ts.map +1 -1
- package/dest/fixtures/setup.js +56 -81
- package/dest/fixtures/setup_p2p_test.d.ts +6 -3
- package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
- package/dest/fixtures/setup_p2p_test.js +12 -9
- package/dest/shared/index.d.ts +2 -1
- package/dest/shared/index.d.ts.map +1 -1
- package/dest/shared/index.js +1 -0
- package/dest/shared/mock_state_view.d.ts +86 -0
- package/dest/shared/mock_state_view.d.ts.map +1 -0
- package/dest/shared/mock_state_view.js +186 -0
- package/dest/shared/submit-transactions.d.ts +2 -2
- package/dest/shared/submit-transactions.d.ts.map +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts +1 -1
- package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
- package/dest/simulators/token_simulator.d.ts +1 -1
- package/dest/simulators/token_simulator.d.ts.map +1 -1
- package/dest/simulators/token_simulator.js +2 -23
- package/dest/spartan/setup_test_wallets.d.ts +9 -2
- package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
- package/dest/spartan/setup_test_wallets.js +31 -1
- package/dest/spartan/utils/bot.d.ts +3 -2
- package/dest/spartan/utils/bot.d.ts.map +1 -1
- package/dest/spartan/utils/bot.js +2 -1
- package/dest/spartan/utils/index.d.ts +2 -2
- package/dest/spartan/utils/index.d.ts.map +1 -1
- package/dest/spartan/utils/index.js +1 -1
- package/dest/spartan/utils/k8s.d.ts +3 -1
- package/dest/spartan/utils/k8s.d.ts.map +1 -1
- package/dest/spartan/utils/k8s.js +6 -0
- package/dest/test-wallet/test_wallet.d.ts +83 -0
- package/dest/test-wallet/test_wallet.d.ts.map +1 -0
- package/dest/test-wallet/test_wallet.js +214 -0
- package/dest/test-wallet/utils.d.ts +41 -0
- package/dest/test-wallet/utils.d.ts.map +1 -0
- package/dest/test-wallet/utils.js +71 -0
- package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
- package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
- package/dest/test-wallet/wallet_worker_script.js +40 -0
- package/dest/test-wallet/worker_wallet.d.ts +52 -0
- package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet.js +103 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts +271 -0
- package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
- package/dest/test-wallet/worker_wallet_schema.js +10 -0
- package/package.json +40 -39
- package/src/bench/client_flows/client_flows_benchmark.ts +3 -7
- package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +10 -1
- package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +1 -1
- package/src/e2e_deploy_contract/deploy_test.ts +1 -1
- package/src/e2e_epochs/epochs_test.ts +66 -66
- package/src/e2e_fees/bridging_race.notest.ts +1 -1
- package/src/e2e_fees/fees_test.ts +5 -20
- package/src/e2e_p2p/p2p_network.ts +3 -3
- package/src/e2e_p2p/reqresp/utils.ts +36 -8
- package/src/e2e_p2p/shared.ts +2 -1
- package/src/e2e_token_contract/token_contract_test.ts +10 -1
- package/src/fixtures/authwit_proxy.ts +50 -0
- package/src/fixtures/dumps/epoch_proof_result.json +1 -1
- package/src/fixtures/e2e_prover_test.ts +26 -36
- package/src/fixtures/fixtures.ts +10 -0
- package/src/fixtures/ha_setup.ts +3 -1
- package/src/fixtures/setup.ts +73 -109
- package/src/fixtures/setup_p2p_test.ts +9 -17
- package/src/guides/up_quick_start.sh +3 -3
- package/src/shared/index.ts +1 -0
- package/src/shared/mock_state_view.ts +188 -0
- package/src/shared/submit-transactions.ts +2 -1
- package/src/shared/uniswap_l1_l2.ts +1 -1
- package/src/simulators/token_simulator.ts +1 -29
- package/src/spartan/setup_test_wallets.ts +43 -1
- package/src/spartan/utils/bot.ts +4 -1
- package/src/spartan/utils/index.ts +1 -0
- package/src/spartan/utils/k8s.ts +8 -0
- package/src/test-wallet/test_wallet.ts +306 -0
- package/src/test-wallet/utils.ts +112 -0
- package/src/test-wallet/wallet_worker_script.ts +43 -0
- package/src/test-wallet/worker_wallet.ts +165 -0
- package/src/test-wallet/worker_wallet_schema.ts +13 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"proof":"0x00003d400e9377f31c9fae99dde2e4871dcb0cce39b05422ab9787bbfd4cba8a933dae4708e7c96b4698e59641872c2fd712cd256c21879bf01a30cf7c9d47fd9a442ff700f10d3a401a22634ebb4b0b17410cd138fd388872486b6280d552d6317c255d0091fc2154c269945e9eecd8b7c3fda287b1ef154566ab838724c08bbf33ee18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028bd79b7d8802c5315bbb1a505e518bbcaf90b55712598012ee082d7bc35eb1914211f9f02fc6efdb6bc76de80a2aab9a29f329d43a3122216e950bbb1fb61ff0000000000000000000000000000000000000000000000000000000000000000003579b12574fbd88785a68732b8a32ee511f990b5c1c9c3fd7d04ee396a49201c7047c96fd8059cb38b8b9ec2c489ab0b43a5f6d87e98b2aeccfcb934e04218000000000000000000000000000000000048541ec67b8bf434f83294c24840210000000000000000000000000000000000d69c5331f509ffffd6c8dda6db188a00000000000000000000000000000000000000000000000000000000000015f700b744e31ec5e4fc15972b9742216130d34aa7561a3786919f9a51392cd3bee50000000000000000000000000000002c1ecbf77c26d216c112fba848bcb2c4f800000000000000000000000000000020c760bd04161502098f63698d9ba7b431000000000000000000000000000000000007a878a5a74bbfbc8aa5421449ac49000000000000000000000000000000508927ca412e0cafcc3c89a51c63dc24f000000000000000000000000000000000001b67963f214889736da01cd0ca7556000000000000000000000000000000103d28cbc4586970511fcc4b3cf298a8fd000000000000000000000000000000000000adbbd2d009e8870e2d94112c6872000000000000000000000000000000b45608814b5a0241a025e28c147045383b000000000000000000000000000000000011685f37114cfd736e0fc3e34674be0699ec8e9a73b778bbdd5de6fa1ca511e8b99b9ae2b6e9c6524bf0c1713f43182b7218f998805a5a4d8bd657879fa4b4f21a52d49401db1e5bf5674f589530ff26257c11d8a49533f257b2c9ee759f1a6e7c8fb2d5d08b6662f4e1ed093dd12714cdeb4eabfe4b2ac26a8a28deb3d785ec24e5cdca9cedda6f3bc143632cff830a445136602c7b4e7f7a78c241e39bf3d7d90d6d8ad9ada81b99196bcfd05539184eb0345769dc700af0ca18f10040c60ac0554403e16f1cf9f5a5f896f14b25193782db7b347fe2cd790ec1909d637cd360611d4ac4098134b48c576ba9d68115282242fa373432e29e5434049fcf9a19e6f6d19713297e90ac2ea20c3248852274438d5e01f4cc60bfcfd214d48dc18f59bdb6a7ed3f5f4ad6ef326dfd1db51e997e94591c00c715af82249a35d5420f1aaa2bb1372e6eba18c7a6224d8b5b09f0f84a9b289d7d234c5488180abda3a1483c5634e54ead3929851eb79065910dc0833e225df0123ad879b253cef6202dcdb20d422fc37b461d374045f1f7990b4db61e77f87b0d9d1f367ee39667bd1e877dee16c53432433b4d7d18146ddf2c25666f1e280676972766b8636f95a3ef986f58c971ea2f744afcd9988da3cc2be98d51cd7d8aa0d0b3a023ee206ed6627896daf1d183d01d587ecda86656642b839935cd650e0f5f8df25039ee7f29319e9191b6a0e70446e5c3cf53e144c82588c7d9bd6203aec02f4e5711341fbaa939046e2d44d3948452cbf89c4b1b7e0adb869923cf9c7af820f75f704d38a27efae3da4c749cfcbf8f299b53b4e4831f1d91a33855f41f0e5e114620ee6ad6955da95ed9e4eef79daf413874e18186014d91a87323b06bce37bdfd44ffc79a539ce07f902694c425644f9a37fa35590faa12c254a54b646509470021d3b92530e11001cf8aecc30e436f1a63e6ee85058d0a960a924aace891becc2e52718adf236e0be5ef68ba0695e11d3f186cc41274763f77059b68da443f40996e1d91b95e95202745b83d6ac5d0fcd9ae2f5c19250db6f54a75e47d77ec740bc951bc271af12edcfadd33a757b0fcea78869f2e122f454bd36a5c56a3ef73ec4f4c9998bd4bfd8184491395fc2c5346d544bc25c3905bca666d4a2c1d0d379b6d7f4d9aa395a1f1407e5a5217eedd1eef82d52e32e534e4a0f21b887f46fcfa6a4bbe3c2987303a94a9980225401bd23cc80413410882205388c2d79684fe5693eeebf3bc04a89d295c3b1b7f4abb6b5bdf8d22d74d75e6f69b6ed60e47321ac97f859491f87aeeac49cddb3ca2d3aec764d40e598ac4cac95a719f4c7873c4217cafe2e876176d649f7319ff42ab88760dba083271bddf8b640fca6e6857e47ec200a49f6205fe75fc6d06fa74e0a51287360023dc676c2eed3382629813b3c51b85df18e1845cd0432bdf66b87d0ac27106116240cab809eebe7175f817bc0b79fd76257e291479c11451d84850635e2a092c27bd286fc0bae4781f4530502915e570e57ac51ee7df8bbcd21bba6147842a0ce99562ab83174d4e07e54a92591f9bbaf06422d78e1ec75f7e45ebbf1fb42618ab6085eaf16f536819f68c65b14bf20472fe27d16024c6149bf2da1855d9fc10940cc96cd664ce67651869b84cd2d371c9ab52150b7ed59a834657e899e4491486ec771e817f587a36075c64a0c9371f882e3f49a669647edd3ba7cbdaec81040ea16925367e964a6b75eb74dc5576906fe92b1728a3f0fcbdddce19cb9edc230108abefeef4f6d499dddc59a3984abcbde6d5709f1a1746c48fdf01672ac40924da1b8be3c47de980fb1c5683bb728d3d6ee723c925f9724068d4bfa92d820ebea9e02cbfc9473a6c4516178868d9378cc3fcfff516f7b5629ec611110edd1bd1d79ad9d9f3824be59057b3aaae9a674cccdf3109ccc0c34f83d5b4e4cdc02cfb206b8170940c464d1f3b4b98d18af1f720b8fafed28c380f33cf038af3d905a407e07add2fc266600b074fbff0090e8a2d592b2f0f388340c90bd3c0e39b16c57ee4cda0cb074e00d5817ee90a826d7cd414d3f070c3536b83fc303478ac04dd659cdcb733fcd9e64e637b180b1567b9e7cb876a2f523ace11053ff358e124a61a2885e122f8ce8154d4d3bff621c36846aff5fc5aec1432f46add3265762b4592ed0ddb9512bf84161b6bf7db330a082c7b4aa67d9e3732d61ecfd6fd0003dbe75863bf09956720deccb3e80beae4f72474ce31092bfaea71fb1236726b2cb49ae432272a726ba173c729bdaee9675e806ab2c71c825f0864301d94edc21ad4c3f588bba6d8163199e1ba07ca8d1b1906d58c2be4502a87600e33686a29292f1c96b5627def75b112043a5bb8686fa16d8bbb84109f45ed75aac4486d7903c4de51999f3ce858f608c35731292679714096e8bdcd83c1f2df7b712a2a131b1c89bc39bebbf5bd80e97f2a9b18420ce8efd74548b21dbed1444f33279284007b5e9a73c13e93e362c59933d8264afc7248cffaba04604c8c7a2415bb41a607b48fab2c54ba06523614518b3151e858c0b2ae4e5f37b8ee1269601cd91d2c2e8809894f4f82f7b62b4faa9eea6b1889fa489c6bad784301cf1a8c853719a7245f8bbb35b22d52dae58e1823dd84fade2f80fcc85a1074927000220f2dceba2e3f7783fb3c345bbce22fd91e184800b6ccf17be5d3a6351d8424c85c74ab0d27e3552b0b581156e7873c8414559eb91efcbf9d2f7474db63b46d463211deec07df4f35527fb747b5869afeec7d447a94202d89d4780cb5c50a87888a4b2788221a8276c9ab85d916570caaadd6fbf7557ab7d4add7804aa9fb4d99b4d11325046533a911065cd8388072d92c89c41da66f01ea9e34f963dfd7c3fa6f84f4af2a2877d84da25600e927e2af354e4cfb591ba344b2bc46aa24f7594df324583f043b3d29ee24b50bb8c36fa60d97ba1141ed41180da2569066d042ea48d2874206ae06b77ccbecef094ac9a0c9be376d84368b6f523d77b189681a440c4aedb82b9823c8c547de3ecd467131cba71aa3d9872dd7a9a77a1ab100f90f05be53292d522ef53e3c632ff6b810991c613956c5bfeb50d69018051b527a160f0a3d27263e6495672c492478ab016ef4cd1682eb4adbaba99ef704b673aa6c5dfe3f4b18425a24d9792f2305cd15c266b04083811d573867e4461a7d14b94b0cf704330d09f9942e7186ab27042c8151df8f37ba9a3bed280b6b76ebd72c5e16e98f042d7bc0d57c500c3db09f3ccff4dac7356cbfee06e8869bce52c9fdb3723e4bc1277453b84f1217b983c72154bbc3455a9854672a2738b58fd3a46464e571e2b7262af046b7c3261e3e8a8831eb52cfa6a99e0c17f575761142477fac1656a0f223dadbae44e0e801d95577c03cba5acdc5fd6e59af810591182245bbdc32440e18f7c8dc36cb1be72b2b741b41f05325c559b70ae4b9ace3e7f0a4330d59287514d1456c6e778b766789feabf0a183eca32111ab6a2dce2e83b93874920207ca0b06c64f3bf75ef56ebf01835b9ef00139941579c16e578dbe268a63d3bcf0812387721eda56090a977d9e4707d84bf66073b6a8fc915dfd01c12ca5e0c56edd0327ffccfa44949ae0ae4b6853c67c769451c96b94ad3ffa178efcecfafe670307b021b05c5e6bfacf5df9c2ce6635e8db5befd55eed838d2e7d05765bfd1141169f05924dc6c41de61d14f90905eddc6a54e90679abb1f42c767e43bac3b9b8065b1b56c304828fc10a977c90df75ca587973e919305c887614499d109825851538b947b43af0ed72baf393f3ce5031e5de6af73981c00afd1512a11aaa6f7c0e07f20dbcdd2e268c6ff8c4d6f2a4eec1eea1c9b7fc5dff3e75e5b4d3258acf297b054921b294603110563121c0d50af0d085de1c78df84dbd5f01303ea62fc22af8747483294d8115fd09f002fcc72cb58499c8f1b194717652a9dfd6c71341868734c348bdf0a0ab08e5e866c3bcc9e278c95f9d00a458e65ff55e07dddaa019e744da835b6127f7054d382230be8fc7f89a053c884bb3b6143203592a17f21909ff4fe6617b9beba1fba5cc2f8ff6b0bce5a070a51ac28a4156c635b8c1b271d4be75ec8cd02039ce597999b96ec8b8e36f9ff1e18f83ec7505331b5776c0e4b4b2a029f6bb84fc1277c36c146918dec888855b43e061910e42d730086cf0e5af2cb6918c2b4471485a0de4d53731e06f8d81e685c85419de7afb45522821907bfb687d1da33e1704b51d6bc67d077b3a25f3edde5943820f3efabfae44612ef247b70fea286bced9c477e592069be2ba7a49368ede906c0367ff6b5214a0f0d66049786e2ee4c5b51fde39f77b35a2f8581cc7b4d96ff4562c40a56c0c8000c1eb2fc0e5da2f67ca87293ef6ffa3c0080ef8158b520f89e4e2f507554801208783cfff00c7cab07501e979c6a3e0a3553bdef7a3b463eec5cf8026a426f15871a5f7599b5eaa9e84ef5a5284df3eda1e0dfbb777ab201fd6a5295d98da3111703498f07fec739b78acc1e1b0a6e0eb76d5f31f1fd14a4fb027e55cf278111cd3f7dd91c00356a8f98c541c9cea6c3467106c88f218a7a6376bbbca224ce16b2845047463ef36b98da107ac94aa9b8eb5c3732597e5ecbaca5e05cd9e18e0b5812f1071645a557029d041f93cb9d057480219d0e82a6245a4bf4ce8593111f3659ff037004cfbe87a9754649cb4cc0f3cf9f05881fcd69f3c75e8c0acbe42f373904ef71ecb2b7c02dbb386f7923e2ddf754d1ee3d27ef1c8500e25c961c0ff87517c4c05de2c196e8b24a434a6c8286e63effc325f8bd963f93d88359d50c204691898ab0f00fb626f0f71d1d898267955db03f87ccca49e1337843415a1969f5adad63d6a8d2f4e1fe8843e556d37ff43d382d5e267c8db28ca5a595cb09121c2dae0bd9ea815c69e39faae7569d6ae03ec58f3e8aece4d49206e68ef909fb0b50e936a8c88638a75ace4433133cbce54f5056b2ab23d808db5854a9cf202ded53ee1687ab24edc213b288ed884d89cfee04be3efc6b26b3d06eaafc0d0adba000eccd425588a3632dc1c97e26ca7def9dce81c9dcfdeb4b65620c960d0f83bfd097ea530aac89211ad72e39ba34329f8f217b802a8e6a8f64d6d27c7b1a039f774702805d5aa3c2d84b19b93dc4e8d469f2e6a3eecc79b621d1edb68f17dbb0e45b1ffdbf9df4ccc8259b21ab9c760efc7ef1ab616d8da0d989aa3fc72a16be9ffacb859daa38488634fa9d4b0604b01d03dfbf30a5cb72af04100c38069a8cfeaad5bc140d6c803726bb17edbca02af27549c44dfa8871c74ca961ff21fd2bcf8e825cc442d9765aae9e0b79e081fc93063f57432c802488e092e7c82b9df4f327eaae53b3d0231514e53bd7c52f49022da263e2016b81e011b156561aa2d83cda53b8a5f87d508528eea834a9daf0eac85bc0a84e08c14810a1678c0a93c5995307d1a3f462fdaf4f2e5475d87ead64cd91c82a9ae977d0897dfd662c2dfb2e706a028eb84191b726be1c766a7a671e9343446053d0c86f898e3cae185ef31c01be2fb557520b4289fc78ebbf12548a7471bedbfb5c9944047852ef2d4c5daef476acfb5c1af30a8a3abd9eeb0664a434e8d65a5273329b345552eb205a4d448a2689ef502183c621d98b0fb8428adcb4982d5c75d22e30b05d98bd2f38e46d86dd2c7f62d80fbe86e3149d194f4eee81a20b59e6f11760d498896a14329fa617e03c199f7e471ea94145506e1db70f1fb2a85cb0b4ce8a1ad38e0c10c02abd4c6353a7e3ea2b6f3fed1c12623ad65dc7dd7d730781f41eb5d11edf1d2fa63ee46519dd66b2e96f9c88cb9084aa8c3dd7ece065152d351a54a2c2912e8de903a041f43d23be3f2c2b4502e3e660611c8f9b857ab858c7270049654f0d67ff1c085217610bcb763d7bf73bf1baf4a617673478026fd065918a89d4e70c45fc0218284bff53dddea0799529a94926f7834c75f436f00fd94b62ba70372758a41f284de03e3296dffd413a97000b6a5a008fd3b6e7d96ae92f6b72271205c0e8fe7206c91169d01c835ce1806e93e1d50c557e79611515bb4764b048ac0cbed627f7477c9714ffddf10e111bd84a575e84947795749768e5c1409c797b1d14d02c5505e6ee018d5356138d038892df51e322f21030c23044bcee42fa481eadd4ccf1b366f2bf2fe28ed599c1390ee8d70a9ac01f4427facaf20263cb3b14bd8e9e952b63150cedb8055e125f4c1fb9c8bd94b872ba03f3c1fbd8b0098c266ee4639bd77440695c683801bb8c31f138743c013b9af62ddc0f5dfbd44cc4249baaf31439a9266acc8b58dc5e71df82e5a2f6342aca826c3d1149126dd17f2c80ad4a9044c53368f8be739b4720e57a20d916beca4fc108fc8bcaa7ea44f203bd375fa9fbabf0151abc9618b483612510be21bd9c21c6fc12d96ba8a8c1ce1fbb8c17b4a1ac58ff6658de732f1758dc15b2b7a31b00bb62c3611fe4e9339913bf3d24585152182362543e8c6c43ea612bef561f74712916058bdd04d2b00c2e9f83496c1b8f619ba45b815d125e4c7a0aa511773c4dc160f1e5c8a3374d431726350549ebf5ec689c067e22d0dd1fae036366adefd8a4b6a2c7716e22349222c053b604079ca5ef8c508e4d721d10efe91550cc4445843eb4a5dcb90016211d47afc8e67f836d94e5937a0849ffdb2cbdba195ee9364874069f4b5daf5897161238f003e4491e230a1f0129954d289581406844c07414a93edf8a315bde81229e125532ecad256c0a4442eebeeac9d9df974c1b3390bd962a2f45ffeff20b1a12dc312045a0c88b753e7ab83a69717c784d106ebbf11a69b28350529f2fcb1e2bd41936ee62a3818aa6132a46e9fd77205bec42ff67837613c7a0a9bea32a1b77f3daed6667a3ed301c23c51daba6d46a7e3751edc0d7a382df14a7df32f204eb5e93f6be2d72dfe37b14c53f8f8042f3a30b860beeeced2a170f53669cdd1a2b1ec92f11e8d1cd748b519c1b1b2cef3a9c91e317b1c38aaac13d34d9d05205bbb2208ffe72123d8320eab02240796ab7e2d06412b4e5af931034bc8bb01c1a71b26b8bda5b87bd7aa013446c1c23f7451452a8016c2b8e4bfb0f9faa6eec290c62fe4d90c40f02f01d6bf539625d82190e6776ae06e2c872e2b242aabf0226ec72c1c7d76e703a32f615c4e973348ae33e63894f083727afa5455a7d502d10518f3d7a43666b7546e8176bfc1db5efe3c0a496491d40b8b744a3a8725b802938d0367dc732ead28bba9dab15c54c888ac40aee292666ffdf96569103eab2137bf6ebbe8355d8f1c029985ff2203d0ff38e26798566f99d0523910d98d5b12c15c3e959e17a00f31e7d548064c6cdca173e9c5f67eadf88d016df117cc042025789706988de620c4cea99a876eb973072f6f7bb9c30526086a195095cce2f2c8b813e8a9a7ed46cda28e042371299168ddb20501dc0d2f21cbe220acd7e740c259a0988693f4bc3f5d61695af031ac2d7aeea44f0d745421f690fc16462ad01550fcb32fe66b322bd05057a341606fafdff8724be8bc3c695194eb0a297462c90d7da9787d90e65789a55dd787b13de116954687e2393ea9525d83ef6f683207e734d1bac28191f1686be43e5b61fc7d54cc0d8b8c45d1ebeb55dc16bfa7d2cbf70607c72923536d96c00c98af67758dfc9a2982e15ef3802bc15f1ffe4522a0cab43855afd582636b1a5aea834b4278bfbef5e8395e4be46b5662ab68c961364f0b64dc3dd230961e54b88e5389be1f311e5aca1aab86d8a87b32fc1d21c2dc97fcbf3de1d88bebae6a85d78f99c9d53cdb5a613c8e0cfefc7cb80df81c71daf67d8d9e4a53af35e9f9904f16a48cbaf7ebf69612f7efc8f41c6a504f36328c6341d4b5203059e587fbf82b9746492c43bbdbab09aca2ce8a5e241279f382d1cc04fd9d02b377970b337e2fc3f1b8c6cebfe8de29ef0ece75aecf13ca49e2d3584d9c52ff5aee44c660a59b2398ddf7a675a9b00861787b8feeb65bc78a7040b3115d22690bced8b90dc39c97cbbbfb8b5dd8add816837f4a5083cfaaeae1adc76a812c17097fc41b4a549d01c506f9490b0282f40ac00b363b35ffd332b207096db9f96557b5197f53bbc5d5040fc16a4320f33c1e34135cd9a7d8bdbc5093d26d0785ba088ad45a15c116aefb0f688c556c0092d72740ca86821f4431c1ee6c14f2e68083e6b5bf82de1eb4864ad85f766bebf44445f2204e55149827a1b098d208de54b8ec69c274c1b69cff0f677546bb79080210d117a7e05ae90c81a7d3287e8148cc12e8ed65c3f7d3bb3b8d8e932c25785cb5bec5376092420e11450f06f141830d99612cc6ae4d7b96050e1934edf04925f41df0f76b4cd47c508f8b6dcde10a89e1a557eb5374c7b6e3b6451e1404a2560128bc53257db6eec298f94836d89bf40949a69bdbc11554404bdfdef27deaa3d3714cd9798b29ccc01ca2bed61e9fe56547bfd8c87f37db742a07aabac019858c8a06ea11e12c9131d90b726515d46394a1b4c015793da8d9344f11de96b3fd35b34941e4a9d40c718d928f13f77ef3d22d9f3e6afb8b41a9734f3ebe8cf66f8d797d864145c3b880477c6a2c7ab46f51b3246bebb784504df7ff1eb6ec42a5b156aa8e65268f9f103d46339e5177f62e05c78dd3f7286d6863b1fc919e4e144355d58cb01fecc1d038c56a2e7615f2b1a5feb5d405138db8a12be915fd6065b9d602f17f7858d1e258da568871c2a8c14a163ff17b1143c8a22110513d4876e5e6c25979daa932301d94c4432ad23baa49d82b073aad73e48dcbf03755aa9f3e3b811667cd671cb01a3f2ad1b18dbc050b0b105fdb6faca96bc6e511cdd8dbfc1b09c2a483c33d60afce13fa5aaa8987dabfb8795ba80356c5fc51f058e4a0a0028c924f33b0a962a06f4001c441752b5fa6590d6a7760d22422e4e9fb32a02eb3c11af4eeb03532cd40487a916688df596547536bd08dbe365c1d2d86aebf35376bffa695309b52ed644166a82655e3f41966705d2351e32cfbdd3f75890d61934425b082cf8d7259bb608460bafeb9a295ebad2a85a1d28ddddb253fd4b23d02cbb912e38f426160a6a6dc88e9b4dc69e2a293264839f052d963b90a601fa7249248b61daca8000455a332bd9e5107f19e6ceb1006724902023a2966a3aaf64d432a5a20bce7f18c5579b21b6a64aac66aea0a500a2bd207b6c798183ff26b1ff384aadedca442a5f1004f4f69a17aa1f9c9ac6e34f0295e85089b314bf653c536b7174edb85d2c5d91528db6fe1b43d9a737ac321eef999614822ef38ae50c217d1a9185e45f1670be84527ba3c29a608bdfc9e5b279fabe640535ae25629a2db4a9a915d4f40b6039d17c824eb45edd38a90b570300423616763c0645ff5f99db0e6ee3e2b511bdf39e9c98e8a28a64591c0d6250a2566e78458d58cf79469b0d352afa528e1a3a1392cce8b9d63a013e1dfb815c270c79c9b90bb5fd42ca5093f52a34d2312296a41cc8d3310c3a69318f3a411603e82e7c406edda9dbc34d8b75e2993d932f1eb6d9f99a257a5ddf7186dd583c666d77b777a83f93791eb2433ceba693ec1dfb1f3e3cdd8bb07406e3b73034e62131cda6b867d2156da7c6ac0800a706fc0f231614d6aadd0706f8626ec6ae55a2199e2054d5f0b60ba9f0d3d8d1f4321c01d230315dc3d1df854b48aee2d32e5ddb67fc802e3be04e7f7469a56a5eee9b1087156c9e9a3e6fb53b796e1cda852484a9be2feb6683574fa78df46ef8776f0e6e99717c65d20d5404787c2ec9bfc52a4d03fdba960c48692d958a418f41d8141aca0aec1192be1385c0c30fdf5a6dff09bd250c52c4c13c6ea90e71b12fbb2a6e95b2f7b93fc95bc36734ffb360c103f8c5ac3e8adb2ab30ad570f91f6f9402771216c2d337d43b8c2652e45a67a51f4c9f606a2c8dfe45f916a0580cbff82896e5984c60f1f80e1ced60caabc8643132ee0a5ac4ba542d4ee19eff209e982d2486eabe185740d268717367e53e98a8c7f0e0526d306b0e821768b2e5d178179780d04a0215bd26f15e633cdf4b86d2fb1df61e0ffde65ab11e4619572e9d2a2543b32483929802d79a058573eccd79410252a96f313a7ae3b2c6dda40c2c1c2fbfcc4a38ed43a4108cf249034b762005185af1d120ed77cf3f94758ef5a11a2dd0de58a406e8836278a2053c4c837c4857e541eadec36cf79f6e38aa0d07082f119ce1eea9ca2e7022b0b8323426537bd73da0fb83b609d982b9f20a4fc722c2c0c6c83e72cb831eaafc280fe68c51075f203abf7ab8433d0b52018706dc091c9b5f22d646c49a72b4b1e769dff2f3d522b52eecd504e31942983edb95f515b781b238005301429ffaa0a0d52a5d438636e9ae83a245a7901c7c24e93d02075b789b30c74d6d540262b575236ab870ee46da4f11cb8a20c018f073ee984f1b8738e6dc8d536273babb636d16bb5b9fe8dc6640b266f6c8e984e55375c50e24817a202855c381f84c7064027635ae6086429d770416ba44c16c88fcb19e771a32a97750d211903db3d6802176a779a857db4b456dc7331446514d0d6425d224be843527ce474adcc4e889a8962e8d05985fc6bbf3f1b19c22321a9e90b26620a774b51b01d13e10a5eb96b2558a26d5bc5cada7fa2bdfefddd9489fa0af0709c778beb3d6d301bd50589682d9178f67d2632fe890671621d89322cee1924e1fdfc71784da8c6c4f724f09256806569432e480d37c99e9d1ed25ab52502fcc0e35f6a9dbb605f88e6192f5d96b9dee102e53b7ed82a7202d6c463e6ced7ba92de20e08c12f50d74165648476a77e13280d136480403e52fea651c06ad038f801124779a8d300e84ba8df96b919663570b829201811fdc1aabf113ba4625be11a10d4f50b58db3372a9e363ac2f01470f4e0b28a7f095f754fe7b3bac8d9a6b120ecbfd8a73d545ec7b14d02957141abe566e8c85ac5a4d8ba9212f56fd03252a735dd56ad8c9162b0836c622ac24fc43b6f3170ccd7c7f1b4a0c8f69cd4c290c6d8023a593353ee9fac160c67b97bd8bb55de03e6a6b112adcdda9776802c01bd551704c39fbcb3e656c2b3a3e860ae5d37b270d14a2cdc43b645edf79cfe61ec266d9362a2352a80f107a9059317776373cdf881e37c3497c58872bbe287129d9c748be5f12ded57c182bbe59c21e308fdbd98fad0e60a77028c368f99b7b271589f3440e847c26f1ad1f31fa4a88c8e017ec0f109d28f4a66d4b0b70b2120f5353885e305b9f5fdea03bda07cb41af86278088ad8580324c42161f9bbb8b2be8349dbd3ff84589cc40d845b8b70a59e8d5589169fbd70fc86c94beadab350916204dc21311fca71ba54ccd07af6261c37c6c7a93852c6eca8cf07db5e47d1d6d6248a673502d81a9a96eadf16d44628b6ae546cdfc9886860c6a2f235b80069caf741ee0662e34df18e1811fa69ddc2f34e35c475caf70afc5d5c46ad85a1c5f9701b834b718d1fcdf0bb944cf0a1f8c87a907ce8db93225d927d954d8fc02766f32559fbb9edb5886a5b93fdbdacefc4ca26c39c705018b40714de49c7e200f7f58af357a32b611ae5d86d6e9836d91c1dc720bf387ca7445220808b76022f97b2fc1f6e737e2e8e4c3f2770df76e03d904d39a682ad90bfe98f0c7409b16a18ecfd33b01dcaaf628754d474e889c2f28de3e70b30ae54fcd13ed5282101c6fd4831bff73d6df4c87d13a2b07336aa35c9283bc75ca26b020abe04ddea110c40cca49acb11e7a50175e575a5ef267cf61e80a02151a06a3e46ddb13d1c10c1ce60f867dc5480e5e49367ee40e69c3eab581b9070ed2e1e40e80b484b61b0ef9f202f25fb72960a27b3414d6fe18cf6d31012bd2f633fb717004d7b79a6514293a58847738207ded44e769618b7371a7b50907a09dac283678a2673e7bcd135a8646330253b9fd8703f8e2f1e4d64a3ba66a7a6385cda1814ea9705d5dff22c13d9f55a21c856241815a018e5e706104d6e9530553e5a65d05ed16b680ce044760906a7cc4604be48e5447abaf5764ac714d43034629ff58a5e4292e4bbd23a49980187443234436d952d1054b264cf9586a277355c23d7c71068cd4bb631faeade616bf02726022d579156a6481d3b286c562e847211cc63117c08a340f0fde81cd08437b9ba305d7f7488238809307dee66fb9132863ac3e370d7ea72d0d371a1b88045e329e4ee8323a5b85c354f00bcb13662bb9ebfac84e8dca49b42bdadfec551a36fcdbb9b11dd029aea9e7fe1ee187b9b9e89208d761102f112d19b6730c95993c90f652cfc1d8bb7a816c7985753d5058ff63d3b9aa9a65efa01fc8939306f65301e8ad16722d958805d143abdaf90c8e10e24647fede5634b125212e0c484fa9674d763a2dd84e671353fe66f87c503d4308e8273af0b10f43180f0c9f4edcea7d2857ff2c15c5f0a5d278fd807ef5600ea0a1b69e522ecc2f2c1d11766bb2286cefdd04cf441af312757115225506bdc6316ab0547b141fb10db30f6e095d563fbc409f66b76d0f26b451b23e2e3bf2bdb998ede5e0aa30350c50edac6b7529e79ef1a3a4e784dfddc5333b083d290c1919a2f0f2e664c3e511afa0aa0b8b3f3bb30f66d03d1c272f664a6134c79ea0b9acf75b33ddd038a10cf843591e37f14c8c04255979c4e08a1406c01df66d1575e363ad5492456d3b2922bd40315e5a8b7edccd8803c7d2d31145d7f2d8bab6cf5d8fe1f38644b369278a848560375950e1d0bd5cfba937f03671d9eed4d99c2a5b613501fbb04a530607827691bc91580acf1228907a855f1aa244a738c5633bccfbcc410623dafc069198b44606d2a8dc69830ceed167632e8f136799e79aecad35e5b0c805ea83282b3652d61785200b9c169545687c9ca301780e513d7afe169215c41e045918296be71b8e2271d3e54c1c4b3db2a0447ebe6d0e37d7d3776af27c35118932d007db2b45b3c560f0dcff6d5e1569310e54b2dcfbdd7117f09cfa35e9439d68ad277ea8b4cb1f1eb5271c664f7f7d27bbc15ffc5a9194ad55cdc30ae419e315b01e37667834fa0baf3d033cbeb7d7204a0f04c03b0f351dd1feaf6ed49df47a4903a4b9e17dd27778f0aff49086208464db6b78874b32cab136cffd60979c50502fa57797831c5136c27ae69be080da9efe9df6d0afaca48e1de834f16c7456271263b43ad6f1eeab3d75626145812253a75806332cd9b0790e99bcb5e4843302075f87195c78428d3ea392bf24e4639ba2cb1643ced5040b17c1b227bbd6b413120d0b272595116f38587e9df49f1d342b788757082a9485a97cbef9ca26ab580983c253e0d52de1f00ccf63046e8d3b1e3ed40a70140dfa299676a5a6d2cf950fda0f1e8bc7449b43964330a12c91e99b72ce209c9ca528b81c42a778600f10005efe1f326e58dafc772444d3962c053b5e4f3c8a289b63be2283d6cc93bf35102330b5a7fc8d59451827083e69fd364af6d8ee50cbbf31f24a8756405bcd662bdc1ac271185b2bc86631d87b3aab001ef194e5a878632da81e34260f3dad980a49dc8b0d96ea1b4ba9cb8f573d0a5b9563e89c182c3b0599d9cde17b1467812dba30e53d9447966b0ed052e41919e162a387388cbcb7f3d42c51a0c5c1589e1074191916f74cdf7f13bb6802c9618a55e680bc95f217ada81684c80032941504a994da8fcffee759954829909f3b84d61fdedd401517dee91f44fb445999e510ee18cf73395d5a7a684f936c5df468956be601522f7df7a0e4ef191965539f18ba22384591d8aaa66137ab8ee8ce9b9ec460dcd5d60a9df35684d2754ea0af2de1d6e93d82e925e3e7eda0669733baef40a7a796b1f494d69331d50496176d22f850fd98251395ababe1b7d6042b0f5f3c475a900c4d159abea2d4bdc1c8dc2ea40b1edef39a072d0c901ce56907c6ec6ba9ed5dd8e153678877ec2b8c9d3b2d1d3861b9a2ecb0098c3b177975ed073b2789f458c65297cc72fdffd19460fb17cb67c34d9256672c1bf28cab608970dc5ca41001d6b119e2241dc4d90202622276a6b90305d06af3f29d56e411c4f7d9507832f06dd191d1e8e4963499c13e0034d3ad17be5d5f4930b569ba9875b91d343ac570a64d36fedbbfe7918a870b2b98a2c73560bfcc6913944b0701063866044df0b730eb7c52b8f4fb25a185ac1d8d48b6e33f143d63752130692119d1409db72fbe09af10251e749c84e12bca2d81e52a908d35a1b456792c45f86544ff14a606ebe06eeb5fa977e14cd6997b0ca71c84c1dcd05cee2274812f3b93e199c782c8a6157b2be948ede5344a0929021e18b887d39ff7ac266dd99111fdae54a93dc41677399ad9e25c984f9292f704793a97f93ce1003bd5449020e25538230a2c499b026c0c276b43b304064f1f1cb3011f626800e40ccee3c8749278736105a07751960194922c31dbb40efa23177c1f26d68e6709bce0ac8a66c9e51e543bc0a2b1be23d0af0d9690701ca66c07b15c4e7eb21c79e2dcea5b14ad638a5bdce05bc629ece747f691a63d32878b000000a7","publicInputs":"0x0e9377f31c9fae99dde2e4871dcb0cce39b05422ab9787bbfd4cba8a933dae4708e7c96b4698e59641872c2fd712cd256c21879bf01a30cf7c9d47fd9a442ff700f10d3a401a22634ebb4b0b17410cd138fd388872486b6280d552d6317c255d0091fc2154c269945e9eecd8b7c3fda287b1ef154566ab838724c08bbf33ee18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028bd79b7d8802c5315bbb1a505e518bbcaf90b55712598012ee082d7bc35eb1914211f9f02fc6efdb6bc76de80a2aab9a29f329d43a3122216e950bbb1fb61ff0000000000000000000000000000000000000000000000000000000000000000003579b12574fbd88785a68732b8a32ee511f990b5c1c9c3fd7d04ee396a49201c7047c96fd8059cb38b8b9ec2c489ab0b43a5f6d87e98b2aeccfcb934e0421815f7d69c5331f509ffffd6c8dda6db188a48541ec67b8bf434f83294c24840211744e31ec5e4fc15972b9742216130d34aa7561a3786919f9a51392cd3bee52c1ecbf77c26d216c112fba848bcb2c4f8120c8f940e8406acd6e22914cf6cd4f2dabd81cb628905b2a2cee3ba1343d6803ba297fa9197a8e5c682ee348599d784"}
|
|
1
|
+
{"proof":"0x0000374024c73b726f6de9946fc77ee612a1e477439bb81cb8b2c6de62020d690a57de6e181ae5996cd0a8f7d1320121acdf5fa0ce0ded260334259e4579dc12da0cbcd300c95e0ceb41951039e1592745ec2faea9866f6eaf01bf189a4463b4143af09300b2670115a9834079b6ecf908fe5d3fd0668954a583e95fe4ac21fd5fc1c5950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000279957fa7f30a5180d14fa065ce2bfbed38e94b985f10b5d1fce4a95a36e59f914e8f9c951ad8f46a095c4f22714f5a2736cff40a950b3437e234331a756dccd000000000000000000000000000000000000000000000000000000000000000000e941ac2af91d7ea3e7b789a78258b8053812398befd8a0733610c3cc2c1c682df8aa820bd774c75ddc4b1e29f3b456f7848bba10a44773ec2745205bdf30a80000000000000000000000000000000000638f6bfae659e3b180dde13f7d41d40000000000000000000000000000000000124a260c41ccf0b34d81c5ecff279b00000000000000000000000000000000000000000000000000000000000073e700b352d50cf0ddebdd509f7e1542f13e39e5ba43f10b037e09a0c4a33df430b4000000000000000000000000000000a4a605cd1e2402ae9e1c1be817815e7675000000000000000000000000000000b4f17712dffb27daedda1599d714b82f77000000000000000000000000000000000028606bc16d10c402be38920df228fd0000000000000000000000000000004545a23d67d11d81e3eddff757701eb55e00000000000000000000000000000000001e7c338bdf8ab7cf63beb379e37c380000000000000000000000000000000b8ea432f8085b38a5c665b8a92e6604a0000000000000000000000000000000000005798e83a88c1416f580bcce5f4cbd000000000000000000000000000000269d2efe7f41c9fde13588412228ebea1f00000000000000000000000000000000000556c1b6526cf56282059a5a8259380b582f4ff44659b2eb32295a662bb9a8810b82cbf2ba699075051227aa8a29a808ee7ad865de7de4016a59eaf6bcaafe2edeeade3a60fe5caff1cb10ec576c0c27210ed98117926c6b59184049199fa3afd4bdee7cb86144909acf56a32dad060072f982040c59889c028132b2f4e6b8b33b169c7cbbee52d1da56a39043d7ce19766d6c767b883e7b2b6b4612f5702fc578d0203b144f0a4c58dd235d03869d25a8fc84e0eed62e84846ba30ba604ff385e23215b55325ba40ed55309ae762a193782db7b347fe2cd790ec1909d637cd360611d4ac4098134b48c576ba9d68115282242fa373432e29e5434049fcf9a19e6f6d19713297e90ac2ea20c3248852274438d5e01f4cc60bfcfd214d48dc18f59bdb6a7ed3f5f4ad6ef326dfd1db51e997e94591c00c715af82249a35d5420f1aaa2bb1372e6eba18c7a6224d8b5b261a45b90aa4afe7001992d4d1c763a251eb82f2180746ebf648c18e67543c2d241035ee2f2c4bc714c01e3f673232b644a7851a5772a2407c655da788b24ce206f08c6d4b5e6b3b30d60f99a7f423b539c4d3bb7c660ff1101040d83032159d0fbeb4cd23e0a9645b83c9b59302659f68293ae294f8c24cf3191870023dd9501165619de58350fefd4d1623178c420d5213138d7ac3d2a8d18d20d1580f316a204bdfbd9a87b25d543a38cca240e2a7b552a3d40421236118b87e61033a083a03d25e6e83b32d423bfd886e02d27a1811084f6694efecba9c53071eed74ebbd2c91f0045d7e72e77c52bd487eaede45172b98e1e4c983d6a78eee75028b144408447e9b89b448513b6c105c947cb0e784d7348e2104a3daf4a61a61787555d52701fa12d06842fbba66e9e591cf6e99d863ede2b4ca632c04c826380a1eab861ac1b405d9281ea923a665bb1ec65f7ff7c30bee57ccff7a0d89b58d0671a8671e1a510ecdf8be64fe5a51ea485767006775cdfdf07cec018c679ce8530f496c0e1c93c0d00a6d21ca8e2e5564d1a6f2e1eb534c68957a03e99b77ad0863a0350bc86358d20e34b9e795a5848c6b893329cf9bb822c59b0f119f4ff491b8a1ff2afdeadf940b47c0c1112387e29fb08628821b1ea02389f1d2271a314544635f132c7ab23be7a0ccaf1f15d6478dbcc8a2f434ccfdb4c761d7569288357d2a421feafb963686409a99ee9bd1d601fb17afdb7e8e5899db2c8ebf43993133a56227c6012d585c197c6fbd2a8d60e3528453178fb7e4e3885f6cbba3e7e6ae72cb1157a42b508d4de8eb6b007cc82a3f8cffd7f28236db5b94ca621dda36000cb506a1f1fce1fc240befd031207f127278de901b0df94e2bf1a49b65403cbf07082a0a732d567fe45d9ff33d3d21f4d5d1557454a6b59bfcaa059346f0ef02c50e1964fe8ac61ddf6338b6f7a53de09d6bf245d359d7d0b37e1bad6d71cd967b5928d4c74951a2485f643750663c56562d24e5e302bf76bcfed8cb2640d629444125b56ca5b679559f71d4a7fa644e63998011196a1015ed9af3ebc8ec9b8a97df192de00cae7adf155828519aa0bdc4f9f25e748793fc0968a2d048a1270889fb089c11c277e3cb8395d4c13448a3d2e63091d335f1eccfffada1a932a0418a1b0a4bc266b08a8510f87bf50a90a25806ac09593a757a7841c46c0e2f95289f6a06f7ceb03b51b6c25cfa109483900a1c2b49419751401419cc85e118ac4b519d1e4ee1f0be5ea51559cabde38a0e540fbaf353b4bd94060b534394111ed7368209ac8b1c9bcb0d357a96b7d997167c464641730f5dc62716e2289d1969c226b306d7cd821830318778fa0ef247a53837ebbe36503d42175fc58dd63b5d0673ce158af84948fd51fab8306d5ca6aa3cc66431fe19ed01c9d8dfe89310b5401f5f200906101aa357108f2b8a02f281555131a6e60d6c1d769ba24da1d08f80f73516f15c539992245c3f91e7d44402df966ab704236b1d560644854a0ab5d779a91cb92d0ee3cd9af7c2d98384af4a6fd06770a470c5964d1268c419e1f77e9be01e5c54a982e5ce1bb71e8b854e0d11217d561ffd6b5da4af7fd6a48c468e952326d29ecdc0c55fdafff21d97cd7223333459fb29803c403768fec657c5b56376166ae84a7a0c642c4056c56afe25dd4b527ec5baa60bc7a45a8fa47efbd9711500593dd8111e28984dc6ed99f4461a25b18ef1be130db3de50e9c26cd3faaee0246952137193b4546816443636d583e0a4ac93bdca1dfea71c2385013e75289e036dcd2bb880a5ba64f83cdade779dd4d3e1e22b3e8bfb2101b16351272eaea520e08c07031139adf078dd6048209e09f6f005ca89af419ee80e04fe1d842b40155dce9a1d5e73be5d35a3a137b76bf03c97c71f5f503f538bd2dea5d414ef311aa90623b7f9bb659f312150596eb55aa2bb0475ef1ab8aafd6a5a826ef1861b1c8e63d60728fc45650cd60638719893f7cd7d25604c3025d2ff5f8b5c7f7c6c01262d8df523daa88e8976fbab0db01ff5be218616ea4926eaa4f8f330a14b021a21cb8e61de2a7f6e27fc1c547ce396e35b10007926950f7ff766fd40922aa9167d97baa4f9d1c63cd25eb35458473698a2ffbb82481a6ec924cd2ee5fa0ef20cef74bc34a2034edc10eebb82cdb2f5a4a392bede70f42f0ba83921d6493fdd0dc4d66547c5356c23ea91249781c911c2d4b46d709adce6fff57ca18f5e1d481695a6964bee82165f10d8575d6b297a34ad0fe6db02f88d1913bf2aed68006b00061714750289588091fa49a5a60bba72a12d40652fb8870836db6d771f66111d84a756238702f94b1dbb47edc85c9170ff5f970f8d6d5a8561ed838aa15e072ade281f9c5f055698950fc1dac87fa6c062af30962fc7419606a372554732161ba34128b38aa95697eb4ef6085b38eaeed1c946ed5319fc2ecdc930399d9470241b2a831c13e19d6ea17bbe364a462b0b1708c9f9e609ece2cdd522a7d4185a26b4d9682232ef43619608abeee702606bccf9e063a28bd93ad828bbd5d2abc40045beae5d8a866ba6e0c81eff9639ecc2350a594f06061f7cd2249d3ce2f0702a31a11e69d51bbb8ebcabf677f32871000ca22322758b6fd7d360a6c344c738007fa843cc66c8787203ff79a06d23dc1c0bd8a73b7496861a76efb63980557f016216fd71b2a2b0ca8c41237b1faef627913adace1f1a0cb735628ecface3ce122f3bc8057682162b700c4a521f6cda6c713b863de8d727d0d82584fdb23be02d09adbf32fa028d6ce5063b46de2cd17ac2b92ca50a2746e9125c95085f0800179d78862e215061980d7d8d8cb281e783b8f5c48314bdda9c778a8a86edf5270ba2a65f32f47bcd28832d829cddb5b00de69776870d4164f469fede36ceede2119a74a477ff69358b03bea84b6c5f09ef629ea66aa7f6fc533d1628bd09869c07dde72e1dca93a72fbbb5cbdb141abe017e8fccbad8049060d6a0ce613cc5a12ab70421ae49e4bb9c73c68de6624e6ba9794f6c4f8b58be27d41fd5bf8481fe0633efa5549d2baca52e3686a5c2a4c2cfe581b11f2d267160a4386f121b381214d39e676cb7b46e896c433b20bdcde7536357952c0ca36f0e76557e3d757e982249e8c24f1f58406229b78e2f544f73e10f703c6a18a737986ffb90b8db17dc179cf1c09a8b517d37eab629d083d380c2a784713af5000061385f0052ddac0606fad9907bae335bc8f89bd2afe446c952c8129e8e108e843bc5909d3d7f72e90964e51e934779ebb5692fd00722a4b43d0e3bf7def5130f389dc57598fe00021ca41cdb77a667566126399f0722f011210fac75df845df079388f491af02f0d25fc2446ffcbdaa1709f753cd6225d61b279e70b55153b0a52fac37973727f1b1adc65fb3c6e09479a3cd2cf511f8712958743d004f7d0129fc44a86aea0f50d18ccb3743cd7f7af24b45a5ceaf1e38baa59d8cc2148d56ff532971d39d87a8c140ffabea5b4cc60f3b6f73beac2ecc16af03ab918bd07507b8a2a48be7a817c18e9fe02e2a9248d8d0d4c4701d9cf2192e07d18a5a10682112676ac06eacc0b0b7f161cd106bbd6c240d2759a934ae0ecacee6cd81d3d4c2ab9e1b7550abe560d1858a3c4e3973c3f55fe7f60c4a117a1796ad68536fdab080720c7a1a362592cbf0ce79014944bdce97dd98e7c57f6bf13f76a0c1f09dc70a3067bdfc558e71556aaa7aa38851c290f7f32cdfacb6b0bd331c5b40dc8b6db154fd09fee0e42296088d9e9d5efaa907c7cefa2b5e94f021feee27881ae022d23ee82b2b23ce004228398d4941fd27ce75f3f73442e64f8356c5ff71a79f0c6133533b972d2fa1158df34cb980f2d98d261ae284b05a088fe046ba5d440692fedf56f81b1510113d9f482d1d363a1fa5865a5080dc9a694b449359e090b65065ed1f64e4dc55e219f6977c792602cff3c7105654b5f72ce2e6b79f29ba6eaa0df48b8e5425c6d223d4a8413586b00ab8ad9c45add3b6395a3e03b799abed7bf7e3ed09a44cffe1f285925828080466c055a37e36bd31d98c8c1c5b3a7f4ffca8d0728b752870a2c713cf117b862ae90fb7a52477c1444377ff0a6cc5e358e726d9e6cd743c69420686f7d497838c7060324a2e50068dca9a3f4b1a2d1f6421c60936e2738d8c30986ca441275993ee08564128e8b4741c9bf6f8a09e97d0e697e2b04c0ef85631b5ea3dd92cb3a40298a8246c4d623ac0cb3df0e8cc0350ff6053df4747ce14d15d1b29212ef05b3dac93adddffb55744b26fd5d444ffd99253f1bb735827d2023e7c38ded4986550f5fb3592332ad3dfd7eb1b74622525ecc9b92390585df060a419fa6dca1a965fc4d8897498920066d0d606f0d0682b725848c62612e3b2f0b80250e8ea018752130192e4b09615cffb2d22f4ad680c833e5ce77c1dd4ee51d660de96cc28a0b41f0676545a0330331a2369410c6ca5b8fa7efe7c6e406fa25b46865b095e5ecfa206b8c478054ba25acf2c0d97bd9e6a5b367357229c5661dec9fee59e8d30eb7d96947dc6c9f76f3ba717bc35b64a61e6777189c362432201f1183c270a53de3160131113a4f88622739fe859ba01795f17571fff5c9241f23490e3aebec3b6c647ac3934d83690636084be65bbbfd272865dd6f2db492293dd46beb15ab4c4f1411034581202bd6609cb9d022837ef225f54dc3f440a720f0eade7579ca6646441c2f4624045d155f0a006de0a2c341abae74431f62922bf1cf062041a5f0c611ed9db9dbaaa557e93ea957faec000faade81ed8d112c1736070e5a051f510dee52aa27e2aa712e8ded0063ae87fd7ca0b776664c3f1021b60c3bff883eaae9b874d4895a6ed133dc5e1052bccbed6d70944d0bd6672b03f2e215178460f57919a38a44e412bacac1faecf3ed39ebcdc4d8f36a7f5d990fc417f2e84feb07a2d17b225f92573b401ae36fe10a594b060c16bf50b075b00d52f4206017ebbe54e262c9f9511a292eec211fa12e5dbbd247ec9189d6086b157efd4c12055537118c60ba78d19a10bfa73e73ba093facd809f29800acee8d17e4e618b02b912891a1de15ff594a3751761ca813cc60392879079a522c7856189084d3102048873f267f08b647ca43cc580906242976aabb032ee3fc24d9c22a568abbaae4d3b90cf011b4478359c01f17857531cc5352202c1a8e1a8662442d3656a165f5658be69c19f1a137b1329f13307a7b4563236e206dce50d2a4961ce2b1f3cf3e230c5c574cbb7adc3cbfb8949cd4a13642c176e0141bab528e400d2ff96d5b4a4d6cd6d01de123324c044108c0f3c3cca9bee6f9b02260910a270a7db9047f43179cffed6c50f567ee8164298188708360214a08c4cb887aee7506eeea95763166b4d37dc34a25def1aa9e53510004404a16827e991effda68950dd2cf34edcfe805e719b70b20abc4cec648adef329a1136245a9b5cf0381f912a350008ab5b5bd47d1c83bfc1546e9a2024fa8a1dbd14ebcd3b5a4b869d9ce32604b84eb1d9024ccd524a301f292613316b1be92787fefe9bbb9950d75f56f101868b2a8175010d5975b8e2d136b2c9df21e0248b26f103372375d5f445112f21ae2aeb3dd304bcb6d665c5b7aa5774530d4e2d712d7642336ad13c8d91eb8805751549b17e3cc00f15b4866ff7f938cdc81e8f426a5742e75a4c2b05b0051d297bdea7b7eb0ee67b284093cde821cb8310ce35a5a0c444ef565309e884a8462c1307c2b4a88297cdaf5f15b56f09e121e1a3c7959e760736b04b7d7e9a51481f4b257e2a8ae5f94a5180ff8e4fddf1c380cd011d5ec5e0810aa3c84e2fa29d103cd609cb27836962318f5246b38cdadbc4eda603a7bba0cc45285389b2820b136c9c2392b96ae13ca72eff4a7731f01831fc3b50d9817606df28df9106ca4302a57cd29870a238c3aef468d364a74b086e010314ccf3737114bbd3a0b04ab5111e8638d50f61e657df06e8a2fd2c5c31a39a10e1baec13a432b89d1ea42ee121c8906a8d401ca9d7044c55ca426a34952fe15d162b55090fd644039b8b66932df9adf2a6d123c86c58aa3d311adc1e8616b3726bc923e9ab1830a88fb57dae11282d1c1d9bfa96ddef19d1a5eb95ff81e30ffbd9295ccf37a37ec151c8a1aa2ce1142a627aa173016d575a3efcf06bf4dde3b6c49647b6e0cdeee094928f4a19e2f48967c7564e01ce9d4d3e873b3da01807ceb45b1dbf283fa4ed68e0cb871a7b68c821844b9d820a495081d67635b823b2e4af8d8cd2f46fca3854a143ba19915e480e138c02993a67356c741c7c9028e98c59583c64174e2c64fd6c8e8d2f0a04a9e6efc4fc7e11b8a562c1585805fc14e062f70276bcdaf83b16f8063f1718f1d998792b2b04a5914fc52d780080b11c5f0de3c355aeb53e50c0375be20396a73cae34d7a04c533e1fc6f8e385b550ceed389d656e48e8f74c4b90ebc617cfa5e2c225f6d5909f406ae5e2a3ea751ec3bec6eda3ddb369f1b33b4b6fb71d6846b226cb365d8e04a4604f2f2b623edc2e41d0a513bd7c24308860d540c9006e71bd43a3b1b0a17e375fdd32fe6b596cc06680dd825b65b7ae8ff409974419b82f159f0858784da5ab6c5c46e752f20795a39b447cfa428dd0db6b1ae29105f0a26cbd43ecac4332e1ee841ae04bcd28a8e86054a939f23eb99c5e6c4c7b27ba24f79d73e0500e6a6710aa134cc1e8fb125d2073d19d457185235fecff9d07fb54f1c8786fe15d0b94525c57df49bae434e831de959bbc278878a0b60400018f67e52e03da3a2a6d8284c2cf6b24cad13b7cf2c846083771f42d0c056ad715d8fc1b8765207a7aa58cdbaac92a48f2f9d82ab748dfa62af4152e667c99a715077aeb0651d17e0985da94102d66365401c84dac5cd2f46666d4f2dad3b25411195948204836afffb5640a17a69a5284f974fb0a3464009813ca0cd6843d4f16cbca83ec497bd89f3ce1b6398bbedc19bc506ae67408389c4bda87e1361f830b96e849d6c08d0951ddbc3d5462a3fe1f7a3f584d2ebf20071b1a28b38be6e02ce7f5c325247a28d825c2d977cad1e8584c7ce747b700c3591e3c1de5ca231224e8c61a1df3277b2ee8695914f1d3df29bb8794dd59cdc592843f11d806cd9728983525f54a7ac029e85439efade8a73baaac5197266103594c1ee1abc14c850328ed4cf1ef8a18fb877f8e01504163ed46dee37a8da091f361b356fcc455b02e48c2ba58176b05da0329b7e87f35278ed716aa64789bf60b7c5a85fa05ee80097f2fbc157e78028844e8574f9d36d43bf4c1d9484187417516f9e67828f64a2a20bc5c5c0d6ca591a17db3d92c235a9c2a7b5a746f56b456ce46d654f4352927a555cf335f67921664b389055ce3f4a7b82c4ed99cdc5fd3e3b67a127bb5570a49d8390b51356b42083940afa211357c779033cdaefe82942cb2958ed3166a2a0b3e7b47a4943bb44f83e21de5c2d52c18c7f71d70153a9fb0fc92301ee7a025cf3ad27e484d82be7ffa5e09437e19990ffd3c1a7f050a6d1d31c2194f4b8016c124cac082c8603b212b383ff50a6f5f68f04d20507e476053dc33d2ef249319174ea26ab899c707205790e515f466005ec5134ebecc4ff7b708d316813e771f910fce8d4a51dcf07e78fca57129668dfec1025dadbb7d1091dc79d58972351922ebffb60659b0ea920b8ed54d5b2adbc63122388b95dcc7016e72cf96a9790e5384235107011a9ec2dc21859038d0872416b581fceb060adf002e206eaf0f23c1503131210994c36f5b26ffb53a758de01c002a51c694bbc8b023d7c560af00ac1ba1a265d0cf31798d304897d12847bf2d1f3a89ff0831da9254e0758e1a13b555584c850b01985067fdbdc84ac0593bac2842cd61c5477aef2ed6fa06f8020a15480627e646dc6c947f65a6e7922804b0d8c6db1ce611d81153b5ff481c25ce0572905ec14c7d4897a1b376583f504e88e2a2f36197e51094fcd83bd5c21f19a730184dd723c1b421b5760b94803c44fae3d385da7933d817af97a8146e0f41c896c01c50dcd67f47ca898255b1f6e1348765bff661655f00800f77b31505f94a74d0758b6f91d53e9e93a43ca3ddbde19b0177ce254fb536ff4235acf425896cf69a5b5c01bacbe5aba78ab7161c3a6a83c7baffc895d21becb03844451cd6c63f5f63cf8cee7d02db380343e1a9d6775af58e8ccc9e8796a8d37ffc8e296b7647fe816011c0aeeefec2c3df76752368a6ffbd10da8e796957541516462dece24d2cc06e50fd90f27d526e88aa4a895a68886226d975af1c59b17ed6472e5ed6c592b225f24cb1e2fc961aeb296bbbfdf0a473e4d04d318a97b0d0991026d3b5101382af12e5ad25fdf61ddbbb9c275c0dc2fbde33ee180fc30ba31e07259ae93fbc44b6d6d23481868670293a1527d475c77baae96a84135176f2bdfb295369f4fce7612dfa1ceeb788b359d232ec668091d400f2441f794f9258925b2f888b5a4ff17e6e384c9360fe7298404cba352c53c8e7f63546813c62be0b581ad5b93b98c6971746071578d2e9f1e2f9d6f1cfd0572c1604570b4b9bae41391f172e9f937f86c558a16a77ae34e43208b1d147d2802d3cefbf35b024fd04e72acc3aaf616487c2b44bae15beaebf34fc9692363390e8e7906d769c0d9a8cdc0492d4a4250f59ad9ebaca89f38a89581eeba2a528bfe18f57d453a01d7725b600014d39b4ed425e8bf7a1347859d7e3c3e2260556aef50deb3b6603590ecfca11944c2b378e1cd48e49be0236ec63d958203fe5b0a70889982dc68661f9ba702d7ea05e151c0d5af415167983e874e03ad9a3f04fe6ba1154a09d33b26cdbc62d985cf73a4bd7f0383d3ba07fe6c48743c2e755df260a882149e015352e2db813ef249a74ab3e221084df8883148da363ddb002e8ed1253618b1d35969d61f31651ff530ad10f6479fdf402848821245f313ff8e1e6f440b9e139267d7659a32cc78412f1a34af408ed3414b68dffb38621a60f1e0cbb7dbaabf4932a927f2d1907fa04d4e761f8c8d570f3deefaefb7835778bea9807aad32e1db0eb74771e18bf1c8c22200af9bf3896fa9764c72c12455117c57ca20d461c72bd5f25601618cdba9fd5969c264d371eb76f4cd8a363fd9fdebc1d56447acc40cc4feadb2c190b2359ac8a8f74b7b6b3deaa1018cf6bbf37c4b1a784d437a3777825a387d01b916ee66048bbbb9195f25f5e3e5406529e32b7853ff2bebfb561be99eb89db1cc1786604be7460bd3663b34fd9f309b6ed25af7a6c7998dafdedaa40a45b0105418d649f9e0ec14953ce98b4732f4df4006e018367e226ba74722881567357285579b7d794ec262e5823d623d4d118cc43651389d6bf032f5dc2520c2edae21e963fe599d3ecfc4ce70a7ff358d7bb28c12d5fbc88430d78425d548e675f1e0250373e8e940fad93c1adf69c344b4a8b1f14c8f43036342bc18f0184dd270c0eeb952f89d6adcc09aba616986c3bdc6bc806e1e03f972d276aa85c234e150506ca166e3bf46518c75ff841b1e1c307f2d99f1a8e7530e319cf56ad5b7aaee111eaac15ca18d83bf522723174edc7ba1389b23a984cbff64f30f7b659dac1890f09b8de5584fd230e10747dcfffb3ff9c2704752de828972443fe523376a8200b25f81f8a2c745a633074163cbfd5d3ed16ef79d5703f0fc0f151e5585c7c65302752afcdb25e0c125db09bb73bd1e420e52ad747f295e84e954784c71b376c1101eba81304e6cd26afdc86ebe5804624381e2f1261451660bb50c4c45bfb5e1600b2a9cd851b3512522791a1711b46d514ea262199c9e0cd8845f938d1607109356f4ddddf1815913ac3364c43565ec96c973b33178b88160242a8ca45287e02a19fdadce2c63fd510d42b48641385c2afa44d1046bfcc8a8b3fe67a8e3119029c7fcd15082942b4e91e2b060a9de824d821951a3e3724014c91efe1ff4bba2c1983dda112c6f4a8d14a0c374b168d30579745f4a9aeba1fdd14d2d5d09aa509a2b6d7b07c0d90a8f20e06e31d88dfd895c60a3c65cb11792609aec48bc31b01f580ad8977c303f24cd82796cdd6e6f2e4d63da4b1441e860a86d7767de7d80171e32c41b51050447bdacd54e7074f8afcac3023fbea479f193bc1e4ab45d21e3f1048b1b95b35c4e9049110360acfd836d7fe23738179566884a16924f0cd27c9d1cf61646917fcaea3b20f605d530b45b9dcdb6954dfdf68105973c70d01041ba2ff3eea60ac493c56d0ca410467d05e89b3266ef354ddbc0504afa7ee1426001161e5f95acf80886931d4e0b90159560e958e372b4451ef05f009814b402ee4ca7af55a3fb838a0da163072b5d3bc5cdc1c82e9b2f5ec92162ab9c7870e172c1094812d91df6aaee3988c42d042d94631a7becb52b955c514d9e2e4c8ad01eced7327a26db95441708e33a8a968a0395dbbb2f508deba7f184fb6cf79b12a7b392fe2f501d3435e55a659f2a629fcd9ed0d99e968f5e636f285ccd7da522ac500f0284c9f247058083293d70dbc2fca6729a27bf1ef09e34be4ec49a8c3105e8f5a6a796d7c5a1648340aaf79f792e3d51527b42cba9ba9443d660a359c287b0bbc6f55d2f65ff5c5bb552e25091a13f2bc7d5beab63c0731d9588b611e2c95c8d450016cd0b1890e8df3ddc41844dc87dc65ada2732448335098e17cee00894310d74b07cc0afa9e399aa3f5c292d3efa5a2b7dc4d1ee58a714725d075044733c134c2608dfdfecf300596326fe217422373fde79cdfd756951372bc401c0ef7ffb913dfbb2bd48836bd71aa4ec4fbd96d3d8fe1720b820959d0e587d301bcb50c287eedd2f9e03b2971de6ea98bdeaa62f4f293f371ffb37bcf01a9010582a84dc47e461617b37fa486a5899ae43f4b671fba5926cf924d9a9cc1dea923780ed6b9936015ad8fefaf233f1ccd2450d4cfbf85fe6b0d28dd34f6117a5c064b6359682460cabccdfeec2e4cd8f48f81b9dad8ab686791f75f261791d31e1108fee4bb11b952b15b8ba31eca87ca7392510eba80f8a46d3d80dfbd7bce2c0e4c51771bb232828e065c10c7372e8588a4d7d1b1543c57c44b655220d9308606ceb49094d1aba143a5f5b08d29bd52e9ab13a59de37b6466503eb1d616eeb424f7639f106ce9d5e80cf9fcdca7e0d02cc958492ce4cab974734d46dfce7329161a1b4e3165895dd3137bb8d7ce21bce5901557e6a4d19ca838c79f9cf7bac12ea5a937e7f52554dbaf508efb1263cfb0b233a7350c076299f00e2ad9c2058707883c81a64bc5368ca2f64a7e44db24d98100c18c226c535e11ecbc0438ac6a0bf6184dea429e39214485905696fa76df29d8a0f102f0c1a319880e91f86cd50d1c6576b1b6b0510ef6ed84d5f7b49d759818270a12a8e44da17ba8fdf587680f39e243c4b130a4a82586569464e4fa625c39771395f034356bfa9f106598d90e70376482a2c6d114457f36d1e10ff0afdd9adeab3d0c222a96c13cda7a257521ef28f409669760e262f6dfbd727a74b831a12335ebe3c408add5136aab309a02e3cf3fbb362c9f566a539452b21724c2b909a827959f507fed7ee5d8dc3e53030a373d9e806e7a2ac9fb2bca656d5f4d84f30a550c46708ce506c22ba282200367823d58ce295925350915529d0e5f61848b0afd1fec77fe37568b201f391812b8cac270e06283ec97ccc078d20f0bd80101567c700a667a299af45bb332dd2dd7c7c6a5f456ddebb79e41f805192aaff2faa7e693b0dae73532238199459b04d692b52837c3f70f4912fa65e43e865da3ce123fff5d75d06a9490bf841afd0a13dc2ee06d800403d431f7dc574137f9627eee323908ff18e75df8f0e17a2a21341c8b3d228cc85c756e5008a8a650be402489039994dd3d69edbb9fd236f9043494e54bb5721952d8ec0bef09ff996b2cbb25cd4a35925ba11e6d275d9b4216a4aff940c8feb891de4cee98457e39d6c9c83a107f8e8ded131c1c5cb04d7504f31e7a9346407d84af9e579a9fabfd79766365f835d4480bbca9ea513f5df22dacf078f24430adebe4551698090f4336bf9aa3a95a1d9d15cc96fc1da0846c186793bc464cb53b83e31aa4f14612e2598aa4564ff7033247f6c3312e7bc0b5288a708dadffe1128446cb6c3442eb2086e75a0f21d16ea7b6248326b601e61318872bc2e02f9c6e45d24443d0b17bd7771b2556b39f985b70e9740e5ee63dd50e36dff036e604d055822ddecb7fb4f3722575f0a631e0add358da7d9675a2dd1d5f6bca28a211ad9bf97d42a012781b8a285c7138c5a234e88e1429a303e53e01f8d2c40bd85d0eb2b86c9ca26c20fd96846e17ea56c698f1bd9d6e43e1b4610cedd35e4ceca27a1e846776083290143c64e8f75e35f095fd1dca2f818b60652ec6d0804bdd0fe74ba56fbf2dd9c5a56602bf59482df4925f82318d2d4fede02f7a21860c14ab0a88f4a75a4d9107bd9e80ae050d8f0ad16ced682f261687b30a9417de6b1be04dc76391a9bf3a96c2543feda257cd8f8c42d4e093e1bed0380f0f63205dbc777a93098a42d1f02f5d2c50f4e9ab2327b08f1ac668d92cde2024ddf8a714ab6597ff34f6af94688b22977cd2c985e267fef21dcea041fe75ac1467af307aa6d853daeac22fe3c034b4bec288b72eea8f86399b771c5407d30217913bac43fd3824ab03a3fc8f7ec4b61483524d22e1ac23da98c54216be116b287f15eae4cfdec799c131ca2cc6e0299435045c773629fefc781caad9c052bd0c320d719771984f0f4d38a87f42bcee6336838db163c4f3b2b25a8f4617ed0c2f34b94c4183bfffa99f0ad67c4c46786870a7345ec223ba214a176716c381af198e486fb4b9becd805b8d43cc4706a33cc8453ce78fecbe924df95973499a432a9bc33f8e44330dc66db844b406d142f7d52611dd4f1e82dc99a522a982d4f92ac5776d9ed398eaef4d657393fc7869736a9ecf2276b7c94ec3e42d30375edc0ad76ac7d9e2a359474c55d46581e088d18d8428cabd1d1a096f7b26b191b93e143b1f0b7c7451037fbb1f5ad68dbb8056217d28a57fd42a1322ce7794c439961cecc6dd81097a2609cd4c7d0a30a27c38a099381a26adc42cb32b2d42008d6125779281b7f84ecb37bb6cea4027cff83f3aecb3cb76f8f230fdd884109b51742759873d94fcdcb4816aba0da294b568edab5d845ec17d01821bfb8b1a4c8c3603fe700181d6e5a87585766eebea662aebe97917196ec375fefd37dad95736fc2caff8eb84263d07ad19efc312ba46c042c6c3950bbd912a1a34aa2e62c97d97274686c34058378bf8f4aa45af9b6ce04678b21fa9b1ac4c782712abb1098eb101095122be10ff24c28dcd1e13ee0ea82aaaeb47f96827849a3a05f256904ceb2eaf049863bc0e49ba6fed03d0a36b03292b66591a2cf0dbce5cea86ac87b0bf01981b862a3ea8962ec92185cbc223bfc99adc4898e56f3db6fb56192a67e7f803f79e34c5b84fedbebd805e6f74f145126d43459877a3c1736dda40fa49116a0c8d117dd640bf37b374ed31b36ffa7efa18de64de8601163c4b2a87ba88acbc270dbfb81ca1b1993b0e4da9db2892fcf941819bba14dbeed41ebb2b3340fa310a44e8f1953b8a110d6e9fdea1c7cbb7894c6b8a9f6e4dd9000d5d057114cff5075d4425d471909bfc5b28c51440a0cc9e87376003504471617c1892a66c58040fbfcd0e4c3550b3f75f8acf37179073204e69342e77310362128367d519007c2ef42b20ff9cd13ce768c3bc474ccdb6eb3053aab7a635f1b3165178f515cc6a26cf9c7bbbdd777d7dba6f3134dd9604ae4717d9e8bd429cb153c848e67a3d0014b72cf48549f11aee178fffea2a9bdf515ad96e37a0cab7a19123b5412f0a051947e4e74eda847e3bc25a9e61533283692c7f19341de9e03d5f10b1e972345026374ce4651715c9c60906a2ed0fbe1690a3a08b7f34bd6d676bd7fe50a09b1c04f85ae240a691c7a16fb08268738f18ece452d1ae1a127e58e6fb3f2d21e82c062f50497296f510a35a710e75d9325136a5b6bdb1a7fe9a49d081c0a1a77bdd00000077","publicInputs":"0x24c73b726f6de9946fc77ee612a1e477439bb81cb8b2c6de62020d690a57de6e181ae5996cd0a8f7d1320121acdf5fa0ce0ded260334259e4579dc12da0cbcd300c95e0ceb41951039e1592745ec2faea9866f6eaf01bf189a4463b4143af09300b2670115a9834079b6ecf908fe5d3fd0668954a583e95fe4ac21fd5fc1c5950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000279957fa7f30a5180d14fa065ce2bfbed38e94b985f10b5d1fce4a95a36e59f914e8f9c951ad8f46a095c4f22714f5a2736cff40a950b3437e234331a756dccd000000000000000000000000000000000000000000000000000000000000000000e941ac2af91d7ea3e7b789a78258b8053812398befd8a0733610c3cc2c1c682df8aa820bd774c75ddc4b1e29f3b456f7848bba10a44773ec2745205bdf30a873e7124a260c41ccf0b34d81c5ecff279b638f6bfae659e3b180dde13f7d41d41352d50cf0ddebdd509f7e1542f13e39e5ba43f10b037e09a0c4a33df430b4a4a605cd1e2402ae9e1c1be817815e7675128508202fc4d93cc3bceb9ad073766efe80196dc0d29d2bed1413f5a8226cb788c86ffa17dccd213f6bc054bdafbc1c"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { InitialAccountData } from '@aztec/accounts/testing';
|
|
2
|
-
import {
|
|
2
|
+
import { AztecNodeService } from '@aztec/aztec-node';
|
|
3
3
|
import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
|
|
4
4
|
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
5
5
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
@@ -11,22 +11,20 @@ import {
|
|
|
11
11
|
TestCircuitVerifier,
|
|
12
12
|
} from '@aztec/bb-prover';
|
|
13
13
|
import { BackendType, Barretenberg } from '@aztec/bb.js';
|
|
14
|
-
import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
|
|
15
14
|
import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-aztec-l1-contracts';
|
|
16
15
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
17
16
|
import { SecretValue } from '@aztec/foundation/config';
|
|
18
17
|
import { FeeAssetHandlerAbi } from '@aztec/l1-artifacts';
|
|
19
18
|
import { TokenContract } from '@aztec/noir-contracts.js/Token';
|
|
20
|
-
import { type ProverNode, type ProverNodeConfig, createProverNode } from '@aztec/prover-node';
|
|
21
19
|
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
22
20
|
import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
|
|
23
|
-
import { TestWallet } from '@aztec/test-wallet/server';
|
|
24
21
|
import { getGenesisValues } from '@aztec/world-state/testing';
|
|
25
22
|
|
|
26
23
|
import { type Hex, getContract } from 'viem';
|
|
27
24
|
import { privateKeyToAddress } from 'viem/accounts';
|
|
28
25
|
|
|
29
26
|
import { TokenSimulator } from '../simulators/token_simulator.js';
|
|
27
|
+
import { TestWallet } from '../test-wallet/test_wallet.js';
|
|
30
28
|
import { getACVMConfig } from './get_acvm_config.js';
|
|
31
29
|
import { getBBConfig } from './get_bb_config.js';
|
|
32
30
|
import {
|
|
@@ -73,8 +71,8 @@ export class FullProverTest {
|
|
|
73
71
|
circuitProofVerifier?: ClientProtocolCircuitVerifier;
|
|
74
72
|
provenAsset!: TokenContract;
|
|
75
73
|
context!: EndToEndContext;
|
|
76
|
-
private
|
|
77
|
-
private
|
|
74
|
+
private proverAztecNode!: AztecNodeService;
|
|
75
|
+
private simulatedProverAztecNode!: AztecNodeService;
|
|
78
76
|
public l1Contracts!: DeployAztecL1ContractsReturnType;
|
|
79
77
|
public proverAddress!: EthAddress;
|
|
80
78
|
private minNumberOfTxsPerBlock: number;
|
|
@@ -146,7 +144,7 @@ export class FullProverTest {
|
|
|
146
144
|
// We don't wish to mark as proven automatically, so we set the flag to false
|
|
147
145
|
this.context.watcher.setIsMarkingAsProven(false);
|
|
148
146
|
|
|
149
|
-
this.
|
|
147
|
+
this.simulatedProverAztecNode = this.context.proverNode!;
|
|
150
148
|
({
|
|
151
149
|
aztecNode: this.aztecNode,
|
|
152
150
|
deployL1ContractsValues: this.l1Contracts,
|
|
@@ -155,7 +153,6 @@ export class FullProverTest {
|
|
|
155
153
|
this.aztecNodeAdmin = this.context.aztecNodeService;
|
|
156
154
|
|
|
157
155
|
const config = this.context.aztecNodeConfig;
|
|
158
|
-
const blobClient = await createBlobClientWithFileStores(config, this.logger);
|
|
159
156
|
|
|
160
157
|
// Configure a full prover PXE
|
|
161
158
|
let acvmConfig: Awaited<ReturnType<typeof getACVMConfig>> | undefined;
|
|
@@ -217,20 +214,13 @@ export class FullProverTest {
|
|
|
217
214
|
this.provenWallet = provenWallet;
|
|
218
215
|
this.logger.info(`Full prover PXE started`);
|
|
219
216
|
|
|
220
|
-
// Shutdown the current, simulated prover node
|
|
217
|
+
// Shutdown the current, simulated prover node (by stopping its hosting aztec node)
|
|
221
218
|
this.logger.verbose('Shutting down simulated prover node');
|
|
222
|
-
await this.
|
|
223
|
-
|
|
224
|
-
// Creating temp store and archiver for fully proven prover node
|
|
225
|
-
this.logger.verbose('Starting archiver for new prover node');
|
|
226
|
-
const archiver = await createArchiver(
|
|
227
|
-
{ ...this.context.aztecNodeConfig, dataDirectory: undefined },
|
|
228
|
-
{ blobClient, dateProvider: this.context.dateProvider },
|
|
229
|
-
{ blockUntilSync: true },
|
|
230
|
-
);
|
|
219
|
+
await this.simulatedProverAztecNode.stop();
|
|
231
220
|
|
|
232
221
|
// The simulated prover node (now shutdown) used private key index 2
|
|
233
222
|
const proverNodePrivateKey = getPrivateKeyFromIndex(2);
|
|
223
|
+
const proverNodePrivateKeyHex = `0x${proverNodePrivateKey!.toString('hex')}` as const;
|
|
234
224
|
const proverNodeSenderAddress = privateKeyToAddress(new Buffer32(proverNodePrivateKey!).toString());
|
|
235
225
|
this.proverAddress = EthAddress.fromString(proverNodeSenderAddress);
|
|
236
226
|
|
|
@@ -238,14 +228,21 @@ export class FullProverTest {
|
|
|
238
228
|
await this.mintFeeJuice(proverNodeSenderAddress);
|
|
239
229
|
|
|
240
230
|
this.logger.verbose('Starting prover node');
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
231
|
+
const sponsoredFPCAddress = await getSponsoredFPCAddress();
|
|
232
|
+
const { prefilledPublicData } = await getGenesisValues(
|
|
233
|
+
this.context.initialFundedAccounts.map(a => a.address).concat(sponsoredFPCAddress),
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
const proverNodeConfig: Parameters<typeof AztecNodeService.createAndSync>[0] = {
|
|
237
|
+
...config,
|
|
238
|
+
enableProverNode: true,
|
|
239
|
+
disableValidator: true,
|
|
244
240
|
dataDirectory: undefined,
|
|
241
|
+
txCollectionNodeRpcUrls: [],
|
|
245
242
|
proverId: this.proverAddress,
|
|
246
243
|
realProofs: this.realProofs,
|
|
247
244
|
proverAgentCount: 2,
|
|
248
|
-
|
|
245
|
+
proverPublisherPrivateKeys: [new SecretValue(proverNodePrivateKeyHex)],
|
|
249
246
|
proverNodeMaxPendingJobs: 100,
|
|
250
247
|
proverNodeMaxParallelBlocksPerEpoch: 32,
|
|
251
248
|
proverNodePollingIntervalMs: 100,
|
|
@@ -255,21 +252,14 @@ export class FullProverTest {
|
|
|
255
252
|
txGatheringTimeoutMs: 24_000,
|
|
256
253
|
proverNodeFailedEpochStore: undefined,
|
|
257
254
|
proverNodeEpochProvingDelayMs: undefined,
|
|
255
|
+
validatorPrivateKeys: new SecretValue([]),
|
|
258
256
|
};
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
this.proverNode = await createProverNode(
|
|
264
|
-
proverConfig,
|
|
265
|
-
{
|
|
266
|
-
aztecNodeTxProvider: this.aztecNode,
|
|
267
|
-
archiver: archiver as Archiver,
|
|
268
|
-
},
|
|
257
|
+
|
|
258
|
+
this.proverAztecNode = await AztecNodeService.createAndSync(
|
|
259
|
+
proverNodeConfig,
|
|
260
|
+
{ dateProvider: this.context.dateProvider, p2pClientDeps: { rpcTxProviders: [this.aztecNode] } },
|
|
269
261
|
{ prefilledPublicData },
|
|
270
262
|
);
|
|
271
|
-
await this.proverNode.start();
|
|
272
|
-
|
|
273
263
|
this.logger.warn(`Proofs are now enabled`, { realProofs: this.realProofs });
|
|
274
264
|
return this;
|
|
275
265
|
}
|
|
@@ -289,8 +279,8 @@ export class FullProverTest {
|
|
|
289
279
|
await this.provenComponents[i].teardown();
|
|
290
280
|
}
|
|
291
281
|
|
|
292
|
-
// clean up the full prover node
|
|
293
|
-
await this.
|
|
282
|
+
// clean up the full prover node (by stopping its hosting aztec node)
|
|
283
|
+
await this.proverAztecNode.stop();
|
|
294
284
|
|
|
295
285
|
await Barretenberg.destroySingleton();
|
|
296
286
|
await this.bbConfigCleanup?.();
|
package/src/fixtures/fixtures.ts
CHANGED
|
@@ -7,6 +7,16 @@ export const shouldCollectMetrics = () => {
|
|
|
7
7
|
return undefined;
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
+
/** Returns the boot node UDP port from environment variable or default value. */
|
|
11
|
+
export function getBootNodeUdpPort(): number {
|
|
12
|
+
return process.env.BOOT_NODE_UDP_PORT ? parseInt(process.env.BOOT_NODE_UDP_PORT, 10) : 4500;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Returns the anvil port from environment variable or default value. */
|
|
16
|
+
export function getAnvilPort(): number {
|
|
17
|
+
return process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT, 10) : 8545;
|
|
18
|
+
}
|
|
19
|
+
|
|
10
20
|
export const TEST_PEER_CHECK_INTERVAL_MS = 1000;
|
|
11
21
|
export const TEST_MAX_PENDING_TX_POOL_COUNT = 10_000; // Number of max pending TXs ~ 1.56GB
|
|
12
22
|
|
package/src/fixtures/ha_setup.ts
CHANGED
|
@@ -69,8 +69,10 @@ export async function cleanupHADatabase(pool: Pool, logger?: Logger): Promise<vo
|
|
|
69
69
|
try {
|
|
70
70
|
// Drop all HA tables
|
|
71
71
|
await pool.query('DROP TABLE IF EXISTS validator_duties CASCADE');
|
|
72
|
-
await pool.query('DROP TABLE IF EXISTS slashing_protection CASCADE');
|
|
73
72
|
await pool.query('DROP TABLE IF EXISTS schema_version CASCADE');
|
|
73
|
+
// Drop migration tracking table (node-pg-migrate uses 'pgmigrations' by default)
|
|
74
|
+
// This ensures migrations will run fresh on next startup
|
|
75
|
+
await pool.query('DROP TABLE IF EXISTS pgmigrations CASCADE');
|
|
74
76
|
|
|
75
77
|
logger?.info('HA database cleaned up successfully');
|
|
76
78
|
} catch (error) {
|