From 49a6766e2fab706bb569fe874606793e2d0e544d Mon Sep 17 00:00:00 2001 From: andyzhang2023 Date: Mon, 8 Jul 2024 08:49:11 +0800 Subject: [PATCH] merge from v0.4.3 --- .circleci/config.yml | 20 +- .golangci.yml | 5 +- .travis.yml | 15 +- CHANGELOG.md | 36 + Dockerfile | 2 +- Dockerfile.alltools | 2 +- accounts/abi/abi.go | 2 +- accounts/abi/abi_test.go | 24 + .../abi/abifuzzer_test.go | 125 +- accounts/abi/argument.go | 4 +- accounts/abi/bind/auth.go | 4 +- accounts/abi/bind/backend.go | 15 + accounts/abi/bind/backends/simulated.go | 43 +- accounts/abi/bind/backends/simulated_test.go | 85 +- accounts/abi/bind/base.go | 22 +- accounts/abi/bind/base_test.go | 75 + accounts/abi/bind/bind.go | 4 +- accounts/abi/bind/bind_test.go | 3 +- accounts/abi/bind/util_test.go | 10 +- accounts/abi/error.go | 5 +- accounts/abi/event_test.go | 6 + accounts/abi/method.go | 18 +- accounts/abi/method_test.go | 2 + accounts/abi/pack.go | 4 +- accounts/abi/pack_test.go | 5 + accounts/abi/packing_test.go | 10 +- accounts/abi/reflect.go | 6 +- accounts/abi/reflect_test.go | 4 + accounts/abi/selector_parser_test.go | 1 + accounts/abi/topics.go | 2 +- accounts/abi/topics_test.go | 9 + accounts/abi/type_test.go | 5 + accounts/abi/unpack_test.go | 16 +- accounts/accounts_test.go | 1 + accounts/hd_test.go | 2 + accounts/keystore/account_cache_test.go | 11 +- .../keystore/keystore_fuzzing_test.go | 29 +- accounts/keystore/keystore_test.go | 7 + accounts/keystore/passphrase_test.go | 3 +- accounts/keystore/plain_test.go | 4 + accounts/keystore/watch.go | 2 +- accounts/manager.go | 3 + accounts/scwallet/wallet.go | 8 +- accounts/url_test.go | 9 +- accounts/usbwallet/hub.go | 18 +- accounts/usbwallet/wallet.go | 4 + appveyor.yml | 2 +- beacon/engine/gen_epe.go | 23 +- beacon/engine/types.go | 11 +- beacon/light/canonical.go | 125 + beacon/light/committee_chain.go | 514 + beacon/light/committee_chain_test.go | 356 + beacon/light/range.go | 78 + beacon/light/test_helpers.go | 152 + beacon/types/{update.go => light_sync.go} | 18 + build/checksums.txt | 87 +- build/ci.go | 12 +- build/update-license.go | 3 +- cmd/abigen/main.go | 2 +- cmd/abigen/namefilter_test.go | 1 + cmd/bootnode/main.go | 9 +- cmd/clef/README.md | 2 +- cmd/clef/consolecmd_test.go | 13 +- cmd/clef/main.go | 5 +- cmd/clef/pythonsigner.py | 2 +- cmd/clef/run_test.go | 2 +- cmd/devp2p/README.md | 45 +- cmd/devp2p/discv4cmd.go | 2 +- cmd/devp2p/dns_route53_test.go | 2 + cmd/devp2p/internal/ethtest/chain.go | 262 +- cmd/devp2p/internal/ethtest/chain_test.go | 24 +- cmd/devp2p/internal/ethtest/conn.go | 361 + cmd/devp2p/internal/ethtest/engine.go | 69 + cmd/devp2p/internal/ethtest/helpers.go | 650 - cmd/devp2p/internal/ethtest/large.go | 80 - cmd/devp2p/internal/ethtest/mkchain.sh | 9 + cmd/devp2p/internal/ethtest/protocol.go | 87 + cmd/devp2p/internal/ethtest/snap.go | 737 +- cmd/devp2p/internal/ethtest/snapTypes.go | 60 - cmd/devp2p/internal/ethtest/suite.go | 766 +- cmd/devp2p/internal/ethtest/suite_test.go | 59 +- .../internal/ethtest/testdata/accounts.json | 62 + .../internal/ethtest/testdata/chain.rlp | Bin 1585630 -> 341951 bytes .../internal/ethtest/testdata/forkenv.json | 20 + .../internal/ethtest/testdata/genesis.json | 137 +- .../internal/ethtest/testdata/halfchain.rlp | Bin 527009 -> 0 bytes .../internal/ethtest/testdata/headblock.json | 23 + .../internal/ethtest/testdata/headfcu.json | 13 + .../internal/ethtest/testdata/headstate.json | 4204 +++++ .../internal/ethtest/testdata/newpayload.json | 13268 ++++++++++++++++ .../internal/ethtest/testdata/txinfo.json | 3018 ++++ cmd/devp2p/internal/ethtest/transaction.go | 462 +- cmd/devp2p/internal/ethtest/types.go | 291 - cmd/devp2p/rlpxcmd.go | 63 +- cmd/devp2p/runtest.go | 51 +- cmd/ethkey/message_test.go | 1 + cmd/ethkey/run_test.go | 2 +- cmd/evm/README.md | 2 +- cmd/evm/blockrunner.go | 29 +- cmd/evm/compiler.go | 2 +- cmd/evm/disasm.go | 2 +- cmd/evm/internal/t8ntool/block.go | 6 - cmd/evm/internal/t8ntool/execution.go | 37 +- cmd/evm/internal/t8ntool/flags.go | 18 +- cmd/evm/internal/t8ntool/tracewriter.go | 81 + cmd/evm/internal/t8ntool/transaction.go | 6 - cmd/evm/internal/t8ntool/transition.go | 196 +- cmd/evm/internal/t8ntool/tx_iterator.go | 194 + cmd/evm/main.go | 21 +- cmd/evm/runner.go | 7 +- cmd/evm/staterunner.go | 18 +- cmd/evm/t8n_test.go | 13 +- cmd/evm/testdata/30/README.txt | 77 + cmd/evm/testdata/30/alloc.json | 23 + cmd/evm/testdata/30/env.json | 23 + cmd/evm/testdata/30/exp.json | 64 + cmd/evm/testdata/30/txs.rlp | 1 + cmd/evm/testdata/30/txs_more.rlp | 1 + cmd/faucet/README.md | 52 - cmd/faucet/faucet.go | 891 -- cmd/faucet/faucet.html | 233 - cmd/faucet/faucet_test.go | 45 - cmd/geth/accountcmd_test.go | 16 + cmd/geth/chaincmd.go | 72 +- cmd/geth/config.go | 33 +- cmd/geth/consolecmd_test.go | 1 + cmd/geth/dbcmd.go | 495 +- cmd/geth/exportcmd_test.go | 1 + cmd/geth/les_test.go | 205 - cmd/geth/logging_test.go | 237 + cmd/geth/logtestcmd_active.go | 175 + cmd/geth/logtestcmd_inactive.go | 23 + cmd/geth/main.go | 55 +- cmd/geth/run_test.go | 11 +- cmd/geth/snapshot.go | 155 +- cmd/geth/testdata/logging/logtest-json.txt | 52 + cmd/geth/testdata/logging/logtest-logfmt.txt | 52 + .../testdata/logging/logtest-terminal.txt | 53 + cmd/geth/verkle.go | 6 +- cmd/geth/version_check_test.go | 9 + cmd/p2psim/main.go | 4 +- cmd/rlpdump/rlpdump_test.go | 2 + cmd/utils/cmd.go | 98 +- cmd/utils/export_test.go | 1 + cmd/utils/flags.go | 315 +- cmd/utils/flags_legacy.go | 55 + cmd/utils/flags_test.go | 3 + cmd/utils/prompt_test.go | 3 + common/bitutil/compress_test.go | 60 +- common/gopool/pool.go | 54 + common/hexutil/json.go | 45 + common/hexutil/json_test.go | 60 + common/types.go | 33 + consensus/beacon/consensus.go | 25 + consensus/beacon/oplegacy.go | 91 + consensus/clique/clique.go | 22 + consensus/ethash/consensus.go | 22 + console/bridge.go | 2 +- console/console_test.go | 2 +- core/asm/asm_test.go | 80 +- core/assets/qanet/genesis.json | 28 +- core/bench_test.go | 4 +- core/block_validator.go | 187 +- core/blockchain.go | 194 +- core/blockchain_insert.go | 1 + core/blockchain_reader.go | 22 +- core/blockchain_test.go | 3 +- core/chain_makers.go | 282 +- core/chain_makers_test.go | 80 +- core/evm.go | 6 +- core/forkid/forkid_test.go | 3 +- core/genesis.go | 60 +- core/genesis_test.go | 66 +- core/opcodeCompiler/compiler/OpCodeCache.go | 51 + core/opcodeCompiler/compiler/evmByteCode.go | 225 + .../compiler/opcodeProcessor.go | 384 + core/proof_keeper.go | 605 + core/proof_keeper_test.go | 198 + core/rawdb/accessors_chain.go | 19 +- core/rawdb/accessors_proof.go | 75 + core/rawdb/accessors_proof_test.go | 87 + core/rawdb/accessors_snapshot.go | 10 + core/rawdb/accessors_trie.go | 15 + core/rawdb/ancient_scheme.go | 23 +- core/rawdb/ancient_utils.go | 33 +- core/rawdb/chain_freezer.go | 2 +- core/rawdb/database.go | 24 +- core/rawdb/freezer_batch.go | 12 +- core/rawdb/freezer_resettable.go | 9 +- core/rawdb/freezer_table.go | 73 +- core/rawdb/freezer_table_test.go | 33 + core/rawdb/freezer_utils.go | 6 +- core/rawdb/metrics.go | 10 + core/rawdb/schema.go | 12 + core/state/database.go | 70 +- core/state/dump.go | 101 +- core/state/iterator.go | 2 +- core/state/pruner/pruner.go | 115 +- core/state/snapshot/conversion.go | 16 +- core/state/snapshot/disklayer.go | 10 + core/state/snapshot/generate.go | 6 +- core/state/snapshot/generate_test.go | 2 +- core/state/snapshot/journal.go | 5 +- core/state/snapshot/snapshot.go | 10 +- core/state/state_object.go | 124 +- core/state/state_test.go | 3 + core/state/statedb.go | 498 +- core/state/statedb_test.go | 15 +- core/state/trie_prefetcher.go | 4 +- core/state_processor.go | 19 +- core/state_processor_test.go | 12 +- core/state_transition.go | 105 +- core/txpool/blobpool/blobpool.go | 4 +- core/txpool/blobpool/blobpool_test.go | 12 +- core/txpool/blobpool/metrics.go | 2 +- core/txpool/legacypool/cache_for_miner.go | 136 + core/txpool/legacypool/legacypool.go | 221 +- core/txpool/legacypool/legacypool_test.go | 2 +- core/txpool/legacypool/list.go | 2 +- core/txpool/txpool.go | 2 +- core/txpool/validation.go | 7 +- core/types/hashes.go | 5 +- core/types/receipt.go | 33 +- core/types/receipt_test.go | 121 +- core/types/rlp_fuzzer_test.go | 147 + core/types/rollup_cost.go | 285 + core/types/rollup_cost_test.go | 245 + core/types/rollup_l1_cost.go | 83 - core/types/rollup_l1_cost_test.go | 30 - core/types/transaction.go | 56 +- core/types/transaction_marshalling.go | 12 +- core/types/transaction_signing.go | 4 +- core/types/transaction_test.go | 94 + core/vm/analysis.go | 35 + core/vm/contract.go | 22 +- core/vm/contracts.go | 63 + .../vm/contracts_fuzz_test.go | 38 +- core/vm/contracts_test.go | 54 +- core/vm/evm.go | 190 +- core/vm/gas_table_test.go | 2 +- core/vm/instructions.go | 339 +- core/vm/interpreter.go | 21 +- core/vm/jump_table.go | 131 + core/vm/opcodes.go | 90 +- core/vm/runtime/env.go | 1 + core/vm/runtime/runtime.go | 3 +- core/vm/runtime/runtime_example_test.go | 3 +- .../vm/runtime/runtime_fuzz_test.go | 27 +- core/vm/runtime/runtime_test.go | 195 +- core/vm/stack.go | 14 + core/vm/testdata/precompiles/p256Verify.json | 5469 +++++++ ...ake2b_f_fuzz.go => blake2b_f_fuzz_test.go} | 49 +- crypto/crypto.go | 28 + crypto/secp256k1/secp256_test.go | 3 + crypto/secp256r1/publickey.go | 21 + crypto/secp256r1/verifier.go | 22 + crypto/signify/signify_test.go | 2 +- eth/api_backend.go | 15 +- eth/api_debug.go | 18 +- eth/api_debug_test.go | 25 +- eth/backend.go | 76 +- eth/catalyst/api.go | 32 +- eth/catalyst/api_test.go | 21 +- eth/catalyst/simulated_beacon.go | 4 - eth/catalyst/simulated_beacon_test.go | 2 +- eth/downloader/downloader.go | 10 +- eth/downloader/downloader_test.go | 2 +- eth/downloader/queue_test.go | 4 +- eth/downloader/receiptreference.go | 144 + eth/downloader/receiptreference_test.go | 108 + eth/downloader/resultstore.go | 2 +- eth/downloader/skeleton.go | 46 +- eth/downloader/skeleton_test.go | 12 +- .../10.105235063-114696812.gob | Bin 0 -> 833023 bytes .../userDepositData/291.0-4192087.gob | Bin 0 -> 282 bytes .../userDepositData/34443.0-2412409.gob | Bin 0 -> 4875 bytes .../userDepositData/420.6825766-17276566.gob | Bin 0 -> 715450 bytes .../userDepositData/7777777.0-9149281.gob | Bin 0 -> 2264929 bytes .../userDepositData/8453.0-9101527.gob | Bin 0 -> 3143206 bytes eth/ethconfig/config.go | 105 +- eth/ethconfig/gen_config.go | 47 +- eth/fetcher/block_fetcher.go | 2 +- eth/fetcher/tx_fetcher.go | 2 +- eth/fetcher/tx_fetcher_test.go | 4 +- eth/filters/api.go | 15 +- eth/filters/filter.go | 2 +- eth/filters/filter_system.go | 6 +- eth/filters/filter_system_test.go | 52 +- eth/filters/filter_test.go | 110 +- eth/gasestimator/gasestimator.go | 235 + eth/handler.go | 14 +- eth/protocols/eth/dispatcher.go | 4 +- eth/protocols/eth/peer.go | 2 +- .../protocols/snap/handler_fuzzing_test.go | 108 +- eth/protocols/snap/metrics.go | 28 + eth/protocols/snap/sync.go | 148 +- eth/sync.go | 2 +- eth/tracers/api.go | 18 +- eth/tracers/api_test.go | 116 +- .../internal/tracetest/calltrace_test.go | 9 +- .../call_tracer_withLog/calldata.json | 6 +- .../call_tracer_withLog/delegatecall.json | 15 +- .../call_tracer_withLog/multi_contracts.json | 96 +- .../call_tracer_withLog/multilogs.json | 150 +- .../testdata/call_tracer_withLog/notopic.json | 6 +- .../testdata/call_tracer_withLog/simple.json | 3 +- .../tx_partial_failed.json | 3 +- eth/tracers/js/goja.go | 58 +- eth/tracers/js/tracer_test.go | 93 +- eth/tracers/logger/gen_structlog.go | 16 +- eth/tracers/logger/logger.go | 1 + eth/tracers/native/call.go | 10 +- ethclient/ethclient.go | 34 + ethclient/ethclient_test.go | 92 +- ethclient/gethclient/gethclient.go | 26 +- ethclient/gethclient/gethclient_test.go | 48 +- ethdb/dbtest/testsuite.go | 6 +- ethdb/memorydb/memorydb.go | 14 +- ethdb/memorydb/memorydb_test.go | 18 + ethdb/metrics.go | 10 + ethdb/pebble/pebble.go | 39 +- ethstats/ethstats.go | 25 +- fork.yaml | 29 +- go.mod | 54 +- go.sum | 117 +- graphql/graphql.go | 15 +- graphql/graphql_test.go | 10 +- graphql/schema.go | 2 +- graphql/service.go | 8 +- interfaces.go | 2 - internal/build/gotool.go | 1 - internal/build/util.go | 21 + internal/cmdtest/test_cmd.go | 2 +- internal/debug/api.go | 9 +- internal/debug/flags.go | 124 +- internal/ethapi/api.go | 216 +- internal/ethapi/api_test.go | 60 +- internal/ethapi/backend.go | 4 +- internal/ethapi/transaction_args.go | 116 +- internal/ethapi/transaction_args_test.go | 135 +- internal/flags/categories.go | 1 + internal/flags/helpers.go | 11 +- internal/jsre/deps/web3.js | 2 +- internal/reexec/reexec.go | 35 + internal/reexec/self_linux.go | 14 + internal/reexec/self_others.go | 32 + internal/testlog/testlog.go | 125 +- les/api.go | 349 - les/api_backend.go | 345 - les/api_test.go | 512 - les/benchmark.go | 351 - les/bloombits.go | 75 - les/client.go | 402 - les/client_handler.go | 309 - les/commons.go | 99 - les/costtracker.go | 517 - les/distributor.go | 313 - les/distributor_test.go | 189 - les/enr_entry.go | 72 - les/flowcontrol/control.go | 433 - les/flowcontrol/logger.go | 65 - les/flowcontrol/manager.go | 476 - les/flowcontrol/manager_test.go | 130 - les/handler_test.go | 754 - les/metrics.go | 151 - les/odr.go | 237 - les/odr_requests.go | 537 - les/odr_test.go | 458 - les/peer.go | 1362 -- les/peer_test.go | 166 - les/protocol.go | 327 - les/request_test.go | 129 - les/retrieve.go | 421 - les/server.go | 281 - les/server_handler.go | 436 - les/server_requests.go | 566 - les/servingqueue.go | 365 - les/state_accessor.go | 80 - les/test_helper.go | 626 - les/txrelay.go | 179 - les/utils/exec_queue.go | 105 - les/utils/exec_queue_test.go | 60 - les/utils/expiredvalue.go | 270 - les/utils/expiredvalue_test.go | 195 - les/utils/limiter.go | 398 - les/utils/limiter_test.go | 206 - les/utils/timeutils.go | 69 - les/utils/timeutils_test.go | 47 - les/utils/weighted_select.go | 183 - les/utils/weighted_select_test.go | 68 - les/vflux/client/api.go | 107 - les/vflux/client/fillset.go | 107 - les/vflux/client/fillset_test.go | 117 - les/vflux/client/queueiterator.go | 123 - les/vflux/client/queueiterator_test.go | 95 - les/vflux/client/requestbasket.go | 285 - les/vflux/client/requestbasket_test.go | 161 - les/vflux/client/serverpool.go | 605 - les/vflux/client/serverpool_test.go | 392 - les/vflux/client/timestats.go | 237 - les/vflux/client/timestats_test.go | 137 - les/vflux/client/valuetracker.go | 506 - les/vflux/client/valuetracker_test.go | 135 - les/vflux/client/wrsiterator.go | 127 - les/vflux/client/wrsiterator_test.go | 103 - les/vflux/requests.go | 180 - les/vflux/server/balance.go | 693 - les/vflux/server/balance_test.go | 439 - les/vflux/server/balance_tracker.go | 300 - les/vflux/server/clientdb.go | 250 - les/vflux/server/clientdb_test.go | 144 - les/vflux/server/clientpool.go | 328 - les/vflux/server/clientpool_test.go | 606 - les/vflux/server/metrics.go | 35 - les/vflux/server/prioritypool.go | 695 - les/vflux/server/prioritypool_test.go | 233 - les/vflux/server/service.go | 120 - les/vflux/server/status.go | 59 - light/lightchain.go | 531 - light/lightchain_test.go | 358 - light/odr.go | 196 - light/odr_test.go | 339 - light/odr_util.go | 275 - light/postprocess.go | 538 - light/trie.go | 319 - light/trie_test.go | 95 - light/txpool.go | 556 - light/txpool_test.go | 147 - log/CONTRIBUTORS | 11 - log/LICENSE | 13 - log/README.md | 77 - log/README_ETHEREUM.md | 5 - log/doc.go | 327 - log/format.go | 600 +- log/format_test.go | 147 +- log/handler.go | 449 +- log/handler_glog.go | 151 +- log/logger.go | 349 +- log/logger_test.go | 171 +- log/root.go | 49 +- log/syslog.go | 58 - metrics/disk_nop.go | 2 +- metrics/gauge_float64_test.go | 4 +- metrics/timer.go | 10 +- miner/miner.go | 26 + miner/miner_test.go | 7 + miner/ordering_test.go | 3 + miner/payload_building.go | 4 + miner/payload_building_test.go | 4 + miner/stress/clique/main.go | 2 +- miner/worker.go | 81 +- miner/worker_test.go | 10 + node/defaults.go | 26 + node/node.go | 2 +- oss-fuzz.sh | 224 +- p2p/discover/table.go | 27 +- p2p/discover/table_test.go | 2 +- p2p/discover/table_util_test.go | 5 +- p2p/discover/v4_lookup_test.go | 6 +- p2p/discover/v4_udp_test.go | 9 +- p2p/discover/v5_udp.go | 17 +- p2p/discover/v5_udp_test.go | 15 +- p2p/msgrate/msgrate.go | 5 +- p2p/nat/nat.go | 12 +- p2p/rlpx/rlpx_test.go | 2 +- p2p/simulations/adapters/exec.go | 22 +- p2p/simulations/adapters/types.go | 7 +- p2p/simulations/examples/ping-pong.go | 2 +- p2p/simulations/http.go | 8 +- p2p/simulations/http_test.go | 4 +- p2p/simulations/network_test.go | 2 +- params/bootnodes.go | 39 +- params/config.go | 91 +- params/protocol_params.go | 2 + params/superchain.go | 17 +- params/version.go | 2 +- rpc/client_test.go | 4 +- rpc/json.go | 15 +- rpc/metrics.go | 2 +- rpc/service.go | 6 +- rpc/subscription.go | 27 +- rpc/subscription_test.go | 60 + rpc/websocket_test.go | 2 +- signer/core/api_test.go | 2 + .../apitypes/signed_data_internal_test.go | 7 + signer/core/apitypes/types_test.go | 1 + signer/core/auditlog.go | 9 +- signer/core/signed_data_test.go | 16 + signer/core/validation_test.go | 1 + signer/fourbyte/abi_test.go | 3 + signer/fourbyte/fourbyte_test.go | 8 +- signer/fourbyte/validation_test.go | 1 + signer/rules/rules_test.go | 8 + signer/storage/aes_gcm_storage_test.go | 9 +- tests/block_test.go | 21 +- tests/block_test_util.go | 20 +- tests/fuzzers/abi/abifuzzer_test.go | 43 - tests/fuzzers/bitutil/compress_fuzz.go | 70 - tests/fuzzers/bls12381/bls12381_fuzz.go | 12 +- tests/fuzzers/bls12381/bls12381_test.go | 100 + tests/fuzzers/bls12381/precompile_fuzzer.go | 10 - tests/fuzzers/bn256/bn256_fuzz.go | 13 +- .../debug/main.go => bn256/bn256_test.go} | 37 +- tests/fuzzers/difficulty/difficulty-fuzz.go | 2 +- .../{debug/main.go => difficulty_test.go} | 27 +- ...0176eaf52ed014ec5c91cf4afa070dd3fd469077-1 | 1 - tests/fuzzers/les/debug/main.go | 40 - tests/fuzzers/les/les-fuzzer.go | 411 - tests/fuzzers/rangeproof/debug/main.go | 40 - tests/fuzzers/rangeproof/rangeproof-fuzzer.go | 2 +- tests/fuzzers/rangeproof/rangeproof_test.go | 25 + tests/fuzzers/rlp/corpus/block_with_uncle.rlp | Bin 1120 -> 0 bytes tests/fuzzers/rlp/corpus/r.bin | 1 - tests/fuzzers/rlp/corpus/transaction.rlp | 2 - tests/fuzzers/rlp/rlp_fuzzer.go | 143 - tests/fuzzers/secp256k1/secp_fuzzer.go | 50 - tests/fuzzers/secp256k1/secp_test.go | 35 +- tests/fuzzers/stacktrie/trie_fuzzer.go | 245 - tests/fuzzers/trie/corpus/data | 1 - tests/fuzzers/trie/trie-fuzzer.go | 201 - tests/fuzzers/txfetcher/txfetcher_fuzzer.go | 2 +- tests/fuzzers/txfetcher/txfetcher_test.go | 25 + tests/fuzzers/vflux/clientpool-fuzzer.go | 333 - tests/fuzzers/vflux/debug/main.go | 43 - tests/state_test.go | 11 +- tests/state_test_util.go | 18 +- trie/database.go | 22 +- trie/dummy_trie.go | 88 + trie/hasher.go | 9 +- trie/hbss2pbss.go | 247 + trie/inspect_trie.go | 293 + trie/iterator.go | 71 +- trie/iterator_test.go | 12 + trie/node.go | 5 + trie/secure_trie.go | 22 + trie/stacktrie.go | 213 +- trie/stacktrie_fuzzer_test.go | 155 + trie/stacktrie_test.go | 109 + trie/sync.go | 243 +- trie/sync_test.go | 132 +- trie/trie.go | 20 + trie/trie_test.go | 87 +- trie/triedb/hashdb/database.go | 69 +- trie/triedb/pathdb/asyncnodebuffer.go | 18 +- trie/triedb/pathdb/database.go | 155 +- trie/triedb/pathdb/database_test.go | 54 +- trie/triedb/pathdb/difflayer_test.go | 2 +- trie/triedb/pathdb/disklayer.go | 120 +- trie/triedb/pathdb/errors.go | 3 + trie/triedb/pathdb/history.go | 48 +- trie/triedb/pathdb/history_test.go | 44 + trie/triedb/pathdb/journal.go | 329 +- trie/triedb/pathdb/metrics.go | 14 + trie/triedb/pathdb/nodebuffer.go | 17 +- trie/triedb/pathdb/nodebufferlist.go | 937 ++ trie/trienode/node.go | 2 +- trie/utils/verkle.go | 342 + trie/utils/verkle_test.go | 139 + trie/verkle.go | 375 + trie/verkle_test.go | 97 + 560 files changed, 46825 insertions(+), 34280 deletions(-) rename tests/fuzzers/abi/abifuzzer.go => accounts/abi/abifuzzer_test.go (61%) rename tests/fuzzers/keystore/keystore-fuzzer.go => accounts/keystore/keystore_fuzzing_test.go (66%) create mode 100644 beacon/light/canonical.go create mode 100644 beacon/light/committee_chain.go create mode 100644 beacon/light/committee_chain_test.go create mode 100644 beacon/light/range.go create mode 100644 beacon/light/test_helpers.go rename beacon/types/{update.go => light_sync.go} (88%) create mode 100644 cmd/devp2p/internal/ethtest/conn.go create mode 100644 cmd/devp2p/internal/ethtest/engine.go delete mode 100644 cmd/devp2p/internal/ethtest/helpers.go delete mode 100644 cmd/devp2p/internal/ethtest/large.go create mode 100644 cmd/devp2p/internal/ethtest/mkchain.sh create mode 100644 cmd/devp2p/internal/ethtest/protocol.go delete mode 100644 cmd/devp2p/internal/ethtest/snapTypes.go create mode 100644 cmd/devp2p/internal/ethtest/testdata/accounts.json create mode 100644 cmd/devp2p/internal/ethtest/testdata/forkenv.json delete mode 100644 cmd/devp2p/internal/ethtest/testdata/halfchain.rlp create mode 100644 cmd/devp2p/internal/ethtest/testdata/headblock.json create mode 100644 cmd/devp2p/internal/ethtest/testdata/headfcu.json create mode 100644 cmd/devp2p/internal/ethtest/testdata/headstate.json create mode 100644 cmd/devp2p/internal/ethtest/testdata/newpayload.json create mode 100644 cmd/devp2p/internal/ethtest/testdata/txinfo.json delete mode 100644 cmd/devp2p/internal/ethtest/types.go create mode 100644 cmd/evm/internal/t8ntool/tracewriter.go create mode 100644 cmd/evm/internal/t8ntool/tx_iterator.go create mode 100644 cmd/evm/testdata/30/README.txt create mode 100644 cmd/evm/testdata/30/alloc.json create mode 100644 cmd/evm/testdata/30/env.json create mode 100644 cmd/evm/testdata/30/exp.json create mode 100644 cmd/evm/testdata/30/txs.rlp create mode 100644 cmd/evm/testdata/30/txs_more.rlp delete mode 100644 cmd/faucet/README.md delete mode 100644 cmd/faucet/faucet.go delete mode 100644 cmd/faucet/faucet.html delete mode 100644 cmd/faucet/faucet_test.go delete mode 100644 cmd/geth/les_test.go create mode 100644 cmd/geth/logging_test.go create mode 100644 cmd/geth/logtestcmd_active.go create mode 100644 cmd/geth/logtestcmd_inactive.go create mode 100644 cmd/geth/testdata/logging/logtest-json.txt create mode 100644 cmd/geth/testdata/logging/logtest-logfmt.txt create mode 100644 cmd/geth/testdata/logging/logtest-terminal.txt create mode 100644 common/gopool/pool.go create mode 100644 consensus/beacon/oplegacy.go create mode 100644 core/opcodeCompiler/compiler/OpCodeCache.go create mode 100644 core/opcodeCompiler/compiler/evmByteCode.go create mode 100644 core/opcodeCompiler/compiler/opcodeProcessor.go create mode 100644 core/proof_keeper.go create mode 100644 core/proof_keeper_test.go create mode 100644 core/rawdb/accessors_proof.go create mode 100644 core/rawdb/accessors_proof_test.go create mode 100644 core/rawdb/metrics.go create mode 100644 core/txpool/legacypool/cache_for_miner.go create mode 100644 core/types/rlp_fuzzer_test.go create mode 100644 core/types/rollup_cost.go create mode 100644 core/types/rollup_cost_test.go delete mode 100644 core/types/rollup_l1_cost.go delete mode 100644 core/types/rollup_l1_cost_test.go rename tests/fuzzers/runtime/runtime_fuzz.go => core/vm/contracts_fuzz_test.go (55%) rename tests/fuzzers/stacktrie/debug/main.go => core/vm/runtime/runtime_fuzz_test.go (64%) create mode 100644 core/vm/testdata/precompiles/p256Verify.json rename crypto/blake2b/{blake2b_f_fuzz.go => blake2b_f_fuzz_test.go} (55%) create mode 100644 crypto/secp256r1/publickey.go create mode 100644 crypto/secp256r1/verifier.go create mode 100644 eth/downloader/receiptreference.go create mode 100644 eth/downloader/receiptreference_test.go create mode 100644 eth/downloader/userDepositData/10.105235063-114696812.gob create mode 100644 eth/downloader/userDepositData/291.0-4192087.gob create mode 100644 eth/downloader/userDepositData/34443.0-2412409.gob create mode 100644 eth/downloader/userDepositData/420.6825766-17276566.gob create mode 100644 eth/downloader/userDepositData/7777777.0-9149281.gob create mode 100644 eth/downloader/userDepositData/8453.0-9101527.gob create mode 100644 eth/gasestimator/gasestimator.go rename tests/fuzzers/snap/fuzz_handler.go => eth/protocols/snap/handler_fuzzing_test.go (75%) create mode 100644 ethdb/metrics.go create mode 100644 internal/reexec/reexec.go create mode 100644 internal/reexec/self_linux.go create mode 100644 internal/reexec/self_others.go delete mode 100644 les/api.go delete mode 100644 les/api_backend.go delete mode 100644 les/api_test.go delete mode 100644 les/benchmark.go delete mode 100644 les/bloombits.go delete mode 100644 les/client.go delete mode 100644 les/client_handler.go delete mode 100644 les/commons.go delete mode 100644 les/costtracker.go delete mode 100644 les/distributor.go delete mode 100644 les/distributor_test.go delete mode 100644 les/enr_entry.go delete mode 100644 les/flowcontrol/control.go delete mode 100644 les/flowcontrol/logger.go delete mode 100644 les/flowcontrol/manager.go delete mode 100644 les/flowcontrol/manager_test.go delete mode 100644 les/handler_test.go delete mode 100644 les/metrics.go delete mode 100644 les/odr.go delete mode 100644 les/odr_requests.go delete mode 100644 les/odr_test.go delete mode 100644 les/peer.go delete mode 100644 les/peer_test.go delete mode 100644 les/protocol.go delete mode 100644 les/request_test.go delete mode 100644 les/retrieve.go delete mode 100644 les/server.go delete mode 100644 les/server_handler.go delete mode 100644 les/server_requests.go delete mode 100644 les/servingqueue.go delete mode 100644 les/state_accessor.go delete mode 100644 les/test_helper.go delete mode 100644 les/txrelay.go delete mode 100644 les/utils/exec_queue.go delete mode 100644 les/utils/exec_queue_test.go delete mode 100644 les/utils/expiredvalue.go delete mode 100644 les/utils/expiredvalue_test.go delete mode 100644 les/utils/limiter.go delete mode 100644 les/utils/limiter_test.go delete mode 100644 les/utils/timeutils.go delete mode 100644 les/utils/timeutils_test.go delete mode 100644 les/utils/weighted_select.go delete mode 100644 les/utils/weighted_select_test.go delete mode 100644 les/vflux/client/api.go delete mode 100644 les/vflux/client/fillset.go delete mode 100644 les/vflux/client/fillset_test.go delete mode 100644 les/vflux/client/queueiterator.go delete mode 100644 les/vflux/client/queueiterator_test.go delete mode 100644 les/vflux/client/requestbasket.go delete mode 100644 les/vflux/client/requestbasket_test.go delete mode 100644 les/vflux/client/serverpool.go delete mode 100644 les/vflux/client/serverpool_test.go delete mode 100644 les/vflux/client/timestats.go delete mode 100644 les/vflux/client/timestats_test.go delete mode 100644 les/vflux/client/valuetracker.go delete mode 100644 les/vflux/client/valuetracker_test.go delete mode 100644 les/vflux/client/wrsiterator.go delete mode 100644 les/vflux/client/wrsiterator_test.go delete mode 100644 les/vflux/requests.go delete mode 100644 les/vflux/server/balance.go delete mode 100644 les/vflux/server/balance_test.go delete mode 100644 les/vflux/server/balance_tracker.go delete mode 100644 les/vflux/server/clientdb.go delete mode 100644 les/vflux/server/clientdb_test.go delete mode 100644 les/vflux/server/clientpool.go delete mode 100644 les/vflux/server/clientpool_test.go delete mode 100644 les/vflux/server/metrics.go delete mode 100644 les/vflux/server/prioritypool.go delete mode 100644 les/vflux/server/prioritypool_test.go delete mode 100644 les/vflux/server/service.go delete mode 100644 les/vflux/server/status.go delete mode 100644 light/lightchain.go delete mode 100644 light/lightchain_test.go delete mode 100644 light/odr.go delete mode 100644 light/odr_test.go delete mode 100644 light/odr_util.go delete mode 100644 light/postprocess.go delete mode 100644 light/trie.go delete mode 100644 light/trie_test.go delete mode 100644 light/txpool.go delete mode 100644 light/txpool_test.go delete mode 100644 log/CONTRIBUTORS delete mode 100644 log/LICENSE delete mode 100644 log/README.md delete mode 100644 log/README_ETHEREUM.md delete mode 100644 log/doc.go delete mode 100644 log/syslog.go delete mode 100644 tests/fuzzers/abi/abifuzzer_test.go delete mode 100644 tests/fuzzers/bitutil/compress_fuzz.go create mode 100644 tests/fuzzers/bls12381/bls12381_test.go rename tests/fuzzers/{snap/debug/main.go => bn256/bn256_test.go} (64%) rename tests/fuzzers/difficulty/{debug/main.go => difficulty_test.go} (63%) delete mode 100644 tests/fuzzers/keystore/corpus/0176eaf52ed014ec5c91cf4afa070dd3fd469077-1 delete mode 100644 tests/fuzzers/les/debug/main.go delete mode 100644 tests/fuzzers/les/les-fuzzer.go delete mode 100644 tests/fuzzers/rangeproof/debug/main.go create mode 100644 tests/fuzzers/rangeproof/rangeproof_test.go delete mode 100644 tests/fuzzers/rlp/corpus/block_with_uncle.rlp delete mode 100644 tests/fuzzers/rlp/corpus/r.bin delete mode 100644 tests/fuzzers/rlp/corpus/transaction.rlp delete mode 100644 tests/fuzzers/rlp/rlp_fuzzer.go delete mode 100644 tests/fuzzers/secp256k1/secp_fuzzer.go delete mode 100644 tests/fuzzers/stacktrie/trie_fuzzer.go delete mode 100644 tests/fuzzers/trie/corpus/data delete mode 100644 tests/fuzzers/trie/trie-fuzzer.go create mode 100644 tests/fuzzers/txfetcher/txfetcher_test.go delete mode 100644 tests/fuzzers/vflux/clientpool-fuzzer.go delete mode 100644 tests/fuzzers/vflux/debug/main.go create mode 100644 trie/dummy_trie.go create mode 100644 trie/hbss2pbss.go create mode 100644 trie/inspect_trie.go create mode 100644 trie/stacktrie_fuzzer_test.go create mode 100644 trie/triedb/pathdb/nodebufferlist.go create mode 100644 trie/utils/verkle.go create mode 100644 trie/utils/verkle_test.go create mode 100644 trie/verkle.go create mode 100644 trie/verkle_test.go diff --git a/.circleci/config.yml b/.circleci/config.yml index 374313392f..513ce63d4f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -71,7 +71,7 @@ jobs: type: boolean default: false machine: - image: ubuntu-2204:2022.07.1 + image: default resource_class: xlarge steps: - gcp-cli/install @@ -112,7 +112,7 @@ jobs: build-geth: docker: - - image: cimg/go:1.20 + - image: cimg/go:1.21 resource_class: xlarge steps: - checkout @@ -121,7 +121,7 @@ jobs: unit-test: resource_class: xlarge docker: - - image: cimg/go:1.20 + - image: cimg/go:1.21 steps: - checkout - run: @@ -129,14 +129,22 @@ jobs: lint-geth: resource_class: medium docker: - - image: cimg/go:1.20 + - image: cimg/go:1.21 steps: - checkout - run: command: go run build/ci.go lint + tidy-geth: + resource_class: small + docker: + - image: cimg/go:1.21 + steps: + - checkout + - run: + command: go mod tidy && git diff --exit-code check-releases: docker: - - image: cimg/go:1.20 + - image: cimg/go:1.21 steps: - checkout - run: @@ -157,6 +165,8 @@ workflows: name: Run unit tests for geth - lint-geth: name: Run linter over geth + - tidy-geth: + name: Check geth go.mod file has been tidied - docker-release: name: Push to Docker docker_tags: <> diff --git a/.golangci.yml b/.golangci.yml index 8a054667e6..10dee809c2 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -12,7 +12,6 @@ run: linters: disable-all: true enable: - - goconst - goimports - gosimple - govet @@ -39,9 +38,6 @@ linters: linters-settings: gofmt: simplify: true - goconst: - min-len: 3 # minimum length of string constant - min-occurrences: 6 # minimum number of occurrences issues: exclude-rules: @@ -62,3 +58,4 @@ issues: - 'SA1019: strings.Title is deprecated' - 'SA1019: strings.Title has been deprecated since Go 1.18 and an alternative has been available since Go 1.0: The rule Title uses for word boundaries does not handle Unicode punctuation properly. Use golang.org/x/text/cases instead.' - 'SA1029: should not use built-in type string as key for value' + - 'SA1019:' # temporary, until fully updated to Go 1.21 diff --git a/.travis.yml b/.travis.yml index 4f5d482c65..a55583a703 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,18 +9,6 @@ jobs: - azure-osx include: - # This builder only tests code linters on latest version of Go - - stage: lint - os: linux - dist: bionic - go: 1.21.x - env: - - lint - git: - submodules: false # avoid cloning ethereum/tests - script: - - go run build/ci.go lint - # These builders create the Docker sub-images for multi-arch push and each # will attempt to push the multi-arch image if they are the last builder - stage: build @@ -96,6 +84,7 @@ jobs: - stage: build if: type = push os: osx + osx_image: xcode14.2 go: 1.21.x env: - azure-osx @@ -104,6 +93,8 @@ jobs: script: - go run build/ci.go install -dlgo - go run build/ci.go archive -type tar -signer OSX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds + - go run build/ci.go install -dlgo -arch arm64 + - go run build/ci.go archive -arch arm64 -type tar -signer OSX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds # These builders run the tests - stage: build diff --git a/CHANGELOG.md b/CHANGELOG.md index 67293a7758..978ceb4830 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,41 @@ # Changelog +## v0.3.1 + +This is a minor release for opBNB Mainnet and Testnet. + +In this release, we've introduced significant optimizations and enhancements across various modes and functionalities, including PBSS Mode optimizations, the introduction of Fast Node Mode, EVM execution improvements, and a simplified start command, aimed at enhancing performance and user experience. + +Upgrading is optional. + +### User Facing Changes + +- **PBSS Mode Optimizations**: We have made multiple optimizations for PBSS mode, including the implementation of an async buffer, support for obtaining withdrawal proof on PBSS, and the introduction of an HBSS to PBSS convert tool. For more details, please refer to #69, #74, and #79. +- **Fast Node Mode**: We have introduced a new mode called "Fast Node" to improve the performance and reduce the resources required by the node. This enhancement is aimed at providing a more efficient and streamlined experience. Please see more details in #75. +- **EVM Execution Opcode Level Optimization**: Our latest update includes optimizations at the EVM execution opcode level, resulting in improved performance for EVM execution. For a deeper understanding of these changes, please refer to #77 and #81. +- **Simplified Start Command**: We have simplified the start command by enabling the selection of default network configuration through the use of `--opBNBMainnet` or `--opBNBTestnet` in the command. This enhancement aims to streamline the user experience. More information can be found in #91. + +### Partial Changelog + +- [#69](https://github.com/bnb-chain/op-geth/pull/69): feat: add async buffer +- [#71](https://github.com/bnb-chain/op-geth/pull/71): chore: add miner perf metrics +- [#74](https://github.com/bnb-chain/op-geth/pull/74): feat: support getting withdrawal proof on pbss +- [#75](https://github.com/bnb-chain/op-geth/pull/75): feat: implement fast node +- [#76](https://github.com/bnb-chain/op-geth/pull/76): bugfix: fix Resubscribe deadlock when unsubscribing after inner sub ends +- [#77](https://github.com/bnb-chain/op-geth/pull/77): feat: EVM execution opcode level optimization +- [#79](https://github.com/bnb-chain/op-geth/pull/79): cmd/geth: add hbss to pbss convert tool +- [#81](https://github.com/bnb-chain/op-geth/pull/81): feat: introduce hash cache to improve performance +- [#88](https://github.com/bnb-chain/op-geth/pull/88): fix: fix base buffer concurrent read/write race +- [#91](https://github.com/bnb-chain/op-geth/pull/91): feat: simplify node start + +### Docker Images + +- ghcr.io/bnb-chain/op-geth:v0.3.1 + +### Full Changelog + +https://github.com/bnb-chain/op-geth/compare/v0.3.0...v0.3.1 + ## v0.3.0 This is a recommended release for op-geth. This release brings in upstream updates, see https://github.com/bnb-chain/op-geth/pull/58 for the contents. This is also a ready release for the next planed fork, which will bring in canyon fork from upstream as well. diff --git a/Dockerfile b/Dockerfile index 6d20384ca6..7401d49198 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ ARG VERSION="" ARG BUILDNUM="" # Build Geth in a stock Go builder container -FROM golang:1.20-alpine as builder +FROM golang:1.21-alpine as builder RUN apk add --no-cache build-base libc-dev RUN apk add --no-cache gcc musl-dev linux-headers git diff --git a/Dockerfile.alltools b/Dockerfile.alltools index 70ccc39825..c317da25fa 100644 --- a/Dockerfile.alltools +++ b/Dockerfile.alltools @@ -4,7 +4,7 @@ ARG VERSION="" ARG BUILDNUM="" # Build Geth in a stock Go builder container -FROM golang:1.20-alpine as builder +FROM golang:1.21-alpine as builder RUN apk add --no-cache gcc musl-dev linux-headers git diff --git a/accounts/abi/abi.go b/accounts/abi/abi.go index 6e1075c715..4abf298068 100644 --- a/accounts/abi/abi.go +++ b/accounts/abi/abi.go @@ -251,7 +251,7 @@ var revertSelector = crypto.Keccak256([]byte("Error(string)"))[:4] var panicSelector = crypto.Keccak256([]byte("Panic(uint256)"))[:4] // panicReasons map is for readable panic codes -// see this linkage for the deails +// see this linkage for the details // https://docs.soliditylang.org/en/v0.8.21/control-structures.html#panic-via-assert-and-error-via-require // the reason string list is copied from ether.js // https://github.com/ethers-io/ethers.js/blob/fa3a883ff7c88611ce766f58bdd4b8ac90814470/src.ts/abi/interface.ts#L207-L218 diff --git a/accounts/abi/abi_test.go b/accounts/abi/abi_test.go index 84175df4bb..bc76df0dc2 100644 --- a/accounts/abi/abi_test.go +++ b/accounts/abi/abi_test.go @@ -120,6 +120,7 @@ var methods = map[string]Method{ } func TestReader(t *testing.T) { + t.Parallel() abi := ABI{ Methods: methods, } @@ -151,6 +152,7 @@ func TestReader(t *testing.T) { } func TestInvalidABI(t *testing.T) { + t.Parallel() json := `[{ "type" : "function", "name" : "", "constant" : fals }]` _, err := JSON(strings.NewReader(json)) if err == nil { @@ -170,6 +172,7 @@ func TestInvalidABI(t *testing.T) { // constructor(uint256 a, uint256 b) public{} // } func TestConstructor(t *testing.T) { + t.Parallel() json := `[{ "inputs": [{"internalType": "uint256","name": "a","type": "uint256" },{ "internalType": "uint256","name": "b","type": "uint256"}],"stateMutability": "nonpayable","type": "constructor"}]` method := NewMethod("", "", Constructor, "nonpayable", false, false, []Argument{{"a", Uint256, false}, {"b", Uint256, false}}, nil) // Test from JSON @@ -199,6 +202,7 @@ func TestConstructor(t *testing.T) { } func TestTestNumbers(t *testing.T) { + t.Parallel() abi, err := JSON(strings.NewReader(jsondata)) if err != nil { t.Fatal(err) @@ -236,6 +240,7 @@ func TestTestNumbers(t *testing.T) { } func TestMethodSignature(t *testing.T) { + t.Parallel() m := NewMethod("foo", "foo", Function, "", false, false, []Argument{{"bar", String, false}, {"baz", String, false}}, nil) exp := "foo(string,string)" if m.Sig != exp { @@ -274,6 +279,7 @@ func TestMethodSignature(t *testing.T) { } func TestOverloadedMethodSignature(t *testing.T) { + t.Parallel() json := `[{"constant":true,"inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"i","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"}],"name":"bar","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"},{"indexed":false,"name":"j","type":"uint256"}],"name":"bar","type":"event"}]` abi, err := JSON(strings.NewReader(json)) if err != nil { @@ -297,6 +303,7 @@ func TestOverloadedMethodSignature(t *testing.T) { } func TestCustomErrors(t *testing.T) { + t.Parallel() json := `[{ "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ],"name": "MyError", "type": "error"} ]` abi, err := JSON(strings.NewReader(json)) if err != nil { @@ -311,6 +318,7 @@ func TestCustomErrors(t *testing.T) { } func TestMultiPack(t *testing.T) { + t.Parallel() abi, err := JSON(strings.NewReader(jsondata)) if err != nil { t.Fatal(err) @@ -348,6 +356,7 @@ func ExampleJSON() { } func TestInputVariableInputLength(t *testing.T) { + t.Parallel() const definition = `[ { "type" : "function", "name" : "strOne", "constant" : true, "inputs" : [ { "name" : "str", "type" : "string" } ] }, { "type" : "function", "name" : "bytesOne", "constant" : true, "inputs" : [ { "name" : "str", "type" : "bytes" } ] }, @@ -476,6 +485,7 @@ func TestInputVariableInputLength(t *testing.T) { } func TestInputFixedArrayAndVariableInputLength(t *testing.T) { + t.Parallel() abi, err := JSON(strings.NewReader(jsondata)) if err != nil { t.Error(err) @@ -650,6 +660,7 @@ func TestInputFixedArrayAndVariableInputLength(t *testing.T) { } func TestDefaultFunctionParsing(t *testing.T) { + t.Parallel() const definition = `[{ "name" : "balance", "type" : "function" }]` abi, err := JSON(strings.NewReader(definition)) @@ -663,6 +674,7 @@ func TestDefaultFunctionParsing(t *testing.T) { } func TestBareEvents(t *testing.T) { + t.Parallel() const definition = `[ { "type" : "event", "name" : "balance" }, { "type" : "event", "name" : "anon", "anonymous" : true}, @@ -739,6 +751,7 @@ func TestBareEvents(t *testing.T) { // // receipt{status=1 cgas=23949 bloom=00000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000040200000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 logs=[log: b6818c8064f645cd82d99b59a1a267d6d61117ef [75fd880d39c1daf53b6547ab6cb59451fc6452d27caa90e5b6649dd8293b9eed] 000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158 9ae378b6d4409eada347a5dc0c180f186cb62dc68fcc0f043425eb917335aa28 0 95d429d309bb9d753954195fe2d69bd140b4ae731b9b5b605c34323de162cf00 0]} func TestUnpackEvent(t *testing.T) { + t.Parallel() const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]` abi, err := JSON(strings.NewReader(abiJSON)) if err != nil { @@ -777,6 +790,7 @@ func TestUnpackEvent(t *testing.T) { } func TestUnpackEventIntoMap(t *testing.T) { + t.Parallel() const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]` abi, err := JSON(strings.NewReader(abiJSON)) if err != nil { @@ -827,6 +841,7 @@ func TestUnpackEventIntoMap(t *testing.T) { } func TestUnpackMethodIntoMap(t *testing.T) { + t.Parallel() const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"send","outputs":[{"name":"amount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"get","outputs":[{"name":"hash","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"}]` abi, err := JSON(strings.NewReader(abiJSON)) if err != nil { @@ -877,6 +892,7 @@ func TestUnpackMethodIntoMap(t *testing.T) { } func TestUnpackIntoMapNamingConflict(t *testing.T) { + t.Parallel() // Two methods have the same name var abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"get","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"send","outputs":[{"name":"amount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"get","outputs":[{"name":"hash","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"}]` abi, err := JSON(strings.NewReader(abiJSON)) @@ -960,6 +976,7 @@ func TestUnpackIntoMapNamingConflict(t *testing.T) { } func TestABI_MethodById(t *testing.T) { + t.Parallel() abi, err := JSON(strings.NewReader(jsondata)) if err != nil { t.Fatal(err) @@ -992,6 +1009,7 @@ func TestABI_MethodById(t *testing.T) { } func TestABI_EventById(t *testing.T) { + t.Parallel() tests := []struct { name string json string @@ -1058,6 +1076,7 @@ func TestABI_EventById(t *testing.T) { } func TestABI_ErrorByID(t *testing.T) { + t.Parallel() abi, err := JSON(strings.NewReader(`[ {"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"MyError1","type":"error"}, {"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"string","name":"b","type":"string"},{"internalType":"address","name":"c","type":"address"}],"internalType":"struct MyError.MyStruct","name":"x","type":"tuple"},{"internalType":"address","name":"y","type":"address"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"string","name":"b","type":"string"},{"internalType":"address","name":"c","type":"address"}],"internalType":"struct MyError.MyStruct","name":"z","type":"tuple"}],"name":"MyError2","type":"error"}, @@ -1088,6 +1107,7 @@ func TestABI_ErrorByID(t *testing.T) { // TestDoubleDuplicateMethodNames checks that if transfer0 already exists, there won't be a name // conflict and that the second transfer method will be renamed transfer1. func TestDoubleDuplicateMethodNames(t *testing.T) { + t.Parallel() abiJSON := `[{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transfer0","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"},{"name":"customFallback","type":"string"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]` contractAbi, err := JSON(strings.NewReader(abiJSON)) if err != nil { @@ -1117,6 +1137,7 @@ func TestDoubleDuplicateMethodNames(t *testing.T) { // event send(); // } func TestDoubleDuplicateEventNames(t *testing.T) { + t.Parallel() abiJSON := `[{"anonymous": false,"inputs": [{"indexed": false,"internalType": "uint256","name": "a","type": "uint256"}],"name": "send","type": "event"},{"anonymous": false,"inputs": [],"name": "send0","type": "event"},{ "anonymous": false, "inputs": [],"name": "send","type": "event"}]` contractAbi, err := JSON(strings.NewReader(abiJSON)) if err != nil { @@ -1144,6 +1165,7 @@ func TestDoubleDuplicateEventNames(t *testing.T) { // event send(uint256, uint256); // } func TestUnnamedEventParam(t *testing.T) { + t.Parallel() abiJSON := `[{ "anonymous": false, "inputs": [{ "indexed": false,"internalType": "uint256", "name": "","type": "uint256"},{"indexed": false,"internalType": "uint256","name": "","type": "uint256"}],"name": "send","type": "event"}]` contractAbi, err := JSON(strings.NewReader(abiJSON)) if err != nil { @@ -1177,7 +1199,9 @@ func TestUnpackRevert(t *testing.T) { {"4e487b7100000000000000000000000000000000000000000000000000000000000000ff", "unknown panic code: 0xff", nil}, } for index, c := range cases { + index, c := index, c t.Run(fmt.Sprintf("case %d", index), func(t *testing.T) { + t.Parallel() got, err := UnpackRevert(common.Hex2Bytes(c.input)) if c.expectErr != nil { if err == nil { diff --git a/tests/fuzzers/abi/abifuzzer.go b/accounts/abi/abifuzzer_test.go similarity index 61% rename from tests/fuzzers/abi/abifuzzer.go rename to accounts/abi/abifuzzer_test.go index 60233d158a..dbf6ab6c54 100644 --- a/tests/fuzzers/abi/abifuzzer.go +++ b/accounts/abi/abifuzzer_test.go @@ -20,20 +20,34 @@ import ( "fmt" "reflect" "strings" + "testing" - "github.com/ethereum/go-ethereum/accounts/abi" fuzz "github.com/google/gofuzz" ) +// TestReplicate can be used to replicate crashers from the fuzzing tests. +// Just replace testString with the data in .quoted +func TestReplicate(t *testing.T) { + t.Parallel() + //t.Skip("Test only useful for reproducing issues") + fuzzAbi([]byte("\x20\x20\x20\x20\x20\x20\x20\x20\x80\x00\x00\x00\x20\x20\x20\x20\x00")) + //fuzzAbi([]byte("asdfasdfkadsf;lasdf;lasd;lfk")) +} + +// FuzzABI is the main entrypoint for fuzzing +func FuzzABI(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzAbi(data) + }) +} + var ( - names = []string{"_name", "name", "NAME", "name_", "__", "_name_", "n"} - stateMut = []string{"", "pure", "view", "payable"} - stateMutabilites = []*string{&stateMut[0], &stateMut[1], &stateMut[2], &stateMut[3]} - pays = []string{"", "true", "false"} - payables = []*string{&pays[0], &pays[1]} - vNames = []string{"a", "b", "c", "d", "e", "f", "g"} - varNames = append(vNames, names...) - varTypes = []string{"bool", "address", "bytes", "string", + names = []string{"_name", "name", "NAME", "name_", "__", "_name_", "n"} + stateMut = []string{"pure", "view", "payable"} + pays = []string{"true", "false"} + vNames = []string{"a", "b", "c", "d", "e", "f", "g"} + varNames = append(vNames, names...) + varTypes = []string{"bool", "address", "bytes", "string", "uint8", "int8", "uint8", "int8", "uint16", "int16", "uint24", "int24", "uint32", "int32", "uint40", "int40", "uint48", "int48", "uint56", "int56", "uint64", "int64", "uint72", "int72", "uint80", "int80", "uint88", "int88", "uint96", "int96", @@ -47,7 +61,7 @@ var ( "bytes32", "bytes"} ) -func unpackPack(abi abi.ABI, method string, input []byte) ([]interface{}, bool) { +func unpackPack(abi ABI, method string, input []byte) ([]interface{}, bool) { if out, err := abi.Unpack(method, input); err == nil { _, err := abi.Pack(method, out...) if err != nil { @@ -63,7 +77,7 @@ func unpackPack(abi abi.ABI, method string, input []byte) ([]interface{}, bool) return nil, false } -func packUnpack(abi abi.ABI, method string, input *[]interface{}) bool { +func packUnpack(abi ABI, method string, input *[]interface{}) bool { if packed, err := abi.Pack(method, input); err == nil { outptr := reflect.New(reflect.TypeOf(input)) err := abi.UnpackIntoInterface(outptr.Interface(), method, packed) @@ -79,12 +93,12 @@ func packUnpack(abi abi.ABI, method string, input *[]interface{}) bool { return false } -type args struct { +type arg struct { name string typ string } -func createABI(name string, stateMutability, payable *string, inputs []args) (abi.ABI, error) { +func createABI(name string, stateMutability, payable *string, inputs []arg) (ABI, error) { sig := fmt.Sprintf(`[{ "type" : "function", "name" : "%v" `, name) if stateMutability != nil { sig += fmt.Sprintf(`, "stateMutability": "%v" `, *stateMutability) @@ -111,60 +125,55 @@ func createABI(name string, stateMutability, payable *string, inputs []args) (ab sig += "} ]" } sig += `}]` - - return abi.JSON(strings.NewReader(sig)) + //fmt.Printf("sig: %s\n", sig) + return JSON(strings.NewReader(sig)) } -func runFuzzer(input []byte) int { - good := false - fuzzer := fuzz.NewFromGoFuzz(input) - - name := names[getUInt(fuzzer)%len(names)] - stateM := stateMutabilites[getUInt(fuzzer)%len(stateMutabilites)] - payable := payables[getUInt(fuzzer)%len(payables)] - maxLen := 5 - for k := 1; k < maxLen; k++ { - var arg []args - for i := k; i > 0; i-- { - argName := varNames[i] - argTyp := varTypes[getUInt(fuzzer)%len(varTypes)] - if getUInt(fuzzer)%10 == 0 { - argTyp += "[]" - } else if getUInt(fuzzer)%10 == 0 { - arrayArgs := getUInt(fuzzer)%30 + 1 - argTyp += fmt.Sprintf("[%d]", arrayArgs) - } - arg = append(arg, args{ - name: argName, - typ: argTyp, - }) - } - abi, err := createABI(name, stateM, payable, arg) - if err != nil { - continue +func fuzzAbi(input []byte) { + var ( + fuzzer = fuzz.NewFromGoFuzz(input) + name = oneOf(fuzzer, names) + stateM = oneOfOrNil(fuzzer, stateMut) + payable = oneOfOrNil(fuzzer, pays) + arguments []arg + ) + for i := 0; i < upTo(fuzzer, 10); i++ { + argName := oneOf(fuzzer, varNames) + argTyp := oneOf(fuzzer, varTypes) + switch upTo(fuzzer, 10) { + case 0: // 10% chance to make it a slice + argTyp += "[]" + case 1: // 10% chance to make it an array + argTyp += fmt.Sprintf("[%d]", 1+upTo(fuzzer, 30)) + default: } - structs, b := unpackPack(abi, name, input) - c := packUnpack(abi, name, &structs) - good = good || b || c + arguments = append(arguments, arg{name: argName, typ: argTyp}) } - if good { - return 1 + abi, err := createABI(name, stateM, payable, arguments) + if err != nil { + //fmt.Printf("err: %v\n", err) + panic(err) } - return 0 + structs, _ := unpackPack(abi, name, input) + _ = packUnpack(abi, name, &structs) } -func Fuzz(input []byte) int { - return runFuzzer(input) -} - -func getUInt(fuzzer *fuzz.Fuzzer) int { +func upTo(fuzzer *fuzz.Fuzzer, max int) int { var i int fuzzer.Fuzz(&i) if i < 0 { - i = -i - if i < 0 { - return 0 - } + return (-1 - i) % max + } + return i % max +} + +func oneOf(fuzzer *fuzz.Fuzzer, options []string) string { + return options[upTo(fuzzer, len(options))] +} + +func oneOfOrNil(fuzzer *fuzz.Fuzzer, options []string) *string { + if i := upTo(fuzzer, len(options)+1); i < len(options) { + return &options[i] } - return i + return nil } diff --git a/accounts/abi/argument.go b/accounts/abi/argument.go index 2e48d539e0..fa5461895a 100644 --- a/accounts/abi/argument.go +++ b/accounts/abi/argument.go @@ -80,7 +80,7 @@ func (arguments Arguments) isTuple() bool { func (arguments Arguments) Unpack(data []byte) ([]interface{}, error) { if len(data) == 0 { if len(arguments.NonIndexed()) != 0 { - return nil, errors.New("abi: attempting to unmarshall an empty string while arguments are expected") + return nil, errors.New("abi: attempting to unmarshal an empty string while arguments are expected") } return make([]interface{}, 0), nil } @@ -95,7 +95,7 @@ func (arguments Arguments) UnpackIntoMap(v map[string]interface{}, data []byte) } if len(data) == 0 { if len(arguments.NonIndexed()) != 0 { - return errors.New("abi: attempting to unmarshall an empty string while arguments are expected") + return errors.New("abi: attempting to unmarshal an empty string while arguments are expected") } return nil // Nothing to unmarshal, return } diff --git a/accounts/abi/bind/auth.go b/accounts/abi/bind/auth.go index 494dc88a57..0740c69510 100644 --- a/accounts/abi/bind/auth.go +++ b/accounts/abi/bind/auth.go @@ -56,7 +56,7 @@ func NewTransactor(keyin io.Reader, passphrase string) (*TransactOpts, error) { } // NewKeyStoreTransactor is a utility method to easily create a transaction signer from -// an decrypted key from a keystore. +// a decrypted key from a keystore. // // Deprecated: Use NewKeyStoreTransactorWithChainID instead. func NewKeyStoreTransactor(keystore *keystore.KeyStore, account accounts.Account) (*TransactOpts, error) { @@ -117,7 +117,7 @@ func NewTransactorWithChainID(keyin io.Reader, passphrase string, chainID *big.I } // NewKeyStoreTransactorWithChainID is a utility method to easily create a transaction signer from -// an decrypted key from a keystore. +// a decrypted key from a keystore. func NewKeyStoreTransactorWithChainID(keystore *keystore.KeyStore, account accounts.Account, chainID *big.Int) (*TransactOpts, error) { if chainID == nil { return nil, ErrNoChainID diff --git a/accounts/abi/bind/backend.go b/accounts/abi/bind/backend.go index 34530a6455..2e45e86ae2 100644 --- a/accounts/abi/bind/backend.go +++ b/accounts/abi/bind/backend.go @@ -36,6 +36,10 @@ var ( // on a backend that doesn't implement PendingContractCaller. ErrNoPendingState = errors.New("backend does not support pending state") + // ErrNoBlockHashState is raised when attempting to perform a block hash action + // on a backend that doesn't implement BlockHashContractCaller. + ErrNoBlockHashState = errors.New("backend does not support block hash state") + // ErrNoCodeAfterDeploy is returned by WaitDeployed if contract creation leaves // an empty contract behind. ErrNoCodeAfterDeploy = errors.New("no contract code after deployment") @@ -64,6 +68,17 @@ type PendingContractCaller interface { PendingCallContract(ctx context.Context, call ethereum.CallMsg) ([]byte, error) } +// BlockHashContractCaller defines methods to perform contract calls on a specific block hash. +// Call will try to discover this interface when access to a block by hash is requested. +// If the backend does not support the block hash state, Call returns ErrNoBlockHashState. +type BlockHashContractCaller interface { + // CodeAtHash returns the code of the given account in the state at the specified block hash. + CodeAtHash(ctx context.Context, contract common.Address, blockHash common.Hash) ([]byte, error) + + // CallContractAtHash executes an Ethereum contract call against the state at the specified block hash. + CallContractAtHash(ctx context.Context, call ethereum.CallMsg, blockHash common.Hash) ([]byte, error) +} + // ContractTransactor defines the methods needed to allow operating with a contract // on a write only basis. Besides the transacting method, the remainder are helpers // used when the user does not provide some needed values, but rather leaves it up diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go index e9b753b6b2..ad59a6bbd8 100644 --- a/accounts/abi/bind/backends/simulated.go +++ b/accounts/abi/bind/backends/simulated.go @@ -52,6 +52,7 @@ var _ bind.ContractBackend = (*SimulatedBackend)(nil) var ( errBlockNumberUnsupported = errors.New("simulatedBackend cannot access blocks other than the latest block") + errBlockHashUnsupported = errors.New("simulatedBackend cannot access blocks by hash other than the latest block") errBlockDoesNotExist = errors.New("block does not exist in blockchain") errTransactionDoesNotExist = errors.New("transaction does not exist") ) @@ -274,6 +275,24 @@ func (b *SimulatedBackend) CodeAt(ctx context.Context, contract common.Address, return stateDB.GetCode(contract), nil } +// CodeAtHash returns the code associated with a certain account in the blockchain. +func (b *SimulatedBackend) CodeAtHash(ctx context.Context, contract common.Address, blockHash common.Hash) ([]byte, error) { + b.mu.Lock() + defer b.mu.Unlock() + + header, err := b.headerByHash(blockHash) + if err != nil { + return nil, err + } + + stateDB, err := b.blockchain.StateAt(header.Root) + if err != nil { + return nil, err + } + + return stateDB.GetCode(contract), nil +} + // BalanceAt returns the wei balance of a certain account in the blockchain. func (b *SimulatedBackend) BalanceAt(ctx context.Context, contract common.Address, blockNumber *big.Int) (*big.Int, error) { b.mu.Lock() @@ -392,7 +411,11 @@ func (b *SimulatedBackend) blockByNumber(ctx context.Context, number *big.Int) ( func (b *SimulatedBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { b.mu.Lock() defer b.mu.Unlock() + return b.headerByHash(hash) +} +// headerByHash retrieves a header from the database by hash without Lock. +func (b *SimulatedBackend) headerByHash(hash common.Hash) (*types.Header, error) { if hash == b.pendingBlock.Hash() { return b.pendingBlock.Header(), nil } @@ -508,6 +531,22 @@ func (b *SimulatedBackend) CallContract(ctx context.Context, call ethereum.CallM if blockNumber != nil && blockNumber.Cmp(b.blockchain.CurrentBlock().Number) != 0 { return nil, errBlockNumberUnsupported } + return b.callContractAtHead(ctx, call) +} + +// CallContractAtHash executes a contract call on a specific block hash. +func (b *SimulatedBackend) CallContractAtHash(ctx context.Context, call ethereum.CallMsg, blockHash common.Hash) ([]byte, error) { + b.mu.Lock() + defer b.mu.Unlock() + + if blockHash != b.blockchain.CurrentBlock().Hash() { + return nil, errBlockHashUnsupported + } + return b.callContractAtHead(ctx, call) +} + +// callContractAtHead executes a contract call against the latest block state. +func (b *SimulatedBackend) callContractAtHead(ctx context.Context, call ethereum.CallMsg) ([]byte, error) { stateDB, err := b.blockchain.State() if err != nil { return nil, err @@ -658,7 +697,7 @@ func (b *SimulatedBackend) EstimateGas(ctx context.Context, call ethereum.CallMs return 0, err } if failed { - if result != nil && result.Err != vm.ErrOutOfGas { + if result != nil && !errors.Is(result.Err, vm.ErrOutOfGas) { if len(result.Revert()) > 0 { return 0, newRevertError(result) } @@ -879,7 +918,7 @@ func (b *SimulatedBackend) AdjustTime(adjustment time.Duration) error { defer b.mu.Unlock() if len(b.pendingBlock.Transactions()) != 0 { - return errors.New("Could not adjust time on non-empty block") + return errors.New("could not adjust time on non-empty block") } // Get the last block block := b.blockchain.GetBlockByHash(b.pendingBlock.ParentHash()) diff --git a/accounts/abi/bind/backends/simulated_test.go b/accounts/abi/bind/backends/simulated_test.go index 11900a6cf5..a2acf7ead5 100644 --- a/accounts/abi/bind/backends/simulated_test.go +++ b/accounts/abi/bind/backends/simulated_test.go @@ -38,6 +38,7 @@ import ( ) func TestSimulatedBackend(t *testing.T) { + t.Parallel() var gasLimit uint64 = 8000029 key, _ := crypto.GenerateKey() // nolint: gosec auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) @@ -121,6 +122,7 @@ func simTestBackend(testAddr common.Address) *SimulatedBackend { } func TestNewSimulatedBackend(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) expectedBal := big.NewInt(10000000000000000) sim := simTestBackend(testAddr) @@ -142,6 +144,7 @@ func TestNewSimulatedBackend(t *testing.T) { } func TestAdjustTime(t *testing.T) { + t.Parallel() sim := NewSimulatedBackend( core.GenesisAlloc{}, 10000000, ) @@ -159,6 +162,7 @@ func TestAdjustTime(t *testing.T) { } func TestNewAdjustTimeFail(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.blockchain.Stop() @@ -202,6 +206,7 @@ func TestNewAdjustTimeFail(t *testing.T) { } func TestBalanceAt(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) expectedBal := big.NewInt(10000000000000000) sim := simTestBackend(testAddr) @@ -219,6 +224,7 @@ func TestBalanceAt(t *testing.T) { } func TestBlockByHash(t *testing.T) { + t.Parallel() sim := NewSimulatedBackend( core.GenesisAlloc{}, 10000000, ) @@ -240,6 +246,7 @@ func TestBlockByHash(t *testing.T) { } func TestBlockByNumber(t *testing.T) { + t.Parallel() sim := NewSimulatedBackend( core.GenesisAlloc{}, 10000000, ) @@ -275,6 +282,7 @@ func TestBlockByNumber(t *testing.T) { } func TestNonceAt(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) @@ -328,6 +336,7 @@ func TestNonceAt(t *testing.T) { } func TestSendTransaction(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) @@ -362,6 +371,7 @@ func TestSendTransaction(t *testing.T) { } func TestTransactionByHash(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := NewSimulatedBackend( @@ -416,6 +426,7 @@ func TestTransactionByHash(t *testing.T) { } func TestEstimateGas(t *testing.T) { + t.Parallel() /* pragma solidity ^0.6.4; contract GasEstimation { @@ -535,6 +546,7 @@ func TestEstimateGas(t *testing.T) { } func TestEstimateGasWithPrice(t *testing.T) { + t.Parallel() key, _ := crypto.GenerateKey() addr := crypto.PubkeyToAddress(key.PublicKey) @@ -625,6 +637,7 @@ func TestEstimateGasWithPrice(t *testing.T) { } func TestHeaderByHash(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) @@ -646,6 +659,7 @@ func TestHeaderByHash(t *testing.T) { } func TestHeaderByNumber(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) @@ -692,6 +706,7 @@ func TestHeaderByNumber(t *testing.T) { } func TestTransactionCount(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) @@ -744,6 +759,7 @@ func TestTransactionCount(t *testing.T) { } func TestTransactionInBlock(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) @@ -809,6 +825,7 @@ func TestTransactionInBlock(t *testing.T) { } func TestPendingNonceAt(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) @@ -874,6 +891,7 @@ func TestPendingNonceAt(t *testing.T) { } func TestTransactionReceipt(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) @@ -908,6 +926,7 @@ func TestTransactionReceipt(t *testing.T) { } func TestSuggestGasPrice(t *testing.T) { + t.Parallel() sim := NewSimulatedBackend( core.GenesisAlloc{}, 10000000, @@ -924,6 +943,7 @@ func TestSuggestGasPrice(t *testing.T) { } func TestPendingCodeAt(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.Close() @@ -960,6 +980,7 @@ func TestPendingCodeAt(t *testing.T) { } func TestCodeAt(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.Close() @@ -996,10 +1017,49 @@ func TestCodeAt(t *testing.T) { } } +func TestCodeAtHash(t *testing.T) { + t.Parallel() + testAddr := crypto.PubkeyToAddress(testKey.PublicKey) + sim := simTestBackend(testAddr) + defer sim.Close() + bgCtx := context.Background() + code, err := sim.CodeAtHash(bgCtx, testAddr, sim.Blockchain().CurrentHeader().Hash()) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + if len(code) != 0 { + t.Errorf("got code for account that does not have contract code") + } + + parsed, err := abi.JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + auth, _ := bind.NewKeyedTransactorWithChainID(testKey, big.NewInt(1337)) + contractAddr, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(abiBin), sim) + if err != nil { + t.Errorf("could not deploy contract: %v tx: %v contract: %v", err, tx, contract) + } + + blockHash := sim.Commit() + code, err = sim.CodeAtHash(bgCtx, contractAddr, blockHash) + if err != nil { + t.Errorf("could not get code at test addr: %v", err) + } + if len(code) == 0 { + t.Errorf("did not get code for account that has contract code") + } + // ensure code received equals code deployed + if !bytes.Equal(code, common.FromHex(deployedCode)) { + t.Errorf("code received did not match expected deployed code:\n expected %v\n actual %v", common.FromHex(deployedCode), code) + } +} + // When receive("X") is called with sender 0x00... and value 1, it produces this tx receipt: // // receipt{status=1 cgas=23949 bloom=00000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000040200000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 logs=[log: b6818c8064f645cd82d99b59a1a267d6d61117ef [75fd880d39c1daf53b6547ab6cb59451fc6452d27caa90e5b6649dd8293b9eed] 000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158 9ae378b6d4409eada347a5dc0c180f186cb62dc68fcc0f043425eb917335aa28 0 95d429d309bb9d753954195fe2d69bd140b4ae731b9b5b605c34323de162cf00 0]} func TestPendingAndCallContract(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.Close() @@ -1038,7 +1098,7 @@ func TestPendingAndCallContract(t *testing.T) { t.Errorf("response from calling contract was expected to be 'hello world' instead received %v", string(res)) } - sim.Commit() + blockHash := sim.Commit() // make sure you can call the contract res, err = sim.CallContract(bgCtx, ethereum.CallMsg{ @@ -1056,6 +1116,23 @@ func TestPendingAndCallContract(t *testing.T) { if !bytes.Equal(res, expectedReturn) || !strings.Contains(string(res), "hello world") { t.Errorf("response from calling contract was expected to be 'hello world' instead received %v", string(res)) } + + // make sure you can call the contract by hash + res, err = sim.CallContractAtHash(bgCtx, ethereum.CallMsg{ + From: testAddr, + To: &addr, + Data: input, + }, blockHash) + if err != nil { + t.Errorf("could not call receive method on contract: %v", err) + } + if len(res) == 0 { + t.Errorf("result of contract call was empty: %v", res) + } + + if !bytes.Equal(res, expectedReturn) || !strings.Contains(string(res), "hello world") { + t.Errorf("response from calling contract was expected to be 'hello world' instead received %v", string(res)) + } } // This test is based on the following contract: @@ -1084,6 +1161,7 @@ contract Reverter { } }*/ func TestCallContractRevert(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.Close() @@ -1179,6 +1257,7 @@ func TestCallContractRevert(t *testing.T) { // Since Commit() was called 2n+1 times in total, // having a chain length of just n+1 means that a reorg occurred. func TestFork(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.Close() @@ -1232,6 +1311,7 @@ const callableBin = "6080604052348015600f57600080fd5b5060998061001e6000396000f3f // 9. Re-send the transaction and mine a block. // 10. Check that the event was reborn. func TestForkLogsReborn(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.Close() @@ -1305,6 +1385,7 @@ func TestForkLogsReborn(t *testing.T) { // 5. Mine a block, Re-send the transaction and mine another one. // 6. Check that the TX is now included in block 2. func TestForkResendTx(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.Close() @@ -1341,6 +1422,7 @@ func TestForkResendTx(t *testing.T) { } func TestCommitReturnValue(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.Close() @@ -1382,6 +1464,7 @@ func TestCommitReturnValue(t *testing.T) { // TestAdjustTimeAfterFork ensures that after a fork, AdjustTime uses the pending fork // block's parent rather than the canonical head's parent. func TestAdjustTimeAfterFork(t *testing.T) { + t.Parallel() testAddr := crypto.PubkeyToAddress(testKey.PublicKey) sim := simTestBackend(testAddr) defer sim.Close() diff --git a/accounts/abi/bind/base.go b/accounts/abi/bind/base.go index b03f431f77..96d284cdcc 100644 --- a/accounts/abi/bind/base.go +++ b/accounts/abi/bind/base.go @@ -48,6 +48,7 @@ type CallOpts struct { Pending bool // Whether to operate on the pending state or the last known one From common.Address // Optional the sender address, otherwise the first account is used BlockNumber *big.Int // Optional the block number on which the call should be performed + BlockHash common.Hash // Optional the block hash on which the call should be performed Context context.Context // Network context to support cancellation and timeouts (nil = no timeout) } @@ -189,6 +190,23 @@ func (c *BoundContract) Call(opts *CallOpts, results *[]interface{}, method stri return ErrNoCode } } + } else if opts.BlockHash != (common.Hash{}) { + bh, ok := c.caller.(BlockHashContractCaller) + if !ok { + return ErrNoBlockHashState + } + output, err = bh.CallContractAtHash(ctx, msg, opts.BlockHash) + if err != nil { + return err + } + if len(output) == 0 { + // Make sure we have a contract to operate on, and bail out otherwise. + if code, err = bh.CodeAtHash(ctx, c.address, opts.BlockHash); err != nil { + return err + } else if len(code) == 0 { + return ErrNoCode + } + } } else { output, err = c.caller.CallContract(ctx, msg, opts.BlockNumber) if err != nil { @@ -220,7 +238,7 @@ func (c *BoundContract) Transact(opts *TransactOpts, method string, params ...in if err != nil { return nil, err } - // todo(rjl493456442) check the method is payable or not, + // todo(rjl493456442) check whether the method is payable or not, // reject invalid transaction at the first place return c.transact(opts, &c.address, input) } @@ -228,7 +246,7 @@ func (c *BoundContract) Transact(opts *TransactOpts, method string, params ...in // RawTransact initiates a transaction with the given raw calldata as the input. // It's usually used to initiate transactions for invoking **Fallback** function. func (c *BoundContract) RawTransact(opts *TransactOpts, calldata []byte) (*types.Transaction, error) { - // todo(rjl493456442) check the method is payable or not, + // todo(rjl493456442) check whether the method is payable or not, // reject invalid transaction at the first place return c.transact(opts, &c.address, calldata) } diff --git a/accounts/abi/bind/base_test.go b/accounts/abi/bind/base_test.go index ca0128148f..f7eb7d14d3 100644 --- a/accounts/abi/bind/base_test.go +++ b/accounts/abi/bind/base_test.go @@ -114,7 +114,28 @@ func (mc *mockPendingCaller) PendingCallContract(ctx context.Context, call ether return mc.pendingCallContractBytes, mc.pendingCallContractErr } +type mockBlockHashCaller struct { + *mockCaller + codeAtHashBytes []byte + codeAtHashErr error + codeAtHashCalled bool + callContractAtHashCalled bool + callContractAtHashBytes []byte + callContractAtHashErr error +} + +func (mc *mockBlockHashCaller) CodeAtHash(ctx context.Context, contract common.Address, hash common.Hash) ([]byte, error) { + mc.codeAtHashCalled = true + return mc.codeAtHashBytes, mc.codeAtHashErr +} + +func (mc *mockBlockHashCaller) CallContractAtHash(ctx context.Context, call ethereum.CallMsg, hash common.Hash) ([]byte, error) { + mc.callContractAtHashCalled = true + return mc.callContractAtHashBytes, mc.callContractAtHashErr +} + func TestPassingBlockNumber(t *testing.T) { + t.Parallel() mc := &mockPendingCaller{ mockCaller: &mockCaller{ codeAtBytes: []byte{1, 2, 3}, @@ -166,6 +187,7 @@ func TestPassingBlockNumber(t *testing.T) { const hexData = "0x000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158" func TestUnpackIndexedStringTyLogIntoMap(t *testing.T) { + t.Parallel() hash := crypto.Keccak256Hash([]byte("testName")) topics := []common.Hash{ crypto.Keccak256Hash([]byte("received(string,address,uint256,bytes)")), @@ -187,6 +209,7 @@ func TestUnpackIndexedStringTyLogIntoMap(t *testing.T) { } func TestUnpackAnonymousLogIntoMap(t *testing.T) { + t.Parallel() mockLog := newMockLog(nil, common.HexToHash("0x0")) abiString := `[{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"received","type":"event"}]` @@ -204,6 +227,7 @@ func TestUnpackAnonymousLogIntoMap(t *testing.T) { } func TestUnpackIndexedSliceTyLogIntoMap(t *testing.T) { + t.Parallel() sliceBytes, err := rlp.EncodeToBytes([]string{"name1", "name2", "name3", "name4"}) if err != nil { t.Fatal(err) @@ -229,6 +253,7 @@ func TestUnpackIndexedSliceTyLogIntoMap(t *testing.T) { } func TestUnpackIndexedArrayTyLogIntoMap(t *testing.T) { + t.Parallel() arrBytes, err := rlp.EncodeToBytes([2]common.Address{common.HexToAddress("0x0"), common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2")}) if err != nil { t.Fatal(err) @@ -254,6 +279,7 @@ func TestUnpackIndexedArrayTyLogIntoMap(t *testing.T) { } func TestUnpackIndexedFuncTyLogIntoMap(t *testing.T) { + t.Parallel() mockAddress := common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2") addrBytes := mockAddress.Bytes() hash := crypto.Keccak256Hash([]byte("mockFunction(address,uint)")) @@ -280,6 +306,7 @@ func TestUnpackIndexedFuncTyLogIntoMap(t *testing.T) { } func TestUnpackIndexedBytesTyLogIntoMap(t *testing.T) { + t.Parallel() bytes := []byte{1, 2, 3, 4, 5} hash := crypto.Keccak256Hash(bytes) topics := []common.Hash{ @@ -302,6 +329,7 @@ func TestUnpackIndexedBytesTyLogIntoMap(t *testing.T) { } func TestTransactGasFee(t *testing.T) { + t.Parallel() assert := assert.New(t) // GasTipCap and GasFeeCap @@ -377,6 +405,7 @@ func newMockLog(topics []common.Hash, txHash common.Hash) types.Log { } func TestCall(t *testing.T) { + t.Parallel() var method, methodWithArg = "something", "somethingArrrrg" tests := []struct { name, method string @@ -400,6 +429,15 @@ func TestCall(t *testing.T) { Pending: true, }, method: method, + }, { + name: "ok hash", + mc: &mockBlockHashCaller{ + codeAtHashBytes: []byte{0}, + }, + opts: &bind.CallOpts{ + BlockHash: common.Hash{0xaa}, + }, + method: method, }, { name: "pack error, no method", mc: new(mockCaller), @@ -413,6 +451,14 @@ func TestCall(t *testing.T) { }, method: method, wantErrExact: bind.ErrNoPendingState, + }, { + name: "interface error, blockHash but not a BlockHashContractCaller", + mc: new(mockCaller), + opts: &bind.CallOpts{ + BlockHash: common.Hash{0xaa}, + }, + method: method, + wantErrExact: bind.ErrNoBlockHashState, }, { name: "pending call canceled", mc: &mockPendingCaller{ @@ -460,6 +506,34 @@ func TestCall(t *testing.T) { mc: new(mockCaller), method: method, wantErrExact: bind.ErrNoCode, + }, { + name: "call contract at hash error", + mc: &mockBlockHashCaller{ + callContractAtHashErr: context.DeadlineExceeded, + }, + opts: &bind.CallOpts{ + BlockHash: common.Hash{0xaa}, + }, + method: method, + wantErrExact: context.DeadlineExceeded, + }, { + name: "code at error", + mc: &mockBlockHashCaller{ + codeAtHashErr: errors.New(""), + }, + opts: &bind.CallOpts{ + BlockHash: common.Hash{0xaa}, + }, + method: method, + wantErr: true, + }, { + name: "no code at hash", + mc: new(mockBlockHashCaller), + opts: &bind.CallOpts{ + BlockHash: common.Hash{0xaa}, + }, + method: method, + wantErrExact: bind.ErrNoCode, }, { name: "unpack error missing arg", mc: &mockCaller{ @@ -507,6 +581,7 @@ func TestCall(t *testing.T) { // TestCrashers contains some strings which previously caused the abi codec to crash. func TestCrashers(t *testing.T) { + t.Parallel() abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"_1"}]}]}]`)) abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"&"}]}]}]`)) abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"----"}]}]}]`)) diff --git a/accounts/abi/bind/bind.go b/accounts/abi/bind/bind.go index 8a54a0e6ef..e902345f09 100644 --- a/accounts/abi/bind/bind.go +++ b/accounts/abi/bind/bind.go @@ -79,7 +79,7 @@ func isKeyWord(arg string) bool { // Bind generates a Go wrapper around a contract ABI. This wrapper isn't meant // to be used as is in client code, but rather as an intermediate struct which -// enforces compile time type safety and naming convention opposed to having to +// enforces compile time type safety and naming convention as opposed to having to // manually maintain hard coded strings that break on runtime. func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string]string, pkg string, lang Lang, libs map[string]string, aliases map[string]string) (string, error) { var ( @@ -363,7 +363,7 @@ func bindTopicTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { // parameters that are not value types i.e. arrays and structs are not // stored directly but instead a keccak256-hash of an encoding is stored. // - // We only convert stringS and bytes to hash, still need to deal with + // We only convert strings and bytes to hash, still need to deal with // array(both fixed-size and dynamic-size) and struct. if bound == "string" || bound == "[]byte" { bound = "common.Hash" diff --git a/accounts/abi/bind/bind_test.go b/accounts/abi/bind/bind_test.go index 5d9c63138e..1f96a85162 100644 --- a/accounts/abi/bind/bind_test.go +++ b/accounts/abi/bind/bind_test.go @@ -1677,7 +1677,7 @@ var bindTests = []struct { } sim.Commit() - // This test the existence of the free retreiver call for view and pure functions + // This test the existence of the free retriever call for view and pure functions if num, err := pav.PureFunc(nil); err != nil { t.Fatalf("Failed to call anonymous field retriever: %v", err) } else if num.Cmp(big.NewInt(42)) != 0 { @@ -2067,6 +2067,7 @@ var bindTests = []struct { // Tests that packages generated by the binder can be successfully compiled and // the requested tester run against it. func TestGolangBindings(t *testing.T) { + t.Parallel() // Skip the test if no Go command can be found gocmd := runtime.GOROOT() + "/bin/go" if !common.FileExist(gocmd) { diff --git a/accounts/abi/bind/util_test.go b/accounts/abi/bind/util_test.go index 75fbc91ceb..826426632c 100644 --- a/accounts/abi/bind/util_test.go +++ b/accounts/abi/bind/util_test.go @@ -53,6 +53,7 @@ var waitDeployedTests = map[string]struct { } func TestWaitDeployed(t *testing.T) { + t.Parallel() for name, test := range waitDeployedTests { backend := backends.NewSimulatedBackend( core.GenesisAlloc{ @@ -100,6 +101,7 @@ func TestWaitDeployed(t *testing.T) { } func TestWaitDeployedCornerCases(t *testing.T) { + t.Parallel() backend := backends.NewSimulatedBackend( core.GenesisAlloc{ crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000000000)}, @@ -119,9 +121,9 @@ func TestWaitDeployedCornerCases(t *testing.T) { defer cancel() backend.SendTransaction(ctx, tx) backend.Commit() - notContentCreation := errors.New("tx is not contract creation") - if _, err := bind.WaitDeployed(ctx, backend, tx); err.Error() != notContentCreation.Error() { - t.Errorf("error missmatch: want %q, got %q, ", notContentCreation, err) + notContractCreation := errors.New("tx is not contract creation") + if _, err := bind.WaitDeployed(ctx, backend, tx); err.Error() != notContractCreation.Error() { + t.Errorf("error mismatch: want %q, got %q, ", notContractCreation, err) } // Create a transaction that is not mined. @@ -131,7 +133,7 @@ func TestWaitDeployedCornerCases(t *testing.T) { go func() { contextCanceled := errors.New("context canceled") if _, err := bind.WaitDeployed(ctx, backend, tx); err.Error() != contextCanceled.Error() { - t.Errorf("error missmatch: want %q, got %q, ", contextCanceled, err) + t.Errorf("error mismatch: want %q, got %q, ", contextCanceled, err) } }() diff --git a/accounts/abi/error.go b/accounts/abi/error.go index 218a22f1e4..8e50112ec5 100644 --- a/accounts/abi/error.go +++ b/accounts/abi/error.go @@ -18,7 +18,6 @@ package abi import ( "bytes" - "errors" "fmt" "strings" @@ -84,10 +83,10 @@ func (e Error) String() string { func (e *Error) Unpack(data []byte) (interface{}, error) { if len(data) < 4 { - return "", errors.New("invalid data for unpacking") + return "", fmt.Errorf("insufficient data for unpacking: have %d, want at least 4", len(data)) } if !bytes.Equal(data[:4], e.ID[:4]) { - return "", errors.New("invalid data for unpacking") + return "", fmt.Errorf("invalid identifier, have %#x want %#x", data[:4], e.ID[:4]) } return e.Inputs.Unpack(data[4:]) } diff --git a/accounts/abi/event_test.go b/accounts/abi/event_test.go index 8f73419496..fffe28ea63 100644 --- a/accounts/abi/event_test.go +++ b/accounts/abi/event_test.go @@ -81,6 +81,7 @@ var pledgeData1 = "00000000000000000000000000ce0d46d924cc8437c806721496599fc3ffa var mixedCaseData1 = "00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000020489e8000000000000000000000000000000000000000000000000000000000000000f4241" func TestEventId(t *testing.T) { + t.Parallel() var table = []struct { definition string expectations map[string]common.Hash @@ -112,6 +113,7 @@ func TestEventId(t *testing.T) { } func TestEventString(t *testing.T) { + t.Parallel() var table = []struct { definition string expectations map[string]string @@ -146,6 +148,7 @@ func TestEventString(t *testing.T) { // TestEventMultiValueWithArrayUnpack verifies that array fields will be counted after parsing array. func TestEventMultiValueWithArrayUnpack(t *testing.T) { + t.Parallel() definition := `[{"name": "test", "type": "event", "inputs": [{"indexed": false, "name":"value1", "type":"uint8[2]"},{"indexed": false, "name":"value2", "type":"uint8"}]}]` abi, err := JSON(strings.NewReader(definition)) require.NoError(t, err) @@ -161,6 +164,7 @@ func TestEventMultiValueWithArrayUnpack(t *testing.T) { } func TestEventTupleUnpack(t *testing.T) { + t.Parallel() type EventTransfer struct { Value *big.Int } @@ -351,6 +355,7 @@ func unpackTestEventData(dest interface{}, hexData string, jsonEvent []byte, ass // TestEventUnpackIndexed verifies that indexed field will be skipped by event decoder. func TestEventUnpackIndexed(t *testing.T) { + t.Parallel() definition := `[{"name": "test", "type": "event", "inputs": [{"indexed": true, "name":"value1", "type":"uint8"},{"indexed": false, "name":"value2", "type":"uint8"}]}]` type testStruct struct { Value1 uint8 // indexed @@ -368,6 +373,7 @@ func TestEventUnpackIndexed(t *testing.T) { // TestEventIndexedWithArrayUnpack verifies that decoder will not overflow when static array is indexed input. func TestEventIndexedWithArrayUnpack(t *testing.T) { + t.Parallel() definition := `[{"name": "test", "type": "event", "inputs": [{"indexed": true, "name":"value1", "type":"uint8[2]"},{"indexed": false, "name":"value2", "type":"string"}]}]` type testStruct struct { Value1 [2]uint8 // indexed diff --git a/accounts/abi/method.go b/accounts/abi/method.go index b6e1eef3cf..c5a1a71f47 100644 --- a/accounts/abi/method.go +++ b/accounts/abi/method.go @@ -117,15 +117,6 @@ func NewMethod(name string, rawName string, funType FunctionType, mutability str sig = fmt.Sprintf("%v(%v)", rawName, strings.Join(types, ",")) id = crypto.Keccak256([]byte(sig))[:4] } - // Extract meaningful state mutability of solidity method. - // If it's default value, never print it. - state := mutability - if state == "nonpayable" { - state = "" - } - if state != "" { - state = state + " " - } identity := fmt.Sprintf("function %v", rawName) switch funType { case Fallback: @@ -135,7 +126,14 @@ func NewMethod(name string, rawName string, funType FunctionType, mutability str case Constructor: identity = "constructor" } - str := fmt.Sprintf("%v(%v) %sreturns(%v)", identity, strings.Join(inputNames, ", "), state, strings.Join(outputNames, ", ")) + var str string + // Extract meaningful state mutability of solidity method. + // If it's empty string or default value "nonpayable", never print it. + if mutability == "" || mutability == "nonpayable" { + str = fmt.Sprintf("%v(%v) returns(%v)", identity, strings.Join(inputNames, ", "), strings.Join(outputNames, ", ")) + } else { + str = fmt.Sprintf("%v(%v) %s returns(%v)", identity, strings.Join(inputNames, ", "), mutability, strings.Join(outputNames, ", ")) + } return Method{ Name: name, diff --git a/accounts/abi/method_test.go b/accounts/abi/method_test.go index 9230e307aa..6322173920 100644 --- a/accounts/abi/method_test.go +++ b/accounts/abi/method_test.go @@ -35,6 +35,7 @@ const methoddata = ` ]` func TestMethodString(t *testing.T) { + t.Parallel() var table = []struct { method string expectation string @@ -99,6 +100,7 @@ func TestMethodString(t *testing.T) { } func TestMethodSig(t *testing.T) { + t.Parallel() var cases = []struct { method string expect string diff --git a/accounts/abi/pack.go b/accounts/abi/pack.go index 0cd91cb4fa..beef1fa37f 100644 --- a/accounts/abi/pack.go +++ b/accounts/abi/pack.go @@ -57,7 +57,7 @@ func packElement(t Type, reflectValue reflect.Value) ([]byte, error) { reflectValue = mustArrayToByteSlice(reflectValue) } if reflectValue.Type() != reflect.TypeOf([]byte{}) { - return []byte{}, errors.New("Bytes type is neither slice nor array") + return []byte{}, errors.New("bytes type is neither slice nor array") } return packBytesSlice(reflectValue.Bytes(), reflectValue.Len()), nil case FixedBytesTy, FunctionTy: @@ -66,7 +66,7 @@ func packElement(t Type, reflectValue reflect.Value) ([]byte, error) { } return common.RightPadBytes(reflectValue.Bytes(), 32), nil default: - return []byte{}, fmt.Errorf("Could not pack element, unknown type: %v", t.T) + return []byte{}, fmt.Errorf("could not pack element, unknown type: %v", t.T) } } diff --git a/accounts/abi/pack_test.go b/accounts/abi/pack_test.go index 5c7cb1cc1a..00bdae469e 100644 --- a/accounts/abi/pack_test.go +++ b/accounts/abi/pack_test.go @@ -32,8 +32,11 @@ import ( // TestPack tests the general pack/unpack tests in packing_test.go func TestPack(t *testing.T) { + t.Parallel() for i, test := range packUnpackTests { + i, test := i, test t.Run(strconv.Itoa(i), func(t *testing.T) { + t.Parallel() encb, err := hex.DecodeString(test.packed) if err != nil { t.Fatalf("invalid hex %s: %v", test.packed, err) @@ -57,6 +60,7 @@ func TestPack(t *testing.T) { } func TestMethodPack(t *testing.T) { + t.Parallel() abi, err := JSON(strings.NewReader(jsondata)) if err != nil { t.Fatal(err) @@ -177,6 +181,7 @@ func TestMethodPack(t *testing.T) { } func TestPackNumber(t *testing.T) { + t.Parallel() tests := []struct { value reflect.Value packed []byte diff --git a/accounts/abi/packing_test.go b/accounts/abi/packing_test.go index eae3b0df20..9ed52a475e 100644 --- a/accounts/abi/packing_test.go +++ b/accounts/abi/packing_test.go @@ -375,7 +375,7 @@ var packUnpackTests = []packUnpackTest{ def: `[{"type": "bytes"}]`, packed: "0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000020" + - "0100000000000000000000000000000000000000000000000000000000000000", + "0100000000000000000000000000000000000000000000000000000000000000", //nolint:all unpacked: common.Hex2Bytes("0100000000000000000000000000000000000000000000000000000000000000"), }, { @@ -476,7 +476,7 @@ var packUnpackTests = []packUnpackTest{ def: `[{"type": "int256[3]"}]`, packed: "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000002" + - "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000003", //nolint:all unpacked: [3]*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, }, // multi dimensional, if these pass, all types that don't require length prefix should pass @@ -536,7 +536,7 @@ var packUnpackTests = []packUnpackTest{ def: `[{"type": "uint8[][2]"}]`, packed: "0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000040" + - "0000000000000000000000000000000000000000000000000000000000000080" + + "0000000000000000000000000000000000000000000000000000000000000080" + //nolint:all "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000001" + @@ -801,7 +801,7 @@ var packUnpackTests = []packUnpackTest{ "0100000000000000000000000000000000000000000000000000000000000000" + // array[0][0] "0200000000000000000000000000000000000000000000000000000000000000" + // array[0][1] "0000000000000000000000000000000000000000000000000000000000000003" + // len(array[1]) = 3 - "0300000000000000000000000000000000000000000000000000000000000000" + // array[1][0] + "0300000000000000000000000000000000000000000000000000000000000000" + //nolint:all // array[1][0] "0400000000000000000000000000000000000000000000000000000000000000" + // array[1][1] "0500000000000000000000000000000000000000000000000000000000000000", // array[1][2] }, @@ -845,7 +845,7 @@ var packUnpackTests = []packUnpackTest{ }{1, big.NewInt(1), big.NewInt(-1), true, [2][3][32]byte{{{1}, {2}, {3}}, {{3}, {4}, {5}}}}, packed: "0000000000000000000000000000000000000000000000000000000000000001" + // struct[a] "0000000000000000000000000000000000000000000000000000000000000001" + // struct[b] - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + // struct[c] + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + //nolint:all // struct[c] "0000000000000000000000000000000000000000000000000000000000000001" + // struct[d] "0100000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[0][0] "0200000000000000000000000000000000000000000000000000000000000000" + // struct[e] array[0][1] diff --git a/accounts/abi/reflect.go b/accounts/abi/reflect.go index 48d2ef41ec..1863e5bb7d 100644 --- a/accounts/abi/reflect.go +++ b/accounts/abi/reflect.go @@ -134,7 +134,7 @@ func setSlice(dst, src reflect.Value) error { dst.Set(slice) return nil } - return errors.New("Cannot set slice, destination not settable") + return errors.New("cannot set slice, destination not settable") } func setArray(dst, src reflect.Value) error { @@ -155,7 +155,7 @@ func setArray(dst, src reflect.Value) error { dst.Set(array) return nil } - return errors.New("Cannot set array, destination not settable") + return errors.New("cannot set array, destination not settable") } func setStruct(dst, src reflect.Value) error { @@ -163,7 +163,7 @@ func setStruct(dst, src reflect.Value) error { srcField := src.Field(i) dstField := dst.Field(i) if !dstField.IsValid() || !srcField.IsValid() { - return fmt.Errorf("Could not find src field: %v value: %v in destination", srcField.Type().Name(), srcField) + return fmt.Errorf("could not find src field: %v value: %v in destination", srcField.Type().Name(), srcField) } if err := set(dstField, srcField); err != nil { return err diff --git a/accounts/abi/reflect_test.go b/accounts/abi/reflect_test.go index 76ef1ad2aa..6c7ae57087 100644 --- a/accounts/abi/reflect_test.go +++ b/accounts/abi/reflect_test.go @@ -170,8 +170,11 @@ var reflectTests = []reflectTest{ } func TestReflectNameToStruct(t *testing.T) { + t.Parallel() for _, test := range reflectTests { + test := test t.Run(test.name, func(t *testing.T) { + t.Parallel() m, err := mapArgNamesToStructFields(test.args, reflect.ValueOf(test.struc)) if len(test.err) > 0 { if err == nil || err.Error() != test.err { @@ -192,6 +195,7 @@ func TestReflectNameToStruct(t *testing.T) { } func TestConvertType(t *testing.T) { + t.Parallel() // Test Basic Struct type T struct { X *big.Int diff --git a/accounts/abi/selector_parser_test.go b/accounts/abi/selector_parser_test.go index f6f134492b..6cb0ae0e70 100644 --- a/accounts/abi/selector_parser_test.go +++ b/accounts/abi/selector_parser_test.go @@ -24,6 +24,7 @@ import ( ) func TestParseSelector(t *testing.T) { + t.Parallel() mkType := func(types ...interface{}) []ArgumentMarshaling { var result []ArgumentMarshaling for i, typeOrComponents := range types { diff --git a/accounts/abi/topics.go b/accounts/abi/topics.go index 360df7d5e8..60c71d88b2 100644 --- a/accounts/abi/topics.go +++ b/accounts/abi/topics.go @@ -75,7 +75,7 @@ func MakeTopics(query ...[]interface{}) ([][]common.Hash, error) { copy(topic[:], hash[:]) default: - // todo(rjl493456442) according solidity documentation, indexed event + // todo(rjl493456442) according to solidity documentation, indexed event // parameters that are not value types i.e. arrays and structs are not // stored directly but instead a keccak256-hash of an encoding is stored. // diff --git a/accounts/abi/topics_test.go b/accounts/abi/topics_test.go index 30cf21d0b8..b31f58fba3 100644 --- a/accounts/abi/topics_test.go +++ b/accounts/abi/topics_test.go @@ -26,6 +26,7 @@ import ( ) func TestMakeTopics(t *testing.T) { + t.Parallel() type args struct { query [][]interface{} } @@ -117,7 +118,9 @@ func TestMakeTopics(t *testing.T) { }, } for _, tt := range tests { + tt := tt t.Run(tt.name, func(t *testing.T) { + t.Parallel() got, err := MakeTopics(tt.args.query...) if (err != nil) != tt.wantErr { t.Errorf("makeTopics() error = %v, wantErr %v", err, tt.wantErr) @@ -347,10 +350,13 @@ func setupTopicsTests() []topicTest { } func TestParseTopics(t *testing.T) { + t.Parallel() tests := setupTopicsTests() for _, tt := range tests { + tt := tt t.Run(tt.name, func(t *testing.T) { + t.Parallel() createObj := tt.args.createObj() if err := ParseTopics(createObj, tt.args.fields, tt.args.topics); (err != nil) != tt.wantErr { t.Errorf("parseTopics() error = %v, wantErr %v", err, tt.wantErr) @@ -364,10 +370,13 @@ func TestParseTopics(t *testing.T) { } func TestParseTopicsIntoMap(t *testing.T) { + t.Parallel() tests := setupTopicsTests() for _, tt := range tests { + tt := tt t.Run(tt.name, func(t *testing.T) { + t.Parallel() outMap := make(map[string]interface{}) if err := ParseTopicsIntoMap(outMap, tt.args.fields, tt.args.topics); (err != nil) != tt.wantErr { t.Errorf("parseTopicsIntoMap() error = %v, wantErr %v", err, tt.wantErr) diff --git a/accounts/abi/type_test.go b/accounts/abi/type_test.go index a72531ba27..ae69872ad8 100644 --- a/accounts/abi/type_test.go +++ b/accounts/abi/type_test.go @@ -31,6 +31,7 @@ type typeWithoutStringer Type // Tests that all allowed types get recognized by the type parser. func TestTypeRegexp(t *testing.T) { + t.Parallel() tests := []struct { blob string components []ArgumentMarshaling @@ -117,6 +118,7 @@ func TestTypeRegexp(t *testing.T) { } func TestTypeCheck(t *testing.T) { + t.Parallel() for i, test := range []struct { typ string components []ArgumentMarshaling @@ -308,6 +310,7 @@ func TestTypeCheck(t *testing.T) { } func TestInternalType(t *testing.T) { + t.Parallel() components := []ArgumentMarshaling{{Name: "a", Type: "int64"}} internalType := "struct a.b[]" kind := Type{ @@ -332,6 +335,7 @@ func TestInternalType(t *testing.T) { } func TestGetTypeSize(t *testing.T) { + t.Parallel() var testCases = []struct { typ string components []ArgumentMarshaling @@ -368,6 +372,7 @@ func TestGetTypeSize(t *testing.T) { } func TestNewFixedBytesOver32(t *testing.T) { + t.Parallel() _, err := NewType("bytes4096", "", nil) if err == nil { t.Errorf("fixed bytes with size over 32 is not spec'd") diff --git a/accounts/abi/unpack_test.go b/accounts/abi/unpack_test.go index 6dd2db0d58..29891ec0a4 100644 --- a/accounts/abi/unpack_test.go +++ b/accounts/abi/unpack_test.go @@ -33,6 +33,7 @@ import ( // TestUnpack tests the general pack/unpack tests in packing_test.go func TestUnpack(t *testing.T) { + t.Parallel() for i, test := range packUnpackTests { t.Run(strconv.Itoa(i)+" "+test.def, func(t *testing.T) { //Unpack @@ -206,13 +207,13 @@ var unpackTests = []unpackTest{ def: `[{"type":"bool"}]`, enc: "", want: false, - err: "abi: attempting to unmarshall an empty string while arguments are expected", + err: "abi: attempting to unmarshal an empty string while arguments are expected", }, { def: `[{"type":"bytes32","indexed":true},{"type":"uint256","indexed":false}]`, enc: "", want: false, - err: "abi: attempting to unmarshall an empty string while arguments are expected", + err: "abi: attempting to unmarshal an empty string while arguments are expected", }, { def: `[{"type":"bool","indexed":true},{"type":"uint64","indexed":true}]`, @@ -224,6 +225,7 @@ var unpackTests = []unpackTest{ // TestLocalUnpackTests runs test specially designed only for unpacking. // All test cases that can be used to test packing and unpacking should move to packing_test.go func TestLocalUnpackTests(t *testing.T) { + t.Parallel() for i, test := range unpackTests { t.Run(strconv.Itoa(i), func(t *testing.T) { //Unpack @@ -251,6 +253,7 @@ func TestLocalUnpackTests(t *testing.T) { } func TestUnpackIntoInterfaceSetDynamicArrayOutput(t *testing.T) { + t.Parallel() abi, err := JSON(strings.NewReader(`[{"constant":true,"inputs":[],"name":"testDynamicFixedBytes15","outputs":[{"name":"","type":"bytes15[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"testDynamicFixedBytes32","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"}]`)) if err != nil { t.Fatal(err) @@ -321,6 +324,7 @@ func methodMultiReturn(require *require.Assertions) (ABI, []byte, methodMultiOut } func TestMethodMultiReturn(t *testing.T) { + t.Parallel() type reversed struct { String string Int *big.Int @@ -400,6 +404,7 @@ func TestMethodMultiReturn(t *testing.T) { } func TestMultiReturnWithArray(t *testing.T) { + t.Parallel() const definition = `[{"name" : "multi", "type": "function", "outputs": [{"type": "uint64[3]"}, {"type": "uint64"}]}]` abi, err := JSON(strings.NewReader(definition)) if err != nil { @@ -423,6 +428,7 @@ func TestMultiReturnWithArray(t *testing.T) { } func TestMultiReturnWithStringArray(t *testing.T) { + t.Parallel() const definition = `[{"name" : "multi", "type": "function", "outputs": [{"name": "","type": "uint256[3]"},{"name": "","type": "address"},{"name": "","type": "string[2]"},{"name": "","type": "bool"}]}]` abi, err := JSON(strings.NewReader(definition)) if err != nil { @@ -453,6 +459,7 @@ func TestMultiReturnWithStringArray(t *testing.T) { } func TestMultiReturnWithStringSlice(t *testing.T) { + t.Parallel() const definition = `[{"name" : "multi", "type": "function", "outputs": [{"name": "","type": "string[]"},{"name": "","type": "uint256[]"}]}]` abi, err := JSON(strings.NewReader(definition)) if err != nil { @@ -485,6 +492,7 @@ func TestMultiReturnWithStringSlice(t *testing.T) { } func TestMultiReturnWithDeeplyNestedArray(t *testing.T) { + t.Parallel() // Similar to TestMultiReturnWithArray, but with a special case in mind: // values of nested static arrays count towards the size as well, and any element following // after such nested array argument should be read with the correct offset, @@ -525,6 +533,7 @@ func TestMultiReturnWithDeeplyNestedArray(t *testing.T) { } func TestUnmarshal(t *testing.T) { + t.Parallel() const definition = `[ { "name" : "int", "type": "function", "outputs": [ { "type": "uint256" } ] }, { "name" : "bool", "type": "function", "outputs": [ { "type": "bool" } ] }, @@ -774,6 +783,7 @@ func TestUnmarshal(t *testing.T) { } func TestUnpackTuple(t *testing.T) { + t.Parallel() const simpleTuple = `[{"name":"tuple","type":"function","outputs":[{"type":"tuple","name":"ret","components":[{"type":"int256","name":"a"},{"type":"int256","name":"b"}]}]}]` abi, err := JSON(strings.NewReader(simpleTuple)) if err != nil { @@ -876,6 +886,7 @@ func TestUnpackTuple(t *testing.T) { } func TestOOMMaliciousInput(t *testing.T) { + t.Parallel() oomTests := []unpackTest{ { def: `[{"type": "uint8[]"}]`, @@ -946,6 +957,7 @@ func TestOOMMaliciousInput(t *testing.T) { } func TestPackAndUnpackIncompatibleNumber(t *testing.T) { + t.Parallel() var encodeABI Arguments uint256Ty, err := NewType("uint256", "", nil) if err != nil { diff --git a/accounts/accounts_test.go b/accounts/accounts_test.go index e8274f9f04..2c4138aa78 100644 --- a/accounts/accounts_test.go +++ b/accounts/accounts_test.go @@ -24,6 +24,7 @@ import ( ) func TestTextHash(t *testing.T) { + t.Parallel() hash := TextHash([]byte("Hello Joe")) want := hexutil.MustDecode("0xa080337ae51c4e064c189e113edd0ba391df9206e2f49db658bb32cf2911730b") if !bytes.Equal(hash, want) { diff --git a/accounts/hd_test.go b/accounts/hd_test.go index 0743bbe666..118ec5187b 100644 --- a/accounts/hd_test.go +++ b/accounts/hd_test.go @@ -25,6 +25,7 @@ import ( // Tests that HD derivation paths can be correctly parsed into our internal binary // representation. func TestHDPathParsing(t *testing.T) { + t.Parallel() tests := []struct { input string output DerivationPath @@ -89,6 +90,7 @@ func testDerive(t *testing.T, next func() DerivationPath, expected []string) { } func TestHdPathIteration(t *testing.T) { + t.Parallel() testDerive(t, DefaultIterator(DefaultBaseDerivationPath), []string{ "m/44'/60'/0'/0/0", "m/44'/60'/0'/0/1", diff --git a/accounts/keystore/account_cache_test.go b/accounts/keystore/account_cache_test.go index 3847e9daf6..48a238048f 100644 --- a/accounts/keystore/account_cache_test.go +++ b/accounts/keystore/account_cache_test.go @@ -68,7 +68,7 @@ func waitWatcherStart(ks *KeyStore) bool { func waitForAccounts(wantAccounts []accounts.Account, ks *KeyStore) error { var list []accounts.Account - for t0 := time.Now(); time.Since(t0) < 5*time.Second; time.Sleep(200 * time.Millisecond) { + for t0 := time.Now(); time.Since(t0) < 5*time.Second; time.Sleep(100 * time.Millisecond) { list = ks.Accounts() if reflect.DeepEqual(list, wantAccounts) { // ks should have also received change notifications @@ -152,6 +152,7 @@ func TestWatchNoDir(t *testing.T) { } func TestCacheInitialReload(t *testing.T) { + t.Parallel() cache, _ := newAccountCache(cachetestDir) accounts := cache.accounts() if !reflect.DeepEqual(accounts, cachetestAccounts) { @@ -160,6 +161,7 @@ func TestCacheInitialReload(t *testing.T) { } func TestCacheAddDeleteOrder(t *testing.T) { + t.Parallel() cache, _ := newAccountCache("testdata/no-such-dir") cache.watcher.running = true // prevent unexpected reloads @@ -244,6 +246,7 @@ func TestCacheAddDeleteOrder(t *testing.T) { } func TestCacheFind(t *testing.T) { + t.Parallel() dir := filepath.Join("testdata", "dir") cache, _ := newAccountCache(dir) cache.watcher.running = true // prevent unexpected reloads @@ -350,7 +353,7 @@ func TestUpdatedKeyfileContents(t *testing.T) { return } // needed so that modTime of `file` is different to its current value after forceCopyFile - time.Sleep(time.Second) + os.Chtimes(file, time.Now().Add(-time.Second), time.Now().Add(-time.Second)) // Now replace file contents if err := forceCopyFile(file, cachetestAccounts[1].URL.Path); err != nil { @@ -366,7 +369,7 @@ func TestUpdatedKeyfileContents(t *testing.T) { } // needed so that modTime of `file` is different to its current value after forceCopyFile - time.Sleep(time.Second) + os.Chtimes(file, time.Now().Add(-time.Second), time.Now().Add(-time.Second)) // Now replace file contents again if err := forceCopyFile(file, cachetestAccounts[2].URL.Path); err != nil { @@ -382,7 +385,7 @@ func TestUpdatedKeyfileContents(t *testing.T) { } // needed so that modTime of `file` is different to its current value after os.WriteFile - time.Sleep(time.Second) + os.Chtimes(file, time.Now().Add(-time.Second), time.Now().Add(-time.Second)) // Now replace file contents with crap if err := os.WriteFile(file, []byte("foo"), 0600); err != nil { diff --git a/tests/fuzzers/keystore/keystore-fuzzer.go b/accounts/keystore/keystore_fuzzing_test.go similarity index 66% rename from tests/fuzzers/keystore/keystore-fuzzer.go rename to accounts/keystore/keystore_fuzzing_test.go index e3bcae92e1..793b46336a 100644 --- a/tests/fuzzers/keystore/keystore-fuzzer.go +++ b/accounts/keystore/keystore_fuzzing_test.go @@ -1,4 +1,4 @@ -// Copyright 2019 The go-ethereum Authors +// Copyright 2023 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -17,21 +17,18 @@ package keystore import ( - "os" - - "github.com/ethereum/go-ethereum/accounts/keystore" + "testing" ) -func Fuzz(input []byte) int { - ks := keystore.NewKeyStore("/tmp/ks", keystore.LightScryptN, keystore.LightScryptP) - - a, err := ks.NewAccount(string(input)) - if err != nil { - panic(err) - } - if err := ks.Unlock(a, string(input)); err != nil { - panic(err) - } - os.Remove(a.URL.Path) - return 1 +func FuzzPassword(f *testing.F) { + f.Fuzz(func(t *testing.T, password string) { + ks := NewKeyStore(t.TempDir(), LightScryptN, LightScryptP) + a, err := ks.NewAccount(password) + if err != nil { + t.Fatal(err) + } + if err := ks.Unlock(a, password); err != nil { + t.Fatal(err) + } + }) } diff --git a/accounts/keystore/keystore_test.go b/accounts/keystore/keystore_test.go index deb7cae9f9..c9a23eddd6 100644 --- a/accounts/keystore/keystore_test.go +++ b/accounts/keystore/keystore_test.go @@ -36,6 +36,7 @@ import ( var testSigData = make([]byte, 32) func TestKeyStore(t *testing.T) { + t.Parallel() dir, ks := tmpKeyStore(t, true) a, err := ks.NewAccount("foo") @@ -70,6 +71,7 @@ func TestKeyStore(t *testing.T) { } func TestSign(t *testing.T) { + t.Parallel() _, ks := tmpKeyStore(t, true) pass := "" // not used but required by API @@ -86,6 +88,7 @@ func TestSign(t *testing.T) { } func TestSignWithPassphrase(t *testing.T) { + t.Parallel() _, ks := tmpKeyStore(t, true) pass := "passwd" @@ -280,6 +283,7 @@ type walletEvent struct { // Tests that wallet notifications and correctly fired when accounts are added // or deleted from the keystore. func TestWalletNotifications(t *testing.T) { + t.Parallel() _, ks := tmpKeyStore(t, false) // Subscribe to the wallet feed and collect events. @@ -341,6 +345,7 @@ func TestWalletNotifications(t *testing.T) { // TestImportExport tests the import functionality of a keystore. func TestImportECDSA(t *testing.T) { + t.Parallel() _, ks := tmpKeyStore(t, true) key, err := crypto.GenerateKey() if err != nil { @@ -359,6 +364,7 @@ func TestImportECDSA(t *testing.T) { // TestImportECDSA tests the import and export functionality of a keystore. func TestImportExport(t *testing.T) { + t.Parallel() _, ks := tmpKeyStore(t, true) acc, err := ks.NewAccount("old") if err != nil { @@ -387,6 +393,7 @@ func TestImportExport(t *testing.T) { // TestImportRace tests the keystore on races. // This test should fail under -race if importing races. func TestImportRace(t *testing.T) { + t.Parallel() _, ks := tmpKeyStore(t, true) acc, err := ks.NewAccount("old") if err != nil { diff --git a/accounts/keystore/passphrase_test.go b/accounts/keystore/passphrase_test.go index 1356b31780..20ec0f5519 100644 --- a/accounts/keystore/passphrase_test.go +++ b/accounts/keystore/passphrase_test.go @@ -30,6 +30,7 @@ const ( // Tests that a json key file can be decrypted and encrypted in multiple rounds. func TestKeyEncryptDecrypt(t *testing.T) { + t.Parallel() keyjson, err := os.ReadFile("testdata/very-light-scrypt.json") if err != nil { t.Fatal(err) @@ -54,7 +55,7 @@ func TestKeyEncryptDecrypt(t *testing.T) { // Recrypt with a new password and start over password += "new data appended" // nolint: gosec if keyjson, err = EncryptKey(key, password, veryLightScryptN, veryLightScryptP); err != nil { - t.Errorf("test %d: failed to recrypt key %v", i, err) + t.Errorf("test %d: failed to re-encrypt key %v", i, err) } } } diff --git a/accounts/keystore/plain_test.go b/accounts/keystore/plain_test.go index 93165d5cd3..737eb7fd61 100644 --- a/accounts/keystore/plain_test.go +++ b/accounts/keystore/plain_test.go @@ -40,6 +40,7 @@ func tmpKeyStoreIface(t *testing.T, encrypted bool) (dir string, ks keyStore) { } func TestKeyStorePlain(t *testing.T) { + t.Parallel() _, ks := tmpKeyStoreIface(t, false) pass := "" // not used but required by API @@ -60,6 +61,7 @@ func TestKeyStorePlain(t *testing.T) { } func TestKeyStorePassphrase(t *testing.T) { + t.Parallel() _, ks := tmpKeyStoreIface(t, true) pass := "foo" @@ -80,6 +82,7 @@ func TestKeyStorePassphrase(t *testing.T) { } func TestKeyStorePassphraseDecryptionFail(t *testing.T) { + t.Parallel() _, ks := tmpKeyStoreIface(t, true) pass := "foo" @@ -93,6 +96,7 @@ func TestKeyStorePassphraseDecryptionFail(t *testing.T) { } func TestImportPreSaleKey(t *testing.T) { + t.Parallel() dir, ks := tmpKeyStoreIface(t, true) // file content of a presale key file generated with: diff --git a/accounts/keystore/watch.go b/accounts/keystore/watch.go index a9f87e7c32..1bef321cd1 100644 --- a/accounts/keystore/watch.go +++ b/accounts/keystore/watch.go @@ -125,7 +125,7 @@ func (w *watcher) loop() { if !ok { return } - log.Info("Filsystem watcher error", "err", err) + log.Info("Filesystem watcher error", "err", err) case <-debounce.C: w.ac.scanAccounts() rescanTriggered = false diff --git a/accounts/manager.go b/accounts/manager.go index a0b5c329cd..cbe4f7c79d 100644 --- a/accounts/manager.go +++ b/accounts/manager.go @@ -98,6 +98,9 @@ func NewManager(config *Config, backends ...Backend) *Manager { // Close terminates the account manager's internal notification processes. func (am *Manager) Close() error { + for _, w := range am.wallets { + w.Close() + } errc := make(chan error) am.quit <- errc return <-errc diff --git a/accounts/scwallet/wallet.go b/accounts/scwallet/wallet.go index 067bda83f1..f0ca9085b6 100644 --- a/accounts/scwallet/wallet.go +++ b/accounts/scwallet/wallet.go @@ -776,16 +776,16 @@ func (w *Wallet) findAccountPath(account accounts.Account) (accounts.DerivationP return nil, fmt.Errorf("scheme %s does not match wallet scheme %s", account.URL.Scheme, w.Hub.scheme) } - parts := strings.SplitN(account.URL.Path, "/", 2) - if len(parts) != 2 { + url, path, found := strings.Cut(account.URL.Path, "/") + if !found { return nil, fmt.Errorf("invalid URL format: %s", account.URL) } - if parts[0] != fmt.Sprintf("%x", w.PublicKey[1:3]) { + if url != fmt.Sprintf("%x", w.PublicKey[1:3]) { return nil, fmt.Errorf("URL %s is not for this wallet", account.URL) } - return accounts.ParseDerivationPath(parts[1]) + return accounts.ParseDerivationPath(path) } // Session represents a secured communication session with the wallet. diff --git a/accounts/url_test.go b/accounts/url_test.go index 239aa06d22..f481a1016d 100644 --- a/accounts/url_test.go +++ b/accounts/url_test.go @@ -21,6 +21,7 @@ import ( ) func TestURLParsing(t *testing.T) { + t.Parallel() url, err := parseURL("https://ethereum.org") if err != nil { t.Errorf("unexpected error: %v", err) @@ -40,6 +41,7 @@ func TestURLParsing(t *testing.T) { } func TestURLString(t *testing.T) { + t.Parallel() url := URL{Scheme: "https", Path: "ethereum.org"} if url.String() != "https://ethereum.org" { t.Errorf("expected: %v, got: %v", "https://ethereum.org", url.String()) @@ -52,10 +54,11 @@ func TestURLString(t *testing.T) { } func TestURLMarshalJSON(t *testing.T) { + t.Parallel() url := URL{Scheme: "https", Path: "ethereum.org"} json, err := url.MarshalJSON() if err != nil { - t.Errorf("unexpcted error: %v", err) + t.Errorf("unexpected error: %v", err) } if string(json) != "\"https://ethereum.org\"" { t.Errorf("expected: %v, got: %v", "\"https://ethereum.org\"", string(json)) @@ -63,10 +66,11 @@ func TestURLMarshalJSON(t *testing.T) { } func TestURLUnmarshalJSON(t *testing.T) { + t.Parallel() url := &URL{} err := url.UnmarshalJSON([]byte("\"https://ethereum.org\"")) if err != nil { - t.Errorf("unexpcted error: %v", err) + t.Errorf("unexpected error: %v", err) } if url.Scheme != "https" { t.Errorf("expected: %v, got: %v", "https", url.Scheme) @@ -77,6 +81,7 @@ func TestURLUnmarshalJSON(t *testing.T) { } func TestURLComparison(t *testing.T) { + t.Parallel() tests := []struct { urlA URL urlB URL diff --git a/accounts/usbwallet/hub.go b/accounts/usbwallet/hub.go index e67942dbc1..0682310867 100644 --- a/accounts/usbwallet/hub.go +++ b/accounts/usbwallet/hub.go @@ -23,6 +23,8 @@ import ( "sync/atomic" "time" + "golang.org/x/exp/slices" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" @@ -48,7 +50,7 @@ type Hub struct { scheme string // Protocol scheme prefixing account and wallet URLs. vendorID uint16 // USB vendor identifier used for device discovery productIDs []uint16 // USB product identifiers used for device discovery - usageID uint16 // USB usage page identifier used for macOS device discovery + usageIDs []uint16 // USB usage page identifier used for macOS device discovery endpointID int // USB endpoint identifier used for non-macOS device discovery makeDriver func(log.Logger) driver // Factory method to construct a vendor specific driver @@ -93,22 +95,22 @@ func NewLedgerHub() (*Hub, error) { 0x4011, /* HID + WebUSB Ledger Nano X */ 0x5011, /* HID + WebUSB Ledger Nano S Plus */ 0x6011, /* HID + WebUSB Ledger Nano FTS */ - }, 0xffa0, 0, newLedgerDriver) + }, []uint16{0xffa0, 0}, 2, newLedgerDriver) } // NewTrezorHubWithHID creates a new hardware wallet manager for Trezor devices. func NewTrezorHubWithHID() (*Hub, error) { - return newHub(TrezorScheme, 0x534c, []uint16{0x0001 /* Trezor HID */}, 0xff00, 0, newTrezorDriver) + return newHub(TrezorScheme, 0x534c, []uint16{0x0001 /* Trezor HID */}, []uint16{0xff00}, 0, newTrezorDriver) } // NewTrezorHubWithWebUSB creates a new hardware wallet manager for Trezor devices with // firmware version > 1.8.0 func NewTrezorHubWithWebUSB() (*Hub, error) { - return newHub(TrezorScheme, 0x1209, []uint16{0x53c1 /* Trezor WebUSB */}, 0xffff /* No usage id on webusb, don't match unset (0) */, 0, newTrezorDriver) + return newHub(TrezorScheme, 0x1209, []uint16{0x53c1 /* Trezor WebUSB */}, []uint16{0xffff} /* No usage id on webusb, don't match unset (0) */, 0, newTrezorDriver) } // newHub creates a new hardware wallet manager for generic USB devices. -func newHub(scheme string, vendorID uint16, productIDs []uint16, usageID uint16, endpointID int, makeDriver func(log.Logger) driver) (*Hub, error) { +func newHub(scheme string, vendorID uint16, productIDs []uint16, usageIDs []uint16, endpointID int, makeDriver func(log.Logger) driver) (*Hub, error) { if !usb.Supported() { return nil, errors.New("unsupported platform") } @@ -116,7 +118,7 @@ func newHub(scheme string, vendorID uint16, productIDs []uint16, usageID uint16, scheme: scheme, vendorID: vendorID, productIDs: productIDs, - usageID: usageID, + usageIDs: usageIDs, endpointID: endpointID, makeDriver: makeDriver, quit: make(chan chan error), @@ -186,7 +188,9 @@ func (hub *Hub) refreshWallets() { for _, info := range infos { for _, id := range hub.productIDs { // Windows and Macos use UsageID matching, Linux uses Interface matching - if info.ProductID == id && (info.UsagePage == hub.usageID || info.Interface == hub.endpointID) { + if info.ProductID == id && + info.Path != "" && + (slices.Contains(hub.usageIDs, info.UsagePage) || info.Interface == hub.endpointID) { devices = append(devices, info) break } diff --git a/accounts/usbwallet/wallet.go b/accounts/usbwallet/wallet.go index 05add081ab..69083dc893 100644 --- a/accounts/usbwallet/wallet.go +++ b/accounts/usbwallet/wallet.go @@ -483,6 +483,10 @@ func (w *wallet) Derive(path accounts.DerivationPath, pin bool) (accounts.Accoun w.stateLock.Lock() defer w.stateLock.Unlock() + if w.device == nil { + return accounts.Account{}, accounts.ErrWalletClosed + } + if _, ok := w.paths[address]; !ok { w.accounts = append(w.accounts, account) w.paths[address] = make(accounts.DerivationPath, len(path)) diff --git a/appveyor.yml b/appveyor.yml index 114aec644b..4a8c4b737a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -54,4 +54,4 @@ for: - go run build/ci.go archive -arch %GETH_ARCH% -type zip -signer WINDOWS_SIGNING_KEY -upload gethstore/builds - go run build/ci.go nsis -arch %GETH_ARCH% -signer WINDOWS_SIGNING_KEY -upload gethstore/builds test_script: - - go run build/ci.go test -dlgo -arch %GETH_ARCH% -cc %GETH_CC% + - go run build/ci.go test -dlgo -arch %GETH_ARCH% -cc %GETH_CC% -short diff --git a/beacon/engine/gen_epe.go b/beacon/engine/gen_epe.go index e69f9a5951..3529bbd661 100644 --- a/beacon/engine/gen_epe.go +++ b/beacon/engine/gen_epe.go @@ -7,6 +7,7 @@ import ( "errors" "math/big" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" ) @@ -15,26 +16,29 @@ var _ = (*executionPayloadEnvelopeMarshaling)(nil) // MarshalJSON marshals as JSON. func (e ExecutionPayloadEnvelope) MarshalJSON() ([]byte, error) { type ExecutionPayloadEnvelope struct { - ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"` - BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"` - BlobsBundle *BlobsBundleV1 `json:"blobsBundle"` - Override bool `json:"shouldOverrideBuilder"` + ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"` + BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"` + BlobsBundle *BlobsBundleV1 `json:"blobsBundle"` + Override bool `json:"shouldOverrideBuilder"` + ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot,omitempty"` } var enc ExecutionPayloadEnvelope enc.ExecutionPayload = e.ExecutionPayload enc.BlockValue = (*hexutil.Big)(e.BlockValue) enc.BlobsBundle = e.BlobsBundle enc.Override = e.Override + enc.ParentBeaconBlockRoot = e.ParentBeaconBlockRoot return json.Marshal(&enc) } // UnmarshalJSON unmarshals from JSON. func (e *ExecutionPayloadEnvelope) UnmarshalJSON(input []byte) error { type ExecutionPayloadEnvelope struct { - ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"` - BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"` - BlobsBundle *BlobsBundleV1 `json:"blobsBundle"` - Override *bool `json:"shouldOverrideBuilder"` + ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"` + BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"` + BlobsBundle *BlobsBundleV1 `json:"blobsBundle"` + Override *bool `json:"shouldOverrideBuilder"` + ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot,omitempty"` } var dec ExecutionPayloadEnvelope if err := json.Unmarshal(input, &dec); err != nil { @@ -54,5 +58,8 @@ func (e *ExecutionPayloadEnvelope) UnmarshalJSON(input []byte) error { if dec.Override != nil { e.Override = *dec.Override } + if dec.ParentBeaconBlockRoot != nil { + e.ParentBeaconBlockRoot = dec.ParentBeaconBlockRoot + } return nil } diff --git a/beacon/engine/types.go b/beacon/engine/types.go index 6f3aa006b8..487693ea18 100644 --- a/beacon/engine/types.go +++ b/beacon/engine/types.go @@ -98,6 +98,9 @@ type ExecutionPayloadEnvelope struct { BlockValue *big.Int `json:"blockValue" gencodec:"required"` BlobsBundle *BlobsBundleV1 `json:"blobsBundle"` Override bool `json:"shouldOverrideBuilder"` + + // OP-Stack: Ecotone specific fields + ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot,omitempty"` } type BlobsBundleV1 struct { @@ -281,7 +284,13 @@ func BlockToExecutableData(block *types.Block, fees *big.Int, sidecars []*types. bundle.Proofs = append(bundle.Proofs, hexutil.Bytes(sidecar.Proofs[j][:])) } } - return &ExecutionPayloadEnvelope{ExecutionPayload: data, BlockValue: fees, BlobsBundle: &bundle, Override: false} + return &ExecutionPayloadEnvelope{ + ExecutionPayload: data, + BlockValue: fees, + BlobsBundle: &bundle, + Override: false, + ParentBeaconBlockRoot: block.BeaconRoot(), + } } // ExecutionPayloadBodyV1 is used in the response to GetPayloadBodiesByHashV1 and GetPayloadBodiesByRangeV1 diff --git a/beacon/light/canonical.go b/beacon/light/canonical.go new file mode 100644 index 0000000000..b5371493b4 --- /dev/null +++ b/beacon/light/canonical.go @@ -0,0 +1,125 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package light + +import ( + "encoding/binary" + "fmt" + + "github.com/ethereum/go-ethereum/common/lru" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" +) + +// canonicalStore stores instances of the given type in a database and caches +// them in memory, associated with a continuous range of period numbers. +// Note: canonicalStore is not thread safe and it is the caller's responsibility +// to avoid concurrent access. +type canonicalStore[T any] struct { + keyPrefix []byte + periods periodRange + cache *lru.Cache[uint64, T] +} + +// newCanonicalStore creates a new canonicalStore and loads all keys associated +// with the keyPrefix in order to determine the ranges available in the database. +func newCanonicalStore[T any](db ethdb.Iteratee, keyPrefix []byte) (*canonicalStore[T], error) { + cs := &canonicalStore[T]{ + keyPrefix: keyPrefix, + cache: lru.NewCache[uint64, T](100), + } + var ( + iter = db.NewIterator(keyPrefix, nil) + kl = len(keyPrefix) + first = true + ) + defer iter.Release() + + for iter.Next() { + if len(iter.Key()) != kl+8 { + log.Warn("Invalid key length in the canonical chain database", "key", fmt.Sprintf("%#x", iter.Key())) + continue + } + period := binary.BigEndian.Uint64(iter.Key()[kl : kl+8]) + if first { + cs.periods.Start = period + } else if cs.periods.End != period { + return nil, fmt.Errorf("gap in the canonical chain database between periods %d and %d", cs.periods.End, period-1) + } + first = false + cs.periods.End = period + 1 + } + return cs, nil +} + +// databaseKey returns the database key belonging to the given period. +func (cs *canonicalStore[T]) databaseKey(period uint64) []byte { + return binary.BigEndian.AppendUint64(append([]byte{}, cs.keyPrefix...), period) +} + +// add adds the given item to the database. It also ensures that the range remains +// continuous. Can be used either with a batch or database backend. +func (cs *canonicalStore[T]) add(backend ethdb.KeyValueWriter, period uint64, value T) error { + if !cs.periods.canExpand(period) { + return fmt.Errorf("period expansion is not allowed, first: %d, next: %d, period: %d", cs.periods.Start, cs.periods.End, period) + } + enc, err := rlp.EncodeToBytes(value) + if err != nil { + return err + } + if err := backend.Put(cs.databaseKey(period), enc); err != nil { + return err + } + cs.cache.Add(period, value) + cs.periods.expand(period) + return nil +} + +// deleteFrom removes items starting from the given period. +func (cs *canonicalStore[T]) deleteFrom(db ethdb.KeyValueWriter, fromPeriod uint64) (deleted periodRange) { + keepRange, deleteRange := cs.periods.split(fromPeriod) + deleteRange.each(func(period uint64) { + db.Delete(cs.databaseKey(period)) + cs.cache.Remove(period) + }) + cs.periods = keepRange + return deleteRange +} + +// get returns the item at the given period or the null value of the given type +// if no item is present. +func (cs *canonicalStore[T]) get(backend ethdb.KeyValueReader, period uint64) (T, bool) { + var null, value T + if !cs.periods.contains(period) { + return null, false + } + if value, ok := cs.cache.Get(period); ok { + return value, true + } + enc, err := backend.Get(cs.databaseKey(period)) + if err != nil { + log.Error("Canonical store value not found", "period", period, "start", cs.periods.Start, "end", cs.periods.End) + return null, false + } + if err := rlp.DecodeBytes(enc, &value); err != nil { + log.Error("Error decoding canonical store value", "error", err) + return null, false + } + cs.cache.Add(period, value) + return value, true +} diff --git a/beacon/light/committee_chain.go b/beacon/light/committee_chain.go new file mode 100644 index 0000000000..d707f8cc34 --- /dev/null +++ b/beacon/light/committee_chain.go @@ -0,0 +1,514 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package light + +import ( + "errors" + "fmt" + "math" + "sync" + "time" + + "github.com/ethereum/go-ethereum/beacon/params" + "github.com/ethereum/go-ethereum/beacon/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/lru" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +var ( + ErrNeedCommittee = errors.New("sync committee required") + ErrInvalidUpdate = errors.New("invalid committee update") + ErrInvalidPeriod = errors.New("invalid update period") + ErrWrongCommitteeRoot = errors.New("wrong committee root") + ErrCannotReorg = errors.New("can not reorg committee chain") +) + +// CommitteeChain is a passive data structure that can validate, hold and update +// a chain of beacon light sync committees and updates. It requires at least one +// externally set fixed committee root at the beginning of the chain which can +// be set either based on a BootstrapData or a trusted source (a local beacon +// full node). This makes the structure useful for both light client and light +// server setups. +// +// It always maintains the following consistency constraints: +// - a committee can only be present if its root hash matches an existing fixed +// root or if it is proven by an update at the previous period +// - an update can only be present if a committee is present at the same period +// and the update signature is valid and has enough participants. +// The committee at the next period (proven by the update) should also be +// present (note that this means they can only be added together if neither +// is present yet). If a fixed root is present at the next period then the +// update can only be present if it proves the same committee root. +// +// Once synced to the current sync period, CommitteeChain can also validate +// signed beacon headers. +type CommitteeChain struct { + // chainmu guards against concurrent access to the canonicalStore structures + // (updates, committees, fixedCommitteeRoots) and ensures that they stay consistent + // with each other and with committeeCache. + chainmu sync.RWMutex + db ethdb.KeyValueStore + updates *canonicalStore[*types.LightClientUpdate] + committees *canonicalStore[*types.SerializedSyncCommittee] + fixedCommitteeRoots *canonicalStore[common.Hash] + committeeCache *lru.Cache[uint64, syncCommittee] // cache deserialized committees + + clock mclock.Clock // monotonic clock (simulated clock in tests) + unixNano func() int64 // system clock (simulated clock in tests) + sigVerifier committeeSigVerifier // BLS sig verifier (dummy verifier in tests) + + config *types.ChainConfig + signerThreshold int + minimumUpdateScore types.UpdateScore + enforceTime bool // enforceTime specifies whether the age of a signed header should be checked +} + +// NewCommitteeChain creates a new CommitteeChain. +func NewCommitteeChain(db ethdb.KeyValueStore, config *types.ChainConfig, signerThreshold int, enforceTime bool) *CommitteeChain { + return newCommitteeChain(db, config, signerThreshold, enforceTime, blsVerifier{}, &mclock.System{}, func() int64 { return time.Now().UnixNano() }) +} + +// newCommitteeChain creates a new CommitteeChain with the option of replacing the +// clock source and signature verification for testing purposes. +func newCommitteeChain(db ethdb.KeyValueStore, config *types.ChainConfig, signerThreshold int, enforceTime bool, sigVerifier committeeSigVerifier, clock mclock.Clock, unixNano func() int64) *CommitteeChain { + s := &CommitteeChain{ + committeeCache: lru.NewCache[uint64, syncCommittee](10), + db: db, + sigVerifier: sigVerifier, + clock: clock, + unixNano: unixNano, + config: config, + signerThreshold: signerThreshold, + enforceTime: enforceTime, + minimumUpdateScore: types.UpdateScore{ + SignerCount: uint32(signerThreshold), + SubPeriodIndex: params.SyncPeriodLength / 16, + }, + } + + var err1, err2, err3 error + if s.fixedCommitteeRoots, err1 = newCanonicalStore[common.Hash](db, rawdb.FixedCommitteeRootKey); err1 != nil { + log.Error("Error creating fixed committee root store", "error", err1) + } + if s.committees, err2 = newCanonicalStore[*types.SerializedSyncCommittee](db, rawdb.SyncCommitteeKey); err2 != nil { + log.Error("Error creating committee store", "error", err2) + } + if s.updates, err3 = newCanonicalStore[*types.LightClientUpdate](db, rawdb.BestUpdateKey); err3 != nil { + log.Error("Error creating update store", "error", err3) + } + if err1 != nil || err2 != nil || err3 != nil || !s.checkConstraints() { + log.Info("Resetting invalid committee chain") + s.Reset() + } + // roll back invalid updates (might be necessary if forks have been changed since last time) + for !s.updates.periods.isEmpty() { + update, ok := s.updates.get(s.db, s.updates.periods.End-1) + if !ok { + log.Error("Sync committee update missing", "period", s.updates.periods.End-1) + s.Reset() + break + } + if valid, err := s.verifyUpdate(update); err != nil { + log.Error("Error validating update", "period", s.updates.periods.End-1, "error", err) + } else if valid { + break + } + if err := s.rollback(s.updates.periods.End); err != nil { + log.Error("Error writing batch into chain database", "error", err) + } + } + if !s.committees.periods.isEmpty() { + log.Trace("Sync committee chain loaded", "first period", s.committees.periods.Start, "last period", s.committees.periods.End-1) + } + return s +} + +// checkConstraints checks committee chain validity constraints +func (s *CommitteeChain) checkConstraints() bool { + isNotInFixedCommitteeRootRange := func(r periodRange) bool { + return s.fixedCommitteeRoots.periods.isEmpty() || + r.Start < s.fixedCommitteeRoots.periods.Start || + r.Start >= s.fixedCommitteeRoots.periods.End + } + + valid := true + if !s.updates.periods.isEmpty() { + if isNotInFixedCommitteeRootRange(s.updates.periods) { + log.Error("Start update is not in the fixed roots range") + valid = false + } + if s.committees.periods.Start > s.updates.periods.Start || s.committees.periods.End <= s.updates.periods.End { + log.Error("Missing committees in update range") + valid = false + } + } + if !s.committees.periods.isEmpty() { + if isNotInFixedCommitteeRootRange(s.committees.periods) { + log.Error("Start committee is not in the fixed roots range") + valid = false + } + if s.committees.periods.End > s.fixedCommitteeRoots.periods.End && s.committees.periods.End > s.updates.periods.End+1 { + log.Error("Last committee is neither in the fixed roots range nor proven by updates") + valid = false + } + } + return valid +} + +// Reset resets the committee chain. +func (s *CommitteeChain) Reset() { + s.chainmu.Lock() + defer s.chainmu.Unlock() + + if err := s.rollback(0); err != nil { + log.Error("Error writing batch into chain database", "error", err) + } +} + +// CheckpointInit initializes a CommitteeChain based on the checkpoint. +// Note: if the chain is already initialized and the committees proven by the +// checkpoint do match the existing chain then the chain is retained and the +// new checkpoint becomes fixed. +func (s *CommitteeChain) CheckpointInit(bootstrap *types.BootstrapData) error { + s.chainmu.Lock() + defer s.chainmu.Unlock() + + if err := bootstrap.Validate(); err != nil { + return err + } + + period := bootstrap.Header.SyncPeriod() + if err := s.deleteFixedCommitteeRootsFrom(period + 2); err != nil { + s.Reset() + return err + } + if s.addFixedCommitteeRoot(period, bootstrap.CommitteeRoot) != nil { + s.Reset() + if err := s.addFixedCommitteeRoot(period, bootstrap.CommitteeRoot); err != nil { + s.Reset() + return err + } + } + if err := s.addFixedCommitteeRoot(period+1, common.Hash(bootstrap.CommitteeBranch[0])); err != nil { + s.Reset() + return err + } + if err := s.addCommittee(period, bootstrap.Committee); err != nil { + s.Reset() + return err + } + return nil +} + +// addFixedCommitteeRoot sets a fixed committee root at the given period. +// Note that the period where the first committee is added has to have a fixed +// root which can either come from a BootstrapData or a trusted source. +func (s *CommitteeChain) addFixedCommitteeRoot(period uint64, root common.Hash) error { + if root == (common.Hash{}) { + return ErrWrongCommitteeRoot + } + + batch := s.db.NewBatch() + oldRoot := s.getCommitteeRoot(period) + if !s.fixedCommitteeRoots.periods.canExpand(period) { + // Note: the fixed committee root range should always be continuous and + // therefore the expected syncing method is to forward sync and optionally + // backward sync periods one by one, starting from a checkpoint. The only + // case when a root that is not adjacent to the already fixed ones can be + // fixed is when the same root has already been proven by an update chain. + // In this case the all roots in between can and should be fixed. + // This scenario makes sense when a new trusted checkpoint is added to an + // existing chain, ensuring that it will not be rolled back (might be + // important in case of low signer participation rate). + if root != oldRoot { + return ErrInvalidPeriod + } + // if the old root exists and matches the new one then it is guaranteed + // that the given period is after the existing fixed range and the roots + // in between can also be fixed. + for p := s.fixedCommitteeRoots.periods.End; p < period; p++ { + if err := s.fixedCommitteeRoots.add(batch, p, s.getCommitteeRoot(p)); err != nil { + return err + } + } + } + if oldRoot != (common.Hash{}) && (oldRoot != root) { + // existing old root was different, we have to reorg the chain + if err := s.rollback(period); err != nil { + return err + } + } + if err := s.fixedCommitteeRoots.add(batch, period, root); err != nil { + return err + } + if err := batch.Write(); err != nil { + log.Error("Error writing batch into chain database", "error", err) + return err + } + return nil +} + +// deleteFixedCommitteeRootsFrom deletes fixed roots starting from the given period. +// It also maintains chain consistency, meaning that it also deletes updates and +// committees if they are no longer supported by a valid update chain. +func (s *CommitteeChain) deleteFixedCommitteeRootsFrom(period uint64) error { + if period >= s.fixedCommitteeRoots.periods.End { + return nil + } + batch := s.db.NewBatch() + s.fixedCommitteeRoots.deleteFrom(batch, period) + if s.updates.periods.isEmpty() || period <= s.updates.periods.Start { + // Note: the first period of the update chain should always be fixed so if + // the fixed root at the first update is removed then the entire update chain + // and the proven committees have to be removed. Earlier committees in the + // remaining fixed root range can stay. + s.updates.deleteFrom(batch, period) + s.deleteCommitteesFrom(batch, period) + } else { + // The update chain stays intact, some previously fixed committee roots might + // get unfixed but are still proven by the update chain. If there were + // committees present after the range proven by updates, those should be + // removed if the belonging fixed roots are also removed. + fromPeriod := s.updates.periods.End + 1 // not proven by updates + if period > fromPeriod { + fromPeriod = period // also not justified by fixed roots + } + s.deleteCommitteesFrom(batch, fromPeriod) + } + if err := batch.Write(); err != nil { + log.Error("Error writing batch into chain database", "error", err) + return err + } + return nil +} + +// deleteCommitteesFrom deletes committees starting from the given period. +func (s *CommitteeChain) deleteCommitteesFrom(batch ethdb.Batch, period uint64) { + deleted := s.committees.deleteFrom(batch, period) + for period := deleted.Start; period < deleted.End; period++ { + s.committeeCache.Remove(period) + } +} + +// addCommittee adds a committee at the given period if possible. +func (s *CommitteeChain) addCommittee(period uint64, committee *types.SerializedSyncCommittee) error { + if !s.committees.periods.canExpand(period) { + return ErrInvalidPeriod + } + root := s.getCommitteeRoot(period) + if root == (common.Hash{}) { + return ErrInvalidPeriod + } + if root != committee.Root() { + return ErrWrongCommitteeRoot + } + if !s.committees.periods.contains(period) { + if err := s.committees.add(s.db, period, committee); err != nil { + return err + } + s.committeeCache.Remove(period) + } + return nil +} + +// InsertUpdate adds a new update if possible. +func (s *CommitteeChain) InsertUpdate(update *types.LightClientUpdate, nextCommittee *types.SerializedSyncCommittee) error { + s.chainmu.Lock() + defer s.chainmu.Unlock() + + period := update.AttestedHeader.Header.SyncPeriod() + if !s.updates.periods.canExpand(period) || !s.committees.periods.contains(period) { + return ErrInvalidPeriod + } + if s.minimumUpdateScore.BetterThan(update.Score()) { + return ErrInvalidUpdate + } + oldRoot := s.getCommitteeRoot(period + 1) + reorg := oldRoot != (common.Hash{}) && oldRoot != update.NextSyncCommitteeRoot + if oldUpdate, ok := s.updates.get(s.db, period); ok && !update.Score().BetterThan(oldUpdate.Score()) { + // a better or equal update already exists; no changes, only fail if new one tried to reorg + if reorg { + return ErrCannotReorg + } + return nil + } + if s.fixedCommitteeRoots.periods.contains(period+1) && reorg { + return ErrCannotReorg + } + if ok, err := s.verifyUpdate(update); err != nil { + return err + } else if !ok { + return ErrInvalidUpdate + } + addCommittee := !s.committees.periods.contains(period+1) || reorg + if addCommittee { + if nextCommittee == nil { + return ErrNeedCommittee + } + if nextCommittee.Root() != update.NextSyncCommitteeRoot { + return ErrWrongCommitteeRoot + } + } + if reorg { + if err := s.rollback(period + 1); err != nil { + return err + } + } + batch := s.db.NewBatch() + if addCommittee { + if err := s.committees.add(batch, period+1, nextCommittee); err != nil { + return err + } + s.committeeCache.Remove(period + 1) + } + if err := s.updates.add(batch, period, update); err != nil { + return err + } + if err := batch.Write(); err != nil { + log.Error("Error writing batch into chain database", "error", err) + return err + } + log.Info("Inserted new committee update", "period", period, "next committee root", update.NextSyncCommitteeRoot) + return nil +} + +// NextSyncPeriod returns the next period where an update can be added and also +// whether the chain is initialized at all. +func (s *CommitteeChain) NextSyncPeriod() (uint64, bool) { + s.chainmu.RLock() + defer s.chainmu.RUnlock() + + if s.committees.periods.isEmpty() { + return 0, false + } + if !s.updates.periods.isEmpty() { + return s.updates.periods.End, true + } + return s.committees.periods.End - 1, true +} + +// rollback removes all committees and fixed roots from the given period and updates +// starting from the previous period. +func (s *CommitteeChain) rollback(period uint64) error { + max := s.updates.periods.End + 1 + if s.committees.periods.End > max { + max = s.committees.periods.End + } + if s.fixedCommitteeRoots.periods.End > max { + max = s.fixedCommitteeRoots.periods.End + } + for max > period { + max-- + batch := s.db.NewBatch() + s.deleteCommitteesFrom(batch, max) + s.fixedCommitteeRoots.deleteFrom(batch, max) + if max > 0 { + s.updates.deleteFrom(batch, max-1) + } + if err := batch.Write(); err != nil { + log.Error("Error writing batch into chain database", "error", err) + return err + } + } + return nil +} + +// getCommitteeRoot returns the committee root at the given period, either fixed, +// proven by a previous update or both. It returns an empty hash if the committee +// root is unknown. +func (s *CommitteeChain) getCommitteeRoot(period uint64) common.Hash { + if root, ok := s.fixedCommitteeRoots.get(s.db, period); ok || period == 0 { + return root + } + if update, ok := s.updates.get(s.db, period-1); ok { + return update.NextSyncCommitteeRoot + } + return common.Hash{} +} + +// getSyncCommittee returns the deserialized sync committee at the given period. +func (s *CommitteeChain) getSyncCommittee(period uint64) (syncCommittee, error) { + if c, ok := s.committeeCache.Get(period); ok { + return c, nil + } + if sc, ok := s.committees.get(s.db, period); ok { + c, err := s.sigVerifier.deserializeSyncCommittee(sc) + if err != nil { + return nil, fmt.Errorf("Sync committee #%d deserialization error: %v", period, err) + } + s.committeeCache.Add(period, c) + return c, nil + } + return nil, fmt.Errorf("Missing serialized sync committee #%d", period) +} + +// VerifySignedHeader returns true if the given signed header has a valid signature +// according to the local committee chain. The caller should ensure that the +// committees advertised by the same source where the signed header came from are +// synced before verifying the signature. +// The age of the header is also returned (the time elapsed since the beginning +// of the given slot, according to the local system clock). If enforceTime is +// true then negative age (future) headers are rejected. +func (s *CommitteeChain) VerifySignedHeader(head types.SignedHeader) (bool, time.Duration, error) { + s.chainmu.RLock() + defer s.chainmu.RUnlock() + + return s.verifySignedHeader(head) +} + +func (s *CommitteeChain) verifySignedHeader(head types.SignedHeader) (bool, time.Duration, error) { + var age time.Duration + now := s.unixNano() + if head.Header.Slot < (uint64(now-math.MinInt64)/uint64(time.Second)-s.config.GenesisTime)/12 { + age = time.Duration(now - int64(time.Second)*int64(s.config.GenesisTime+head.Header.Slot*12)) + } else { + age = time.Duration(math.MinInt64) + } + if s.enforceTime && age < 0 { + return false, age, nil + } + committee, err := s.getSyncCommittee(types.SyncPeriod(head.SignatureSlot)) + if err != nil { + return false, 0, err + } + if committee == nil { + return false, age, nil + } + if signingRoot, err := s.config.Forks.SigningRoot(head.Header); err == nil { + return s.sigVerifier.verifySignature(committee, signingRoot, &head.Signature), age, nil + } + return false, age, nil +} + +// verifyUpdate checks whether the header signature is correct and the update +// fits into the specified constraints (assumes that the update has been +// successfully validated previously) +func (s *CommitteeChain) verifyUpdate(update *types.LightClientUpdate) (bool, error) { + // Note: SignatureSlot determines the sync period of the committee used for signature + // verification. Though in reality SignatureSlot is always bigger than update.Header.Slot, + // setting them as equal here enforces the rule that they have to be in the same sync + // period in order for the light client update proof to be meaningful. + ok, age, err := s.verifySignedHeader(update.AttestedHeader) + if age < 0 { + log.Warn("Future committee update received", "age", age) + } + return ok, err +} diff --git a/beacon/light/committee_chain_test.go b/beacon/light/committee_chain_test.go new file mode 100644 index 0000000000..60ea2a0efd --- /dev/null +++ b/beacon/light/committee_chain_test.go @@ -0,0 +1,356 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package light + +import ( + "crypto/rand" + "testing" + "time" + + "github.com/ethereum/go-ethereum/beacon/params" + "github.com/ethereum/go-ethereum/beacon/types" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/ethdb/memorydb" +) + +var ( + testGenesis = newTestGenesis() + testGenesis2 = newTestGenesis() + + tfBase = newTestForks(testGenesis, types.Forks{ + &types.Fork{Epoch: 0, Version: []byte{0}}, + }) + tfAlternative = newTestForks(testGenesis, types.Forks{ + &types.Fork{Epoch: 0, Version: []byte{0}}, + &types.Fork{Epoch: 0x700, Version: []byte{1}}, + }) + tfAnotherGenesis = newTestForks(testGenesis2, types.Forks{ + &types.Fork{Epoch: 0, Version: []byte{0}}, + }) + + tcBase = newTestCommitteeChain(nil, tfBase, true, 0, 10, 400, false) + tcBaseWithInvalidUpdates = newTestCommitteeChain(tcBase, tfBase, false, 5, 10, 200, false) // signer count too low + tcBaseWithBetterUpdates = newTestCommitteeChain(tcBase, tfBase, false, 5, 10, 440, false) + tcReorgWithWorseUpdates = newTestCommitteeChain(tcBase, tfBase, true, 5, 10, 400, false) + tcReorgWithWorseUpdates2 = newTestCommitteeChain(tcBase, tfBase, true, 5, 10, 380, false) + tcReorgWithBetterUpdates = newTestCommitteeChain(tcBase, tfBase, true, 5, 10, 420, false) + tcReorgWithFinalizedUpdates = newTestCommitteeChain(tcBase, tfBase, true, 5, 10, 400, true) + tcFork = newTestCommitteeChain(tcBase, tfAlternative, true, 7, 10, 400, false) + tcAnotherGenesis = newTestCommitteeChain(nil, tfAnotherGenesis, true, 0, 10, 400, false) +) + +func TestCommitteeChainFixedCommitteeRoots(t *testing.T) { + for _, reload := range []bool{false, true} { + c := newCommitteeChainTest(t, tfBase, 300, true) + c.setClockPeriod(7) + c.addFixedCommitteeRoot(tcBase, 4, nil) + c.addFixedCommitteeRoot(tcBase, 5, nil) + c.addFixedCommitteeRoot(tcBase, 6, nil) + c.addFixedCommitteeRoot(tcBase, 8, ErrInvalidPeriod) // range has to be continuous + c.addFixedCommitteeRoot(tcBase, 3, nil) + c.addFixedCommitteeRoot(tcBase, 2, nil) + if reload { + c.reloadChain() + } + c.addCommittee(tcBase, 4, nil) + c.addCommittee(tcBase, 6, ErrInvalidPeriod) // range has to be continuous + c.addCommittee(tcBase, 5, nil) + c.addCommittee(tcBase, 6, nil) + c.addCommittee(tcAnotherGenesis, 3, ErrWrongCommitteeRoot) + c.addCommittee(tcBase, 3, nil) + if reload { + c.reloadChain() + } + c.verifyRange(tcBase, 3, 6) + } +} + +func TestCommitteeChainCheckpointSync(t *testing.T) { + for _, enforceTime := range []bool{false, true} { + for _, reload := range []bool{false, true} { + c := newCommitteeChainTest(t, tfBase, 300, enforceTime) + if enforceTime { + c.setClockPeriod(6) + } + c.insertUpdate(tcBase, 3, true, ErrInvalidPeriod) + c.addFixedCommitteeRoot(tcBase, 3, nil) + c.addFixedCommitteeRoot(tcBase, 4, nil) + c.insertUpdate(tcBase, 4, true, ErrInvalidPeriod) // still no committee + c.addCommittee(tcBase, 3, nil) + c.addCommittee(tcBase, 4, nil) + if reload { + c.reloadChain() + } + c.verifyRange(tcBase, 3, 4) + c.insertUpdate(tcBase, 3, false, nil) // update can be added without committee here + c.insertUpdate(tcBase, 4, false, ErrNeedCommittee) // but not here as committee 5 is not there yet + c.insertUpdate(tcBase, 4, true, nil) + c.verifyRange(tcBase, 3, 5) + c.insertUpdate(tcBaseWithInvalidUpdates, 5, true, ErrInvalidUpdate) // signer count too low + c.insertUpdate(tcBase, 5, true, nil) + if reload { + c.reloadChain() + } + if enforceTime { + c.insertUpdate(tcBase, 6, true, ErrInvalidUpdate) // future update rejected + c.setClockPeriod(7) + } + c.insertUpdate(tcBase, 6, true, nil) // when the time comes it's accepted + if reload { + c.reloadChain() + } + if enforceTime { + c.verifyRange(tcBase, 3, 6) // committee 7 is there but still in the future + c.setClockPeriod(8) + } + c.verifyRange(tcBase, 3, 7) // now period 7 can also be verified + // try reverse syncing an update + c.insertUpdate(tcBase, 2, false, ErrInvalidPeriod) // fixed committee is needed first + c.addFixedCommitteeRoot(tcBase, 2, nil) + c.addCommittee(tcBase, 2, nil) + c.insertUpdate(tcBase, 2, false, nil) + c.verifyRange(tcBase, 2, 7) + } + } +} + +func TestCommitteeChainReorg(t *testing.T) { + for _, reload := range []bool{false, true} { + for _, addBetterUpdates := range []bool{false, true} { + c := newCommitteeChainTest(t, tfBase, 300, true) + c.setClockPeriod(11) + c.addFixedCommitteeRoot(tcBase, 3, nil) + c.addFixedCommitteeRoot(tcBase, 4, nil) + c.addCommittee(tcBase, 3, nil) + for period := uint64(3); period < 10; period++ { + c.insertUpdate(tcBase, period, true, nil) + } + if reload { + c.reloadChain() + } + c.verifyRange(tcBase, 3, 10) + c.insertUpdate(tcReorgWithWorseUpdates, 5, true, ErrCannotReorg) + c.insertUpdate(tcReorgWithWorseUpdates2, 5, true, ErrCannotReorg) + if addBetterUpdates { + // add better updates for the base chain and expect first reorg to fail + // (only add updates as committees should be the same) + for period := uint64(5); period < 10; period++ { + c.insertUpdate(tcBaseWithBetterUpdates, period, false, nil) + } + if reload { + c.reloadChain() + } + c.verifyRange(tcBase, 3, 10) // still on the same chain + c.insertUpdate(tcReorgWithBetterUpdates, 5, true, ErrCannotReorg) + } else { + // reorg with better updates + c.insertUpdate(tcReorgWithBetterUpdates, 5, false, ErrNeedCommittee) + c.verifyRange(tcBase, 3, 10) // no success yet, still on the base chain + c.verifyRange(tcReorgWithBetterUpdates, 3, 5) + c.insertUpdate(tcReorgWithBetterUpdates, 5, true, nil) + // successful reorg, base chain should only match before the reorg period + if reload { + c.reloadChain() + } + c.verifyRange(tcBase, 3, 5) + c.verifyRange(tcReorgWithBetterUpdates, 3, 6) + for period := uint64(6); period < 10; period++ { + c.insertUpdate(tcReorgWithBetterUpdates, period, true, nil) + } + c.verifyRange(tcReorgWithBetterUpdates, 3, 10) + } + // reorg with finalized updates; should succeed even if base chain updates + // have been improved because a finalized update beats everything else + c.insertUpdate(tcReorgWithFinalizedUpdates, 5, false, ErrNeedCommittee) + c.insertUpdate(tcReorgWithFinalizedUpdates, 5, true, nil) + if reload { + c.reloadChain() + } + c.verifyRange(tcReorgWithFinalizedUpdates, 3, 6) + for period := uint64(6); period < 10; period++ { + c.insertUpdate(tcReorgWithFinalizedUpdates, period, true, nil) + } + c.verifyRange(tcReorgWithFinalizedUpdates, 3, 10) + } + } +} + +func TestCommitteeChainFork(t *testing.T) { + c := newCommitteeChainTest(t, tfAlternative, 300, true) + c.setClockPeriod(11) + // trying to sync a chain on an alternative fork with the base chain data + c.addFixedCommitteeRoot(tcBase, 0, nil) + c.addFixedCommitteeRoot(tcBase, 1, nil) + c.addCommittee(tcBase, 0, nil) + // shared section should sync without errors + for period := uint64(0); period < 7; period++ { + c.insertUpdate(tcBase, period, true, nil) + } + c.insertUpdate(tcBase, 7, true, ErrInvalidUpdate) // wrong fork + // committee root #7 is still the same but signatures are already signed with + // a different fork id so period 7 should only verify on the alternative fork + c.verifyRange(tcBase, 0, 6) + c.verifyRange(tcFork, 0, 7) + for period := uint64(7); period < 10; period++ { + c.insertUpdate(tcFork, period, true, nil) + } + c.verifyRange(tcFork, 0, 10) + // reload the chain while switching to the base fork + c.config = tfBase + c.reloadChain() + // updates 7..9 should be rolled back now + c.verifyRange(tcFork, 0, 6) // again, period 7 only verifies on the right fork + c.verifyRange(tcBase, 0, 7) + c.insertUpdate(tcFork, 7, true, ErrInvalidUpdate) // wrong fork + for period := uint64(7); period < 10; period++ { + c.insertUpdate(tcBase, period, true, nil) + } + c.verifyRange(tcBase, 0, 10) +} + +type committeeChainTest struct { + t *testing.T + db *memorydb.Database + clock *mclock.Simulated + config types.ChainConfig + signerThreshold int + enforceTime bool + chain *CommitteeChain +} + +func newCommitteeChainTest(t *testing.T, config types.ChainConfig, signerThreshold int, enforceTime bool) *committeeChainTest { + c := &committeeChainTest{ + t: t, + db: memorydb.New(), + clock: &mclock.Simulated{}, + config: config, + signerThreshold: signerThreshold, + enforceTime: enforceTime, + } + c.chain = newCommitteeChain(c.db, &config, signerThreshold, enforceTime, dummyVerifier{}, c.clock, func() int64 { return int64(c.clock.Now()) }) + return c +} + +func (c *committeeChainTest) reloadChain() { + c.chain = newCommitteeChain(c.db, &c.config, c.signerThreshold, c.enforceTime, dummyVerifier{}, c.clock, func() int64 { return int64(c.clock.Now()) }) +} + +func (c *committeeChainTest) setClockPeriod(period float64) { + target := mclock.AbsTime(period * float64(time.Second*12*params.SyncPeriodLength)) + wait := time.Duration(target - c.clock.Now()) + if wait < 0 { + c.t.Fatalf("Invalid setClockPeriod") + } + c.clock.Run(wait) +} + +func (c *committeeChainTest) addFixedCommitteeRoot(tc *testCommitteeChain, period uint64, expErr error) { + if err := c.chain.addFixedCommitteeRoot(period, tc.periods[period].committee.Root()); err != expErr { + c.t.Errorf("Incorrect error output from addFixedCommitteeRoot at period %d (expected %v, got %v)", period, expErr, err) + } +} + +func (c *committeeChainTest) addCommittee(tc *testCommitteeChain, period uint64, expErr error) { + if err := c.chain.addCommittee(period, tc.periods[period].committee); err != expErr { + c.t.Errorf("Incorrect error output from addCommittee at period %d (expected %v, got %v)", period, expErr, err) + } +} + +func (c *committeeChainTest) insertUpdate(tc *testCommitteeChain, period uint64, addCommittee bool, expErr error) { + var committee *types.SerializedSyncCommittee + if addCommittee { + committee = tc.periods[period+1].committee + } + if err := c.chain.InsertUpdate(tc.periods[period].update, committee); err != expErr { + c.t.Errorf("Incorrect error output from InsertUpdate at period %d (expected %v, got %v)", period, expErr, err) + } +} + +func (c *committeeChainTest) verifySignedHeader(tc *testCommitteeChain, period float64, expOk bool) { + slot := uint64(period * float64(params.SyncPeriodLength)) + signedHead := GenerateTestSignedHeader(types.Header{Slot: slot}, &tc.config, tc.periods[types.SyncPeriod(slot)].committee, slot+1, 400) + if ok, _, _ := c.chain.VerifySignedHeader(signedHead); ok != expOk { + c.t.Errorf("Incorrect output from VerifySignedHeader at period %f (expected %v, got %v)", period, expOk, ok) + } +} + +func (c *committeeChainTest) verifyRange(tc *testCommitteeChain, begin, end uint64) { + if begin > 0 { + c.verifySignedHeader(tc, float64(begin)-0.5, false) + } + for period := begin; period <= end; period++ { + c.verifySignedHeader(tc, float64(period)+0.5, true) + } + c.verifySignedHeader(tc, float64(end)+1.5, false) +} + +func newTestGenesis() types.ChainConfig { + var config types.ChainConfig + rand.Read(config.GenesisValidatorsRoot[:]) + return config +} + +func newTestForks(config types.ChainConfig, forks types.Forks) types.ChainConfig { + for _, fork := range forks { + config.AddFork(fork.Name, fork.Epoch, fork.Version) + } + return config +} + +func newTestCommitteeChain(parent *testCommitteeChain, config types.ChainConfig, newCommittees bool, begin, end int, signerCount int, finalizedHeader bool) *testCommitteeChain { + tc := &testCommitteeChain{ + config: config, + } + if parent != nil { + tc.periods = make([]testPeriod, len(parent.periods)) + copy(tc.periods, parent.periods) + } + if newCommittees { + if begin == 0 { + tc.fillCommittees(begin, end+1) + } else { + tc.fillCommittees(begin+1, end+1) + } + } + tc.fillUpdates(begin, end, signerCount, finalizedHeader) + return tc +} + +type testPeriod struct { + committee *types.SerializedSyncCommittee + update *types.LightClientUpdate +} + +type testCommitteeChain struct { + periods []testPeriod + config types.ChainConfig +} + +func (tc *testCommitteeChain) fillCommittees(begin, end int) { + if len(tc.periods) <= end { + tc.periods = append(tc.periods, make([]testPeriod, end+1-len(tc.periods))...) + } + for i := begin; i <= end; i++ { + tc.periods[i].committee = GenerateTestCommittee() + } +} + +func (tc *testCommitteeChain) fillUpdates(begin, end int, signerCount int, finalizedHeader bool) { + for i := begin; i <= end; i++ { + tc.periods[i].update = GenerateTestUpdate(&tc.config, uint64(i), tc.periods[i].committee, tc.periods[i+1].committee, signerCount, finalizedHeader) + } +} diff --git a/beacon/light/range.go b/beacon/light/range.go new file mode 100644 index 0000000000..76ebe2381a --- /dev/null +++ b/beacon/light/range.go @@ -0,0 +1,78 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package light + +// periodRange represents a (possibly zero-length) range of integers (sync periods). +type periodRange struct { + Start, End uint64 +} + +// isEmpty returns true if the length of the range is zero. +func (a periodRange) isEmpty() bool { + return a.End == a.Start +} + +// contains returns true if the range includes the given period. +func (a periodRange) contains(period uint64) bool { + return period >= a.Start && period < a.End +} + +// canExpand returns true if the range includes or can be expanded with the given +// period (either the range is empty or the given period is inside, right before or +// right after the range). +func (a periodRange) canExpand(period uint64) bool { + return a.isEmpty() || (period+1 >= a.Start && period <= a.End) +} + +// expand expands the range with the given period. +// This method assumes that canExpand returned true: otherwise this is a no-op. +func (a *periodRange) expand(period uint64) { + if a.isEmpty() { + a.Start, a.End = period, period+1 + return + } + if a.Start == period+1 { + a.Start-- + } + if a.End == period { + a.End++ + } +} + +// split splits the range into two ranges. The 'fromPeriod' will be the first +// element in the second range (if present). +// The original range is unchanged by this operation +func (a *periodRange) split(fromPeriod uint64) (periodRange, periodRange) { + if fromPeriod <= a.Start { + // First range empty, everything in second range, + return periodRange{}, *a + } + if fromPeriod >= a.End { + // Second range empty, everything in first range, + return *a, periodRange{} + } + x := periodRange{a.Start, fromPeriod} + y := periodRange{fromPeriod, a.End} + return x, y +} + +// each invokes the supplied function fn once per period in range +func (a *periodRange) each(fn func(uint64)) { + for p := a.Start; p < a.End; p++ { + fn(p) + } +} diff --git a/beacon/light/test_helpers.go b/beacon/light/test_helpers.go new file mode 100644 index 0000000000..f537d963a6 --- /dev/null +++ b/beacon/light/test_helpers.go @@ -0,0 +1,152 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package light + +import ( + "crypto/rand" + "crypto/sha256" + mrand "math/rand" + + "github.com/ethereum/go-ethereum/beacon/merkle" + "github.com/ethereum/go-ethereum/beacon/params" + "github.com/ethereum/go-ethereum/beacon/types" + "github.com/ethereum/go-ethereum/common" +) + +func GenerateTestCommittee() *types.SerializedSyncCommittee { + s := new(types.SerializedSyncCommittee) + rand.Read(s[:32]) + return s +} + +func GenerateTestUpdate(config *types.ChainConfig, period uint64, committee, nextCommittee *types.SerializedSyncCommittee, signerCount int, finalizedHeader bool) *types.LightClientUpdate { + update := new(types.LightClientUpdate) + update.NextSyncCommitteeRoot = nextCommittee.Root() + var attestedHeader types.Header + if finalizedHeader { + update.FinalizedHeader = new(types.Header) + *update.FinalizedHeader, update.NextSyncCommitteeBranch = makeTestHeaderWithMerkleProof(types.SyncPeriodStart(period)+100, params.StateIndexNextSyncCommittee, merkle.Value(update.NextSyncCommitteeRoot)) + attestedHeader, update.FinalityBranch = makeTestHeaderWithMerkleProof(types.SyncPeriodStart(period)+200, params.StateIndexFinalBlock, merkle.Value(update.FinalizedHeader.Hash())) + } else { + attestedHeader, update.NextSyncCommitteeBranch = makeTestHeaderWithMerkleProof(types.SyncPeriodStart(period)+2000, params.StateIndexNextSyncCommittee, merkle.Value(update.NextSyncCommitteeRoot)) + } + update.AttestedHeader = GenerateTestSignedHeader(attestedHeader, config, committee, attestedHeader.Slot+1, signerCount) + return update +} + +func GenerateTestSignedHeader(header types.Header, config *types.ChainConfig, committee *types.SerializedSyncCommittee, signatureSlot uint64, signerCount int) types.SignedHeader { + bitmask := makeBitmask(signerCount) + signingRoot, _ := config.Forks.SigningRoot(header) + c, _ := dummyVerifier{}.deserializeSyncCommittee(committee) + return types.SignedHeader{ + Header: header, + Signature: types.SyncAggregate{ + Signers: bitmask, + Signature: makeDummySignature(c.(dummySyncCommittee), signingRoot, bitmask), + }, + SignatureSlot: signatureSlot, + } +} + +func GenerateTestCheckpoint(period uint64, committee *types.SerializedSyncCommittee) *types.BootstrapData { + header, branch := makeTestHeaderWithMerkleProof(types.SyncPeriodStart(period)+200, params.StateIndexSyncCommittee, merkle.Value(committee.Root())) + return &types.BootstrapData{ + Header: header, + Committee: committee, + CommitteeRoot: committee.Root(), + CommitteeBranch: branch, + } +} + +func makeBitmask(signerCount int) (bitmask [params.SyncCommitteeBitmaskSize]byte) { + for i := 0; i < params.SyncCommitteeSize; i++ { + if mrand.Intn(params.SyncCommitteeSize-i) < signerCount { + bitmask[i/8] += byte(1) << (i & 7) + signerCount-- + } + } + return +} + +func makeTestHeaderWithMerkleProof(slot, index uint64, value merkle.Value) (types.Header, merkle.Values) { + var branch merkle.Values + hasher := sha256.New() + for index > 1 { + var proofHash merkle.Value + rand.Read(proofHash[:]) + hasher.Reset() + if index&1 == 0 { + hasher.Write(value[:]) + hasher.Write(proofHash[:]) + } else { + hasher.Write(proofHash[:]) + hasher.Write(value[:]) + } + hasher.Sum(value[:0]) + index >>= 1 + branch = append(branch, proofHash) + } + return types.Header{Slot: slot, StateRoot: common.Hash(value)}, branch +} + +// syncCommittee holds either a blsSyncCommittee or a fake dummySyncCommittee used for testing +type syncCommittee interface{} + +// committeeSigVerifier verifies sync committee signatures (either proper BLS +// signatures or fake signatures used for testing) +type committeeSigVerifier interface { + deserializeSyncCommittee(s *types.SerializedSyncCommittee) (syncCommittee, error) + verifySignature(committee syncCommittee, signedRoot common.Hash, aggregate *types.SyncAggregate) bool +} + +// blsVerifier implements committeeSigVerifier +type blsVerifier struct{} + +// deserializeSyncCommittee implements committeeSigVerifier +func (blsVerifier) deserializeSyncCommittee(s *types.SerializedSyncCommittee) (syncCommittee, error) { + return s.Deserialize() +} + +// verifySignature implements committeeSigVerifier +func (blsVerifier) verifySignature(committee syncCommittee, signingRoot common.Hash, aggregate *types.SyncAggregate) bool { + return committee.(*types.SyncCommittee).VerifySignature(signingRoot, aggregate) +} + +type dummySyncCommittee [32]byte + +// dummyVerifier implements committeeSigVerifier +type dummyVerifier struct{} + +// deserializeSyncCommittee implements committeeSigVerifier +func (dummyVerifier) deserializeSyncCommittee(s *types.SerializedSyncCommittee) (syncCommittee, error) { + var sc dummySyncCommittee + copy(sc[:], s[:32]) + return sc, nil +} + +// verifySignature implements committeeSigVerifier +func (dummyVerifier) verifySignature(committee syncCommittee, signingRoot common.Hash, aggregate *types.SyncAggregate) bool { + return aggregate.Signature == makeDummySignature(committee.(dummySyncCommittee), signingRoot, aggregate.Signers) +} + +func makeDummySignature(committee dummySyncCommittee, signingRoot common.Hash, bitmask [params.SyncCommitteeBitmaskSize]byte) (sig [params.BLSSignatureSize]byte) { + for i, b := range committee[:] { + sig[i] = b ^ signingRoot[i] + } + copy(sig[32:], bitmask[:]) + return +} diff --git a/beacon/types/update.go b/beacon/types/light_sync.go similarity index 88% rename from beacon/types/update.go rename to beacon/types/light_sync.go index 06c1b61792..3284081e4d 100644 --- a/beacon/types/update.go +++ b/beacon/types/light_sync.go @@ -25,6 +25,24 @@ import ( "github.com/ethereum/go-ethereum/common" ) +// BootstrapData contains a sync committee where light sync can be started, +// together with a proof through a beacon header and corresponding state. +// Note: BootstrapData is fetched from a server based on a known checkpoint hash. +type BootstrapData struct { + Header Header + CommitteeRoot common.Hash + Committee *SerializedSyncCommittee `rlp:"-"` + CommitteeBranch merkle.Values +} + +// Validate verifies the proof included in BootstrapData. +func (c *BootstrapData) Validate() error { + if c.CommitteeRoot != c.Committee.Root() { + return errors.New("wrong committee root") + } + return merkle.VerifyProof(c.Header.StateRoot, params.StateIndexSyncCommittee, c.CommitteeBranch, merkle.Value(c.CommitteeRoot)) +} + // LightClientUpdate is a proof of the next sync committee root based on a header // signed by the sync committee of the given period. Optionally, the update can // prove quasi-finality by the signed header referring to a previous, finalized diff --git a/build/checksums.txt b/build/checksums.txt index dd8a9cdbf0..96815ff791 100644 --- a/build/checksums.txt +++ b/build/checksums.txt @@ -5,52 +5,53 @@ # https://github.com/ethereum/execution-spec-tests/releases/download/v1.0.6/ 485af7b66cf41eb3a8c1bd46632913b8eb95995df867cf665617bbc9b4beedd1 fixtures_develop.tar.gz -# version:golang 1.21.3 +# version:golang 1.21.6 # https://go.dev/dl/ -186f2b6f8c8b704e696821b09ab2041a5c1ee13dcbc3156a13adcf75931ee488 go1.21.3.src.tar.gz -27014fc69e301d7588a169ca239b3cc609f0aa1abf38528bf0d20d3b259211eb go1.21.3.darwin-amd64.tar.gz -65302a7a9f7a4834932b3a7a14cb8be51beddda757b567a2f9e0cbd0d7b5a6ab go1.21.3.darwin-arm64.tar.gz -8e0cd2f66cf1bde9d07b4aee01e3d7c3cfdd14e20650488e1683da4b8492594a go1.21.3.freebsd-386.tar.gz -6e74f65f586e93d1f3947894766f69e9b2ebda488592a09df61f36f06bfe58a8 go1.21.3.freebsd-amd64.tar.gz -fb209fd070db500a84291c5a95251cceeb1723e8f6142de9baca5af70a927c0e go1.21.3.linux-386.tar.gz -1241381b2843fae5a9707eec1f8fb2ef94d827990582c7c7c32f5bdfbfd420c8 go1.21.3.linux-amd64.tar.gz -fc90fa48ae97ba6368eecb914343590bbb61b388089510d0c56c2dde52987ef3 go1.21.3.linux-arm64.tar.gz -a1ddcaaf0821a12a800884c14cb4268ce1c1f5a0301e9060646f1e15e611c6c7 go1.21.3.linux-armv6l.tar.gz -3b0e10a3704f164a6e85e0377728ec5fd21524fabe4c925610e34076586d5826 go1.21.3.linux-ppc64le.tar.gz -4c78e2e6f4c684a3d5a9bdc97202729053f44eb7be188206f0627ef3e18716b6 go1.21.3.linux-s390x.tar.gz -e36737f4f2fadb4d2f919ec4ce517133a56e06064cca6e82fc883bb000c4d56c go1.21.3.windows-386.zip -27c8daf157493f288d42a6f38debc6a2cb391f6543139eba9152fceca0be2a10 go1.21.3.windows-amd64.zip -bfb7a5c56f9ded07d8ae0e0b3702ac07b65e68fa8f33da24ed6df4ce01fe2c5c go1.21.3.windows-arm64.zip +124926a62e45f78daabbaedb9c011d97633186a33c238ffc1e25320c02046248 go1.21.6.src.tar.gz +31d6ecca09010ab351e51343a5af81d678902061fee871f912bdd5ef4d778850 go1.21.6.darwin-amd64.tar.gz +0ff541fb37c38e5e5c5bcecc8f4f43c5ffd5e3a6c33a5d3e4003ded66fcfb331 go1.21.6.darwin-arm64.tar.gz +a1d1a149b34bf0f53965a237682c6da1140acabb131bf0e597240e4a140b0e5e go1.21.6.freebsd-386.tar.gz +de59e1217e4398b1522eed8dddabab2fa1b97aecbdca3af08e34832b4f0e3f81 go1.21.6.freebsd-amd64.tar.gz +05d09041b5a1193c14e4b2db3f7fcc649b236c567f5eb93305c537851b72dd95 go1.21.6.linux-386.tar.gz +3f934f40ac360b9c01f616a9aa1796d227d8b0328bf64cb045c7b8c4ee9caea4 go1.21.6.linux-amd64.tar.gz +e2e8aa88e1b5170a0d495d7d9c766af2b2b6c6925a8f8956d834ad6b4cacbd9a go1.21.6.linux-arm64.tar.gz +6a8eda6cc6a799ff25e74ce0c13fdc1a76c0983a0bb07c789a2a3454bf6ec9b2 go1.21.6.linux-armv6l.tar.gz +e872b1e9a3f2f08fd4554615a32ca9123a4ba877ab6d19d36abc3424f86bc07f go1.21.6.linux-ppc64le.tar.gz +92894d0f732d3379bc414ffdd617eaadad47e1d72610e10d69a1156db03fc052 go1.21.6.linux-s390x.tar.gz +65b38857135cf45c80e1d267e0ce4f80fe149326c68835217da4f2da9b7943fe go1.21.6.windows-386.zip +27ac9dd6e66fb3fd0acfa6792ff053c86e7d2c055b022f4b5d53bfddec9e3301 go1.21.6.windows-amd64.zip +b93aff8f3c882c764c66a39b7a1483b0460e051e9992bf3435479129e5051bcd go1.21.6.windows-arm64.zip -# version:golangci 1.51.1 +# version:golangci 1.55.2 # https://github.com/golangci/golangci-lint/releases/ -# https://github.com/golangci/golangci-lint/releases/download/v1.51.1/ -fba08acc4027f69f07cef48fbff70b8a7ecdfaa1c2aba9ad3fb31d60d9f5d4bc golangci-lint-1.51.1-darwin-amd64.tar.gz -75b8f0ff3a4e68147156be4161a49d4576f1be37a0b506473f8c482140c1e7f2 golangci-lint-1.51.1-darwin-arm64.tar.gz -e06b3459aaed356e1667580be00b05f41f3b2e29685d12cdee571c23e1edb414 golangci-lint-1.51.1-freebsd-386.tar.gz -623ce2d0fa4d35cc2e8d69fa7334227ab592380962a13b4d9cdc77cf41db2008 golangci-lint-1.51.1-freebsd-amd64.tar.gz -131365feb0584cc2736c43192fa673ca50e5b6b765456990cb379ecfb787e568 golangci-lint-1.51.1-freebsd-armv6.tar.gz -98fb627927cbb654f5bf85dcffc5f646666b2ce96ea0fed977c9fb28abd51532 golangci-lint-1.51.1-freebsd-armv7.tar.gz -b36a99702fa762c15840261bc0fb41b4b1b16b8b19b8c0941bae98c85bb0f8b8 golangci-lint-1.51.1-linux-386.tar.gz -17aeb26c76820c22efa0e1838b0ab93e90cfedef43fbfc9a2f33f27eb9e5e070 golangci-lint-1.51.1-linux-amd64.tar.gz -9744bc34e7b8d82ca788b667bfb7155a39b4be9aef43bf9f10318b1372cea338 golangci-lint-1.51.1-linux-arm64.tar.gz -0dda8dbeb2ff7455a044ec8e347f2fc6d655d2e99d281b3b95e88167031c673d golangci-lint-1.51.1-linux-armv6.tar.gz -0512f311b11d43b8b22989d929f0fe8a2e1e5ebe497f1eb0ff73a0fc3d188fd1 golangci-lint-1.51.1-linux-armv7.tar.gz -d767108dcf84a8eaa844df3454cb0f75a492f4e7102ecc2b0a3545cfe073a566 golangci-lint-1.51.1-linux-loong64.tar.gz -3bd56c54daec16585b2668e0dfabb27af2c2b38cc0fdb46923e2521e1634846b golangci-lint-1.51.1-linux-mips64.tar.gz -f72f5adfa2219e15d2414c9a2966f86e74556cf17a85c727a7fb7770a16cf814 golangci-lint-1.51.1-linux-mips64le.tar.gz -e605521dac98096d8737e1997c954f41f1d0d8275b8731f62783d410c23574b9 golangci-lint-1.51.1-linux-ppc64le.tar.gz -2f683217b814339e74d61ca700922d8407f15addd6d4c5e8b156fbab79f26a87 golangci-lint-1.51.1-linux-riscv64.tar.gz -d98528292b65971a3594e5880530e7624597dc9806fcfccdfbe39be411713d63 golangci-lint-1.51.1-linux-s390x.tar.gz -9bb2d0fe9e692ed0aea4f2537e3e6862b2f6768fe2849a84f4a6ad09da9fd971 golangci-lint-1.51.1-netbsd-386.tar.gz -34cafdcd11ae73ae88d66c33eb8449f5c976fc3e37b44774dbe9c71caa95e592 golangci-lint-1.51.1-netbsd-amd64.tar.gz -f8b4e1e47ac17caafe8a5f32f975a2b6a7cb14c27c0f73c1fb15c20ca91c2e03 golangci-lint-1.51.1-netbsd-armv6.tar.gz -c4f58b7e227b9fd41f0e9310dc83f4a4e7d026598e2f6e95b78761081a6d9bd2 golangci-lint-1.51.1-netbsd-armv7.tar.gz -6710e2f5375dc75521c1a17980a6cbbe6ff76c2f8b852964a8af558899a97cf5 golangci-lint-1.51.1-windows-386.zip -722d7b87b9cdda0a3835d5030b3fc5385c2eba4c107f63f6391cfb2ac35f051d golangci-lint-1.51.1-windows-amd64.zip -eb57f9bcb56646f2e3d6ccaf02ec227815fb05077b2e0b1bf9e755805acdc2b9 golangci-lint-1.51.1-windows-arm64.zip -bce02f7232723cb727755ee11f168a700a00896a25d37f87c4b173bce55596b4 golangci-lint-1.51.1-windows-armv6.zip -cf6403f84707ce8c98664736772271bc8874f2e760c2fd0f00cf3e85963507e9 golangci-lint-1.51.1-windows-armv7.zip +# https://github.com/golangci/golangci-lint/releases/download/v1.55.2/ +632e96e6d5294fbbe7b2c410a49c8fa01c60712a0af85a567de85bcc1623ea21 golangci-lint-1.55.2-darwin-amd64.tar.gz +234463f059249f82045824afdcdd5db5682d0593052f58f6a3039a0a1c3899f6 golangci-lint-1.55.2-darwin-arm64.tar.gz +2bdd105e2d4e003a9058c33a22bb191a1e0f30fa0790acca0d8fbffac1d6247c golangci-lint-1.55.2-freebsd-386.tar.gz +e75056e8b082386676ce23eba455cf893931a792c0d87e1e3743c0aec33c7fb5 golangci-lint-1.55.2-freebsd-amd64.tar.gz +5789b933facaf6136bd23f1d50add67b79bbcf8dfdfc9069a37f729395940a66 golangci-lint-1.55.2-freebsd-armv6.tar.gz +7f21ab1008d05f32c954f99470fc86a83a059e530fe2add1d0b7d8ed4d8992a7 golangci-lint-1.55.2-freebsd-armv7.tar.gz +33ab06139b9219a28251f10821da94423db30285cc2af97494cbb2a281927de9 golangci-lint-1.55.2-illumos-amd64.tar.gz +57ce6f8ce3ad6ee45d7cc3d9a047545a851c2547637834a3fcb086c7b40b1e6b golangci-lint-1.55.2-linux-386.tar.gz +ca21c961a33be3bc15e4292dc40c98c8dcc5463a7b6768a3afc123761630c09c golangci-lint-1.55.2-linux-amd64.tar.gz +8eb0cee9b1dbf0eaa49871798c7f8a5b35f2960c52d776a5f31eb7d886b92746 golangci-lint-1.55.2-linux-arm64.tar.gz +3195f3e0f37d353fd5bd415cabcd4e263f5c29d3d0ffb176c26ff3d2c75eb3bb golangci-lint-1.55.2-linux-armv6.tar.gz +c823ee36eb1a719e171de1f2f5ca3068033dce8d9817232fd10ed71fd6650406 golangci-lint-1.55.2-linux-armv7.tar.gz +758a5d2a356dc494bd13ed4c0d4bf5a54a4dc91267ea5ecdd87b86c7ca0624e7 golangci-lint-1.55.2-linux-loong64.tar.gz +2c7b9abdce7cae802a67d583cd7c6dca520bff6d0e17c8535a918e2f2b437aa0 golangci-lint-1.55.2-linux-mips64.tar.gz +024e0a15b85352cc27271285526e16a4ab66d3e67afbbe446c9808c06cb8dbed golangci-lint-1.55.2-linux-mips64le.tar.gz +6b00f89ba5506c1de1efdd9fa17c54093013a294fefd8b9b31534db626a672ee golangci-lint-1.55.2-linux-ppc64le.tar.gz +0faa0d047d9bf7b703ed3ea65b6117043c93504f9ca1de25ae929d3901c73d4a golangci-lint-1.55.2-linux-riscv64.tar.gz +30dec9b22e7d5bb4e9d5ccea96da20f71cd7db3c8cf30b8ddc7cb9174c4d742a golangci-lint-1.55.2-linux-s390x.tar.gz +5a0ede48f79ad707902fdb29be8cd2abd8302dc122b65ebae3fdfc86751c7698 golangci-lint-1.55.2-netbsd-386.tar.gz +95af20a2e617126dd5b08122ece7819101070e1582a961067ce8c41172f901ad golangci-lint-1.55.2-netbsd-amd64.tar.gz +94fb7dacb7527847cc95d7120904e19a2a0a81a0d50d61766c9e0251da72ab9d golangci-lint-1.55.2-netbsd-armv6.tar.gz +ca906bce5fee9619400e4a321c56476fe4a4efb6ac4fc989d340eb5563348873 golangci-lint-1.55.2-netbsd-armv7.tar.gz +45b442f69fc8915c4500201c0247b7f3f69544dbc9165403a61f9095f2c57355 golangci-lint-1.55.2-windows-386.zip +f57d434d231d43417dfa631587522f8c1991220b43c8ffadb9c7bd279508bf81 golangci-lint-1.55.2-windows-amd64.zip +fd7dc8f4c6829ee6fafb252a4d81d2155cd35da7833665cbb25d53ce7cecd990 golangci-lint-1.55.2-windows-arm64.zip +1892c3c24f9e7ef44b02f6750c703864b6dc350129f3ec39510300007b2376f1 golangci-lint-1.55.2-windows-armv6.zip +a5e68ae73d38748b5269fad36ac7575e3c162a5dc63ef58abdea03cc5da4522a golangci-lint-1.55.2-windows-armv7.zip # This is the builder on PPA that will build Go itself (inception-y), don't modify! # diff --git a/build/ci.go b/build/ci.go index 1e8b6f9d93..2ba3824bb7 100644 --- a/build/ci.go +++ b/build/ci.go @@ -53,6 +53,7 @@ import ( "time" "github.com/cespare/cp" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto/signify" "github.com/ethereum/go-ethereum/internal/build" @@ -288,6 +289,7 @@ func doTest(cmdline []string) { coverage = flag.Bool("coverage", false, "Whether to record code coverage") verbose = flag.Bool("v", false, "Whether to log verbosely") race = flag.Bool("race", false, "Execute the race detector") + short = flag.Bool("short", false, "Pass the 'short'-flag to go test") cachedir = flag.String("cachedir", "./build/cache", "directory for caching downloads") ) flag.CommandLine.Parse(cmdline) @@ -304,11 +306,14 @@ func doTest(cmdline []string) { gotest := tc.Go("test") // CI needs a bit more time for the statetests (default 10m). - gotest.Args = append(gotest.Args, "-timeout=20m") + gotest.Args = append(gotest.Args, "-timeout=50m") // Enable CKZG backend in CI. gotest.Args = append(gotest.Args, "-tags=ckzg") + // Enable integration-tests + gotest.Args = append(gotest.Args, "-tags=integrationtests") + // Test a single package at a time. CI builders are slow // and some tests run into timeouts under load. gotest.Args = append(gotest.Args, "-p", "1") @@ -321,6 +326,9 @@ func doTest(cmdline []string) { if *race { gotest.Args = append(gotest.Args, "-race") } + if *short { + gotest.Args = append(gotest.Args, "-short") + } packages := []string{"./..."} if len(flag.CommandLine.Args()) > 0 { @@ -362,7 +370,7 @@ func doLint(cmdline []string) { linter := downloadLinter(*cachedir) lflags := []string{"run", "--config", ".golangci.yml"} - build.MustRunCommand(linter, append(lflags, packages...)...) + build.MustRunCommandWithOutput(linter, append(lflags, packages...)...) fmt.Println("You have achieved perfection.") } diff --git a/build/update-license.go b/build/update-license.go index 52a54bf66a..70e2de06c7 100644 --- a/build/update-license.go +++ b/build/update-license.go @@ -65,10 +65,8 @@ var ( "vendor/", "tests/testdata/", "build/", // don't relicense vendored sources - "cmd/internal/browser", "common/bitutil/bitutil", "common/prque/", - "consensus/ethash/xor.go", "crypto/blake2b/", "crypto/bn256/", "crypto/bls12381/", @@ -78,6 +76,7 @@ var ( "log/", "metrics/", "signer/rules/deps", + "internal/reexec", // skip special licenses "crypto/secp256k1", // Relicensed to BSD-3 via https://github.com/ethereum/go-ethereum/pull/17225 diff --git a/cmd/abigen/main.go b/cmd/abigen/main.go index 221f45c078..0149dec527 100644 --- a/cmd/abigen/main.go +++ b/cmd/abigen/main.go @@ -232,7 +232,7 @@ func abigen(c *cli.Context) error { } func main() { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelInfo, true))) if err := app.Run(os.Args); err != nil { fmt.Fprintln(os.Stderr, err) diff --git a/cmd/abigen/namefilter_test.go b/cmd/abigen/namefilter_test.go index 42ba55be5e..ccee712018 100644 --- a/cmd/abigen/namefilter_test.go +++ b/cmd/abigen/namefilter_test.go @@ -8,6 +8,7 @@ import ( ) func TestNameFilter(t *testing.T) { + t.Parallel() _, err := newNameFilter("Foo") require.Error(t, err) _, err = newNameFilter("too/many:colons:Foo") diff --git a/cmd/bootnode/main.go b/cmd/bootnode/main.go index 5c1635de39..350b85df1e 100644 --- a/cmd/bootnode/main.go +++ b/cmd/bootnode/main.go @@ -44,7 +44,7 @@ func main() { natdesc = flag.String("nat", "none", "port mapping mechanism (any|none|upnp|pmp|pmp:|extip:)") netrestrict = flag.String("netrestrict", "", "restrict network communication to the given IP networks (CIDR masks)") runv5 = flag.Bool("v5", false, "run a v5 topic discovery bootnode") - verbosity = flag.Int("verbosity", int(log.LvlInfo), "log verbosity (0-5)") + verbosity = flag.Int("verbosity", 3, "log verbosity (0-5)") vmodule = flag.String("vmodule", "", "log verbosity pattern") nodeKey *ecdsa.PrivateKey @@ -52,10 +52,11 @@ func main() { ) flag.Parse() - glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) - glogger.Verbosity(log.Lvl(*verbosity)) + glogger := log.NewGlogHandler(log.NewTerminalHandler(os.Stderr, false)) + slogVerbosity := log.FromLegacyLevel(*verbosity) + glogger.Verbosity(slogVerbosity) glogger.Vmodule(*vmodule) - log.Root().SetHandler(glogger) + log.SetDefault(log.NewLogger(glogger)) natm, err := nat.Parse(*natdesc) if err != nil { diff --git a/cmd/clef/README.md b/cmd/clef/README.md index 85c9c70606..3a43db8c95 100644 --- a/cmd/clef/README.md +++ b/cmd/clef/README.md @@ -2,7 +2,7 @@ Clef can be used to sign transactions and data and is meant as a(n eventual) replacement for Geth's account management. This allows DApps to not depend on Geth's account management. When a DApp wants to sign data (or a transaction), it can send the content to Clef, which will then provide the user with context and asks for permission to sign the content. If the users grants the signing request, Clef will send the signature back to the DApp. -This setup allows a DApp to connect to a remote Ethereum node and send transactions that are locally signed. This can help in situations when a DApp is connected to an untrusted remote Ethereum node, because a local one is not available, not synchronised with the chain, or is a node that has no built-in (or limited) account management. +This setup allows a DApp to connect to a remote Ethereum node and send transactions that are locally signed. This can help in situations when a DApp is connected to an untrusted remote Ethereum node, because a local one is not available, not synchronized with the chain, or is a node that has no built-in (or limited) account management. Clef can run as a daemon on the same machine, off a usb-stick like [USB armory](https://inversepath.com/usbarmory), or even a separate VM in a [QubesOS](https://www.qubes-os.org/) type setup. diff --git a/cmd/clef/consolecmd_test.go b/cmd/clef/consolecmd_test.go index 283d7e8def..c8b37f5b92 100644 --- a/cmd/clef/consolecmd_test.go +++ b/cmd/clef/consolecmd_test.go @@ -26,12 +26,13 @@ import ( // TestImportRaw tests clef --importraw func TestImportRaw(t *testing.T) { + t.Parallel() keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name())) os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777) t.Cleanup(func() { os.Remove(keyPath) }) - t.Parallel() t.Run("happy-path", func(t *testing.T) { + t.Parallel() // Run clef importraw clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath) clef.input("myverylongpassword").input("myverylongpassword") @@ -43,6 +44,7 @@ func TestImportRaw(t *testing.T) { }) // tests clef --importraw with mismatched passwords. t.Run("pw-mismatch", func(t *testing.T) { + t.Parallel() // Run clef importraw clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath) clef.input("myverylongpassword1").input("myverylongpassword2").WaitExit() @@ -52,6 +54,7 @@ func TestImportRaw(t *testing.T) { }) // tests clef --importraw with a too short password. t.Run("short-pw", func(t *testing.T) { + t.Parallel() // Run clef importraw clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath) clef.input("shorty").input("shorty").WaitExit() @@ -64,12 +67,13 @@ func TestImportRaw(t *testing.T) { // TestListAccounts tests clef --list-accounts func TestListAccounts(t *testing.T) { + t.Parallel() keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name())) os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777) t.Cleanup(func() { os.Remove(keyPath) }) - t.Parallel() t.Run("no-accounts", func(t *testing.T) { + t.Parallel() clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "list-accounts") if out := string(clef.Output()); !strings.Contains(out, "The keystore is empty.") { t.Logf("Output\n%v", out) @@ -77,6 +81,7 @@ func TestListAccounts(t *testing.T) { } }) t.Run("one-account", func(t *testing.T) { + t.Parallel() // First, we need to import clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath) clef.input("myverylongpassword").input("myverylongpassword").WaitExit() @@ -91,12 +96,13 @@ func TestListAccounts(t *testing.T) { // TestListWallets tests clef --list-wallets func TestListWallets(t *testing.T) { + t.Parallel() keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name())) os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777) t.Cleanup(func() { os.Remove(keyPath) }) - t.Parallel() t.Run("no-accounts", func(t *testing.T) { + t.Parallel() clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "list-wallets") if out := string(clef.Output()); !strings.Contains(out, "There are no wallets.") { t.Logf("Output\n%v", out) @@ -104,6 +110,7 @@ func TestListWallets(t *testing.T) { } }) t.Run("one-account", func(t *testing.T) { + t.Parallel() // First, we need to import clef := runClef(t, "--suppress-bootwarn", "--lightkdf", "importraw", keyPath) clef.input("myverylongpassword").input("myverylongpassword").WaitExit() diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 06a8cd7ab7..f9b00e4a12 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -492,7 +492,8 @@ func initialize(c *cli.Context) error { if usecolor { output = colorable.NewColorable(logOutput) } - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(c.Int(logLevelFlag.Name)), log.StreamHandler(output, log.TerminalFormat(usecolor)))) + verbosity := log.FromLegacyLevel(c.Int(logLevelFlag.Name)) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(output, verbosity, usecolor))) return nil } @@ -581,6 +582,7 @@ func accountImport(c *cli.Context) error { return err } if first != second { + //lint:ignore ST1005 This is a message for the user return errors.New("Passwords do not match") } acc, err := internalApi.ImportRawKey(hex.EncodeToString(crypto.FromECDSA(pKey)), first) @@ -702,6 +704,7 @@ func signer(c *cli.Context) error { log.Info("Starting signer", "chainid", chainId, "keystore", ksLoc, "light-kdf", lightKdf, "advanced", advanced) am := core.StartClefAccountManager(ksLoc, nousb, lightKdf, scpath) + defer am.Close() apiImpl := core.NewSignerAPI(am, chainId, nousb, ui, db, advanced, pwStorage) // Establish the bidirectional communication, by creating a new UI backend and registering diff --git a/cmd/clef/pythonsigner.py b/cmd/clef/pythonsigner.py index b9ea1e406a..5d0eb18dcc 100644 --- a/cmd/clef/pythonsigner.py +++ b/cmd/clef/pythonsigner.py @@ -91,7 +91,7 @@ def approveTx(self, req): {"jsonrpc":"2.0","id":20,"method":"ui_approveTx","params":[{"transaction":{"from":"0xDEADbEeF000000000000000000000000DeaDbeEf","to":"0xDEADbEeF000000000000000000000000DeaDbeEf","gas":"0x3e8","gasPrice":"0x5","maxFeePerGas":null,"maxPriorityFeePerGas":null,"value":"0x6","nonce":"0x1","data":"0x"},"call_info":null,"meta":{"remote":"clef binary","local":"main","scheme":"in-proc","User-Agent":"","Origin":""}}]} :param transaction: transaction info - :param call_info: info abou the call, e.g. if ABI info could not be + :param call_info: info about the call, e.g. if ABI info could not be :param meta: metadata about the request, e.g. where the call comes from :return: """ # noqa: E501 diff --git a/cmd/clef/run_test.go b/cmd/clef/run_test.go index fc3145b1e0..5fa6e02e14 100644 --- a/cmd/clef/run_test.go +++ b/cmd/clef/run_test.go @@ -21,8 +21,8 @@ import ( "os" "testing" - "github.com/docker/docker/pkg/reexec" "github.com/ethereum/go-ethereum/internal/cmdtest" + "github.com/ethereum/go-ethereum/internal/reexec" ) const registeredName = "clef-test" diff --git a/cmd/devp2p/README.md b/cmd/devp2p/README.md index 5ca7b497a2..284dfe0a45 100644 --- a/cmd/devp2p/README.md +++ b/cmd/devp2p/README.md @@ -108,31 +108,32 @@ Start the test by running `devp2p discv5 test -listen1 127.0.0.1 -listen2 127.0. The Eth Protocol test suite is a conformance test suite for the [eth protocol][eth]. -To run the eth protocol test suite against your implementation, the node needs to be initialized as such: - -1. initialize the geth node with the `genesis.json` file contained in the `testdata` directory -2. import the `halfchain.rlp` file in the `testdata` directory -3. run geth with the following flags: -``` -geth --datadir --nodiscover --nat=none --networkid 19763 --verbosity 5 -``` - -Then, run the following command, replacing `` with the enode of the geth node: - ``` - devp2p rlpx eth-test cmd/devp2p/internal/ethtest/testdata/chain.rlp cmd/devp2p/internal/ethtest/testdata/genesis.json -``` +To run the eth protocol test suite against your implementation, the node needs to be initialized +with our test chain. The chain files are located in `./cmd/devp2p/internal/ethtest/testdata`. + +1. initialize the geth node with the `genesis.json` file +2. import blocks from `chain.rlp` +3. run the client using the resulting database. For geth, use a command like the one below: + + geth \ + --datadir \ + --nodiscover \ + --nat=none \ + --networkid 3503995874084926 \ + --verbosity 5 \ + --authrpc.jwtsecret 0x7365637265747365637265747365637265747365637265747365637265747365 + +Note that the tests also require access to the engine API. +The test suite can now be executed using the devp2p tool. + + devp2p rlpx eth-test \ + --chain internal/ethtest/testdata \ + --node enode://.... \ + --engineapi http://127.0.0.1:8551 \ + --jwtsecret 0x7365637265747365637265747365637265747365637265747365637265747365 Repeat the above process (re-initialising the node) in order to run the Eth Protocol test suite again. -#### Eth66 Test Suite - -The Eth66 test suite is also a conformance test suite for the eth 66 protocol version specifically. -To run the eth66 protocol test suite, initialize a geth node as described above and run the following command, -replacing `` with the enode of the geth node: - - ``` - devp2p rlpx eth66-test cmd/devp2p/internal/ethtest/testdata/chain.rlp cmd/devp2p/internal/ethtest/testdata/genesis.json -``` [eth]: https://github.com/ethereum/devp2p/blob/master/caps/eth.md [dns-tutorial]: https://geth.ethereum.org/docs/developers/geth-developer/dns-discovery-setup diff --git a/cmd/devp2p/discv4cmd.go b/cmd/devp2p/discv4cmd.go index 37b139dea2..45bcdcd367 100644 --- a/cmd/devp2p/discv4cmd.go +++ b/cmd/devp2p/discv4cmd.go @@ -236,7 +236,7 @@ func discv4Crawl(ctx *cli.Context) error { func discv4Test(ctx *cli.Context) error { // Configure test package globals. if !ctx.IsSet(remoteEnodeFlag.Name) { - return fmt.Errorf("Missing -%v", remoteEnodeFlag.Name) + return fmt.Errorf("missing -%v", remoteEnodeFlag.Name) } v4test.Remote = ctx.String(remoteEnodeFlag.Name) v4test.Listen1 = ctx.String(testListen1Flag.Name) diff --git a/cmd/devp2p/dns_route53_test.go b/cmd/devp2p/dns_route53_test.go index e6eb516e6b..af39c70a36 100644 --- a/cmd/devp2p/dns_route53_test.go +++ b/cmd/devp2p/dns_route53_test.go @@ -26,6 +26,7 @@ import ( // This test checks that computeChanges/splitChanges create DNS changes in // leaf-added -> root-changed -> leaf-deleted order. func TestRoute53ChangeSort(t *testing.T) { + t.Parallel() testTree0 := map[string]recordSet{ "2kfjogvxdqtxxugbh7gs7naaai.n": {ttl: 3333, values: []string{ `"enr:-HW4QO1ml1DdXLeZLsUxewnthhUy8eROqkDyoMTyavfks9JlYQIlMFEUoM78PovJDPQrAkrb3LRJ-""vtrymDguKCOIAWAgmlkgnY0iXNlY3AyNTZrMaEDffaGfJzgGhUif1JqFruZlYmA31HzathLSWxfbq_QoQ4"`, @@ -164,6 +165,7 @@ func TestRoute53ChangeSort(t *testing.T) { // This test checks that computeChanges compares the quoted value of the records correctly. func TestRoute53NoChange(t *testing.T) { + t.Parallel() // Existing record set. testTree0 := map[string]recordSet{ "n": {ttl: rootTTL, values: []string{ diff --git a/cmd/devp2p/internal/ethtest/chain.go b/cmd/devp2p/internal/ethtest/chain.go index 938159ec52..e8b3725b17 100644 --- a/cmd/devp2p/internal/ethtest/chain.go +++ b/cmd/devp2p/internal/ethtest/chain.go @@ -17,27 +17,118 @@ package ethtest import ( + "bytes" "compress/gzip" + "crypto/ecdsa" "encoding/json" "errors" "fmt" "io" "math/big" "os" + "path" + "sort" "strings" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/protocols/eth" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" + "golang.org/x/exp/slices" ) +// Chain is a lightweight blockchain-like store which can read a hivechain +// created chain. type Chain struct { - genesis core.Genesis - blocks []*types.Block - chainConfig *params.ChainConfig + genesis core.Genesis + blocks []*types.Block + state map[common.Address]state.DumpAccount // state of head block + senders map[common.Address]*senderInfo + config *params.ChainConfig +} + +// NewChain takes the given chain.rlp file, and decodes and returns +// the blocks from the file. +func NewChain(dir string) (*Chain, error) { + gen, err := loadGenesis(path.Join(dir, "genesis.json")) + if err != nil { + return nil, err + } + gblock := gen.ToBlock() + + blocks, err := blocksFromFile(path.Join(dir, "chain.rlp"), gblock) + if err != nil { + return nil, err + } + state, err := readState(path.Join(dir, "headstate.json")) + if err != nil { + return nil, err + } + accounts, err := readAccounts(path.Join(dir, "accounts.json")) + if err != nil { + return nil, err + } + return &Chain{ + genesis: gen, + blocks: blocks, + state: state, + senders: accounts, + config: gen.Config, + }, nil +} + +// senderInfo is an account record as output in the "accounts.json" file from +// hivechain. +type senderInfo struct { + Key *ecdsa.PrivateKey `json:"key"` + Nonce uint64 `json:"nonce"` +} + +// Head returns the chain head. +func (c *Chain) Head() *types.Block { + return c.blocks[c.Len()-1] +} + +// AccountsInHashOrder returns all accounts of the head state, ordered by hash of address. +func (c *Chain) AccountsInHashOrder() []state.DumpAccount { + list := make([]state.DumpAccount, len(c.state)) + i := 0 + for addr, acc := range c.state { + addr := addr + list[i] = acc + list[i].Address = &addr + if len(acc.AddressHash) != 32 { + panic(fmt.Errorf("missing/invalid SecureKey in dump account %v", addr)) + } + i++ + } + slices.SortFunc(list, func(x, y state.DumpAccount) int { + return bytes.Compare(x.AddressHash, y.AddressHash) + }) + return list +} + +// CodeHashes returns all bytecode hashes contained in the head state. +func (c *Chain) CodeHashes() []common.Hash { + var hashes []common.Hash + seen := make(map[common.Hash]struct{}) + seen[types.EmptyCodeHash] = struct{}{} + for _, acc := range c.state { + h := common.BytesToHash(acc.CodeHash) + if _, ok := seen[h]; ok { + continue + } + hashes = append(hashes, h) + seen[h] = struct{}{} + } + slices.SortFunc(hashes, (common.Hash).Cmp) + return hashes } // Len returns the length of the chain. @@ -45,6 +136,11 @@ func (c *Chain) Len() int { return len(c.blocks) } +// ForkID gets the fork id of the chain. +func (c *Chain) ForkID() forkid.ID { + return forkid.NewID(c.config, c.blocks[0], uint64(c.Len()), c.blocks[c.Len()-1].Time()) +} + // TD calculates the total difficulty of the chain at the // chain head. func (c *Chain) TD() *big.Int { @@ -55,19 +151,12 @@ func (c *Chain) TD() *big.Int { return sum } -// TotalDifficultyAt calculates the total difficulty of the chain -// at the given block height. -func (c *Chain) TotalDifficultyAt(height int) *big.Int { - sum := new(big.Int) - if height >= c.Len() { - return sum - } - for _, block := range c.blocks[:height+1] { - sum.Add(sum, block.Difficulty()) - } - return sum +// GetBlock returns the block at the specified number. +func (c *Chain) GetBlock(number int) *types.Block { + return c.blocks[number] } +// RootAt returns the state root for the block at the given height. func (c *Chain) RootAt(height int) common.Hash { if height < c.Len() { return c.blocks[height].Root() @@ -75,37 +164,56 @@ func (c *Chain) RootAt(height int) common.Hash { return common.Hash{} } -// ForkID gets the fork id of the chain. -func (c *Chain) ForkID() forkid.ID { - return forkid.NewID(c.chainConfig, c.blocks[0], uint64(c.Len()), c.blocks[0].Time()) +// GetSender returns the address associated with account at the index in the +// pre-funded accounts list. +func (c *Chain) GetSender(idx int) (common.Address, uint64) { + var accounts Addresses + for addr := range c.senders { + accounts = append(accounts, addr) + } + sort.Sort(accounts) + addr := accounts[idx] + return addr, c.senders[addr].Nonce } -// Shorten returns a copy chain of a desired height from the imported -func (c *Chain) Shorten(height int) *Chain { - blocks := make([]*types.Block, height) - copy(blocks, c.blocks[:height]) +// IncNonce increases the specified signing account's pending nonce. +func (c *Chain) IncNonce(addr common.Address, amt uint64) { + if _, ok := c.senders[addr]; !ok { + panic("nonce increment for non-signer") + } + c.senders[addr].Nonce += amt +} - config := *c.chainConfig - return &Chain{ - blocks: blocks, - chainConfig: &config, +// Balance returns the balance of an account at the head of the chain. +func (c *Chain) Balance(addr common.Address) *big.Int { + bal := new(big.Int) + if acc, ok := c.state[addr]; ok { + bal, _ = bal.SetString(acc.Balance, 10) } + return bal } -// Head returns the chain head. -func (c *Chain) Head() *types.Block { - return c.blocks[c.Len()-1] +// SignTx signs a transaction for the specified from account, so long as that +// account was in the hivechain accounts dump. +func (c *Chain) SignTx(from common.Address, tx *types.Transaction) (*types.Transaction, error) { + signer := types.LatestSigner(c.config) + acc, ok := c.senders[from] + if !ok { + return nil, fmt.Errorf("account not available for signing: %s", from) + } + return types.SignTx(tx, signer, acc.Key) } -func (c *Chain) GetHeaders(req *GetBlockHeaders) ([]*types.Header, error) { +// GetHeaders returns the headers base on an ethGetPacketHeadersPacket. +func (c *Chain) GetHeaders(req *eth.GetBlockHeadersPacket) ([]*types.Header, error) { if req.Amount < 1 { return nil, errors.New("no block headers requested") } - - headers := make([]*types.Header, req.Amount) - var blockNumber uint64 - - // range over blocks to check if our chain has the requested header + var ( + headers = make([]*types.Header, req.Amount) + blockNumber uint64 + ) + // Range over blocks to check if our chain has the requested header. for _, block := range c.blocks { if block.Hash() == req.Origin.Hash || block.Number().Uint64() == req.Origin.Number { headers[0] = block.Header() @@ -115,40 +223,30 @@ func (c *Chain) GetHeaders(req *GetBlockHeaders) ([]*types.Header, error) { if headers[0] == nil { return nil, fmt.Errorf("no headers found for given origin number %v, hash %v", req.Origin.Number, req.Origin.Hash) } - if req.Reverse { for i := 1; i < int(req.Amount); i++ { blockNumber -= (1 - req.Skip) headers[i] = c.blocks[blockNumber].Header() } - return headers, nil } - for i := 1; i < int(req.Amount); i++ { blockNumber += (1 + req.Skip) headers[i] = c.blocks[blockNumber].Header() } - return headers, nil } -// loadChain takes the given chain.rlp file, and decodes and returns -// the blocks from the file. -func loadChain(chainfile string, genesis string) (*Chain, error) { - gen, err := loadGenesis(genesis) - if err != nil { - return nil, err - } - gblock := gen.ToBlock() +// Shorten returns a copy chain of a desired height from the imported +func (c *Chain) Shorten(height int) *Chain { + blocks := make([]*types.Block, height) + copy(blocks, c.blocks[:height]) - blocks, err := blocksFromFile(chainfile, gblock) - if err != nil { - return nil, err + config := *c.config + return &Chain{ + blocks: blocks, + config: &config, } - - c := &Chain{genesis: gen, blocks: blocks, chainConfig: gen.Config} - return c, nil } func loadGenesis(genesisFile string) (core.Genesis, error) { @@ -163,6 +261,22 @@ func loadGenesis(genesisFile string) (core.Genesis, error) { return gen, nil } +type Addresses []common.Address + +func (a Addresses) Len() int { + return len(a) +} + +func (a Addresses) Less(i, j int) bool { + return bytes.Compare(a[i][:], a[j][:]) < 0 +} + +func (a Addresses) Swap(i, j int) { + tmp := a[i] + a[i] = a[j] + a[j] = tmp +} + func blocksFromFile(chainfile string, gblock *types.Block) ([]*types.Block, error) { // Load chain.rlp. fh, err := os.Open(chainfile) @@ -193,3 +307,47 @@ func blocksFromFile(chainfile string, gblock *types.Block) ([]*types.Block, erro } return blocks, nil } + +func readState(file string) (map[common.Address]state.DumpAccount, error) { + f, err := os.ReadFile(file) + if err != nil { + return nil, fmt.Errorf("unable to read state: %v", err) + } + var dump state.Dump + if err := json.Unmarshal(f, &dump); err != nil { + return nil, fmt.Errorf("unable to unmarshal state: %v", err) + } + + state := make(map[common.Address]state.DumpAccount) + for key, acct := range dump.Accounts { + var addr common.Address + if err := addr.UnmarshalText([]byte(key)); err != nil { + return nil, fmt.Errorf("invalid address %q", key) + } + state[addr] = acct + } + return state, nil +} + +func readAccounts(file string) (map[common.Address]*senderInfo, error) { + f, err := os.ReadFile(file) + if err != nil { + return nil, fmt.Errorf("unable to read state: %v", err) + } + type account struct { + Key hexutil.Bytes `json:"key"` + } + keys := make(map[common.Address]account) + if err := json.Unmarshal(f, &keys); err != nil { + return nil, fmt.Errorf("unable to unmarshal accounts: %v", err) + } + accounts := make(map[common.Address]*senderInfo) + for addr, acc := range keys { + pk, err := crypto.HexToECDSA(common.Bytes2Hex(acc.Key)) + if err != nil { + return nil, fmt.Errorf("unable to read private key for %s: %v", err, addr) + } + accounts[addr] = &senderInfo{Key: pk, Nonce: 0} + } + return accounts, nil +} diff --git a/cmd/devp2p/internal/ethtest/chain_test.go b/cmd/devp2p/internal/ethtest/chain_test.go index de6acfdcda..62bd6d26ea 100644 --- a/cmd/devp2p/internal/ethtest/chain_test.go +++ b/cmd/devp2p/internal/ethtest/chain_test.go @@ -30,6 +30,7 @@ import ( // TestEthProtocolNegotiation tests whether the test suite // can negotiate the highest eth protocol in a status message exchange func TestEthProtocolNegotiation(t *testing.T) { + t.Parallel() var tests = []struct { conn *Conn caps []p2p.Cap @@ -122,29 +123,26 @@ func TestEthProtocolNegotiation(t *testing.T) { } } -// TestChain_GetHeaders tests whether the test suite can correctly +// TestChainGetHeaders tests whether the test suite can correctly // respond to a GetBlockHeaders request from a node. -func TestChain_GetHeaders(t *testing.T) { - chainFile, err := filepath.Abs("./testdata/chain.rlp") - if err != nil { - t.Fatal(err) - } - genesisFile, err := filepath.Abs("./testdata/genesis.json") +func TestChainGetHeaders(t *testing.T) { + t.Parallel() + + dir, err := filepath.Abs("./testdata") if err != nil { t.Fatal(err) } - - chain, err := loadChain(chainFile, genesisFile) + chain, err := NewChain(dir) if err != nil { t.Fatal(err) } var tests = []struct { - req GetBlockHeaders + req eth.GetBlockHeadersPacket expected []*types.Header }{ { - req: GetBlockHeaders{ + req: eth.GetBlockHeadersPacket{ GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ Origin: eth.HashOrNumber{Number: uint64(2)}, Amount: uint64(5), @@ -161,7 +159,7 @@ func TestChain_GetHeaders(t *testing.T) { }, }, { - req: GetBlockHeaders{ + req: eth.GetBlockHeadersPacket{ GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ Origin: eth.HashOrNumber{Number: uint64(chain.Len() - 1)}, Amount: uint64(3), @@ -176,7 +174,7 @@ func TestChain_GetHeaders(t *testing.T) { }, }, { - req: GetBlockHeaders{ + req: eth.GetBlockHeadersPacket{ GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ Origin: eth.HashOrNumber{Hash: chain.Head().Hash()}, Amount: uint64(1), diff --git a/cmd/devp2p/internal/ethtest/conn.go b/cmd/devp2p/internal/ethtest/conn.go new file mode 100644 index 0000000000..2d36ccb423 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/conn.go @@ -0,0 +1,361 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package ethtest + +import ( + "crypto/ecdsa" + "errors" + "fmt" + "net" + "reflect" + "time" + + "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/protocols/eth" + "github.com/ethereum/go-ethereum/eth/protocols/snap" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/rlpx" + "github.com/ethereum/go-ethereum/rlp" +) + +var ( + pretty = spew.ConfigState{ + Indent: " ", + DisableCapacities: true, + DisablePointerAddresses: true, + SortKeys: true, + } + timeout = 2 * time.Second +) + +// dial attempts to dial the given node and perform a handshake, returning the +// created Conn if successful. +func (s *Suite) dial() (*Conn, error) { + key, _ := crypto.GenerateKey() + return s.dialAs(key) +} + +// dialAs attempts to dial a given node and perform a handshake using the given +// private key. +func (s *Suite) dialAs(key *ecdsa.PrivateKey) (*Conn, error) { + fd, err := net.Dial("tcp", fmt.Sprintf("%v:%d", s.Dest.IP(), s.Dest.TCP())) + if err != nil { + return nil, err + } + conn := Conn{Conn: rlpx.NewConn(fd, s.Dest.Pubkey())} + conn.ourKey = key + _, err = conn.Handshake(conn.ourKey) + if err != nil { + conn.Close() + return nil, err + } + conn.caps = []p2p.Cap{ + {Name: "eth", Version: 67}, + {Name: "eth", Version: 68}, + } + conn.ourHighestProtoVersion = 68 + return &conn, nil +} + +// dialSnap creates a connection with snap/1 capability. +func (s *Suite) dialSnap() (*Conn, error) { + conn, err := s.dial() + if err != nil { + return nil, fmt.Errorf("dial failed: %v", err) + } + conn.caps = append(conn.caps, p2p.Cap{Name: "snap", Version: 1}) + conn.ourHighestSnapProtoVersion = 1 + return conn, nil +} + +// Conn represents an individual connection with a peer +type Conn struct { + *rlpx.Conn + ourKey *ecdsa.PrivateKey + negotiatedProtoVersion uint + negotiatedSnapProtoVersion uint + ourHighestProtoVersion uint + ourHighestSnapProtoVersion uint + caps []p2p.Cap +} + +// Read reads a packet from the connection. +func (c *Conn) Read() (uint64, []byte, error) { + c.SetReadDeadline(time.Now().Add(timeout)) + code, data, _, err := c.Conn.Read() + if err != nil { + return 0, nil, err + } + return code, data, nil +} + +// ReadMsg attempts to read a devp2p message with a specific code. +func (c *Conn) ReadMsg(proto Proto, code uint64, msg any) error { + c.SetReadDeadline(time.Now().Add(timeout)) + for { + got, data, err := c.Read() + if err != nil { + return err + } + if protoOffset(proto)+code == got { + return rlp.DecodeBytes(data, msg) + } + } +} + +// Write writes a eth packet to the connection. +func (c *Conn) Write(proto Proto, code uint64, msg any) error { + c.SetWriteDeadline(time.Now().Add(timeout)) + payload, err := rlp.EncodeToBytes(msg) + if err != nil { + return err + } + _, err = c.Conn.Write(protoOffset(proto)+code, payload) + return err +} + +// ReadEth reads an Eth sub-protocol wire message. +func (c *Conn) ReadEth() (any, error) { + c.SetReadDeadline(time.Now().Add(timeout)) + for { + code, data, _, err := c.Conn.Read() + if err != nil { + return nil, err + } + if code == pingMsg { + c.Write(baseProto, pongMsg, []byte{}) + continue + } + if getProto(code) != ethProto { + // Read until eth message. + continue + } + code -= baseProtoLen + + var msg any + switch int(code) { + case eth.StatusMsg: + msg = new(eth.StatusPacket) + case eth.GetBlockHeadersMsg: + msg = new(eth.GetBlockHeadersPacket) + case eth.BlockHeadersMsg: + msg = new(eth.BlockHeadersPacket) + case eth.GetBlockBodiesMsg: + msg = new(eth.GetBlockBodiesPacket) + case eth.BlockBodiesMsg: + msg = new(eth.BlockBodiesPacket) + case eth.NewBlockMsg: + msg = new(eth.NewBlockPacket) + case eth.NewBlockHashesMsg: + msg = new(eth.NewBlockHashesPacket) + case eth.TransactionsMsg: + msg = new(eth.TransactionsPacket) + case eth.NewPooledTransactionHashesMsg: + msg = new(eth.NewPooledTransactionHashesPacket68) + case eth.GetPooledTransactionsMsg: + msg = new(eth.GetPooledTransactionsPacket) + case eth.PooledTransactionsMsg: + msg = new(eth.PooledTransactionsPacket) + default: + panic(fmt.Sprintf("unhandled eth msg code %d", code)) + } + if err := rlp.DecodeBytes(data, msg); err != nil { + return nil, fmt.Errorf("unable to decode eth msg: %v", err) + } + return msg, nil + } +} + +// ReadSnap reads a snap/1 response with the given id from the connection. +func (c *Conn) ReadSnap() (any, error) { + c.SetReadDeadline(time.Now().Add(timeout)) + for { + code, data, _, err := c.Conn.Read() + if err != nil { + return nil, err + } + if getProto(code) != snapProto { + // Read until snap message. + continue + } + code -= baseProtoLen + ethProtoLen + + var msg any + switch int(code) { + case snap.GetAccountRangeMsg: + msg = new(snap.GetAccountRangePacket) + case snap.AccountRangeMsg: + msg = new(snap.AccountRangePacket) + case snap.GetStorageRangesMsg: + msg = new(snap.GetStorageRangesPacket) + case snap.StorageRangesMsg: + msg = new(snap.StorageRangesPacket) + case snap.GetByteCodesMsg: + msg = new(snap.GetByteCodesPacket) + case snap.ByteCodesMsg: + msg = new(snap.ByteCodesPacket) + case snap.GetTrieNodesMsg: + msg = new(snap.GetTrieNodesPacket) + case snap.TrieNodesMsg: + msg = new(snap.TrieNodesPacket) + default: + panic(fmt.Errorf("unhandled snap code: %d", code)) + } + if err := rlp.DecodeBytes(data, msg); err != nil { + return nil, fmt.Errorf("could not rlp decode message: %v", err) + } + return msg, nil + } +} + +// peer performs both the protocol handshake and the status message +// exchange with the node in order to peer with it. +func (c *Conn) peer(chain *Chain, status *eth.StatusPacket) error { + if err := c.handshake(); err != nil { + return fmt.Errorf("handshake failed: %v", err) + } + if err := c.statusExchange(chain, status); err != nil { + return fmt.Errorf("status exchange failed: %v", err) + } + return nil +} + +// handshake performs a protocol handshake with the node. +func (c *Conn) handshake() error { + // Write hello to client. + pub0 := crypto.FromECDSAPub(&c.ourKey.PublicKey)[1:] + ourHandshake := &protoHandshake{ + Version: 5, + Caps: c.caps, + ID: pub0, + } + if err := c.Write(baseProto, handshakeMsg, ourHandshake); err != nil { + return fmt.Errorf("write to connection failed: %v", err) + } + // Read hello from client. + code, data, err := c.Read() + if err != nil { + return fmt.Errorf("erroring reading handshake: %v", err) + } + switch code { + case handshakeMsg: + msg := new(protoHandshake) + if err := rlp.DecodeBytes(data, &msg); err != nil { + return fmt.Errorf("error decoding handshake msg: %v", err) + } + // Set snappy if version is at least 5. + if msg.Version >= 5 { + c.SetSnappy(true) + } + c.negotiateEthProtocol(msg.Caps) + if c.negotiatedProtoVersion == 0 { + return fmt.Errorf("could not negotiate eth protocol (remote caps: %v, local eth version: %v)", msg.Caps, c.ourHighestProtoVersion) + } + // If we require snap, verify that it was negotiated. + if c.ourHighestSnapProtoVersion != c.negotiatedSnapProtoVersion { + return fmt.Errorf("could not negotiate snap protocol (remote caps: %v, local snap version: %v)", msg.Caps, c.ourHighestSnapProtoVersion) + } + return nil + default: + return fmt.Errorf("bad handshake: got msg code %d", code) + } +} + +// negotiateEthProtocol sets the Conn's eth protocol version to highest +// advertised capability from peer. +func (c *Conn) negotiateEthProtocol(caps []p2p.Cap) { + var highestEthVersion uint + var highestSnapVersion uint + for _, capability := range caps { + switch capability.Name { + case "eth": + if capability.Version > highestEthVersion && capability.Version <= c.ourHighestProtoVersion { + highestEthVersion = capability.Version + } + case "snap": + if capability.Version > highestSnapVersion && capability.Version <= c.ourHighestSnapProtoVersion { + highestSnapVersion = capability.Version + } + } + } + c.negotiatedProtoVersion = highestEthVersion + c.negotiatedSnapProtoVersion = highestSnapVersion +} + +// statusExchange performs a `Status` message exchange with the given node. +func (c *Conn) statusExchange(chain *Chain, status *eth.StatusPacket) error { +loop: + for { + code, data, err := c.Read() + if err != nil { + return fmt.Errorf("failed to read from connection: %w", err) + } + switch code { + case eth.StatusMsg + protoOffset(ethProto): + msg := new(eth.StatusPacket) + if err := rlp.DecodeBytes(data, &msg); err != nil { + return fmt.Errorf("error decoding status packet: %w", err) + } + if have, want := msg.Head, chain.blocks[chain.Len()-1].Hash(); have != want { + return fmt.Errorf("wrong head block in status, want: %#x (block %d) have %#x", + want, chain.blocks[chain.Len()-1].NumberU64(), have) + } + if have, want := msg.TD.Cmp(chain.TD()), 0; have != want { + return fmt.Errorf("wrong TD in status: have %v want %v", have, want) + } + if have, want := msg.ForkID, chain.ForkID(); !reflect.DeepEqual(have, want) { + return fmt.Errorf("wrong fork ID in status: have %v, want %v", have, want) + } + if have, want := msg.ProtocolVersion, c.ourHighestProtoVersion; have != uint32(want) { + return fmt.Errorf("wrong protocol version: have %v, want %v", have, want) + } + break loop + case discMsg: + var msg []p2p.DiscReason + if rlp.DecodeBytes(data, &msg); len(msg) == 0 { + return errors.New("invalid disconnect message") + } + return fmt.Errorf("disconnect received: %v", pretty.Sdump(msg)) + case pingMsg: + // TODO (renaynay): in the future, this should be an error + // (PINGs should not be a response upon fresh connection) + c.Write(baseProto, pongMsg, nil) + default: + return fmt.Errorf("bad status message: code %d", code) + } + } + // make sure eth protocol version is set for negotiation + if c.negotiatedProtoVersion == 0 { + return errors.New("eth protocol version must be set in Conn") + } + if status == nil { + // default status message + status = ð.StatusPacket{ + ProtocolVersion: uint32(c.negotiatedProtoVersion), + NetworkID: chain.config.ChainID.Uint64(), + TD: chain.TD(), + Head: chain.blocks[chain.Len()-1].Hash(), + Genesis: chain.blocks[0].Hash(), + ForkID: chain.ForkID(), + } + } + if err := c.Write(ethProto, eth.StatusMsg, status); err != nil { + return fmt.Errorf("write to connection failed: %v", err) + } + return nil +} diff --git a/cmd/devp2p/internal/ethtest/engine.go b/cmd/devp2p/internal/ethtest/engine.go new file mode 100644 index 0000000000..ea4fc76e6f --- /dev/null +++ b/cmd/devp2p/internal/ethtest/engine.go @@ -0,0 +1,69 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package ethtest + +import ( + "bytes" + "fmt" + "io" + "net/http" + "os" + "path" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/golang-jwt/jwt/v4" +) + +// EngineClient is a wrapper around engine-related data. +type EngineClient struct { + url string + jwt [32]byte + headfcu []byte +} + +// NewEngineClient creates a new engine client. +func NewEngineClient(dir, url, jwt string) (*EngineClient, error) { + headfcu, err := os.ReadFile(path.Join(dir, "headfcu.json")) + if err != nil { + return nil, fmt.Errorf("failed to read headfcu: %w", err) + } + return &EngineClient{url, common.HexToHash(jwt), headfcu}, nil +} + +// token returns the jwt claim token for authorization. +func (ec *EngineClient) token() string { + claims := jwt.RegisteredClaims{IssuedAt: jwt.NewNumericDate(time.Now())} + token, _ := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(ec.jwt[:]) + return token +} + +// sendForkchoiceUpdated sends an fcu for the head of the generated chain. +func (ec *EngineClient) sendForkchoiceUpdated() error { + var ( + req, _ = http.NewRequest(http.MethodPost, ec.url, io.NopCloser(bytes.NewReader(ec.headfcu))) + header = make(http.Header) + ) + // Set header + header.Set("accept", "application/json") + header.Set("content-type", "application/json") + header.Set("Authorization", fmt.Sprintf("Bearer %v", ec.token())) + req.Header = header + + _, err := new(http.Client).Do(req) + return err +} diff --git a/cmd/devp2p/internal/ethtest/helpers.go b/cmd/devp2p/internal/ethtest/helpers.go deleted file mode 100644 index a0339b88cb..0000000000 --- a/cmd/devp2p/internal/ethtest/helpers.go +++ /dev/null @@ -1,650 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package ethtest - -import ( - "errors" - "fmt" - "net" - "reflect" - "strings" - "time" - - "github.com/davecgh/go-spew/spew" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/eth/protocols/eth" - "github.com/ethereum/go-ethereum/internal/utesting" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/rlpx" -) - -var ( - pretty = spew.ConfigState{ - Indent: " ", - DisableCapacities: true, - DisablePointerAddresses: true, - SortKeys: true, - } - timeout = 20 * time.Second -) - -// dial attempts to dial the given node and perform a handshake, -// returning the created Conn if successful. -func (s *Suite) dial() (*Conn, error) { - // dial - fd, err := net.Dial("tcp", fmt.Sprintf("%v:%d", s.Dest.IP(), s.Dest.TCP())) - if err != nil { - return nil, err - } - conn := Conn{Conn: rlpx.NewConn(fd, s.Dest.Pubkey())} - // do encHandshake - conn.ourKey, _ = crypto.GenerateKey() - _, err = conn.Handshake(conn.ourKey) - if err != nil { - conn.Close() - return nil, err - } - // set default p2p capabilities - conn.caps = []p2p.Cap{ - {Name: "eth", Version: 67}, - {Name: "eth", Version: 68}, - } - conn.ourHighestProtoVersion = 68 - return &conn, nil -} - -// dialSnap creates a connection with snap/1 capability. -func (s *Suite) dialSnap() (*Conn, error) { - conn, err := s.dial() - if err != nil { - return nil, fmt.Errorf("dial failed: %v", err) - } - conn.caps = append(conn.caps, p2p.Cap{Name: "snap", Version: 1}) - conn.ourHighestSnapProtoVersion = 1 - return conn, nil -} - -// peer performs both the protocol handshake and the status message -// exchange with the node in order to peer with it. -func (c *Conn) peer(chain *Chain, status *Status) error { - if err := c.handshake(); err != nil { - return fmt.Errorf("handshake failed: %v", err) - } - if _, err := c.statusExchange(chain, status); err != nil { - return fmt.Errorf("status exchange failed: %v", err) - } - return nil -} - -// handshake performs a protocol handshake with the node. -func (c *Conn) handshake() error { - defer c.SetDeadline(time.Time{}) - c.SetDeadline(time.Now().Add(10 * time.Second)) - // write hello to client - pub0 := crypto.FromECDSAPub(&c.ourKey.PublicKey)[1:] - ourHandshake := &Hello{ - Version: 5, - Caps: c.caps, - ID: pub0, - } - if err := c.Write(ourHandshake); err != nil { - return fmt.Errorf("write to connection failed: %v", err) - } - // read hello from client - switch msg := c.Read().(type) { - case *Hello: - // set snappy if version is at least 5 - if msg.Version >= 5 { - c.SetSnappy(true) - } - c.negotiateEthProtocol(msg.Caps) - if c.negotiatedProtoVersion == 0 { - return fmt.Errorf("could not negotiate eth protocol (remote caps: %v, local eth version: %v)", msg.Caps, c.ourHighestProtoVersion) - } - // If we require snap, verify that it was negotiated - if c.ourHighestSnapProtoVersion != c.negotiatedSnapProtoVersion { - return fmt.Errorf("could not negotiate snap protocol (remote caps: %v, local snap version: %v)", msg.Caps, c.ourHighestSnapProtoVersion) - } - return nil - default: - return fmt.Errorf("bad handshake: %#v", msg) - } -} - -// negotiateEthProtocol sets the Conn's eth protocol version to highest -// advertised capability from peer. -func (c *Conn) negotiateEthProtocol(caps []p2p.Cap) { - var highestEthVersion uint - var highestSnapVersion uint - for _, capability := range caps { - switch capability.Name { - case "eth": - if capability.Version > highestEthVersion && capability.Version <= c.ourHighestProtoVersion { - highestEthVersion = capability.Version - } - case "snap": - if capability.Version > highestSnapVersion && capability.Version <= c.ourHighestSnapProtoVersion { - highestSnapVersion = capability.Version - } - } - } - c.negotiatedProtoVersion = highestEthVersion - c.negotiatedSnapProtoVersion = highestSnapVersion -} - -// statusExchange performs a `Status` message exchange with the given node. -func (c *Conn) statusExchange(chain *Chain, status *Status) (Message, error) { - defer c.SetDeadline(time.Time{}) - c.SetDeadline(time.Now().Add(20 * time.Second)) - - // read status message from client - var message Message -loop: - for { - switch msg := c.Read().(type) { - case *Status: - if have, want := msg.Head, chain.blocks[chain.Len()-1].Hash(); have != want { - return nil, fmt.Errorf("wrong head block in status, want: %#x (block %d) have %#x", - want, chain.blocks[chain.Len()-1].NumberU64(), have) - } - if have, want := msg.TD.Cmp(chain.TD()), 0; have != want { - return nil, fmt.Errorf("wrong TD in status: have %v want %v", have, want) - } - if have, want := msg.ForkID, chain.ForkID(); !reflect.DeepEqual(have, want) { - return nil, fmt.Errorf("wrong fork ID in status: have %v, want %v", have, want) - } - if have, want := msg.ProtocolVersion, c.ourHighestProtoVersion; have != uint32(want) { - return nil, fmt.Errorf("wrong protocol version: have %v, want %v", have, want) - } - message = msg - break loop - case *Disconnect: - return nil, fmt.Errorf("disconnect received: %v", msg.Reason) - case *Ping: - c.Write(&Pong{}) // TODO (renaynay): in the future, this should be an error - // (PINGs should not be a response upon fresh connection) - default: - return nil, fmt.Errorf("bad status message: %s", pretty.Sdump(msg)) - } - } - // make sure eth protocol version is set for negotiation - if c.negotiatedProtoVersion == 0 { - return nil, errors.New("eth protocol version must be set in Conn") - } - if status == nil { - // default status message - status = &Status{ - ProtocolVersion: uint32(c.negotiatedProtoVersion), - NetworkID: chain.chainConfig.ChainID.Uint64(), - TD: chain.TD(), - Head: chain.blocks[chain.Len()-1].Hash(), - Genesis: chain.blocks[0].Hash(), - ForkID: chain.ForkID(), - } - } - if err := c.Write(status); err != nil { - return nil, fmt.Errorf("write to connection failed: %v", err) - } - return message, nil -} - -// createSendAndRecvConns creates two connections, one for sending messages to the -// node, and one for receiving messages from the node. -func (s *Suite) createSendAndRecvConns() (*Conn, *Conn, error) { - sendConn, err := s.dial() - if err != nil { - return nil, nil, fmt.Errorf("dial failed: %v", err) - } - recvConn, err := s.dial() - if err != nil { - sendConn.Close() - return nil, nil, fmt.Errorf("dial failed: %v", err) - } - return sendConn, recvConn, nil -} - -// readAndServe serves GetBlockHeaders requests while waiting -// on another message from the node. -func (c *Conn) readAndServe(chain *Chain, timeout time.Duration) Message { - start := time.Now() - for time.Since(start) < timeout { - c.SetReadDeadline(time.Now().Add(10 * time.Second)) - - msg := c.Read() - switch msg := msg.(type) { - case *Ping: - c.Write(&Pong{}) - case *GetBlockHeaders: - headers, err := chain.GetHeaders(msg) - if err != nil { - return errorf("could not get headers for inbound header request: %v", err) - } - resp := &BlockHeaders{ - RequestId: msg.ReqID(), - BlockHeadersRequest: eth.BlockHeadersRequest(headers), - } - if err := c.Write(resp); err != nil { - return errorf("could not write to connection: %v", err) - } - default: - return msg - } - } - return errorf("no message received within %v", timeout) -} - -// headersRequest executes the given `GetBlockHeaders` request. -func (c *Conn) headersRequest(request *GetBlockHeaders, chain *Chain, reqID uint64) ([]*types.Header, error) { - defer c.SetReadDeadline(time.Time{}) - c.SetReadDeadline(time.Now().Add(20 * time.Second)) - - // write request - request.RequestId = reqID - if err := c.Write(request); err != nil { - return nil, fmt.Errorf("could not write to connection: %v", err) - } - - // wait for response - msg := c.waitForResponse(chain, timeout, request.RequestId) - resp, ok := msg.(*BlockHeaders) - if !ok { - return nil, fmt.Errorf("unexpected message received: %s", pretty.Sdump(msg)) - } - headers := []*types.Header(resp.BlockHeadersRequest) - return headers, nil -} - -func (c *Conn) snapRequest(msg Message, id uint64, chain *Chain) (Message, error) { - defer c.SetReadDeadline(time.Time{}) - c.SetReadDeadline(time.Now().Add(5 * time.Second)) - if err := c.Write(msg); err != nil { - return nil, fmt.Errorf("could not write to connection: %v", err) - } - return c.ReadSnap(id) -} - -// headersMatch returns whether the received headers match the given request -func headersMatch(expected []*types.Header, headers []*types.Header) bool { - return reflect.DeepEqual(expected, headers) -} - -// waitForResponse reads from the connection until a response with the expected -// request ID is received. -func (c *Conn) waitForResponse(chain *Chain, timeout time.Duration, requestID uint64) Message { - for { - msg := c.readAndServe(chain, timeout) - if msg.ReqID() == requestID { - return msg - } - } -} - -// sendNextBlock broadcasts the next block in the chain and waits -// for the node to propagate the block and import it into its chain. -func (s *Suite) sendNextBlock() error { - // set up sending and receiving connections - sendConn, recvConn, err := s.createSendAndRecvConns() - if err != nil { - return err - } - defer sendConn.Close() - defer recvConn.Close() - if err = sendConn.peer(s.chain, nil); err != nil { - return fmt.Errorf("peering failed: %v", err) - } - if err = recvConn.peer(s.chain, nil); err != nil { - return fmt.Errorf("peering failed: %v", err) - } - // create new block announcement - nextBlock := s.fullChain.blocks[s.chain.Len()] - blockAnnouncement := &NewBlock{ - Block: nextBlock, - TD: s.fullChain.TotalDifficultyAt(s.chain.Len()), - } - // send announcement and wait for node to request the header - if err = s.testAnnounce(sendConn, recvConn, blockAnnouncement); err != nil { - return fmt.Errorf("failed to announce block: %v", err) - } - // wait for client to update its chain - if err = s.waitForBlockImport(recvConn, nextBlock); err != nil { - return fmt.Errorf("failed to receive confirmation of block import: %v", err) - } - // update test suite chain - s.chain.blocks = append(s.chain.blocks, nextBlock) - return nil -} - -// testAnnounce writes a block announcement to the node and waits for the node -// to propagate it. -func (s *Suite) testAnnounce(sendConn, receiveConn *Conn, blockAnnouncement *NewBlock) error { - if err := sendConn.Write(blockAnnouncement); err != nil { - return fmt.Errorf("could not write to connection: %v", err) - } - return s.waitAnnounce(receiveConn, blockAnnouncement) -} - -// waitAnnounce waits for a NewBlock or NewBlockHashes announcement from the node. -func (s *Suite) waitAnnounce(conn *Conn, blockAnnouncement *NewBlock) error { - for { - switch msg := conn.readAndServe(s.chain, timeout).(type) { - case *NewBlock: - if !reflect.DeepEqual(blockAnnouncement.Block.Header(), msg.Block.Header()) { - return fmt.Errorf("wrong header in block announcement: \nexpected %v "+ - "\ngot %v", blockAnnouncement.Block.Header(), msg.Block.Header()) - } - if !reflect.DeepEqual(blockAnnouncement.TD, msg.TD) { - return fmt.Errorf("wrong TD in announcement: expected %v, got %v", blockAnnouncement.TD, msg.TD) - } - return nil - case *NewBlockHashes: - hashes := *msg - if blockAnnouncement.Block.Hash() != hashes[0].Hash { - return fmt.Errorf("wrong block hash in announcement: expected %v, got %v", blockAnnouncement.Block.Hash(), hashes[0].Hash) - } - return nil - - // ignore tx announcements from previous tests - case *NewPooledTransactionHashes66: - continue - case *NewPooledTransactionHashes: - continue - case *Transactions: - continue - - default: - return fmt.Errorf("unexpected: %s", pretty.Sdump(msg)) - } - } -} - -func (s *Suite) waitForBlockImport(conn *Conn, block *types.Block) error { - defer conn.SetReadDeadline(time.Time{}) - conn.SetReadDeadline(time.Now().Add(20 * time.Second)) - // create request - req := &GetBlockHeaders{ - GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ - Origin: eth.HashOrNumber{Hash: block.Hash()}, - Amount: 1, - }, - } - - // loop until BlockHeaders response contains desired block, confirming the - // node imported the block - for { - requestID := uint64(54) - headers, err := conn.headersRequest(req, s.chain, requestID) - if err != nil { - return fmt.Errorf("GetBlockHeader request failed: %v", err) - } - // if headers response is empty, node hasn't imported block yet, try again - if len(headers) == 0 { - time.Sleep(100 * time.Millisecond) - continue - } - if !reflect.DeepEqual(block.Header(), headers[0]) { - return fmt.Errorf("wrong header returned: wanted %v, got %v", block.Header(), headers[0]) - } - return nil - } -} - -func (s *Suite) oldAnnounce() error { - sendConn, receiveConn, err := s.createSendAndRecvConns() - if err != nil { - return err - } - defer sendConn.Close() - defer receiveConn.Close() - if err := sendConn.peer(s.chain, nil); err != nil { - return fmt.Errorf("peering failed: %v", err) - } - if err := receiveConn.peer(s.chain, nil); err != nil { - return fmt.Errorf("peering failed: %v", err) - } - // create old block announcement - oldBlockAnnounce := &NewBlock{ - Block: s.chain.blocks[len(s.chain.blocks)/2], - TD: s.chain.blocks[len(s.chain.blocks)/2].Difficulty(), - } - if err := sendConn.Write(oldBlockAnnounce); err != nil { - return fmt.Errorf("could not write to connection: %v", err) - } - // wait to see if the announcement is propagated - switch msg := receiveConn.readAndServe(s.chain, time.Second*8).(type) { - case *NewBlock: - block := *msg - if block.Block.Hash() == oldBlockAnnounce.Block.Hash() { - return fmt.Errorf("unexpected: block propagated: %s", pretty.Sdump(msg)) - } - case *NewBlockHashes: - hashes := *msg - for _, hash := range hashes { - if hash.Hash == oldBlockAnnounce.Block.Hash() { - return fmt.Errorf("unexpected: block announced: %s", pretty.Sdump(msg)) - } - } - case *Error: - errMsg := *msg - // check to make sure error is timeout (propagation didn't come through == test successful) - if !strings.Contains(errMsg.String(), "timeout") { - return fmt.Errorf("unexpected error: %v", pretty.Sdump(msg)) - } - default: - return fmt.Errorf("unexpected: %s", pretty.Sdump(msg)) - } - return nil -} - -func (s *Suite) maliciousHandshakes(t *utesting.T) error { - conn, err := s.dial() - if err != nil { - return fmt.Errorf("dial failed: %v", err) - } - defer conn.Close() - - // write hello to client - pub0 := crypto.FromECDSAPub(&conn.ourKey.PublicKey)[1:] - handshakes := []*Hello{ - { - Version: 5, - Caps: []p2p.Cap{ - {Name: largeString(2), Version: 64}, - }, - ID: pub0, - }, - { - Version: 5, - Caps: []p2p.Cap{ - {Name: "eth", Version: 64}, - {Name: "eth", Version: 65}, - }, - ID: append(pub0, byte(0)), - }, - { - Version: 5, - Caps: []p2p.Cap{ - {Name: "eth", Version: 64}, - {Name: "eth", Version: 65}, - }, - ID: append(pub0, pub0...), - }, - { - Version: 5, - Caps: []p2p.Cap{ - {Name: "eth", Version: 64}, - {Name: "eth", Version: 65}, - }, - ID: largeBuffer(2), - }, - { - Version: 5, - Caps: []p2p.Cap{ - {Name: largeString(2), Version: 64}, - }, - ID: largeBuffer(2), - }, - } - for i, handshake := range handshakes { - t.Logf("Testing malicious handshake %v\n", i) - if err := conn.Write(handshake); err != nil { - return fmt.Errorf("could not write to connection: %v", err) - } - // check that the peer disconnected - for i := 0; i < 2; i++ { - switch msg := conn.readAndServe(s.chain, 20*time.Second).(type) { - case *Disconnect: - case *Error: - case *Hello: - // Discard one hello as Hello's are sent concurrently - continue - default: - return fmt.Errorf("unexpected: %s", pretty.Sdump(msg)) - } - } - // dial for the next round - conn, err = s.dial() - if err != nil { - return fmt.Errorf("dial failed: %v", err) - } - } - return nil -} - -func (s *Suite) maliciousStatus(conn *Conn) error { - if err := conn.handshake(); err != nil { - return fmt.Errorf("handshake failed: %v", err) - } - status := &Status{ - ProtocolVersion: uint32(conn.negotiatedProtoVersion), - NetworkID: s.chain.chainConfig.ChainID.Uint64(), - TD: largeNumber(2), - Head: s.chain.blocks[s.chain.Len()-1].Hash(), - Genesis: s.chain.blocks[0].Hash(), - ForkID: s.chain.ForkID(), - } - - // get status - msg, err := conn.statusExchange(s.chain, status) - if err != nil { - return fmt.Errorf("status exchange failed: %v", err) - } - switch msg := msg.(type) { - case *Status: - default: - return fmt.Errorf("expected status, got: %#v ", msg) - } - - // wait for disconnect - switch msg := conn.readAndServe(s.chain, timeout).(type) { - case *Disconnect: - return nil - case *Error: - return nil - default: - return fmt.Errorf("expected disconnect, got: %s", pretty.Sdump(msg)) - } -} - -func (s *Suite) hashAnnounce() error { - // create connections - sendConn, recvConn, err := s.createSendAndRecvConns() - if err != nil { - return fmt.Errorf("failed to create connections: %v", err) - } - defer sendConn.Close() - defer recvConn.Close() - if err := sendConn.peer(s.chain, nil); err != nil { - return fmt.Errorf("peering failed: %v", err) - } - if err := recvConn.peer(s.chain, nil); err != nil { - return fmt.Errorf("peering failed: %v", err) - } - - // create NewBlockHashes announcement - type anno struct { - Hash common.Hash // Hash of one particular block being announced - Number uint64 // Number of one particular block being announced - } - nextBlock := s.fullChain.blocks[s.chain.Len()] - announcement := anno{Hash: nextBlock.Hash(), Number: nextBlock.Number().Uint64()} - newBlockHash := &NewBlockHashes{announcement} - if err := sendConn.Write(newBlockHash); err != nil { - return fmt.Errorf("failed to write to connection: %v", err) - } - - // Announcement sent, now wait for a header request - msg := sendConn.Read() - blockHeaderReq, ok := msg.(*GetBlockHeaders) - if !ok { - return fmt.Errorf("unexpected %s", pretty.Sdump(msg)) - } - if blockHeaderReq.Amount != 1 { - return fmt.Errorf("unexpected number of block headers requested: %v", blockHeaderReq.Amount) - } - if blockHeaderReq.Origin.Hash != announcement.Hash { - return fmt.Errorf("unexpected block header requested. Announced:\n %v\n Remote request:\n%v", - pretty.Sdump(announcement), - pretty.Sdump(blockHeaderReq)) - } - err = sendConn.Write(&BlockHeaders{ - RequestId: blockHeaderReq.ReqID(), - BlockHeadersRequest: eth.BlockHeadersRequest{nextBlock.Header()}, - }) - if err != nil { - return fmt.Errorf("failed to write to connection: %v", err) - } - - // wait for block announcement - msg = recvConn.readAndServe(s.chain, timeout) - switch msg := msg.(type) { - case *NewBlockHashes: - hashes := *msg - if len(hashes) != 1 { - return fmt.Errorf("unexpected new block hash announcement: wanted 1 announcement, got %d", len(hashes)) - } - if nextBlock.Hash() != hashes[0].Hash { - return fmt.Errorf("unexpected block hash announcement, wanted %v, got %v", nextBlock.Hash(), - hashes[0].Hash) - } - - case *NewBlock: - // node should only propagate NewBlock without having requested the body if the body is empty - nextBlockBody := nextBlock.Body() - if len(nextBlockBody.Transactions) != 0 || len(nextBlockBody.Uncles) != 0 { - return fmt.Errorf("unexpected non-empty new block propagated: %s", pretty.Sdump(msg)) - } - if msg.Block.Hash() != nextBlock.Hash() { - return fmt.Errorf("mismatched hash of propagated new block: wanted %v, got %v", - nextBlock.Hash(), msg.Block.Hash()) - } - // check to make sure header matches header that was sent to the node - if !reflect.DeepEqual(nextBlock.Header(), msg.Block.Header()) { - return fmt.Errorf("incorrect header received: wanted %v, got %v", nextBlock.Header(), msg.Block.Header()) - } - default: - return fmt.Errorf("unexpected: %s", pretty.Sdump(msg)) - } - // confirm node imported block - if err := s.waitForBlockImport(recvConn, nextBlock); err != nil { - return fmt.Errorf("error waiting for node to import new block: %v", err) - } - // update the chain - s.chain.blocks = append(s.chain.blocks, nextBlock) - return nil -} diff --git a/cmd/devp2p/internal/ethtest/large.go b/cmd/devp2p/internal/ethtest/large.go deleted file mode 100644 index 40626c2068..0000000000 --- a/cmd/devp2p/internal/ethtest/large.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package ethtest - -import ( - "crypto/rand" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/core/types" -) - -// largeNumber returns a very large big.Int. -func largeNumber(megabytes int) *big.Int { - buf := make([]byte, megabytes*1024*1024) - rand.Read(buf) - bigint := new(big.Int) - bigint.SetBytes(buf) - return bigint -} - -// largeBuffer returns a very large buffer. -func largeBuffer(megabytes int) []byte { - buf := make([]byte, megabytes*1024*1024) - rand.Read(buf) - return buf -} - -// largeString returns a very large string. -func largeString(megabytes int) string { - buf := make([]byte, megabytes*1024*1024) - rand.Read(buf) - return hexutil.Encode(buf) -} - -func largeBlock() *types.Block { - return types.NewBlockWithHeader(largeHeader()) -} - -// Returns a random hash -func randHash() common.Hash { - var h common.Hash - rand.Read(h[:]) - return h -} - -func largeHeader() *types.Header { - return &types.Header{ - MixDigest: randHash(), - ReceiptHash: randHash(), - TxHash: randHash(), - Nonce: types.BlockNonce{}, - Extra: []byte{}, - Bloom: types.Bloom{}, - GasUsed: 0, - Coinbase: common.Address{}, - GasLimit: 0, - UncleHash: types.EmptyUncleHash, - Time: 1337, - ParentHash: randHash(), - Root: randHash(), - Number: largeNumber(2), - Difficulty: largeNumber(2), - } -} diff --git a/cmd/devp2p/internal/ethtest/mkchain.sh b/cmd/devp2p/internal/ethtest/mkchain.sh new file mode 100644 index 0000000000..b9253e8ca7 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/mkchain.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +hivechain generate \ + --fork-interval 6 \ + --tx-interval 1 \ + --length 500 \ + --outdir testdata \ + --lastfork cancun \ + --outputs accounts,genesis,chain,headstate,txinfo,headblock,headfcu,newpayload,forkenv diff --git a/cmd/devp2p/internal/ethtest/protocol.go b/cmd/devp2p/internal/ethtest/protocol.go new file mode 100644 index 0000000000..f5f5f7e489 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/protocol.go @@ -0,0 +1,87 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . +package ethtest + +import ( + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rlp" +) + +// Unexported devp2p message codes from p2p/peer.go. +const ( + handshakeMsg = 0x00 + discMsg = 0x01 + pingMsg = 0x02 + pongMsg = 0x03 +) + +// Unexported devp2p protocol lengths from p2p package. +const ( + baseProtoLen = 16 + ethProtoLen = 17 + snapProtoLen = 8 +) + +// Unexported handshake structure from p2p/peer.go. +type protoHandshake struct { + Version uint64 + Name string + Caps []p2p.Cap + ListenPort uint64 + ID []byte + Rest []rlp.RawValue `rlp:"tail"` +} + +type Hello = protoHandshake + +// Proto is an enum representing devp2p protocol types. +type Proto int + +const ( + baseProto Proto = iota + ethProto + snapProto +) + +// getProto returns the protocol a certain message code is associated with +// (assuming the negotiated capabilities are exactly {eth,snap}) +func getProto(code uint64) Proto { + switch { + case code < baseProtoLen: + return baseProto + case code < baseProtoLen+ethProtoLen: + return ethProto + case code < baseProtoLen+ethProtoLen+snapProtoLen: + return snapProto + default: + panic("unhandled msg code beyond last protocol") + } +} + +// protoOffset will return the offset at which the specified protocol's messages +// begin. +func protoOffset(proto Proto) uint64 { + switch proto { + case baseProto: + return 0 + case ethProto: + return baseProtoLen + case snapProto: + return baseProtoLen + ethProtoLen + default: + panic("unhandled protocol") + } +} diff --git a/cmd/devp2p/internal/ethtest/snap.go b/cmd/devp2p/internal/ethtest/snap.go index 14087af4f8..83844b1e9d 100644 --- a/cmd/devp2p/internal/ethtest/snap.go +++ b/cmd/devp2p/internal/ethtest/snap.go @@ -20,9 +20,12 @@ import ( "bytes" "errors" "fmt" + "math/big" "math/rand" + "reflect" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/protocols/snap" @@ -32,6 +35,13 @@ import ( "golang.org/x/crypto/sha3" ) +func (c *Conn) snapRequest(code uint64, msg any) (any, error) { + if err := c.Write(snapProto, code, msg); err != nil { + return nil, fmt.Errorf("could not write to connection: %v", err) + } + return c.ReadSnap() +} + func (s *Suite) TestSnapStatus(t *utesting.T) { conn, err := s.dialSnap() if err != nil { @@ -44,72 +54,267 @@ func (s *Suite) TestSnapStatus(t *utesting.T) { } type accRangeTest struct { - nBytes uint64 - root common.Hash - origin common.Hash - limit common.Hash + nBytes uint64 + root common.Hash + startingHash common.Hash + limitHash common.Hash expAccounts int expFirst common.Hash expLast common.Hash + + desc string } // TestSnapGetAccountRange various forms of GetAccountRange requests. func (s *Suite) TestSnapGetAccountRange(t *utesting.T) { var ( - root = s.chain.RootAt(999) - ffHash = common.MaxHash - zero = common.Hash{} - firstKeyMinus1 = common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf29") - firstKey = common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2a") - firstKeyPlus1 = common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2b") - secondKey = common.HexToHash("0x09e47cd5056a689e708f22fe1f932709a320518e444f5f7d8d46a3da523d6606") - storageRoot = common.HexToHash("0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790") + ffHash = common.MaxHash + zero = common.Hash{} + + // test values derived from chain/ account dump + root = s.chain.Head().Root() + headstate = s.chain.AccountsInHashOrder() + firstKey = common.BytesToHash(headstate[0].AddressHash) + secondKey = common.BytesToHash(headstate[1].AddressHash) + storageRoot = findNonEmptyStorageRoot(headstate) ) - for i, tc := range []accRangeTest{ + + tests := []accRangeTest{ // Tests decreasing the number of bytes - {4000, root, zero, ffHash, 76, firstKey, common.HexToHash("0xd2669dcf3858e7f1eecb8b5fedbf22fbea3e9433848a75035f79d68422c2dcda")}, - {3000, root, zero, ffHash, 57, firstKey, common.HexToHash("0x9b63fa753ece5cb90657d02ecb15df4dc1508d8c1d187af1bf7f1a05e747d3c7")}, - {2000, root, zero, ffHash, 38, firstKey, common.HexToHash("0x5e6140ecae4354a9e8f47559a8c6209c1e0e69cb077b067b528556c11698b91f")}, - {1, root, zero, ffHash, 1, firstKey, firstKey}, + { + nBytes: 4000, + root: root, + startingHash: zero, + limitHash: ffHash, + expAccounts: 86, + expFirst: firstKey, + expLast: common.HexToHash("0x445cb5c1278fdce2f9cbdb681bdd76c52f8e50e41dbd9e220242a69ba99ac099"), + desc: "In this test, we request the entire state range, but limit the response to 4000 bytes.", + }, + { + nBytes: 3000, + root: root, + startingHash: zero, + limitHash: ffHash, + expAccounts: 65, + expFirst: firstKey, + expLast: common.HexToHash("0x2e6fe1362b3e388184fd7bf08e99e74170b26361624ffd1c5f646da7067b58b6"), + desc: "In this test, we request the entire state range, but limit the response to 3000 bytes.", + }, + { + nBytes: 2000, + root: root, + startingHash: zero, + limitHash: ffHash, + expAccounts: 44, + expFirst: firstKey, + expLast: common.HexToHash("0x1c3f74249a4892081ba0634a819aec9ed25f34c7653f5719b9098487e65ab595"), + desc: "In this test, we request the entire state range, but limit the response to 2000 bytes.", + }, + { + nBytes: 1, + root: root, + startingHash: zero, + limitHash: ffHash, + expAccounts: 1, + expFirst: firstKey, + expLast: firstKey, + desc: `In this test, we request the entire state range, but limit the response to 1 byte. +The server should return the first account of the state.`, + }, + { + nBytes: 0, + root: root, + startingHash: zero, + limitHash: ffHash, + expAccounts: 1, + expFirst: firstKey, + expLast: firstKey, + desc: `Here we request with a responseBytes limit of zero. +The server should return one account.`, + }, // Tests variations of the range - // - // [00b to firstkey]: should return [firstkey, secondkey], where secondkey is out of bounds - {4000, root, common.HexToHash("0x00bf000000000000000000000000000000000000000000000000000000000000"), common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2b"), 2, firstKey, secondKey}, - // [00b0 to 0bf0]: where both are before firstkey. Should return firstKey (even though it's out of bounds) - {4000, root, common.HexToHash("0x00b0000000000000000000000000000000000000000000000000000000000000"), common.HexToHash("0x00bf100000000000000000000000000000000000000000000000000000000000"), 1, firstKey, firstKey}, - {4000, root, zero, zero, 1, firstKey, firstKey}, - {4000, root, firstKey, ffHash, 76, firstKey, common.HexToHash("0xd2669dcf3858e7f1eecb8b5fedbf22fbea3e9433848a75035f79d68422c2dcda")}, - {4000, root, firstKeyPlus1, ffHash, 76, secondKey, common.HexToHash("0xd28f55d3b994f16389f36944ad685b48e0fc3f8fbe86c3ca92ebecadf16a783f")}, + { + nBytes: 4000, + root: root, + startingHash: hashAdd(firstKey, -500), + limitHash: hashAdd(firstKey, 1), + expAccounts: 2, + expFirst: firstKey, + expLast: secondKey, + desc: `In this test, we request a range where startingHash is before the first available +account key, and limitHash is after. The server should return the first and second +account of the state (because the second account is the 'next available').`, + }, + + { + nBytes: 4000, + root: root, + startingHash: hashAdd(firstKey, -500), + limitHash: hashAdd(firstKey, -450), + expAccounts: 1, + expFirst: firstKey, + expLast: firstKey, + desc: `Here we request range where both bounds are before the first available account key. +This should return the first account (even though it's out of bounds).`, + }, + + // More range tests: + { + nBytes: 4000, + root: root, + startingHash: zero, + limitHash: zero, + expAccounts: 1, + expFirst: firstKey, + expLast: firstKey, + desc: `In this test, both startingHash and limitHash are zero. +The server should return the first available account.`, + }, + { + nBytes: 4000, + root: root, + startingHash: firstKey, + limitHash: ffHash, + expAccounts: 86, + expFirst: firstKey, + expLast: common.HexToHash("0x445cb5c1278fdce2f9cbdb681bdd76c52f8e50e41dbd9e220242a69ba99ac099"), + desc: `In this test, startingHash is exactly the first available account key. +The server should return the first available account of the state as the first item.`, + }, + { + nBytes: 4000, + root: root, + startingHash: hashAdd(firstKey, 1), + limitHash: ffHash, + expAccounts: 86, + expFirst: secondKey, + expLast: common.HexToHash("0x4615e5f5df5b25349a00ad313c6cd0436b6c08ee5826e33a018661997f85ebaa"), + desc: `In this test, startingHash is after the first available key. +The server should return the second account of the state as the first item.`, + }, // Test different root hashes - // - // A stateroot that does not exist - {4000, common.Hash{0x13, 37}, zero, ffHash, 0, zero, zero}, + + { + nBytes: 4000, + root: common.Hash{0x13, 0x37}, + startingHash: zero, + limitHash: ffHash, + expAccounts: 0, + expFirst: zero, + expLast: zero, + desc: `This test requests a non-existent state root.`, + }, + // The genesis stateroot (we expect it to not be served) - {4000, s.chain.RootAt(0), zero, ffHash, 0, zero, zero}, - // A 127 block old stateroot, expected to be served - {4000, s.chain.RootAt(999 - 127), zero, ffHash, 77, firstKey, common.HexToHash("0xe4c6fdef5dd4e789a2612390806ee840b8ec0fe52548f8b4efe41abb20c37aac")}, - // A root which is not actually an account root, but a storage root - {4000, storageRoot, zero, ffHash, 0, zero, zero}, + { + nBytes: 4000, + root: s.chain.RootAt(0), + startingHash: zero, + limitHash: ffHash, + expAccounts: 0, + expFirst: zero, + expLast: zero, + desc: `This test requests data at the state root of the genesis block. We expect the +server to return no data because genesis is older than 127 blocks.`, + }, + + { + nBytes: 4000, + root: s.chain.RootAt(int(s.chain.Head().Number().Uint64()) - 127), + startingHash: zero, + limitHash: ffHash, + expAccounts: 84, + expFirst: firstKey, + expLast: common.HexToHash("0x580aa878e2f92d113a12c0a3ce3c21972b03dbe80786858d49a72097e2c491a3"), + desc: `This test requests data at a state root that is 127 blocks old. +We expect the server to have this state available.`, + }, + + { + nBytes: 4000, + root: storageRoot, + startingHash: zero, + limitHash: ffHash, + expAccounts: 0, + expFirst: zero, + expLast: zero, + desc: `This test requests data at a state root that is actually the storage root of +an existing account. The server is supposed to ignore this request.`, + }, // And some non-sensical requests - // - // range from [0xFF to 0x00], wrong order. Expect not to be serviced - {4000, root, ffHash, zero, 0, zero, zero}, - // range from [firstkey, firstkey-1], wrong order. Expect to get first key. - {4000, root, firstKey, firstKeyMinus1, 1, firstKey, firstKey}, + + { + nBytes: 4000, + root: root, + startingHash: ffHash, + limitHash: zero, + expAccounts: 0, + expFirst: zero, + expLast: zero, + desc: `In this test, the startingHash is after limitHash (wrong order). The server +should ignore this invalid request.`, + }, + + { + nBytes: 4000, + root: root, + startingHash: firstKey, + limitHash: hashAdd(firstKey, -1), + expAccounts: 1, + expFirst: firstKey, + expLast: firstKey, + desc: `In this test, the startingHash is the first available key, and limitHash is +a key before startingHash (wrong order). The server should return the first available key.`, + }, + // range from [firstkey, 0], wrong order. Expect to get first key. - {4000, root, firstKey, zero, 1, firstKey, firstKey}, - // Max bytes: 0. Expect to deliver one account. - {0, root, zero, ffHash, 1, firstKey, firstKey}, - } { + { + nBytes: 4000, + root: root, + startingHash: firstKey, + limitHash: zero, + expAccounts: 1, + expFirst: firstKey, + expLast: firstKey, + desc: `In this test, the startingHash is the first available key and limitHash is zero. +(wrong order). The server should return the first available key.`, + }, + } + + for i, tc := range tests { tc := tc + if i > 0 { + t.Log("\n") + } + t.Logf("-- Test %d", i) + t.Log(tc.desc) + t.Log(" request:") + t.Logf(" root: %x", tc.root) + t.Logf(" range: %#x - %#x", tc.startingHash, tc.limitHash) + t.Logf(" responseBytes: %d", tc.nBytes) if err := s.snapGetAccountRange(t, &tc); err != nil { - t.Errorf("test %d \n root: %x\n range: %#x - %#x\n bytes: %d\nfailed: %v", i, tc.root, tc.origin, tc.limit, tc.nBytes, err) + t.Errorf("test %d failed: %v", i, err) + } + } +} + +func hashAdd(h common.Hash, n int64) common.Hash { + hb := h.Big() + return common.BigToHash(hb.Add(hb, big.NewInt(n))) +} + +func findNonEmptyStorageRoot(accounts []state.DumpAccount) common.Hash { + for i := range accounts { + if len(accounts[i].Storage) != 0 { + return common.BytesToHash(accounts[i].Root) } } + panic("can't find account with non-empty storage") } type stRangesTest struct { @@ -119,87 +324,125 @@ type stRangesTest struct { limit []byte nBytes uint64 - expSlots int + expSlots [][]*snap.StorageData + + desc string } // TestSnapGetStorageRanges various forms of GetStorageRanges requests. func (s *Suite) TestSnapGetStorageRanges(t *utesting.T) { var ( + acct = common.HexToAddress("0x8bebc8ba651aee624937e7d897853ac30c95a067") + acctHash = common.BytesToHash(s.chain.state[acct].AddressHash) ffHash = common.MaxHash zero = common.Hash{} - firstKey = common.HexToHash("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2a") - secondKey = common.HexToHash("0x09e47cd5056a689e708f22fe1f932709a320518e444f5f7d8d46a3da523d6606") + blockroot = s.chain.Head().Root() ) - for i, tc := range []stRangesTest{ + + // These are the storage slots of the test account, encoded as snap response data. + acctSlots := []*snap.StorageData{ { - root: s.chain.RootAt(999), - accounts: []common.Hash{secondKey, firstKey}, - origin: zero[:], - limit: ffHash[:], - nBytes: 500, - expSlots: 0, + Hash: common.HexToHash("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace"), + Body: []byte{0x02}, + }, + { + Hash: common.HexToHash("0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6"), + Body: []byte{0x01}, + }, + { + Hash: common.HexToHash("0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b"), + Body: []byte{0x03}, }, + } + tests := []stRangesTest{ /* Some tests against this account: - { - "balance": "0", - "nonce": 1, - "root": "0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace": "02", - "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "01", - "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "03" - }, - "key": "0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844" + + "0x8bebc8ba651aee624937e7d897853ac30c95a067": { + "balance": "1", + "nonce": 1, + "root": "0xe318dff15b33aa7f2f12d5567d58628e3e3f2e8859e46b56981a4083b391da17", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + // Note: keys below are hashed!!! + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace": "02", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "01", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "03" + }, + "key": "0x445cb5c1278fdce2f9cbdb681bdd76c52f8e50e41dbd9e220242a69ba99ac099" } */ + { // [:] -> [slot1, slot2, slot3] - root: s.chain.RootAt(999), - accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + desc: `This request has a range of 00..ff. +The server should return all storage slots of the test account.`, + root: blockroot, + accounts: []common.Hash{acctHash}, origin: zero[:], limit: ffHash[:], nBytes: 500, - expSlots: 3, + expSlots: [][]*snap.StorageData{acctSlots}, }, + { // [slot1:] -> [slot1, slot2, slot3] - root: s.chain.RootAt(999), - accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + desc: `This test requests slots starting at the first available key. +The server should return all storage slots of the test account.`, + root: blockroot, + accounts: []common.Hash{acctHash}, origin: common.FromHex("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace"), limit: ffHash[:], - nBytes: 500, - expSlots: 3, + nBytes: 1000, + expSlots: [][]*snap.StorageData{acctSlots}, }, - { // [slot1+ :] -> [slot2, slot3] - root: s.chain.RootAt(999), - accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + + { // [slot1+:] -> [slot2, slot3] + desc: `This test requests slots starting at a key one past the first available key. +The server should return the remaining two slots of the test account.`, + root: blockroot, + accounts: []common.Hash{acctHash}, origin: common.FromHex("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf"), limit: ffHash[:], nBytes: 500, - expSlots: 2, + expSlots: [][]*snap.StorageData{acctSlots[1:]}, }, + { // [slot1:slot2] -> [slot1, slot2] - root: s.chain.RootAt(999), - accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + desc: `This test requests a range which is exactly the first and second available key.`, + root: blockroot, + accounts: []common.Hash{acctHash}, origin: common.FromHex("0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace"), limit: common.FromHex("0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6"), nBytes: 500, - expSlots: 2, + expSlots: [][]*snap.StorageData{acctSlots[:2]}, }, + { // [slot1+:slot2+] -> [slot2, slot3] - root: s.chain.RootAt(999), - accounts: []common.Hash{common.HexToHash("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844")}, + desc: `This test requests a range where limitHash is after the second, but before the third slot +of the test account. The server should return slots [2,3] (i.e. the 'next available' needs to be returned).`, + root: blockroot, + accounts: []common.Hash{acctHash}, origin: common.FromHex("0x4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), limit: common.FromHex("0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7"), nBytes: 500, - expSlots: 2, + expSlots: [][]*snap.StorageData{acctSlots[1:]}, }, - } { + } + + for i, tc := range tests { tc := tc + if i > 0 { + t.Log("\n") + } + t.Logf("-- Test %d", i) + t.Log(tc.desc) + t.Log(" request:") + t.Logf(" root: %x", tc.root) + t.Logf(" accounts: %x", tc.accounts) + t.Logf(" range: %#x - %#x", tc.origin, tc.limit) + t.Logf(" responseBytes: %d", tc.nBytes) if err := s.snapGetStorageRanges(t, &tc); err != nil { - t.Errorf("test %d \n root: %x\n range: %#x - %#x\n bytes: %d\n #accounts: %d\nfailed: %v", - i, tc.root, tc.origin, tc.limit, tc.nBytes, len(tc.accounts), err) + t.Errorf(" failed: %v", err) } } } @@ -209,87 +452,92 @@ type byteCodesTest struct { hashes []common.Hash expHashes int + + desc string } // TestSnapGetByteCodes various forms of GetByteCodes requests. func (s *Suite) TestSnapGetByteCodes(t *utesting.T) { - // The halfchain import should yield these bytecodes - var hcBytecodes []common.Hash - for _, s := range []string{ - "0x200c90460d8b0063210d5f5b9918e053c8f2c024485e0f1b48be8b1fc71b1317", - "0x20ba67ed4ac6aff626e0d1d4db623e2fada9593daeefc4a6eb4b70e6cff986f3", - "0x24b5b4902cb3d897c1cee9f16be8e897d8fa277c04c6dc8214f18295fca5de44", - "0x320b9d0a2be39b8a1c858f9f8cb96b1df0983071681de07ded3a7c0d05db5fd6", - "0x48cb0d5275936a24632babc7408339f9f7b051274809de565b8b0db76e97e03c", - "0x67c7a6f5cdaa43b4baa0e15b2be63346d1b9ce9f2c3d7e5804e0cacd44ee3b04", - "0x6d8418059bdc8c3fabf445e6bfc662af3b6a4ae45999b953996e42c7ead2ab49", - "0x7043422e5795d03f17ee0463a37235258e609fdd542247754895d72695e3e142", - "0x727f9e6f0c4bac1ff8d72c2972122d9c8d37ccb37e04edde2339e8da193546f1", - "0x86ccd5e23c78568a8334e0cebaf3e9f48c998307b0bfb1c378cee83b4bfb29cb", - "0x8fc89b00d6deafd4c4279531e743365626dbfa28845ec697919d305c2674302d", - "0x92cfc353bcb9746bb6f9996b6b9df779c88af2e9e0eeac44879ca19887c9b732", - "0x941b4872104f0995a4898fcf0f615ea6bf46bfbdfcf63ea8f2fd45b3f3286b77", - "0xa02fe8f41159bb39d2b704c633c3d6389cf4bfcb61a2539a9155f60786cf815f", - "0xa4b94e0afdffcb0af599677709dac067d3145489ea7aede57672bee43e3b7373", - "0xaf4e64edd3234c1205b725e42963becd1085f013590bd7ed93f8d711c5eb65fb", - "0xb69a18fa855b742031420081999086f6fb56c3930ae8840944e8b8ae9931c51e", - "0xc246c217bc73ce6666c93a93a94faa5250564f50a3fdc27ea74c231c07fe2ca6", - "0xcd6e4ab2c3034df2a8a1dfaaeb1c4baecd162a93d22de35e854ee2945cbe0c35", - "0xe24b692d09d6fc2f3d1a6028c400a27c37d7cbb11511907c013946d6ce263d3b", - "0xe440c5f0e8603fd1ed25976eee261ccee8038cf79d6a4c0eb31b2bf883be737f", - "0xe6eacbc509203d21ac814b350e72934fde686b7f673c19be8cf956b0c70078ce", - "0xe8530de4371467b5be7ea0e69e675ab36832c426d6c1ce9513817c0f0ae1486b", - "0xe85d487abbbc83bf3423cf9731360cf4f5a37220e18e5add54e72ee20861196a", - "0xf195ea389a5eea28db0be93660014275b158963dec44af1dfa7d4743019a9a49", - } { - hcBytecodes = append(hcBytecodes, common.HexToHash(s)) - } - - for i, tc := range []byteCodesTest{ + var ( + allHashes = s.chain.CodeHashes() + headRoot = s.chain.Head().Root() + genesisRoot = s.chain.RootAt(0) + ) + + tests := []byteCodesTest{ // A few stateroots { - nBytes: 10000, hashes: []common.Hash{s.chain.RootAt(0), s.chain.RootAt(999)}, + desc: `Here we request state roots as code hashes. The server should deliver an empty response with no items.`, + nBytes: 10000, + hashes: []common.Hash{genesisRoot, headRoot}, expHashes: 1, // 32-byte keys are detected as code, even if not code (like genesis hash), in legacy lookups. }, { - nBytes: 10000, hashes: []common.Hash{s.chain.RootAt(0), s.chain.RootAt(0)}, + desc: `Here we request the genesis state root (which is not an existing code hash) two times. The server should deliver an empty response with no items.`, + nBytes: 10000, + hashes: []common.Hash{genesisRoot, genesisRoot}, expHashes: 2, // 32-byte keys are detected as code, even if not code (like genesis hash), in legacy lookups. }, // Empties { - nBytes: 10000, hashes: []common.Hash{types.EmptyRootHash}, + desc: `Here we request the empty state root (which is not an existing code hash). The server should deliver an empty response with no items.`, + nBytes: 10000, + hashes: []common.Hash{types.EmptyRootHash}, expHashes: 0, }, { - nBytes: 10000, hashes: []common.Hash{types.EmptyCodeHash}, + desc: `Here we request the empty code hash. The server should deliver an empty response item.`, + nBytes: 10000, + hashes: []common.Hash{types.EmptyCodeHash}, expHashes: 1, }, { - nBytes: 10000, hashes: []common.Hash{types.EmptyCodeHash, types.EmptyCodeHash, types.EmptyCodeHash}, + desc: `In this test, we request the empty code hash three times. The server should deliver the empty item three times.`, + nBytes: 10000, + hashes: []common.Hash{types.EmptyCodeHash, types.EmptyCodeHash, types.EmptyCodeHash}, expHashes: 3, }, // The existing bytecodes { - nBytes: 10000, hashes: hcBytecodes, - expHashes: len(hcBytecodes), + desc: `Here we request all available contract codes. The server should deliver them all in one response.`, + nBytes: 100000, + hashes: allHashes, + expHashes: len(allHashes), }, // The existing, with limited byte arg { - nBytes: 1, hashes: hcBytecodes, + desc: `In this test, the request has a bytes limit of one. The server should deliver one item.`, + nBytes: 1, + hashes: allHashes, expHashes: 1, }, { - nBytes: 0, hashes: hcBytecodes, + desc: `In this test, the request has a bytes limit of zero. The server should deliver one item.`, + nBytes: 0, + hashes: allHashes, expHashes: 1, }, + // Request the same hash multiple times. { - nBytes: 1000, hashes: []common.Hash{hcBytecodes[0], hcBytecodes[0], hcBytecodes[0], hcBytecodes[0]}, + desc: `This test requests the same code hash multiple times. The server should deliver it multiple times.`, + nBytes: 1000, + hashes: []common.Hash{allHashes[0], allHashes[0], allHashes[0], allHashes[0]}, expHashes: 4, }, - } { + } + + for i, tc := range tests { tc := tc + if i > 0 { + t.Log("\n") + } + t.Logf("-- Test %d", i) + t.Log(tc.desc) + t.Log(" request:") + t.Logf(" hashes: %x", tc.hashes) + t.Logf(" responseBytes: %d", tc.nBytes) if err := s.snapGetByteCodes(t, &tc); err != nil { - t.Errorf("test %d \n bytes: %d\n #hashes: %d\nfailed: %v", i, tc.nBytes, len(tc.hashes), err) + t.Errorf("failed: %v", err) } } } @@ -299,8 +547,10 @@ type trieNodesTest struct { paths []snap.TrieNodePathSet nBytes uint64 - expHashes []common.Hash - expReject bool + expHashes []common.Hash // expected response + expReject bool // if true, request should be rejected + + desc string } func decodeNibbles(nibbles []byte, bytes []byte) { @@ -344,29 +594,32 @@ func hexToCompact(hex []byte) []byte { // TestSnapTrieNodes various forms of GetTrieNodes requests. func (s *Suite) TestSnapTrieNodes(t *utesting.T) { - key := common.FromHex("0x00bf49f440a1cd0527e4d06e2765654c0f56452257516d793a9b8d604dcfdf2a") - // helper function to iterate the key, and generate the compact-encoded - // trie paths along the way. - pathTo := func(length int) snap.TrieNodePathSet { - hex := keybytesToHex(key)[:length] - hex[len(hex)-1] = 0 // remove term flag - hKey := hexToCompact(hex) - return snap.TrieNodePathSet{hKey} - } - var accPaths []snap.TrieNodePathSet + var ( + // This is the known address of the snap storage testing contract. + storageAcct = common.HexToAddress("0x8bebc8ba651aee624937e7d897853ac30c95a067") + storageAcctHash = common.BytesToHash(s.chain.state[storageAcct].AddressHash) + // This is the known address of an existing account. + key = common.FromHex("0xa87387b50b481431c6ccdb9ae99a54d4dcdd4a3eff75d7b17b4818f7bbfc21e9") + empty = types.EmptyCodeHash + accPaths []snap.TrieNodePathSet + ) for i := 1; i <= 65; i++ { - accPaths = append(accPaths, pathTo(i)) + accPaths = append(accPaths, makeSnapPath(key, i)) } - empty := types.EmptyCodeHash - for i, tc := range []trieNodesTest{ + + tests := []trieNodesTest{ { - root: s.chain.RootAt(999), + desc: `In this test, we send an empty request to the node.`, + root: s.chain.Head().Root(), paths: nil, nBytes: 500, expHashes: nil, }, + { - root: s.chain.RootAt(999), + desc: `In this test, we send a request containing an empty path-set. +The server should reject the request.`, + root: s.chain.Head().Root(), paths: []snap.TrieNodePathSet{ {}, // zero-length pathset should 'abort' and kick us off {[]byte{0}}, @@ -375,18 +628,21 @@ func (s *Suite) TestSnapTrieNodes(t *utesting.T) { expHashes: []common.Hash{}, expReject: true, }, + { - root: s.chain.RootAt(999), + desc: `Here we request the root node of the trie. The server should respond with the root node.`, + root: s.chain.RootAt(int(s.chain.Head().NumberU64() - 1)), paths: []snap.TrieNodePathSet{ {[]byte{0}}, {[]byte{1}, []byte{0}}, }, - nBytes: 5000, - //0x6b3724a41b8c38b46d4d02fba2bb2074c47a507eb16a9a4b978f91d32e406faf - expHashes: []common.Hash{s.chain.RootAt(999)}, + nBytes: 5000, + expHashes: []common.Hash{s.chain.RootAt(int(s.chain.Head().NumberU64() - 1))}, }, + { // nonsensically long path - root: s.chain.RootAt(999), + desc: `In this test, we request a very long trie node path. The server should respond with an empty node (keccak256("")).`, + root: s.chain.Head().Root(), paths: []snap.TrieNodePathSet{ {[]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8}}, @@ -394,25 +650,19 @@ func (s *Suite) TestSnapTrieNodes(t *utesting.T) { nBytes: 5000, expHashes: []common.Hash{common.HexToHash("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470")}, }, - { - root: s.chain.RootAt(0), - paths: []snap.TrieNodePathSet{ - {[]byte{0}}, - {[]byte{1}, []byte{0}}, - }, - nBytes: 5000, - expHashes: []common.Hash{ - common.HexToHash("0x1ee1bb2fbac4d46eab331f3e8551e18a0805d084ed54647883aa552809ca968d"), - }, - }, + { // The leaf is only a couple of levels down, so the continued trie traversal causes lookup failures. - root: s.chain.RootAt(999), + desc: `Here we request some known accounts from the state.`, + root: s.chain.Head().Root(), paths: accPaths, nBytes: 5000, expHashes: []common.Hash{ - common.HexToHash("0xbcefee69b37cca1f5bf3a48aebe08b35f2ea1864fa958bb0723d909a0e0d28d8"), - common.HexToHash("0x4fb1e4e2391e4b4da471d59641319b8fa25d76c973d4bec594d7b00a69ae5135"), + // It's a bit unfortunate these are hard-coded, but the result depends on + // a lot of aspects of the state trie and can't be guessed in a simple + // way. So you'll have to update this when the test chain is changed. + common.HexToHash("0x3e963a69401a70224cbfb8c0cc2249b019041a538675d71ccf80c9328d114e2e"), + common.HexToHash("0xd0670d09cdfbf3c6320eb3e92c47c57baa6c226551a2d488c05581091e6b1689"), empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, @@ -420,55 +670,84 @@ func (s *Suite) TestSnapTrieNodes(t *utesting.T) { empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty}, }, + { - // Basically the same as above, with different ordering - root: s.chain.RootAt(999), + desc: `In this test, we request some known accounts in state. The requested paths are NOT in key order.`, + root: s.chain.Head().Root(), paths: []snap.TrieNodePathSet{ accPaths[10], accPaths[1], accPaths[0], }, nBytes: 5000, + // As with the previous test, this result depends on the whole tree and will have to + // be updated when the test chain is changed. expHashes: []common.Hash{ empty, - common.HexToHash("0x4fb1e4e2391e4b4da471d59641319b8fa25d76c973d4bec594d7b00a69ae5135"), - common.HexToHash("0xbcefee69b37cca1f5bf3a48aebe08b35f2ea1864fa958bb0723d909a0e0d28d8"), + common.HexToHash("0xd0670d09cdfbf3c6320eb3e92c47c57baa6c226551a2d488c05581091e6b1689"), + common.HexToHash("0x3e963a69401a70224cbfb8c0cc2249b019041a538675d71ccf80c9328d114e2e"), }, }, + + // Storage tests. + // These use the known storage test account. + { - /* - A test against this account, requesting trie nodes for the storage trie + desc: `This test requests the storage root node of a known account.`, + root: s.chain.Head().Root(), + paths: []snap.TrieNodePathSet{ { - "balance": "0", - "nonce": 1, - "root": "0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace": "02", - "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "01", - "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "03" - }, - "key": "0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844" - } - */ - root: s.chain.RootAt(999), + storageAcctHash[:], + []byte{0}, + }, + }, + nBytes: 5000, + expHashes: []common.Hash{ + common.HexToHash("0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790"), + }, + }, + + { + desc: `This test requests multiple storage nodes of a known account.`, + root: s.chain.Head().Root(), paths: []snap.TrieNodePathSet{ { - common.FromHex("0xf493f79c43bd747129a226ad42529885a4b108aba6046b2d12071695a6627844"), + storageAcctHash[:], []byte{0}, + []byte{0x1b}, }, }, nBytes: 5000, expHashes: []common.Hash{ common.HexToHash("0xbe3d75a1729be157e79c3b77f00206db4d54e3ea14375a015451c88ec067c790"), + common.HexToHash("0xf4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd7"), }, }, - }[7:] { + } + + for i, tc := range tests { tc := tc + if i > 0 { + t.Log("\n") + } + t.Logf("-- Test %d", i) + t.Log(tc.desc) + t.Log(" request:") + t.Logf(" root: %x", tc.root) + t.Logf(" paths: %x", tc.paths) + t.Logf(" responseBytes: %d", tc.nBytes) + if err := s.snapGetTrieNodes(t, &tc); err != nil { - t.Errorf("test %d \n #hashes %x\n root: %#x\n bytes: %d\nfailed: %v", i, len(tc.expHashes), tc.root, tc.nBytes, err) + t.Errorf(" failed: %v", err) } } } +func makeSnapPath(key []byte, length int) snap.TrieNodePathSet { + hex := keybytesToHex(key)[:length] + hex[len(hex)-1] = 0 // remove term flag + hKey := hexToCompact(hex) + return snap.TrieNodePathSet{hKey} +} + func (s *Suite) snapGetAccountRange(t *utesting.T, tc *accRangeTest) error { conn, err := s.dialSnap() if err != nil { @@ -479,22 +758,20 @@ func (s *Suite) snapGetAccountRange(t *utesting.T, tc *accRangeTest) error { t.Fatalf("peering failed: %v", err) } // write request - req := &GetAccountRange{ + req := &snap.GetAccountRangePacket{ ID: uint64(rand.Int63()), Root: tc.root, - Origin: tc.origin, - Limit: tc.limit, + Origin: tc.startingHash, + Limit: tc.limitHash, Bytes: tc.nBytes, } - resp, err := conn.snapRequest(req, req.ID, s.chain) + msg, err := conn.snapRequest(snap.GetAccountRangeMsg, req) if err != nil { return fmt.Errorf("account range request failed: %v", err) } - var res *snap.AccountRangePacket - if r, ok := resp.(*AccountRange); !ok { - return fmt.Errorf("account range response wrong: %T %v", resp, resp) - } else { - res = (*snap.AccountRangePacket)(r) + res, ok := msg.(*snap.AccountRangePacket) + if !ok { + return fmt.Errorf("account range response wrong: %T %v", msg, msg) } if exp, got := tc.expAccounts, len(res.Accounts); exp != got { return fmt.Errorf("expected %d accounts, got %d", exp, got) @@ -536,7 +813,7 @@ func (s *Suite) snapGetAccountRange(t *utesting.T, tc *accRangeTest) error { } proofdb := nodes.Set() - _, err = trie.VerifyRangeProof(tc.root, tc.origin[:], keys, accounts, proofdb) + _, err = trie.VerifyRangeProof(tc.root, tc.startingHash[:], keys, accounts, proofdb) return err } @@ -549,8 +826,9 @@ func (s *Suite) snapGetStorageRanges(t *utesting.T, tc *stRangesTest) error { if err = conn.peer(s.chain, nil); err != nil { t.Fatalf("peering failed: %v", err) } + // write request - req := &GetStorageRanges{ + req := &snap.GetStorageRangesPacket{ ID: uint64(rand.Int63()), Root: tc.root, Accounts: tc.accounts, @@ -558,28 +836,38 @@ func (s *Suite) snapGetStorageRanges(t *utesting.T, tc *stRangesTest) error { Limit: tc.limit, Bytes: tc.nBytes, } - resp, err := conn.snapRequest(req, req.ID, s.chain) + msg, err := conn.snapRequest(snap.GetStorageRangesMsg, req) if err != nil { return fmt.Errorf("account range request failed: %v", err) } - var res *snap.StorageRangesPacket - if r, ok := resp.(*StorageRanges); !ok { - return fmt.Errorf("account range response wrong: %T %v", resp, resp) - } else { - res = (*snap.StorageRangesPacket)(r) + res, ok := msg.(*snap.StorageRangesPacket) + if !ok { + return fmt.Errorf("account range response wrong: %T %v", msg, msg) } - gotSlots := 0 + // Ensure the ranges are monotonically increasing for i, slots := range res.Slots { - gotSlots += len(slots) for j := 1; j < len(slots); j++ { if bytes.Compare(slots[j-1].Hash[:], slots[j].Hash[:]) >= 0 { return fmt.Errorf("storage slots not monotonically increasing for account #%d: #%d [%x] vs #%d [%x]", i, j-1, slots[j-1].Hash[:], j, slots[j].Hash[:]) } } } - if exp, got := tc.expSlots, gotSlots; exp != got { - return fmt.Errorf("expected %d slots, got %d", exp, got) + + // Compute expected slot hashes. + var expHashes [][]common.Hash + for _, acct := range tc.expSlots { + var list []common.Hash + for _, s := range acct { + list = append(list, s.Hash) + } + expHashes = append(expHashes, list) + } + + // Check response. + if !reflect.DeepEqual(res.Slots, tc.expSlots) { + t.Log(" expected slot hashes:", expHashes) + return fmt.Errorf("wrong storage slots in response: %#v", res.Slots) } return nil } @@ -594,24 +882,22 @@ func (s *Suite) snapGetByteCodes(t *utesting.T, tc *byteCodesTest) error { t.Fatalf("peering failed: %v", err) } // write request - req := &GetByteCodes{ + req := &snap.GetByteCodesPacket{ ID: uint64(rand.Int63()), Hashes: tc.hashes, Bytes: tc.nBytes, } - resp, err := conn.snapRequest(req, req.ID, s.chain) + msg, err := conn.snapRequest(snap.GetByteCodesMsg, req) if err != nil { return fmt.Errorf("getBytecodes request failed: %v", err) } - var res *snap.ByteCodesPacket - if r, ok := resp.(*ByteCodes); !ok { - return fmt.Errorf("bytecodes response wrong: %T %v", resp, resp) - } else { - res = (*snap.ByteCodesPacket)(r) + res, ok := msg.(*snap.ByteCodesPacket) + if !ok { + return fmt.Errorf("bytecodes response wrong: %T %v", msg, msg) } if exp, got := tc.expHashes, len(res.Codes); exp != got { for i, c := range res.Codes { - fmt.Printf("%d. %#x\n", i, c) + t.Logf("%d. %#x\n", i, c) } return fmt.Errorf("expected %d bytecodes, got %d", exp, got) } @@ -654,25 +940,24 @@ func (s *Suite) snapGetTrieNodes(t *utesting.T, tc *trieNodesTest) error { if err = conn.peer(s.chain, nil); err != nil { t.Fatalf("peering failed: %v", err) } - // write request - req := &GetTrieNodes{ + + // write0 request + req := &snap.GetTrieNodesPacket{ ID: uint64(rand.Int63()), Root: tc.root, Paths: tc.paths, Bytes: tc.nBytes, } - resp, err := conn.snapRequest(req, req.ID, s.chain) + msg, err := conn.snapRequest(snap.GetTrieNodesMsg, req) if err != nil { if tc.expReject { return nil } return fmt.Errorf("trienodes request failed: %v", err) } - var res *snap.TrieNodesPacket - if r, ok := resp.(*TrieNodes); !ok { - return fmt.Errorf("trienodes response wrong: %T %v", resp, resp) - } else { - res = (*snap.TrieNodesPacket)(r) + res, ok := msg.(*snap.TrieNodesPacket) + if !ok { + return fmt.Errorf("trienodes response wrong: %T %v", msg, msg) } // Check the correctness @@ -683,14 +968,14 @@ func (s *Suite) snapGetTrieNodes(t *utesting.T, tc *trieNodesTest) error { hash := make([]byte, 32) trienodes := res.Nodes if got, want := len(trienodes), len(tc.expHashes); got != want { - return fmt.Errorf("wrong trienode count, got %d, want %d\n", got, want) + return fmt.Errorf("wrong trienode count, got %d, want %d", got, want) } for i, trienode := range trienodes { hasher.Reset() hasher.Write(trienode) hasher.Read(hash) if got, want := hash, tc.expHashes[i]; !bytes.Equal(got, want[:]) { - fmt.Printf("hash %d wrong, got %#x, want %#x\n", i, got, want) + t.Logf(" hash %d wrong, got %#x, want %#x\n", i, got, want) err = fmt.Errorf("hash %d wrong, got %#x, want %#x", i, got, want) } } diff --git a/cmd/devp2p/internal/ethtest/snapTypes.go b/cmd/devp2p/internal/ethtest/snapTypes.go deleted file mode 100644 index 6bcaa9291a..0000000000 --- a/cmd/devp2p/internal/ethtest/snapTypes.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2022 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package ethtest - -import "github.com/ethereum/go-ethereum/eth/protocols/snap" - -// GetAccountRange represents an account range query. -type GetAccountRange snap.GetAccountRangePacket - -func (msg GetAccountRange) Code() int { return 33 } -func (msg GetAccountRange) ReqID() uint64 { return msg.ID } - -type AccountRange snap.AccountRangePacket - -func (msg AccountRange) Code() int { return 34 } -func (msg AccountRange) ReqID() uint64 { return msg.ID } - -type GetStorageRanges snap.GetStorageRangesPacket - -func (msg GetStorageRanges) Code() int { return 35 } -func (msg GetStorageRanges) ReqID() uint64 { return msg.ID } - -type StorageRanges snap.StorageRangesPacket - -func (msg StorageRanges) Code() int { return 36 } -func (msg StorageRanges) ReqID() uint64 { return msg.ID } - -type GetByteCodes snap.GetByteCodesPacket - -func (msg GetByteCodes) Code() int { return 37 } -func (msg GetByteCodes) ReqID() uint64 { return msg.ID } - -type ByteCodes snap.ByteCodesPacket - -func (msg ByteCodes) Code() int { return 38 } -func (msg ByteCodes) ReqID() uint64 { return msg.ID } - -type GetTrieNodes snap.GetTrieNodesPacket - -func (msg GetTrieNodes) Code() int { return 39 } -func (msg GetTrieNodes) ReqID() uint64 { return msg.ID } - -type TrieNodes snap.TrieNodesPacket - -func (msg TrieNodes) Code() int { return 40 } -func (msg TrieNodes) ReqID() uint64 { return msg.ID } diff --git a/cmd/devp2p/internal/ethtest/suite.go b/cmd/devp2p/internal/ethtest/suite.go index 0b56c8cf4b..dd42ec7f7f 100644 --- a/cmd/devp2p/internal/ethtest/suite.go +++ b/cmd/devp2p/internal/ethtest/suite.go @@ -17,35 +17,47 @@ package ethtest import ( - "time" + "crypto/rand" + "math/big" + "reflect" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus/misc/eip4844" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/kzg4844" "github.com/ethereum/go-ethereum/eth/protocols/eth" "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/holiman/uint256" ) // Suite represents a structure used to test a node's conformance // to the eth protocol. type Suite struct { - Dest *enode.Node - - chain *Chain - fullChain *Chain + Dest *enode.Node + chain *Chain + engine *EngineClient } // NewSuite creates and returns a new eth-test suite that can // be used to test the given node against the given blockchain // data. -func NewSuite(dest *enode.Node, chainfile string, genesisfile string) (*Suite, error) { - chain, err := loadChain(chainfile, genesisfile) +func NewSuite(dest *enode.Node, chainDir, engineURL, jwt string) (*Suite, error) { + chain, err := NewChain(chainDir) if err != nil { return nil, err } + engine, err := NewEngineClient(chainDir, engineURL, jwt) + if err != nil { + return nil, err + } + return &Suite{ - Dest: dest, - chain: chain.Shorten(1000), - fullChain: chain, + Dest: dest, + chain: chain, + engine: engine, }, nil } @@ -60,34 +72,30 @@ func (s *Suite) EthTests() []utesting.Test { {Name: "TestZeroRequestID", Fn: s.TestZeroRequestID}, // get block bodies {Name: "TestGetBlockBodies", Fn: s.TestGetBlockBodies}, - // broadcast - {Name: "TestBroadcast", Fn: s.TestBroadcast}, - {Name: "TestLargeAnnounce", Fn: s.TestLargeAnnounce}, - {Name: "TestOldAnnounce", Fn: s.TestOldAnnounce}, - {Name: "TestBlockHashAnnounce", Fn: s.TestBlockHashAnnounce}, - // malicious handshakes + status + // // malicious handshakes + status {Name: "TestMaliciousHandshake", Fn: s.TestMaliciousHandshake}, {Name: "TestMaliciousStatus", Fn: s.TestMaliciousStatus}, // test transactions {Name: "TestTransaction", Fn: s.TestTransaction}, - {Name: "TestMaliciousTx", Fn: s.TestMaliciousTx}, + {Name: "TestInvalidTxs", Fn: s.TestInvalidTxs}, {Name: "TestLargeTxRequest", Fn: s.TestLargeTxRequest}, {Name: "TestNewPooledTxs", Fn: s.TestNewPooledTxs}, + {Name: "TestBlobViolations", Fn: s.TestBlobViolations}, } } func (s *Suite) SnapTests() []utesting.Test { return []utesting.Test{ - {Name: "TestSnapStatus", Fn: s.TestSnapStatus}, - {Name: "TestSnapAccountRange", Fn: s.TestSnapGetAccountRange}, - {Name: "TestSnapGetByteCodes", Fn: s.TestSnapGetByteCodes}, - {Name: "TestSnapGetTrieNodes", Fn: s.TestSnapTrieNodes}, - {Name: "TestSnapGetStorageRanges", Fn: s.TestSnapGetStorageRanges}, + {Name: "Status", Fn: s.TestSnapStatus}, + {Name: "AccountRange", Fn: s.TestSnapGetAccountRange}, + {Name: "GetByteCodes", Fn: s.TestSnapGetByteCodes}, + {Name: "GetTrieNodes", Fn: s.TestSnapTrieNodes}, + {Name: "GetStorageRanges", Fn: s.TestSnapGetStorageRanges}, } } -// TestStatus attempts to connect to the given node and exchange -// a status message with it on the eth protocol. +// TestStatus attempts to connect to the given node and exchange a status +// message with it on the eth protocol. func (s *Suite) TestStatus(t *utesting.T) { conn, err := s.dial() if err != nil { @@ -99,8 +107,13 @@ func (s *Suite) TestStatus(t *utesting.T) { } } -// TestGetBlockHeaders tests whether the given node can respond to -// an eth `GetBlockHeaders` request and that the response is accurate. +// headersMatch returns whether the received headers match the given request +func headersMatch(expected []*types.Header, headers []*types.Header) bool { + return reflect.DeepEqual(expected, headers) +} + +// TestGetBlockHeaders tests whether the given node can respond to an eth +// `GetBlockHeaders` request and that the response is accurate. func (s *Suite) TestGetBlockHeaders(t *utesting.T) { conn, err := s.dial() if err != nil { @@ -110,8 +123,9 @@ func (s *Suite) TestGetBlockHeaders(t *utesting.T) { if err = conn.peer(s.chain, nil); err != nil { t.Fatalf("peering failed: %v", err) } - // write request - req := &GetBlockHeaders{ + // Send headers request. + req := ð.GetBlockHeadersPacket{ + RequestId: 33, GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ Origin: eth.HashOrNumber{Hash: s.chain.blocks[1].Hash()}, Amount: 2, @@ -119,25 +133,31 @@ func (s *Suite) TestGetBlockHeaders(t *utesting.T) { Reverse: false, }, } - headers, err := conn.headersRequest(req, s.chain, 33) - if err != nil { - t.Fatalf("could not get block headers: %v", err) + // Read headers response. + if err := conn.Write(ethProto, eth.GetBlockHeadersMsg, req); err != nil { + t.Fatalf("could not write to connection: %v", err) + } + headers := new(eth.BlockHeadersPacket) + if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers); err != nil { + t.Fatalf("error reading msg: %v", err) } - // check for correct headers + if got, want := headers.RequestId, req.RequestId; got != want { + t.Fatalf("unexpected request id") + } + // Check for correct headers. expected, err := s.chain.GetHeaders(req) if err != nil { t.Fatalf("failed to get headers for given request: %v", err) } - if !headersMatch(expected, headers) { + if !headersMatch(expected, headers.BlockHeadersRequest) { t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers) } } -// TestSimultaneousRequests sends two simultaneous `GetBlockHeader` requests from -// the same connection with different request IDs and checks to make sure the node -// responds with the correct headers per request. +// TestSimultaneousRequests sends two simultaneous `GetBlockHeader` requests +// from the same connection with different request IDs and checks to make sure +// the node responds with the correct headers per request. func (s *Suite) TestSimultaneousRequests(t *utesting.T) { - // create a connection conn, err := s.dial() if err != nil { t.Fatalf("dial failed: %v", err) @@ -147,8 +167,8 @@ func (s *Suite) TestSimultaneousRequests(t *utesting.T) { t.Fatalf("peering failed: %v", err) } - // create two requests - req1 := &GetBlockHeaders{ + // Create two different requests. + req1 := ð.GetBlockHeadersPacket{ RequestId: uint64(111), GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ Origin: eth.HashOrNumber{ @@ -159,7 +179,7 @@ func (s *Suite) TestSimultaneousRequests(t *utesting.T) { Reverse: false, }, } - req2 := &GetBlockHeaders{ + req2 := ð.GetBlockHeadersPacket{ RequestId: uint64(222), GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ Origin: eth.HashOrNumber{ @@ -171,46 +191,45 @@ func (s *Suite) TestSimultaneousRequests(t *utesting.T) { }, } - // write the first request - if err := conn.Write(req1); err != nil { + // Send both requests. + if err := conn.Write(ethProto, eth.GetBlockHeadersMsg, req1); err != nil { t.Fatalf("failed to write to connection: %v", err) } - // write the second request - if err := conn.Write(req2); err != nil { + if err := conn.Write(ethProto, eth.GetBlockHeadersMsg, req2); err != nil { t.Fatalf("failed to write to connection: %v", err) } - // wait for responses - msg := conn.waitForResponse(s.chain, timeout, req1.RequestId) - headers1, ok := msg.(*BlockHeaders) - if !ok { - t.Fatalf("unexpected %s", pretty.Sdump(msg)) + // Wait for responses. + headers1 := new(eth.BlockHeadersPacket) + if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers1); err != nil { + t.Fatalf("error reading block headers msg: %v", err) + } + if got, want := headers1.RequestId, req1.RequestId; got != want { + t.Fatalf("unexpected request id in response: got %d, want %d", got, want) + } + headers2 := new(eth.BlockHeadersPacket) + if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers2); err != nil { + t.Fatalf("error reading block headers msg: %v", err) } - msg = conn.waitForResponse(s.chain, timeout, req2.RequestId) - headers2, ok := msg.(*BlockHeaders) - if !ok { - t.Fatalf("unexpected %s", pretty.Sdump(msg)) + if got, want := headers2.RequestId, req2.RequestId; got != want { + t.Fatalf("unexpected request id in response: got %d, want %d", got, want) } - // check received headers for accuracy - expected1, err := s.chain.GetHeaders(req1) - if err != nil { + // Check received headers for accuracy. + if expected, err := s.chain.GetHeaders(req1); err != nil { t.Fatalf("failed to get expected headers for request 1: %v", err) + } else if !headersMatch(expected, headers1.BlockHeadersRequest) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers1) } - expected2, err := s.chain.GetHeaders(req2) - if err != nil { + if expected, err := s.chain.GetHeaders(req2); err != nil { t.Fatalf("failed to get expected headers for request 2: %v", err) - } - if !headersMatch(expected1, headers1.BlockHeadersRequest) { - t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected1, headers1) - } - if !headersMatch(expected2, headers2.BlockHeadersRequest) { - t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected2, headers2) + } else if !headersMatch(expected, headers2.BlockHeadersRequest) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers2) } } -// TestSameRequestID sends two requests with the same request ID to a -// single node. +// TestSameRequestID sends two requests with the same request ID to a single +// node. func (s *Suite) TestSameRequestID(t *utesting.T) { conn, err := s.dial() if err != nil { @@ -220,9 +239,10 @@ func (s *Suite) TestSameRequestID(t *utesting.T) { if err := conn.peer(s.chain, nil); err != nil { t.Fatalf("peering failed: %v", err) } - // create requests + + // Create two different requests with the same ID. reqID := uint64(1234) - request1 := &GetBlockHeaders{ + request1 := ð.GetBlockHeadersPacket{ RequestId: reqID, GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ Origin: eth.HashOrNumber{ @@ -231,7 +251,7 @@ func (s *Suite) TestSameRequestID(t *utesting.T) { Amount: 2, }, } - request2 := &GetBlockHeaders{ + request2 := ð.GetBlockHeadersPacket{ RequestId: reqID, GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ Origin: eth.HashOrNumber{ @@ -241,40 +261,40 @@ func (s *Suite) TestSameRequestID(t *utesting.T) { }, } - // write the requests - if err = conn.Write(request1); err != nil { + // Send the requests. + if err = conn.Write(ethProto, eth.GetBlockHeadersMsg, request1); err != nil { t.Fatalf("failed to write to connection: %v", err) } - if err = conn.Write(request2); err != nil { + if err = conn.Write(ethProto, eth.GetBlockHeadersMsg, request2); err != nil { t.Fatalf("failed to write to connection: %v", err) } - // wait for responses - msg := conn.waitForResponse(s.chain, timeout, reqID) - headers1, ok := msg.(*BlockHeaders) - if !ok { - t.Fatalf("unexpected %s", pretty.Sdump(msg)) + // Wait for the responses. + headers1 := new(eth.BlockHeadersPacket) + if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers1); err != nil { + t.Fatalf("error reading from connection: %v", err) + } + if got, want := headers1.RequestId, request1.RequestId; got != want { + t.Fatalf("unexpected request id: got %d, want %d", got, want) + } + headers2 := new(eth.BlockHeadersPacket) + if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers2); err != nil { + t.Fatalf("error reading from connection: %v", err) } - msg = conn.waitForResponse(s.chain, timeout, reqID) - headers2, ok := msg.(*BlockHeaders) - if !ok { - t.Fatalf("unexpected %s", pretty.Sdump(msg)) + if got, want := headers2.RequestId, request2.RequestId; got != want { + t.Fatalf("unexpected request id: got %d, want %d", got, want) } - // check if headers match - expected1, err := s.chain.GetHeaders(request1) - if err != nil { + // Check if headers match. + if expected, err := s.chain.GetHeaders(request1); err != nil { t.Fatalf("failed to get expected block headers: %v", err) + } else if !headersMatch(expected, headers1.BlockHeadersRequest) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers1) } - expected2, err := s.chain.GetHeaders(request2) - if err != nil { + if expected, err := s.chain.GetHeaders(request2); err != nil { t.Fatalf("failed to get expected block headers: %v", err) - } - if !headersMatch(expected1, headers1.BlockHeadersRequest) { - t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected1, headers1) - } - if !headersMatch(expected2, headers2.BlockHeadersRequest) { - t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected2, headers2) + } else if !headersMatch(expected, headers2.BlockHeadersRequest) { + t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers2) } } @@ -289,27 +309,32 @@ func (s *Suite) TestZeroRequestID(t *utesting.T) { if err := conn.peer(s.chain, nil); err != nil { t.Fatalf("peering failed: %v", err) } - req := &GetBlockHeaders{ + req := ð.GetBlockHeadersPacket{ GetBlockHeadersRequest: ð.GetBlockHeadersRequest{ Origin: eth.HashOrNumber{Number: 0}, Amount: 2, }, } - headers, err := conn.headersRequest(req, s.chain, 0) - if err != nil { - t.Fatalf("failed to get block headers: %v", err) + // Read headers response. + if err := conn.Write(ethProto, eth.GetBlockHeadersMsg, req); err != nil { + t.Fatalf("could not write to connection: %v", err) } - expected, err := s.chain.GetHeaders(req) - if err != nil { - t.Fatalf("failed to get expected block headers: %v", err) + headers := new(eth.BlockHeadersPacket) + if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, &headers); err != nil { + t.Fatalf("error reading msg: %v", err) + } + if got, want := headers.RequestId, req.RequestId; got != want { + t.Fatalf("unexpected request id") } - if !headersMatch(expected, headers) { + if expected, err := s.chain.GetHeaders(req); err != nil { + t.Fatalf("failed to get expected block headers: %v", err) + } else if !headersMatch(expected, headers.BlockHeadersRequest) { t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers) } } -// TestGetBlockBodies tests whether the given node can respond to -// a `GetBlockBodies` request and that the response is accurate. +// TestGetBlockBodies tests whether the given node can respond to a +// `GetBlockBodies` request and that the response is accurate. func (s *Suite) TestGetBlockBodies(t *utesting.T) { conn, err := s.dial() if err != nil { @@ -319,104 +344,110 @@ func (s *Suite) TestGetBlockBodies(t *utesting.T) { if err := conn.peer(s.chain, nil); err != nil { t.Fatalf("peering failed: %v", err) } - // create block bodies request - req := &GetBlockBodies{ - RequestId: uint64(55), + // Create block bodies request. + req := ð.GetBlockBodiesPacket{ + RequestId: 55, GetBlockBodiesRequest: eth.GetBlockBodiesRequest{ s.chain.blocks[54].Hash(), s.chain.blocks[75].Hash(), }, } - if err := conn.Write(req); err != nil { + if err := conn.Write(ethProto, eth.GetBlockBodiesMsg, req); err != nil { t.Fatalf("could not write to connection: %v", err) } - // wait for block bodies response - msg := conn.waitForResponse(s.chain, timeout, req.RequestId) - resp, ok := msg.(*BlockBodies) - if !ok { - t.Fatalf("unexpected: %s", pretty.Sdump(msg)) + // Wait for response. + resp := new(eth.BlockBodiesPacket) + if err := conn.ReadMsg(ethProto, eth.BlockBodiesMsg, &resp); err != nil { + t.Fatalf("error reading block bodies msg: %v", err) + } + if got, want := resp.RequestId, req.RequestId; got != want { + t.Fatalf("unexpected request id in respond", got, want) } bodies := resp.BlockBodiesResponse - t.Logf("received %d block bodies", len(bodies)) if len(bodies) != len(req.GetBlockBodiesRequest) { - t.Fatalf("wrong bodies in response: expected %d bodies, "+ - "got %d", len(req.GetBlockBodiesRequest), len(bodies)) + t.Fatalf("wrong bodies in response: expected %d bodies, got %d", len(req.GetBlockBodiesRequest), len(bodies)) } } -// TestBroadcast tests whether a block announcement is correctly -// propagated to the node's peers. -func (s *Suite) TestBroadcast(t *utesting.T) { - if err := s.sendNextBlock(); err != nil { - t.Fatalf("block broadcast failed: %v", err) - } +// randBuf makes a random buffer size kilobytes large. +func randBuf(size int) []byte { + buf := make([]byte, size*1024) + rand.Read(buf) + return buf } -// TestLargeAnnounce tests the announcement mechanism with a large block. -func (s *Suite) TestLargeAnnounce(t *utesting.T) { - nextBlock := len(s.chain.blocks) - blocks := []*NewBlock{ +// TestMaliciousHandshake tries to send malicious data during the handshake. +func (s *Suite) TestMaliciousHandshake(t *utesting.T) { + key, _ := crypto.GenerateKey() + + // Write hello to client. + var ( + pub0 = crypto.FromECDSAPub(&key.PublicKey)[1:] + version = eth.ProtocolVersions[0] + ) + handshakes := []*protoHandshake{ { - Block: largeBlock(), - TD: s.fullChain.TotalDifficultyAt(nextBlock), + Version: 5, + Caps: []p2p.Cap{ + {Name: string(randBuf(2)), Version: version}, + }, + ID: pub0, }, { - Block: s.fullChain.blocks[nextBlock], - TD: largeNumber(2), + Version: 5, + Caps: []p2p.Cap{ + {Name: "eth", Version: version}, + }, + ID: append(pub0, byte(0)), }, { - Block: largeBlock(), - TD: largeNumber(2), + Version: 5, + Caps: []p2p.Cap{ + {Name: "eth", Version: version}, + }, + ID: append(pub0, pub0...), + }, + { + Version: 5, + Caps: []p2p.Cap{ + {Name: "eth", Version: version}, + }, + ID: randBuf(2), + }, + { + Version: 5, + Caps: []p2p.Cap{ + {Name: string(randBuf(2)), Version: version}, + }, + ID: randBuf(2), }, } - - for i, blockAnnouncement := range blocks[0:3] { - t.Logf("Testing malicious announcement: %v\n", i) - conn, err := s.dial() + for _, handshake := range handshakes { + conn, err := s.dialAs(key) if err != nil { t.Fatalf("dial failed: %v", err) } - if err := conn.peer(s.chain, nil); err != nil { - t.Fatalf("peering failed: %v", err) - } - if err := conn.Write(blockAnnouncement); err != nil { + defer conn.Close() + + if err := conn.Write(ethProto, handshakeMsg, handshake); err != nil { t.Fatalf("could not write to connection: %v", err) } - // Invalid announcement, check that peer disconnected - switch msg := conn.readAndServe(s.chain, 8*time.Second).(type) { - case *Disconnect: - case *Error: - break - default: - t.Fatalf("unexpected: %s wanted disconnect", pretty.Sdump(msg)) + // Check that the peer disconnected + for i := 0; i < 2; i++ { + code, _, err := conn.Read() + if err != nil { + // Client may have disconnected without sending disconnect msg. + continue + } + switch code { + case discMsg: + case handshakeMsg: + // Discard one hello as Hello's are sent concurrently + continue + default: + t.Fatalf("unexpected msg: code %d", code) + } } - conn.Close() - } - // Test the last block as a valid block - if err := s.sendNextBlock(); err != nil { - t.Fatalf("failed to broadcast next block: %v", err) - } -} - -// TestOldAnnounce tests the announcement mechanism with an old block. -func (s *Suite) TestOldAnnounce(t *utesting.T) { - if err := s.oldAnnounce(); err != nil { - t.Fatal(err) - } -} - -// TestBlockHashAnnounce sends a new block hash announcement and expects -// the node to perform a `GetBlockHeaders` request. -func (s *Suite) TestBlockHashAnnounce(t *utesting.T) { - if err := s.hashAnnounce(); err != nil { - t.Fatalf("block hash announcement failed: %v", err) - } -} - -// TestMaliciousHandshake tries to send malicious data during the handshake. -func (s *Suite) TestMaliciousHandshake(t *utesting.T) { - if err := s.maliciousHandshakes(t); err != nil { - t.Fatal(err) } } @@ -427,46 +458,184 @@ func (s *Suite) TestMaliciousStatus(t *utesting.T) { t.Fatalf("dial failed: %v", err) } defer conn.Close() - - if err := s.maliciousStatus(conn); err != nil { - t.Fatal(err) + if err := conn.handshake(); err != nil { + t.Fatalf("handshake failed: %v", err) + } + // Create status with large total difficulty. + status := ð.StatusPacket{ + ProtocolVersion: uint32(conn.negotiatedProtoVersion), + NetworkID: s.chain.config.ChainID.Uint64(), + TD: new(big.Int).SetBytes(randBuf(2048)), + Head: s.chain.Head().Hash(), + Genesis: s.chain.GetBlock(0).Hash(), + ForkID: s.chain.ForkID(), + } + if err := conn.statusExchange(s.chain, status); err != nil { + t.Fatalf("status exchange failed: %v", err) + } + // Wait for disconnect. + code, _, err := conn.Read() + if err != nil { + t.Fatalf("error reading from connection: %v", err) + } + switch code { + case discMsg: + break + default: + t.Fatalf("expected disconnect, got: %d", code) } } -// TestTransaction sends a valid transaction to the node and -// checks if the transaction gets propagated. +// TestTransaction sends a valid transaction to the node and checks if the +// transaction gets propagated. func (s *Suite) TestTransaction(t *utesting.T) { - if err := s.sendSuccessfulTxs(t); err != nil { + // Nudge client out of syncing mode to accept pending txs. + if err := s.engine.sendForkchoiceUpdated(); err != nil { + t.Fatalf("failed to send next block: %v", err) + } + from, nonce := s.chain.GetSender(0) + inner := &types.DynamicFeeTx{ + ChainID: s.chain.config.ChainID, + Nonce: nonce, + GasTipCap: common.Big1, + GasFeeCap: s.chain.Head().BaseFee(), + Gas: 30000, + To: &common.Address{0xaa}, + Value: common.Big1, + } + tx, err := s.chain.SignTx(from, types.NewTx(inner)) + if err != nil { + t.Fatalf("failed to sign tx: %v", err) + } + if err := s.sendTxs([]*types.Transaction{tx}); err != nil { t.Fatal(err) } + s.chain.IncNonce(from, 1) } -// TestMaliciousTx sends several invalid transactions and tests whether +// TestInvalidTxs sends several invalid transactions and tests whether // the node will propagate them. -func (s *Suite) TestMaliciousTx(t *utesting.T) { - if err := s.sendMaliciousTxs(t); err != nil { - t.Fatal(err) +func (s *Suite) TestInvalidTxs(t *utesting.T) { + // Nudge client out of syncing mode to accept pending txs. + if err := s.engine.sendForkchoiceUpdated(); err != nil { + t.Fatalf("failed to send next block: %v", err) + } + + from, nonce := s.chain.GetSender(0) + inner := &types.DynamicFeeTx{ + ChainID: s.chain.config.ChainID, + Nonce: nonce, + GasTipCap: common.Big1, + GasFeeCap: s.chain.Head().BaseFee(), + Gas: 30000, + To: &common.Address{0xaa}, + } + tx, err := s.chain.SignTx(from, types.NewTx(inner)) + if err != nil { + t.Fatalf("failed to sign tx: %v", err) + } + if err := s.sendTxs([]*types.Transaction{tx}); err != nil { + t.Fatalf("failed to send txs: %v", err) + } + s.chain.IncNonce(from, 1) + + inners := []*types.DynamicFeeTx{ + // Nonce already used + { + ChainID: s.chain.config.ChainID, + Nonce: nonce - 1, + GasTipCap: common.Big1, + GasFeeCap: s.chain.Head().BaseFee(), + Gas: 100000, + }, + // Value exceeds balance + { + Nonce: nonce, + GasTipCap: common.Big1, + GasFeeCap: s.chain.Head().BaseFee(), + Gas: 100000, + Value: s.chain.Balance(from), + }, + // Gas limit too low + { + Nonce: nonce, + GasTipCap: common.Big1, + GasFeeCap: s.chain.Head().BaseFee(), + Gas: 1337, + }, + // Code size too large + { + Nonce: nonce, + GasTipCap: common.Big1, + GasFeeCap: s.chain.Head().BaseFee(), + Data: randBuf(50), + Gas: 1_000_000, + }, + // Data too large + { + Nonce: nonce, + GasTipCap: common.Big1, + GasFeeCap: s.chain.Head().BaseFee(), + To: &common.Address{0xaa}, + Data: randBuf(128), + Gas: 5_000_000, + }, + } + + var txs []*types.Transaction + for _, inner := range inners { + tx, err := s.chain.SignTx(from, types.NewTx(inner)) + if err != nil { + t.Fatalf("failed to sign tx: %v", err) + } + txs = append(txs, tx) + } + if err := s.sendInvalidTxs(txs); err != nil { + t.Fatalf("failed to send invalid txs: %v", err) } } // TestLargeTxRequest tests whether a node can fulfill a large GetPooledTransactions // request. func (s *Suite) TestLargeTxRequest(t *utesting.T) { - // send the next block to ensure the node is no longer syncing and - // is able to accept txs - if err := s.sendNextBlock(); err != nil { + // Nudge client out of syncing mode to accept pending txs. + if err := s.engine.sendForkchoiceUpdated(); err != nil { t.Fatalf("failed to send next block: %v", err) } - // send 2000 transactions to the node - hashMap, txs, err := generateTxs(s, 2000) - if err != nil { - t.Fatalf("failed to generate transactions: %v", err) + + // Generate many transactions to seed target with. + var ( + from, nonce = s.chain.GetSender(1) + count = 2000 + txs []*types.Transaction + hashes []common.Hash + set = make(map[common.Hash]struct{}) + ) + for i := 0; i < count; i++ { + inner := &types.DynamicFeeTx{ + ChainID: s.chain.config.ChainID, + Nonce: nonce + uint64(i), + GasTipCap: common.Big1, + GasFeeCap: s.chain.Head().BaseFee(), + Gas: 75000, + } + tx, err := s.chain.SignTx(from, types.NewTx(inner)) + if err != nil { + t.Fatalf("failed to sign tx: err") + } + txs = append(txs, tx) + set[tx.Hash()] = struct{}{} + hashes = append(hashes, tx.Hash()) } - if err = sendMultipleSuccessfulTxs(t, s, txs); err != nil { - t.Fatalf("failed to send multiple txs: %v", err) + s.chain.IncNonce(from, uint64(count)) + + // Send txs. + if err := s.sendTxs(txs); err != nil { + t.Fatalf("failed to send txs: %v", err) } - // set up connection to receive to ensure node is peered with the receiving connection - // before tx request is sent + + // Set up receive connection to ensure node is peered with the receiving + // connection before tx request is sent. conn, err := s.dial() if err != nil { t.Fatalf("dial failed: %v", err) @@ -475,55 +644,62 @@ func (s *Suite) TestLargeTxRequest(t *utesting.T) { if err = conn.peer(s.chain, nil); err != nil { t.Fatalf("peering failed: %v", err) } - // create and send pooled tx request - hashes := make([]common.Hash, 0) - for _, hash := range hashMap { - hashes = append(hashes, hash) - } - getTxReq := &GetPooledTransactions{ + // Create and send pooled tx request. + req := ð.GetPooledTransactionsPacket{ RequestId: 1234, GetPooledTransactionsRequest: hashes, } - if err = conn.Write(getTxReq); err != nil { + if err = conn.Write(ethProto, eth.GetPooledTransactionsMsg, req); err != nil { t.Fatalf("could not write to conn: %v", err) } - // check that all received transactions match those that were sent to node - switch msg := conn.waitForResponse(s.chain, timeout, getTxReq.RequestId).(type) { - case *PooledTransactions: - for _, gotTx := range msg.PooledTransactionsResponse { - if _, exists := hashMap[gotTx.Hash()]; !exists { - t.Fatalf("unexpected tx received: %v", gotTx.Hash()) - } + // Check that all received transactions match those that were sent to node. + msg := new(eth.PooledTransactionsPacket) + if err := conn.ReadMsg(ethProto, eth.PooledTransactionsMsg, &msg); err != nil { + t.Fatalf("error reading from connection: %v", err) + } + if got, want := msg.RequestId, req.RequestId; got != want { + t.Fatalf("unexpected request id in response: got %d, want %d", got, want) + } + for _, got := range msg.PooledTransactionsResponse { + if _, exists := set[got.Hash()]; !exists { + t.Fatalf("unexpected tx received: %v", got.Hash()) } - default: - t.Fatalf("unexpected %s", pretty.Sdump(msg)) } } -// TestNewPooledTxs tests whether a node will do a GetPooledTransactions -// request upon receiving a NewPooledTransactionHashes announcement. +// TestNewPooledTxs tests whether a node will do a GetPooledTransactions request +// upon receiving a NewPooledTransactionHashes announcement. func (s *Suite) TestNewPooledTxs(t *utesting.T) { - // send the next block to ensure the node is no longer syncing and - // is able to accept txs - if err := s.sendNextBlock(); err != nil { + // Nudge client out of syncing mode to accept pending txs. + if err := s.engine.sendForkchoiceUpdated(); err != nil { t.Fatalf("failed to send next block: %v", err) } - - // generate 50 txs - _, txs, err := generateTxs(s, 50) - if err != nil { - t.Fatalf("failed to generate transactions: %v", err) - } - hashes := make([]common.Hash, len(txs)) - types := make([]byte, len(txs)) - sizes := make([]uint32, len(txs)) - for i, tx := range txs { + var ( + count = 50 + from, nonce = s.chain.GetSender(1) + hashes = make([]common.Hash, count) + txTypes = make([]byte, count) + sizes = make([]uint32, count) + ) + for i := 0; i < count; i++ { + inner := &types.DynamicFeeTx{ + ChainID: s.chain.config.ChainID, + Nonce: nonce + uint64(i), + GasTipCap: common.Big1, + GasFeeCap: s.chain.Head().BaseFee(), + Gas: 75000, + } + tx, err := s.chain.SignTx(from, types.NewTx(inner)) + if err != nil { + t.Fatalf("failed to sign tx: err") + } hashes[i] = tx.Hash() - types[i] = tx.Type() + txTypes[i] = tx.Type() sizes[i] = uint32(tx.Size()) } + s.chain.IncNonce(from, uint64(count)) - // send announcement + // Connect to peer. conn, err := s.dial() if err != nil { t.Fatalf("dial failed: %v", err) @@ -533,40 +709,138 @@ func (s *Suite) TestNewPooledTxs(t *utesting.T) { t.Fatalf("peering failed: %v", err) } - var ann Message = NewPooledTransactionHashes{Types: types, Sizes: sizes, Hashes: hashes} - if conn.negotiatedProtoVersion < eth.ETH68 { - ann = NewPooledTransactionHashes66(hashes) - } - err = conn.Write(ann) + // Send announcement. + ann := eth.NewPooledTransactionHashesPacket68{Types: txTypes, Sizes: sizes, Hashes: hashes} + err = conn.Write(ethProto, eth.NewPooledTransactionHashesMsg, ann) if err != nil { t.Fatalf("failed to write to connection: %v", err) } - // wait for GetPooledTxs request + // Wait for GetPooledTxs request. for { - msg := conn.readAndServe(s.chain, timeout) + msg, err := conn.ReadEth() + if err != nil { + t.Fatalf("failed to read eth msg: %v", err) + } switch msg := msg.(type) { - case *GetPooledTransactions: + case *eth.GetPooledTransactionsPacket: if len(msg.GetPooledTransactionsRequest) != len(hashes) { t.Fatalf("unexpected number of txs requested: wanted %d, got %d", len(hashes), len(msg.GetPooledTransactionsRequest)) } return - - // ignore propagated txs from previous tests - case *NewPooledTransactionHashes66: + case *eth.NewPooledTransactionHashesPacket68: continue - case *NewPooledTransactionHashes: - continue - case *Transactions: - continue - - // ignore block announcements from previous tests - case *NewBlockHashes: - continue - case *NewBlock: + case *eth.TransactionsPacket: continue default: t.Fatalf("unexpected %s", pretty.Sdump(msg)) } } } + +func makeSidecar(data ...byte) *types.BlobTxSidecar { + var ( + blobs = make([]kzg4844.Blob, len(data)) + commitments []kzg4844.Commitment + proofs []kzg4844.Proof + ) + for i := range blobs { + blobs[i][0] = data[i] + c, _ := kzg4844.BlobToCommitment(blobs[i]) + p, _ := kzg4844.ComputeBlobProof(blobs[i], c) + commitments = append(commitments, c) + proofs = append(proofs, p) + } + return &types.BlobTxSidecar{ + Blobs: blobs, + Commitments: commitments, + Proofs: proofs, + } +} + +func (s *Suite) makeBlobTxs(count, blobs int, discriminator byte) (txs types.Transactions) { + from, nonce := s.chain.GetSender(5) + for i := 0; i < count; i++ { + // Make blob data, max of 2 blobs per tx. + blobdata := make([]byte, blobs%2) + for i := range blobdata { + blobdata[i] = discriminator + blobs -= 1 + } + inner := &types.BlobTx{ + ChainID: uint256.MustFromBig(s.chain.config.ChainID), + Nonce: nonce + uint64(i), + GasTipCap: uint256.NewInt(1), + GasFeeCap: uint256.MustFromBig(s.chain.Head().BaseFee()), + Gas: 100000, + BlobFeeCap: uint256.MustFromBig(eip4844.CalcBlobFee(*s.chain.Head().ExcessBlobGas())), + BlobHashes: makeSidecar(blobdata...).BlobHashes(), + Sidecar: makeSidecar(blobdata...), + } + tx, err := s.chain.SignTx(from, types.NewTx(inner)) + if err != nil { + panic("blob tx signing failed") + } + txs = append(txs, tx) + } + return txs +} + +func (s *Suite) TestBlobViolations(t *utesting.T) { + if err := s.engine.sendForkchoiceUpdated(); err != nil { + t.Fatalf("send fcu failed: %v", err) + } + // Create blob txs for each tests with unqiue tx hashes. + var ( + t1 = s.makeBlobTxs(2, 3, 0x1) + t2 = s.makeBlobTxs(2, 3, 0x2) + ) + for _, test := range []struct { + ann eth.NewPooledTransactionHashesPacket68 + resp eth.PooledTransactionsResponse + }{ + // Invalid tx size. + { + ann: eth.NewPooledTransactionHashesPacket68{ + Types: []byte{types.BlobTxType, types.BlobTxType}, + Sizes: []uint32{uint32(t1[0].Size()), uint32(t1[1].Size() + 10)}, + Hashes: []common.Hash{t1[0].Hash(), t1[1].Hash()}, + }, + resp: eth.PooledTransactionsResponse(t1), + }, + // Wrong tx type. + { + ann: eth.NewPooledTransactionHashesPacket68{ + Types: []byte{types.DynamicFeeTxType, types.BlobTxType}, + Sizes: []uint32{uint32(t2[0].Size()), uint32(t2[1].Size())}, + Hashes: []common.Hash{t2[0].Hash(), t2[1].Hash()}, + }, + resp: eth.PooledTransactionsResponse(t2), + }, + } { + conn, err := s.dial() + if err != nil { + t.Fatalf("dial fail: %v", err) + } + if err := conn.peer(s.chain, nil); err != nil { + t.Fatalf("peering failed: %v", err) + } + if err := conn.Write(ethProto, eth.NewPooledTransactionHashesMsg, test.ann); err != nil { + t.Fatalf("sending announcement failed: %v", err) + } + req := new(eth.GetPooledTransactionsPacket) + if err := conn.ReadMsg(ethProto, eth.GetPooledTransactionsMsg, req); err != nil { + t.Fatalf("reading pooled tx request failed: %v", err) + } + resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, PooledTransactionsResponse: test.resp} + if err := conn.Write(ethProto, eth.PooledTransactionsMsg, resp); err != nil { + t.Fatalf("writing pooled tx response failed: %v", err) + } + if code, _, err := conn.Read(); err != nil { + t.Fatalf("expected disconnect on blob violation, got err: %v", err) + } else if code != discMsg { + t.Fatalf("expected disconnect on blob violation, got msg code: %d", code) + } + conn.Close() + } +} diff --git a/cmd/devp2p/internal/ethtest/suite_test.go b/cmd/devp2p/internal/ethtest/suite_test.go index 7890c31348..79146c8aba 100644 --- a/cmd/devp2p/internal/ethtest/suite_test.go +++ b/cmd/devp2p/internal/ethtest/suite_test.go @@ -17,37 +17,53 @@ package ethtest import ( + crand "crypto/rand" + "fmt" "os" + "path" "testing" "time" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/catalyst" "github.com/ethereum/go-ethereum/eth/ethconfig" "github.com/ethereum/go-ethereum/internal/utesting" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" ) -var ( - genesisFile = "./testdata/genesis.json" - halfchainFile = "./testdata/halfchain.rlp" - fullchainFile = "./testdata/chain.rlp" -) +func makeJWTSecret() (string, [32]byte, error) { + var secret [32]byte + if _, err := crand.Read(secret[:]); err != nil { + return "", secret, fmt.Errorf("failed to create jwt secret: %v", err) + } + jwtPath := path.Join(os.TempDir(), "jwt_secret") + if err := os.WriteFile(jwtPath, []byte(hexutil.Encode(secret[:])), 0600); err != nil { + return "", secret, fmt.Errorf("failed to prepare jwt secret file: %v", err) + } + return jwtPath, secret, nil +} func TestEthSuite(t *testing.T) { - geth, err := runGeth() + jwtPath, secret, err := makeJWTSecret() + if err != nil { + t.Fatalf("could not make jwt secret: %v", err) + } + geth, err := runGeth("./testdata", jwtPath) if err != nil { t.Fatalf("could not run geth: %v", err) } defer geth.Close() - suite, err := NewSuite(geth.Server().Self(), fullchainFile, genesisFile) + suite, err := NewSuite(geth.Server().Self(), "./testdata", geth.HTTPAuthEndpoint(), common.Bytes2Hex(secret[:])) if err != nil { t.Fatalf("could not create new test suite: %v", err) } for _, test := range suite.EthTests() { t.Run(test.Name, func(t *testing.T) { - result := utesting.RunTAP([]utesting.Test{{Name: test.Name, Fn: test.Fn}}, os.Stdout) + result := utesting.RunTests([]utesting.Test{{Name: test.Name, Fn: test.Fn}}, os.Stdout) if result[0].Failed { t.Fatal() } @@ -56,19 +72,23 @@ func TestEthSuite(t *testing.T) { } func TestSnapSuite(t *testing.T) { - geth, err := runGeth() + jwtPath, secret, err := makeJWTSecret() + if err != nil { + t.Fatalf("could not make jwt secret: %v", err) + } + geth, err := runGeth("./testdata", jwtPath) if err != nil { t.Fatalf("could not run geth: %v", err) } defer geth.Close() - suite, err := NewSuite(geth.Server().Self(), fullchainFile, genesisFile) + suite, err := NewSuite(geth.Server().Self(), "./testdata", geth.HTTPAuthEndpoint(), common.Bytes2Hex(secret[:])) if err != nil { t.Fatalf("could not create new test suite: %v", err) } for _, test := range suite.SnapTests() { t.Run(test.Name, func(t *testing.T) { - result := utesting.RunTAP([]utesting.Test{{Name: test.Name, Fn: test.Fn}}, os.Stdout) + result := utesting.RunTests([]utesting.Test{{Name: test.Name, Fn: test.Fn}}, os.Stdout) if result[0].Failed { t.Fatal() } @@ -77,20 +97,23 @@ func TestSnapSuite(t *testing.T) { } // runGeth creates and starts a geth node -func runGeth() (*node.Node, error) { +func runGeth(dir string, jwtPath string) (*node.Node, error) { stack, err := node.New(&node.Config{ + AuthAddr: "127.0.0.1", + AuthPort: 0, P2P: p2p.Config{ ListenAddr: "127.0.0.1:0", NoDiscovery: true, MaxPeers: 10, // in case a test requires multiple connections, can be changed in the future NoDial: true, }, + JWTSecret: jwtPath, }) if err != nil { return nil, err } - err = setupGeth(stack) + err = setupGeth(stack, dir) if err != nil { stack.Close() return nil, err @@ -102,12 +125,11 @@ func runGeth() (*node.Node, error) { return stack, nil } -func setupGeth(stack *node.Node) error { - chain, err := loadChain(halfchainFile, genesisFile) +func setupGeth(stack *node.Node, dir string) error { + chain, err := NewChain(dir) if err != nil { return err } - backend, err := eth.New(stack, ðconfig.Config{ Genesis: &chain.genesis, NetworkId: chain.genesis.Config.ChainID.Uint64(), // 19763 @@ -120,8 +142,9 @@ func setupGeth(stack *node.Node) error { if err != nil { return err } - backend.SetSynced() - + if err := catalyst.Register(stack, backend); err != nil { + return fmt.Errorf("failed to register catalyst service: %v", err) + } _, err = backend.BlockChain().InsertChain(chain.blocks[1:]) return err } diff --git a/cmd/devp2p/internal/ethtest/testdata/accounts.json b/cmd/devp2p/internal/ethtest/testdata/accounts.json new file mode 100644 index 0000000000..c9666235a8 --- /dev/null +++ b/cmd/devp2p/internal/ethtest/testdata/accounts.json @@ -0,0 +1,62 @@ +{ + "0x0c2c51a0990aee1d73c1228de158688341557508": { + "key": "0xbfcd0e032489319f4e5ca03e643b2025db624be6cf99cbfed90c4502e3754850" + }, + "0x14e46043e63d0e3cdcf2530519f4cfaf35058cb2": { + "key": "0x457075f6822ac29481154792f65c5f1ec335b4fea9ca20f3fea8fa1d78a12c68" + }, + "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c": { + "key": "0x865898edcf43206d138c93f1bbd86311f4657b057658558888aa5ac4309626a6" + }, + "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf": { + "key": "0xee7f7875d826d7443ccc5c174e38b2c436095018774248a8074ee92d8914dcdb" + }, + "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759": { + "key": "0x25e6ce8611cefb5cd338aeaa9292ed2139714668d123a4fb156cabb42051b5b7" + }, + "0x2d389075be5be9f2246ad654ce152cf05990b209": { + "key": "0x19168cd7767604b3d19b99dc3da1302b9ccb6ee9ad61660859e07acd4a2625dd" + }, + "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c": { + "key": "0x71aa7d299c7607dabfc3d0e5213d612b5e4a97455b596c2f642daac43fa5eeaa" + }, + "0x4340ee1b812acb40a1eb561c019c327b243b92df": { + "key": "0x47f666f20e2175606355acec0ea1b37870c15e5797e962340da7ad7972a537e8" + }, + "0x4a0f1452281bcec5bd90c3dce6162a5995bfe9df": { + "key": "0xa88293fefc623644969e2ce6919fb0dbd0fd64f640293b4bf7e1a81c97e7fc7f" + }, + "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8": { + "key": "0x6e1e16a9c15641c73bf6e237f9293ab1d4e7c12b9adf83cfc94bcf969670f72d" + }, + "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0": { + "key": "0x41be4e00aac79f7ffbb3455053ec05e971645440d594c047cdcc56a3c7458bd6" + }, + "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e": { + "key": "0xc825f31cd8792851e33a290b3d749e553983111fc1f36dfbbdb45f101973f6a9" + }, + "0x717f8aa2b982bee0e29f573d31df288663e1ce16": { + "key": "0x8d0faa04ae0f9bc3cd4c890aa025d5f40916f4729538b19471c0beefe11d9e19" + }, + "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f": { + "key": "0x4552dbe6ca4699322b5d923d0c9bcdd24644f5db8bf89a085b67c6c49b8a1b91" + }, + "0x83c7e323d189f18725ac510004fdc2941f8c4a78": { + "key": "0x34391cbbf06956bb506f45ec179cdd84df526aa364e27bbde65db9c15d866d00" + }, + "0x84e75c28348fb86acea1a93a39426d7d60f4cc46": { + "key": "0xf6a8f1603b8368f3ca373292b7310c53bec7b508aecacd442554ebc1c5d0c856" + }, + "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0": { + "key": "0x8d56bcbcf2c1b7109e1396a28d7a0234e33544ade74ea32c460ce4a443b239b1" + }, + "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d": { + "key": "0xfc39d1c9ddbba176d806ebb42d7460189fe56ca163ad3eb6143bfc6beb6f6f72" + }, + "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc": { + "key": "0x9ee3fd550664b246ad7cdba07162dd25530a3b1d51476dd1d85bbc29f0592684" + }, + "0xeda8645ba6948855e3b3cd596bbb07596d59c603": { + "key": "0x14cdde09d1640eb8c3cda063891b0453073f57719583381ff78811efa6d4199f" + } +} \ No newline at end of file diff --git a/cmd/devp2p/internal/ethtest/testdata/chain.rlp b/cmd/devp2p/internal/ethtest/testdata/chain.rlp index 5ebc2f3bb788825e2c5fc48ecfb85a697f016506..2964c02bb1fb7f695fe6eb9c1c113f9db0b7c97b 100644 GIT binary patch literal 341951 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

NeOABySp1{ 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%0Ai}13c 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

nbUZX{hpjpZPUAB$I%G; z7Ubuhc>}XeIfe8$(H;2P&t}YYK;Du*Dr?1s_4kZgJGCx*0O;@kMfyLV2>w3!UmyQ| z2RcI%2}$OEee>!8^!un+Py9b$$iN=UTz!S~&rbs({qrZ0uVW&^e!~A8i3$5d|9t*` zo=5rfqd@;N@qc|S^XJL`IpY%c4D`9b0?va#m%+cIDw`e|fFLjY4{j)~iZS2idC%AA zDuf?nEv?o2vt?e&ed;mGtK%f_{ew=f;FEWje@0a<{ntiS^1n^CFOHkcTC`IE6>H%+k)UefO7J3VBy&aw$fXddT`~9hFJkY+wf| z3q%zibt*W-FwH{}_een@abKl8`^W{clkfUB5dP|W3@6FA4a!92QIZUM89Cb-jBO%9 zM?+X(=GUi|`60qD^LAeWt~!7L#IgikmVW;sc{!@G`3ddiP5g2`hvkzQkp80MY0l)m zalhb(Hz$7kbFxj(LxB>jyeP0hD9O;to=^7GvSj$fWReF*wOv^;`o6O~YFT8g>(j+J zSv-=_vtsJOd3X;~|K5A!nPU`d823s%yV&oSFl(F$DrNnyya;s5Zs?kt(ZVZbPT>&a!5uGDNa8LQ|);YaZ-xGVnHxYxLji zGk07jvj?*yr?A;f=~{Pb(Vxj4#CcF%^ZiEfoMbx&1>SpUbXrO=q7HvZmp{X;2-O-` zO?q7V*#r0fqw~=1rtyBIYQO>m1`q=N3cx~w33wlJDL~aBv?`nPg7{$ec4It)XseVA zS1`-!3|ZBCo(0{6o(S;64?hOdicbEWqkqfq8fmMT+`2~#Rsv=Zf64)7%+ek02P1&6VR4(xnFwX9a|~wS4`$tflM4*Nqc|)F{Xda}ypCWb z>8j+YH5U`a-BghN3)`QUr&y>k0UfQEhp41BQYz;sweiDTiSliFzni7WOrnu&mivxR z=hc~i`f?L2JS9Gt?w@FIB>?R%g(zs~b5=5St#C(%Sv0Mff{(4$4=+X;Cgp^k&t7?*iynlp)}==PPSF zqrq)zH=OW4H`h&2HZNX_h$356fcJ_i-qj##kH;CH%>+tRFEh(}k2Buu*1Ki5)0OUu z1|2w@0TviAfDix`fDRMTHFNn^RZFC{62)WJ!`$6T0m8XM6jn7KOz9NM9H)EvUSEeT zEWp~ts*&*?3R#x|{*I~)(Vk?RE*N{|y7LSSBY=u>|!ph@4<}sYY#+JGjacns$BlhMpe$$MP1*J;c!5Y**wT?FU)V-JRd(P z`1FDxJnZa(cEnVAbkN!H_P)VOf7(hEz55DBm~QGOaU!E<{sC&H4pJ`aGn{1%uOFi{ zvhT3hg_^Lfi3h#(3G|8`Jyp5LXZ|+uB{Pq;sfoIRch<35QxErpT2nbjKP2A#yWNRz z%_@U&Kx!Cd#g1jagN#%wvkzyLttt40(Df&)TTdN7-}bJV+BxG!hv?+4bbG7ZmdH<# z8BkbnJ>?Yok`j-u`BK3nPa~kckr;LubZC&_7=ti4#-?&kennKeL61(^dbiw9(+C|o zi=BH1-t)8y@5H3okcn>V-;QFFz4Ij2)`s(S&%B#YpjmD#s#A;CR++*-3A zZuG51?XDl`9^7Sgq4RD4EHGdIApj}>3nrik`|?aZW*oYvnzGv6axYzdRXSk?W7pRO zKlDTD&0^Yy_{VP+g5`QME6C*Uvs?*~QzoDneZQ9X!}%enUwgIC@yD!X&+)b~Z)ECT zLyCSwI0c-#1UAM|w|%1Xe!!mBb_a7uhhb}sW{rjAk*MkPAV(}txT z^w=Fwj1Y-MG4)}~yqevQ=OG#Btg=LJ?oO-1dt33WvOI@qq%(>O8ncUzg9NRjgJ~0^u|q|*u%%dI?lnW@?GZ^ zoISv-%4}tc+apL*xn;s^+n=e#zDM(zc(Ig1RGFpZ{UJVJfdK;u0Z;+gVFLPYU0xp) ziXBwMACF;8Elnp76lTH7CL#S|eWuB5wV3J}PC`&M_%S2WPxPpw>MH?LvBTow1^x~9 z91DJ6YyE_@-o2>pK`3cDn5G|MMN8DB#tJgd%i!NxMnsY|NPd? zw9;ivFx8jYH(b0SEmr~`E+^ zyRnjx>hpI<_sHJpI)UZeDjXVl)-j13DmOr2-4&UY<=o(JR{~t#20xioiQrsvM32rA zit*Z~vb4#T_V)JqG4=i;(2f&M0R%=E8kLm`U+)|<<16?&p);Z?a~FK^LNoco9_h|} zWC~bdzyLx3Q~*9qz<|x=xPTH*SL;W*+UEE%`g!Tx(H5RdL8>_8=iydt+haXJQutu1 z7}9fIF`~080ralt$3zl8-|&Akc#7#QbJqFU>5F-&LY#`4T}KzqwgQ|2wqp9|H7U!5 z^S3eXec*QJx7y#kUasV2Wg}SNyb;qg16W|d073v%00B(Ep!?;>5Ie7RIVUW;@ssVls7s*J$oLztd2%+aYq0 zM@}qD>L0n^s3je{k}!_Rx<||4QesW5lrYMDI&kouM2xCL0^I%{1||F>;LoVap_i9~ zgYKMZupEDqA>|LWSMUCrLiX9eTKlEaSbI>_$0v`Hq5{{U5O zX*kFSLi4DE=7YSRhiYo^vqm)kot|J1$5;0W3+~H-r{>2`L|{iB1M4iQc|@DHh&}Nh z%=$XJ#r@EZPEqC|`!YDotD)=E4W~71klI_@>aGpqgO%7mTfAzSK@3Lv1(69);nw_` zTO-qe%>*!j=r+)9Lj>zK!%3Gz%4nsU!YHjYf6_0zIY^o6v+h75AQGj&6RM&DL%wBv zNdPO+Hzjm6N^oASH#ed)7!G$zdu>Jd?xn6Qodtis=+G{i+Z4se4A!WN--c5FR?gy& z@Y4yb8!P(9p;`wCXP&L)digf)zp^RTLztFC0SgQmKnQ>eAchI}QgAt_u;1W)g@L=w z*QDP3o;Qgp7z|zwouBHt%4!-FCxuE-t-#N}EVO_fish~ZBk6w zEHGdIApk0X1SVjl{&H9;s5MoRt=2fGwpm{6MVQ%PBC}-mK8m~-=ES}3y=@9suo+#J zi;sJ63R2{02#yGL^`gV@KH)}BbgAdCp{*; zx-FfB-3Cqpy=xc_Kk7$Ci+)0k-zFE{ppmHScQYJWO5SJ4Je^*n0xU3K03iS>fE*@Z z{N(aBDZ!oE@hLxu&R0WANr<2CT92yUT~8E{Stc|fYIyFI9SgQ6LN-YwAs4$6AS5)6 zSK)6YmaWR4?toz#Le~y%fjnuM#i@7G$2T*>f>Qu9 zb^Kcvo6)S0`Y;v10s{sR0-ypYU;-v_E^n38#9%FrDOYk{6LPRP$!^DYUi{)CWqxV+ zOjqCD_X)}(@U2jX*FU-QW3B|a+1yrnyd2)y-Hutu8BaLrw2yRXe)A#=^Hpdxhv=aL zoC2hyOxYNd9pI0;emJ`8tK2V{XOxQ=h_)KUAj9n4%^x z8BYiGkOo6Zz}IzJZ1c?hCL7h!_x8Cmzj%eR(8|5-B(bBNUX8bZ0D<1E66NnBMLhed zFmB|bA@a4--ORV)wyVjs40-NS(!CN%I_SPyC%*?Kl4gJmJ$dO z=9)7cZ$+`^KAhLhfGeTHJydH`Nqi1ek2E?oFm{Fe8&$aqIjS-eWZcgD)|JDoAVL7O za~#vLUxw|c42nTQ{fN)5E%6g6X%Mqx%ta#ynPg~{W6bNQ8X>K>@?LRo0Cb9o_^*~Y z+QPvTkd!jf87QV?qytAm=M=x@)<@)--gS3=bysS^#N3bKT7eQb(!7sK38BmnRckTV zpG~0@S#}sJxp^@?Iw0Jgq7iI3gV<3Z3Scegy5&%S4QER7a*x)o#HJ~%6YHqArzBLL zHjB@v7f#K!c|P}Hai%yGD0{sIio^<1^8=SAZ(0s}a;FRKg6?b3E1^CBed6vTCCim43lr0fr=y<0API`|vfrB9i>VsoANNk!IFlFYLv zIj?sP>^K@zx}(`sPCSn|UadncFhl{2fNKJ%zy!=#T<+EWVs|JBjB0< zYA^w_o-~&ekmw$QJz)rjUJYs@n7be5a(=G|F)g+JtZOctdZ2>F1$5A>ss;(`<=qfK zU~!)EBiYZ8B|ar+ka|9EHFd?jDTwbXut%_h0X#%LZ}rwp9zwF8oUT%C~WQ-=+^C31NuDfTk}N$$MKPl*ypGk$u+})YTAR2QtQb;k0SJjUia012>5u% zp7G>^g7ZhSt;e=*Z};~$sXl6R_ZLtsS}KEHq2@zLfN>@}@r*{WOab0Zyx8l3moz=} z3%^Un8Zuwz;7!iEzk*m`hyoY^*96dk3HVXi2mmECrG1t8=rxv{Io#-pv6MFuyHMl! ztuQ-fF`I6mmP!<8)KAAV8@2e)c>ucxi|z{mBTrDl{T}60(ufs>ADI;(3KWxg5KC|k z`$s4VxIY`%L!x5e(4H%J>|(ni@LA>bizxaX<}9&*^JtQJ*y1<1e_>orKG1^+SZMqL z04=Q)nJ>sa=DIIbgHuU8ysZnL`NZm7f+f}7^AY`Gk1U|d00Bi6r^TOpfUmlMX8Qdh z4I72dGt`&pPK!(kPS(xMlbG=zJhJ)Xr59Ojpd=tK-;mc?puer}OS};Ms-A{bnE|Hv zA)a>x#dK+G_7m87z`p>%wFfYO30UmI0)U>9!Bfr0$5a$))#~OY&hXfHCLuEC$Fkpr z!=7j9o>Bo~!Nv2L4NZGo5^xn&$pD9E6M-BGM>eTcqVe_#nYCN_-YWp*ST@3+Tr zqUiHZ`Aa|ZU`$Iv{^tXIokTZY9Blm&DYsqT>cV{B{k?;J&Vo;$|3+1={aaC$VpMKA zI-(@fXe5K2%%H{1*0O;I_ z#6WD|&6iWIZ$)~H%@t11)HSK*B-urigjbB^B^!W@$!~CED)#=lJe9wANHfC}%xO$F z&a}(JMeQ}~uZ8P1a=a33V3qL+uNz7N?ll2@ALf-40}qEAMc#JbA9yZ*7wL?|a>BS< z81B`Jbcko35CvdU`d|Nl{J-}Ft_WZb1zi3LmjtXL*#STTV<=67>1NBi6{k!sghY7s z$KzIcxyT_{GG(0;QEq-f9Y6pnHJvZo&5232$#DZ-s_Rp28(L@S7d8(tr%neuLtS~T zogT+ML*SW)l7KbpXrMmA#wXzW_s-dRNRI-dk=8RvcgXKE)7XPdq1GNW`$#J0hznwTZHPY@w~aB1J%Dw~A!k6@h>5&EiUW zWO9+Kn)Qy4FC#&852WpZS@-s0je+xdHVL*AO(~QFFsNzFll`uU*?){>-qF-*(}~E+ z7cpyn9!I6m{$wq<7~)$Tq5$Rr*C!^dU;=)!E&)J=x6f3QevhVv8Sfc1D3CDJzCz^g z@hAFdv^|U=#F(A|`1d@34NSng_%HyZ z-?ALby=wKV!n^>ZCcPr3zf9Jy&Fj$YwOysxp_>L5&?YQTewPDB^o9Vc(vAR61?KV@ z3!6gbwP7=v5k}7s^lufr%}U8yoLd@?bv(I1ZO^*zIx1hpBb6N7nY%L`ctIZ9 zzs{z5r{f{M#UTn{9&qge>|g>mw7vsC#L`batX&efkBtWlQmkiw)L^WhQL?fbetTBU zHSm(Q4ruy5v~B;k>pwdxm5rSOpFID`KaajIpo(0)qS<$TG%@gF%|le z*GerLf`Z!VI3iXYX4Xuv2=TROoL9g; zuKxE3-~bcw>#-^Tlm(>YI;2RJ>(?mB4^npVO+7zFGB2O`AX?<$vt(4Wwk(u(t24 zCb%Jh0?-0Da>&eEvFk=zP~9obSVwfG*|YajIQu?PGTi{}M^%FablG}Y7D=Vn4z{_% zsAENZO=x6?m4aPSCtYtf=XxNTJVXJk3tV>rPA~ymk!6=VD?S!CNp%{1^d=iARv?4j ztSqx>aT35*@#-wn<>FCeG0@*V#d~%cljD+rtEkFa)uHF^y;%WNUeEIJ^&R;^o|Nj0 zZ(lOvx9IsV|E_R_(gPR^UzuG*1SBOTgUHVndgP3AT->-Ht=^+AgsUiI`LqghzN?m8 z+&1@hoa8`O+j5T=9!NhK+T3F0ck!!_)Z5Yr7F7w^C9bXpx&9Jx6;-*N!3_Y_ynn!G z_CBjvZbg?pyZLCdnfS?~f&`z7u7*)RW8D48bwnUh!Fv3UO~tRe6C) zI=-_$gcJ298K$jo-stYQQ^|jB77w?IgPYMSs<=I9o@F?-o!H=WH|7z8C*W2YFw2yV zm&4qZQr`bfw;FBQxVd(iIJGPZL5d$NpNd3dW4-!0VRqCr`fk?I#>W zdqQ+Ihys}HUE3Zv*!FfR1_7W(gJ*pWNkzkoPb?!DQsUNHaf$&a*)j}LniC-+dWi3U z9JW!q`PjxD7g}3CY`C;{z7NP(~z%>E9U;_5W9RMJw#D-VN zsS1=4&gN)+y|*5^5WO7r{i!(c(Y7YCZ)a`@=;RC(Agp@zy^igZ^yZAikyz@rM<@Fxb6g*7qjAj22+5uW1 z83Lbu{OY9i4FM@!DiO_R1ksM(>*MqWLyH}+bKErVsgNL^jO_3U?mULl10vRF46Bdv zPUqFQ7&RXEGm|wn^u6>OY4NTRQ2_F+u|g~`L;;L|YXbPe1RTNz06@s+#4IWvRGiWY znVPO^MH9hMQzR5IdYZ=)?@LaZRZf9eZ_kv%o#}{f2oU&`#Ex)!5V=dyltU)8=dUtL z_KnGW8`Do?wka~oQyNMFrfKoHgA-exPw9usv3V4Sv88*QrLm3TdaBgE_l>lHt=ES8 z7sl1)j{ul}quW&gP-eT|16(nr3U8tJiT5@x9{ zRU>`h)EO4tU7@8kqAN&vZEFtOt>a$+;MxNO!2}$$qFlz+o@H7EC%i;K-BYUVGSHW8 zNVSvhW?<~9pVK_-)taTD@Dzqr{=vAg=G(`7&mHotxkw04^aT?0@nlx zfeAQ~@Bx4x0`G<))6D7*Yox60JapvX;}Jd*CHy&l>tlGGZ}u%UpqVI>PPAOw&P^9^ z^E+n!aCXXpI;LzgAoxjRA)G&h7^?;fMmQanKa7>h=tiGbnA5O`y~NaQI#zO)N%H?K*17YPu{vuipkwobq*QKAMOg= zdJ!A`!$t~90>ZT#lxoor^Q^4usv4&!IZ)b-bXCOD(d4sLmzkBGCV+Otah^r)DrtPA z+ie@eM4N~eL}mXWjC#&f9z;2PK6?al*ad@B+Gko@*6$Ir;)sf1@hb!BLfr#CXN^v85eOk7Ep; zz*lHI6yPSQ(2&W_%&^W7ok%{bp4|i;MvD}7fI=*VZ@#4Jr_@#EmLiRDBbySh)E9w z?=>|7MrT5xWNkq#W-==7b20*s7J;6VP)QtmG{uZRmV<%CZOx5aZR!xs1fl@uHrH+= z3U-?_|EBmokW`qC+R9k*L2T}$3XzQo51xm~ z<^0;OSh_~l7EbCO0Id_!em)z9vxM!A^Qh{lrA)H3L;iP9Z zpr#GlEfTiVjDwy$AuCLBQ_-N8%8+tjbw-$V`9MFVfua;V`I-e{fguWD1Y8p!4kqB@ z^&1rjDwF z?+ASA9fbOMdHv^<{|B!qPza*1>w95(vrkpVPJKGQ|6BDkIRRPa_z znZO>iyVSS2!Bn99vhOZBRYk!K0qhHrY?Z)_y|YZB3?5EuSNFKG&!5Vbp0BXVcC{t6 zLAwxpl*h79Q-sl8@?=4N)FWStBEY6@V&1oxLb(SHM5QAMvA_@oFaoX#kOUI|KQIjd z>G)MJ)|vHDcUPn22hAOEg!}RKQVaS}y_ZWCk$ow(4dgI1Av?||Y`-DEQ)HM?F*P=y zz+lR*%|CQw33a-o4&#NzfRB8C{pmh8lpb&o0WD&x;cd4Nm;Qq2yq`=9ik34%!2VA} zVya}p2llYU7`T67TwQfYfeAoZlm>vlb&apC0Xseh&73sMXS{1H{t6P#L5h#aCzpex zyw9)&L})J3;s-@eXRH+<$ZO3D-^mx)CCA>3tBh+4gZoASqKzB9zPI79)=1Fk(l8cYDxt7iC)!f!FW}Dc$#QEcZz@X1 zGyPQLMX9gxbi z5|r5cW1CbX#3&1p3zuCh5EVE0BK$4obd0}g|? z-%9y&{eiW&(rmwxJ zpM#z=oA_b8^pIKVZ1*W|R7qwIDRv9h@->j)yo18ZhuZ^-s)U0$uFeDG{u1yvsuCGh zY!3h`z~$UM@hSSKwF^4dZ(lJq!d`I^)lggSl_fmm_%$m8)O9_NIPe$F`Wscb@jr^H zw10eyH=$dp%by6j){*JfZs{N)Qh{DguScU0c9>us2(NGc`1>oJILYjB)3^MkfKT^+ zj8G1=q?ESgg4`O9qrnr9{Y+(2j+&LODFHn@$waklLtQA5al6|2Dwc9vlZ+fV2CXJ4+K}Z$^XR-5Q>bZy$%40 z0-4&h&PTLH)$k195ubP02!u@CC4^h%BQ&Dut8}XZ@|HKpMbVLk-LxE^nvvM2?&5l4 zZxIH6J&QQWds^uEqkOZbTs1g#6Zx(flr5*bM`O&E_>;bn)BZP$7>tZtjuQePLRu}q zfIikT-bY^{b`*#LSj)L?ISOC`(CrWaAe+a4wqNrb726l%^K3$*I8T~Ii8PQK-N(Nx z+;b^5+yUN4T{tg#bMa3+P3tjwk;oKI;9*kpz#>uaJ^rMnw}rdv_(m60E!o0822c{9 z!+4S-@QH4j@tgez5u6pnLJD{i_bS@BPET$IKx#h`!~#PUzzDb|KoLv;Mvx!?G+NQZ z_fAxVZbVNoQYXk@KB9t#LW#7x3Ufej(2`@^1;`;}RC$pE`m;OVRX~wHr)5P2UekvH zpXYZt%SPE4Ueaqa$T6>iFj%JS=ft3$g1+}L?ujlgH!krRU)qb%nftq^O1s2T1uKyk z*;A)4KGQ%fFhl{2fNKJjzyx4E2LeFdY(0T31rw-N>*)E*jo~J$KEH;#8!^OY!nZ4X z2T&dZ&C6Y^-slwnvjo~mjK{iqcV9A&BTXdp?qfPh>9U_)92Pt-B0q@lEvF_x=>Zv) z@B>qxFEwa9VjrS75NE`u&wVdB2v&&**lpVT;du_Rzz_v60jZCpio);6mXz_YH z)Rgt<6{mryZJ;_96Yf)I7k@1aCDpx1V_C zMj2l~EHFd?jDTwbRKNsaw}k^h(>4J%1Z9y;32M%$R;Z72+LVAqeIt3%3VhPj08xW_ zpbgsG4~albzZ(L+)^{ce`G{^#cX_-pTImu_GD`l?p6#}z*sjjM3fHj+B>|`Q?Wpu( zar$ygRcGHaDv!_9ZNL2}i#JS>>*1M4GRA^fV2A=30oMemf(f`a&IhJB7gXG zT#_0v)kUS-v@dAx6zSVXLkEH%H{T@!ilE0TA@38O-Vi`Bp*y(IhoI2BqPdJqiJS=d zF14CYJ1KW8c~~mqg-i$~0R>E^7bxmd%DyITxA5jnD1Ky(q_9^Lne~ePL|y+`t^={a z5Ct#-t_e^B6M(b%8vp`jiG|#LAoRu+y=pO;(3N|GDEc|eVaRtMXAeXHeavPc;b0@y zUHYB-Hv~xUTCI$nXyI3ADC3jF$b{^W6+OGidK}^)h~XI)}af$FMU!Rk?0sbjkQ3Rkh16EXSM%CRnF?NxLA+fmbSZBP85P!#T^q6*mvrO zCwMEFrf!CP<)Qrbn;@AUYipy>IMVq*V z@%me@j{VJwq`7+h zAC6o;l>UzguO0(#4*jRhOEkEDp7+0%AI^3r3_i$VjSkz)@6xXb5hAdi4Hn)(Pq0<%P@_D2 z0CYS_4zOyF@Aw;4x%uxzRYro?&X4@x5UgS3?C+HI&wM0Da1@ewHGwghnTzyzQri0y zNQN%SO=qs;z4Pw3(T=Xx2gPOa5nEP=vdE&$_x)!`mcf^&qdy5rH>Y!t4KYqo1o0*@6RNNdlcPTiWItqly64KjT+Ovo)?NSKlqaIp|Ucu#;_h>h#4R5EDwA1W1$##Bt*~3&3ucOpmRKNLH zrC&z7&29~1fguWD1Y8qv7fb-5Wd#64Vsea?J{rjG$ zk@K&9pkK|M9#WiL)f)o7BXee>07+9DzN5U9CC{8TBvMtge;smr(!u=Dq-P}n$`cb` z4g{PiO6x>?+xX^KCj823JXFthVIk|o*xv{ z0DY}E`Rp&D;7i(-D69T-(b?yHYz;sn19VqLD7bHl=B5Q26? z?|!1@o`#op*d@l_5c7&#wo^qKf1hh`H4+~OH_ETxeFCw-5Ct#-t_jcu6F^cFdf5f$ zM&7eLsu3v}(AepsT9P4c-;F%AA8A~wwBl%eH0%pxJtoQ!rfv9rLqMKtx2G?|fH-S6 zZI2~I`(fMx8vJ*>#wDD9i0qEJ5=SUKpk|Q&C=`v6b=szBJ4$;RolFw*wJL)RsbxI^ zyJ9^^7-E4T3Sb0W6L1eq0BM^s0K^l!Yq?Ag>^>JVEzZH#a-N@wI+Z+n1>gty#^1{2 zJOv`0r7TyY0%Y$cLx|Jj)KNo_< zMVZ#z1ggfoD7Iifupd^6*YfTKxTUra6T$;1rA071OkZj&m*>H2 zEWrH>jF zpO`aGxnB}+6;;WM9>*+`So6!NDOxHr#FN`q>8x1ii=1^RjeJD-us5`^^#K-U)99`UxKXMJ%7dv5Z^LQg!1@rPf%XJ^G7UmYfWcn^{zg?I zQ=-2FfNISpAM1G|wZFTJ0OipWkymW8P9fvJ&t#7MF5(OHcIy|qHK zb7Am?t`TYQ+Eb*5OZ5>0cRywthX5GzK5!RiOZs$LOGeRkM>VY0B(WX;F4vPZeUh}# zI@pTb(Y3##j;~YYJtD|Zlo-s;C0}~*Beh)MJvQC~=f-H4!TTxeulX;lNONT$ay3a| z{)wt|vB6@;Y99Dt>pS(%P3u+u!j8m`%-emsM8+Bs@@M8RK#1?kb7#4ic(fJNf2M6b z&plcZOxawsjm6qQ;Rqy{c6?}%MS=vDTh0tft&IrAYsODt6d$IccT1JnK-V( z2c_-JZ}{=v7CvdAI-W6|@nqNGNts{Y75;GNXeGR3nT47gVqb$OfI)u^{e7_QQPHjd zK&5*gvbH&&S@J^6D{ExwLb^vpR+y7h?=6eXv>MQ%gMjvkn`*>zYz#Mzucy4;?Dz}a zJ6Ta2oxPqnSdZxIn}snJ7i?S>2`KaAIG`lpO{6*ZT%AOzg-JNd*-C=$9qKv4bt0l^ zYd8aq-&YhC)qs~W)-u?JTIX|JLx7~hnmhfN z?`IP8mVuU)+xCs*4}5P3=#+aJ`qm2W(V}GQ2rEXGV&2#tFHyd%lgUc1qq~OM#ZVGJ zmoa2dU@JL-{;f%Z+k^Jwlw+>0nWuWmGmHDXRn$5Q5DN@Z03+a<03$E~G&=K_w+Z^K z#jY}I+cJmWayV5RlFdAm3mGh0txy znKbvstf}QA3aB1iZR$L+nb2{4#RDY)SqIO8j&?+?PMn8a`$E5-nhge{U0vG|;1Uvu}KNk!5@?*!DA>5Mq{E!;jS4)IDZ~Op6u=0$Ccqd>0A1)k00_GRON^Z> z75l3riA!wWu4J)OfnkhltA%WAnck7D#vxEqSj3Ykg7oBufPvUiQ*xbi8QNET#uB?2 zh%R0Owp%ZJpPtZcsIDrMy@ApL_NhL5KE3Cr`Z2gl`PKL0W+~J%JR%iPEKgr1)0n@+ zCx``xD1Z@gO@IlQ0QwA307z-3_;&0n=Nu0AhMTVyTqJUO&dEjr68~}#%HgL3G+dwp z{{u3SzJ%Qy0)&ueD`vdbeOh{%Z_A7BcvAJ2|0Zu8oht4XRHgKXgZ85kpSxxTDdAHB zg1cIRjffA*+Bb2ddD**E9S8=#hKKGTLo6^v0gQla0!+aKFw{x{Kn8JCQJTc>f48f? zT6CsR_{KF<9%e_#qGIWY&pt}X{tGCd{4>6Oz+&%)09)S4N!c1KQzFlJ+Bd&@x8)YA zbML>~u6C$=6_OC%2<^?{dSBmOe9A8i6Ts;wN_aB>Nb<*WtJGDKVh$`CMiVe}fLLIN z0vG|;1ek#dU>q<9fV>vknje49k4~&>@c*rV*;vXTG%hmNg4%A(RXp8Bz%-8vm3 zbxIC>CY|2$r_AjPawyLOT*KapHSC!VB&qlqxWO@@KdL_eVuuleG0?0#?b2=b6_k*Y zt!_rf=VbBgTdk=Awq&^ad0-`9?bmO}{K`fHJgTs$N;rt)Y9id?F9Cm|Dv?>>&o4Kx z_*T+a7f_b-tr8#mj7~;Xmdhsl%v$cw)Nh&YA?0Z_U{IGc6&nS~)ZeJetv|D%m*4!H zvQWDI@mEKrO%|mzmsYk-RW_ktS5cK82os_%3`5@lf3KVq#M@!#3%t}GbQh2`*{qcy zOi%X*dD@G+&6K+;ygRSIFzaw3pGGLJlv z&<;p2a@%XroBp4EON z8=?-4yU&ySP2O4)#mXmGqCiPN{qHlwp7xF9w_msQS?IpFsq^>t?36au9Vh~;3`1VAt#gfL>K7Rbv%tA&zv|^XN8o#w;Yhddj#p5;AqTtHNIP%NWS& zHNR+mLC$nTfMcZu{7Zl4ALuNV6c2`&t?BTDsg=y6oTuml2=sY=@7s90IM_5uv7dJap%G zXdOw5Cf=OVoB&CbvpJLmSXV66bV=wkmVeU8Y7!oM$!lbc#mHqFi4pYZw%HU8^i6Kxtg2Nz%dotIkEQRRW%fQAmb!JSTnL<7{)G8UBW9hy{iyfDv#_ zfE}0suG(<`sD&BLPgZjpiy**Bs~MGBM=*!m;d{uho*x?0OtWp#*g*f=HBT9lJpU}f zx=M`6Y_suY)uXU{suXRmaW^vRh2sN^2k40`rvBLCfeALyeg>8Q`FBC=?Q+b+wo{)Z z9Hqc88BB_I!rl`ZQ{_#P+*Ox ze^`#PljRE7#g0erPwPqmlBD58`!l)5-w>dpvDs;ApjG>s>*0eDzwZ0#NGCh#+|(lE zwX0Hume|@*dO(|~%!U7V)#X$^-e9s9g7eu+x9E;Y9Ja`wBe4cDG(3d(7KbQ+dBC*? zIDiS@`I!g+A>LNMPe6AoFelx!bm2lYSI%!D(z?3A$Cyx~Y@7jLrL1=*<|ae=;+XC)Cka^HU@VUntTtFOuaybY1ifqV)U zRSDT7t~|i;F9BCkm3$}^0MI@t$lNM-%R``-@=n4FJe)YT4Jr+i8hMw-&ZS-ntT-U* zmd@S80TZRaQI*?&7hxh`Q2+oh%;6sZ0D6~;FpVrM3UU7|!$dHE`?LHptjremRr1Gs z#e&)=(lcGW#lOY<=cnoLyohD^J&Ee!LGCz43BeEQZK6aHqdXr8Ke{!g#J|Vhn~L^I z5bKFB(ki&+3^7Pq;S$BGVorXC`-x6%6p3Mqit=eUR8;L*8r6m@wDB~qX}l~mPOQSk zUV#}Kyt32_Ac^36a`x~10AmsG8=f@~{RE-_W;oY|;{-Mwewq&ekl33JwRmGWmJVfR zm*QWIx8lE9D|W=U4LgT zF981p6gl*+gnaILxL{k;wE~>dp84U}@Z_At?vu7vh@6lh$taWr;3s10+I2D}zSnBx zFLl(HXWhpbK^B^ImnhkIKlj5r0%Cz73Sb0W6W{_SKv3W1atZW{jdN@?S^LjcgWn}t z1fJv=5|8Oxtgt6>l4;AI7=HlzpDD{{si*z3R}RDZ1ANSQ5y_dNJOv;x;%r&n>omIx z<`qQbHaAAgKz}F+(00}6Q+~pT*EyQMYAN7RK^H?hsM1*dk0G<`pt@+bZ+l^`<={El@gHFVpr9_I2EAq!9v;Ngy;oSmT=*_nK|^+`{8 z8_ff3XEq`DwNSlSN@RA<6^I3fD1Z@gO@JGi0O4ox08n1AT=LQyk@^=2Iwfj~yMvrT zMQ-m8qn0)zrAI&ZVa5UdUp#f%jb!A!A>hmR-<4w>!yk^VM)1stgMvSZ_f;lD!F|Ur zamX6hAjpQ204=+QvyeGuXP~JSV%pLj_(P!JJu*My*f*)B7>w5K@DK|OQ2-<0ngDk& z0U`zc01)5j2Oo6bPcGD}yRHRKWaxJkkQfm2lM9kD@Yp#!naBgRs`p+h#?}3}AwXX4 zCow9}#bU5A@P1SJ12@dDN5vA9Y15&0oh&@#1r$&caJ0`CoYK`6@R2)RZQ3Epypse} zk$zZEDYsvA=XHM09K-@c6u=0$CcpzsfM^FB0Q8v%KN|l`M0I`g0DdWAv=S$5+){$Z zdR0tfKl)n?B`J_bZEVu0Rlo0s07;$2yY!36B_^ybuKdhq(sEQzs#=kiZmNEjQO*gq z3{VpA`fXw2%MfQ}nt*j+I8CK8>b90){z}sv!YJE)jFk~4hy{iyfDv#_fG3y$vFW_a z*m`)xhRS7B8{Uuw=f_3Ao-oNgKKSewT?B znzc339||(T`u6iZ)@U@Ia=LMNw)jbw-=QRclCq`as!dh{{6I9% zTk>bW!-Rb75|C!d_uD0dD&?59vS?Xy=pp(l-WoIq?2`$hf($g501~G31gSN+= z6dQw7XN`?=c*T9<&acCPv?Gq7G)LMOv)_&2I@=jtwSmQR;= zfeXu-!|9mAnbYVz_%r)R_~#F1{RieW<}}$x7Rdd9h;b`LZ z|4dSPxk?b@d_(B-a5N++rDE}xO9?d$lT#MmI>-vxk~66S;SayKFUAPEbLdo%rUrbDy)r&7dTpK9`I`JiF)weviJ)Gu|`CbVcme z*$>>T!G}L%urdo^t0XUr_P-uirsN$8xO}Bc0;DzS0id0)CmsR!^iPBC3IpAlT`P+Z zUwdW;uhy^X*wYQfnTi9&5}pMh@Ebq8IWeiRafseJ*-d!T)D!D2CS8-wUnrk!R4J`t zIXAEn;|Oh3<({XF8;;-ci^g5;5fyJYBaq?ZyGdORZDo*!Hj5iOE5x@rL;=hLu06m9 zOn{92r_0q5i2-p5CbJElU9ZC(dK&J3;HXp6eenv8(gP*#P35xnpq z?j{uv>C<5inJ%sqD|&WDmkf942p>f;M4TauKmpH&O8%p6QaXs0(zO+rji% zX|vT73)4?VZMjGVBDVCBNvR##+z>Eap!Gh-eEWC9IZ^)4mbWB%W3k^b)j#?@0(JzW z)H|a>NdV)T>SMy{M~U<5@2yb{GF!XiC04WPgOfUwhj9a4^R^%s7@`11z%>DWU;^ZF zWG_Fc&^xU(kL9z_CwVB%)!~r3336O6tx!ls-HHQ94DGL48Q;oT-r&zT`t)(X~tRy=g zo7?cp4tObVGn`*hVT=t;E;+f+gDyGpulEnN@S9x9E=#&>Z;N`_Q1> zO@%(Wa!){mtHLwqd*hyEU}Acy%1iNE6@0x7JLv}6)dUa=3{e0h;F^E{FaZkR_yM5x z&>f`qehj-7p2&!F_?iBD7y3xC)RM@GVpZ&tKFCHuwzw%-$G|D08v^jZgJKwa*{rt( zMn%VQavX)ao~maD=4HDlX>NvxRZ~IP1ybK_gacd@EGEc2<<%WjGt;U}*>ls%R>IGP zxAx0l!lEkS{)KUMEf5GMK=E)A0Fq!3k+E^6cl<0{B%OSwIQu+<(2mBa{T3ce%}_e5ynlLi;97DS0wJLMS*yPwHqAoFjzQ zJ5?D0ijh2;$3EQUhtrREnx^G-W+DwrK(uaN=O%wo-p6XK1&gYLY!X)<@Z>K6S5cKJ zJb=rav`zgy>YQ))qAee5N*fdWlv}GZE~Z@Uo9qRN8=@)?0VVX#sxtJ6Y5qo4?*7lB zDlJN|x|M%-rQfn<94}-}^i6w!dfKx8ujLtSl-MwAu~H@9rIu zic^`1*&(_bL;=k9u5AwhwmntNOX5+F)ZU;(esdFqc{u8&|=ObSrMM0JJB+ z75#*@S@zgN`xNGSmiIzVrEtfw41!ZAsh++YX(IWC39-Ns1uz1x2?z!gpyqhl__&2@ z8tCpAY?w7vR9`-`3Mk$+j=#l_0vB$iLqujAR6v;ehw)i zlG>j`Q)|B^r4ZM2CzpX=>bY4`@Ea(fFvele85Ua1lKBZQM?IrPLi@b>QvU%X?fV)&(U2LCj3! zSOIVP@cM}^V-R!Q(U3ao@r|l`Z9l+I@P40Nhge{U0vG|;1cZPI(8#~M0PY$YENVS_ z^O2hBzNNX{8|qdVi7!l@>M7H_vmmcPN8 zfLLIN0vG|;1cZVK(CoOJ1Y2lV(L`e>M*u~6BNN?g<7Q`N>B4)IaZx_8Yo7EW(F=&# ztQt9stYdvcz(+g9GOe9$ewMO8y>>3d(R*a)B+sK?$eqpa{>J`%@fu13SeT`Pyd10q zsw-R*#ARmj6uQ_omt?Bu`rn0&eyuEd39-Ns1uz1x2?zrdpfz_n5gx6#nxUZDMUUpT z(A7n;gO)YlLBhlSOGsX6C~bj0J_zVNYePY4xBO>A*{fTH4UAQvwskB2_`Zr{(YsH5 zw2%?rnBTYm7ASY7OIonl4%@FQ|#KbWD!xh-Z z@^JscxViui2NQ7j{PM%FbcFgIWwSU&6*j+W3#SjWZ~1{NZbce{VUf%?1Qcp}6+Ujb5U$xt;3}%}p@2BO$+}6vof2yP8PVQ2l=cnQ;4?0&f&;EK8AYfU#x0WLRb@}%k_l;! z_H})H+KG@jN+lsUTr4DW`W>ZDM-id&Ca$_bkW2 z)f3>4EdP`Vgx$*Xi z7G*c6mc0U>ame0oQNmN44p}H~_rMj_aB*p=dUN|CuR4hhbF}98VjaqU^G*S6CnooE zJ=wve)`@e}Z1Ja3wbtDzd$%FHTN$bz?;)BAL;=iguH7aI>^6FjFBb*hwy#v~9Tnan zxX63Wup3IX7sKukbyEgl@}|G?55w0$>2O@yO7*#I;iuHjK~s8 z#L27JlFl28?C^5Th;jb{B>`AXu2XF2c{t)vVw>kr!_jD3KN03Q!dI}nb8s9Ii)=tF zFhl{2fNKJx!35~PxV$%D|KaYJffwP-MY`V(7;3SHei-V%q3fnq+q&1yp(Y6b4M;5b zb>YEt>cJZVq&mm~83pQh&KxuHbpy3RTIu^0dY8bEqTk1pd^41(ZU?w0gE`G zjwmJNJ3oF@4w^ez-w1!E( z$E!B|NE=a6#H-J72XAl+uTEf+6DZsJ1?U$N@y}I<@1k|S_MJNAl{NYIw7h;lWgKme zrtVL5as4!@#!;ypgOUI^#SJ2hc(aeO1MkKa1&(B+i&vA#(6cEI2oJw5?dZ)we2YUA zz&zmE17g4g+#kNYN6^5}R+U~94&Trei+OvIzzqb??=jd;MTSLCBulQeMFT`2cEmi} z|MKUf_p6x)da|V$a~9JN>lrUheyQ0=YEuWSYWOHV)qZ_P)r_+p+Uw2)c-trqQ3B=x z6`ge^tekt5tH0;&zk4I}%Lk1xxm*+tVu2wFU<6zf5DO;2aO?6u;Ym82{Re4`oLc_p zZg^98Bi%a)>d8oKT;1;PCn5+6y@4LcDW$w|!{2TQcycdwliOOY$G>gvyfowNd2|Fa zX1xoJ$B>R}VcdjWK9nBtcBqVbc*AoDt4M<3^;qkp7JOc6^)C*t?CP^-8{Z60AQl*+ z07k$y0dZgg9^hPN1uz!3#20FZ?5Q|~{K$5_JIOyh8j7nmMsKk3%yA`wfdWXhsp@rs zqbqVl06t&Z*C49WPPX}AtjPY>4CG(hzF&R`uhz5Ay6SZWC{^7Hl%Xo~exS4aSIOA1o z;N5!!sf7yiNl+4?Z&$e?63RmnEOwlaorT{iJQS#<{yi&JQlaumPcykY!~#PUzzDb| zAOTE(iNL9VY^w%>d>lD>aJw*X{5YwBu#Rr60+ z=^>Q@FG{f(ucteuyOIGZ4#$U&YLV3{dT^T^Ui4_8&_-2W2-ej&&$_)`e;lN zXun{)>(h>yp)-8xYt(^lmj?GQjH_#bL@)uSPM5i1*<5ilsavCLJq`UYT78)7>sPYG zDGT>0o2LVnE!KqI0G;VI9GF$7GcG;gDykBzaH+$@-B&cO=Z)%9hR}-f);PAb{Q2_W zoR(6v7$iR^J;3sCc1V6g;o!N!Kv2YOPeD9X3XXk0YVk1}(llk&=XRhB$%nuC0FPy* z19IKecQr$%8inY#BLt{6*(f$|6;fovqADRHaz#MWUjnY8D$SxV;{#3Lk?!BkE#EU5 zEIS48`*{vO?OCpJn`PDrd{R{bz-%bvijgFxxD^m2+L^>d>?jZgu$FV(a-M??$NbG@Eb5oUyGHsyv}bFX>sKj&Q6n&M#OTE}mWbMHNSA7_iM3CDLFCG>17qb@uZJ|Oz6qu zt&hZmZZ9oIZNb zo4y%GM?dq=a6-)}SZGigVBA>;ihlcad3I==awFi3M?NNoX*^D5Bx z0f;*%Gj$Xx1cd#kk_cCdyI4Q06P9AE31Rj1gCGAB3De0;X zwi#eFitZKlQP}b@Fbyi9xpUv$exe-78< z?pSZ+3U`K4fW4*xCm<~{8_8T8As9W+w&oKBV+c`iHa4r_GI8s=B-8{$4S)-{7LWuH zV8H@jDaD9vwk#`TCwutGo9@H}RbB$)lnW>Jc5%$V=t)20q>XzkNE#VLA?=Bm)V$jyj-=p z)NQN3R(Q`6Q4w=trz&OMKJJ5#_U3DS7zMbwPfIeU6UC}7PvChME^b>2ZMCnDZxEx% z9v5|0s|rB%6b1j%b{1c4!6uDMQrz&a7wgd*Fbd$F z#@{Q|?2xL957%g4tfsw-*&jA~rt!8>N_f0@7zMs!+JB)0Tnk8p2zXvZ3~pH5_n@4B z!K0}|b2ZiL&4O+ykR9N5PWoKNG&kWMLuWORDl3Jxf~tfYEa0kDC3-ke)QVQdxXwN} zS-54TZm>>1*Ffdv-j0Rs{-=r{aLW zFWvg*_Uhr)zkz`8w^8KZA70;FHIcmOReAl#{Evu#e*@{Czx96(n*aIa`Z4;|TV1^^ z__hBd2J!@Q5B~YJfb<~1KaUZS41-W?`oIe)(**_=C%Mv(@boM+n#(;t_<473YpUhM zl-W^thv6ci1xVgHg^+vFv-r1F<>7y;Rb_T9lOxC5hx)z3n&A<=r=~Wk@(rWD`+5Z( zzmnL?_d7v+T6`}XnQMisc1EPxO*|#Hd+tz2UZPbB>!d|B9r|`b4pL?q8l<&Wg(OXo z@wkltrb79hE&=lCIXYEU%4M{5>Q8`?Bt>(>@m}|fUFB8Ix5f3&Lw__qYw5=ytO|FP zqnwoNIzgRvpa#IFrE8KIe@TKH720lsmyXw8?v}VGw?t-iIRCKIu>S#j;Tz?(SHR>j z(=zEk)$zx`Ct>EFgjR4CZlD}eo0)&JY{O_9|-gyJeN$_pg_34Cl z_mmP47O1Hk=*AS917%pd^xoxlR@ zu|NP2jW5*&G9M?BmGHjfZO*g=nlkL~ZO5Ld1ye!!^4#BU15s}`Vu%qc{@X=eDwxw) z@0s^QCoky<72G%ID%(S~s)0!XKZthB`8y{`V5|YzL3yvwCUKmyy|ViC*5^2=XL_8v z3R4?ITnp*jl|$gGsr;|g4}OCy0iYlN_%T?31G_N*WJPQ^am37iTMd13bu#`%;?Tq4 z{trYZ&hw~mN>ShMwg7!+E*?vnkd)lifJZ?frr#&CZ7+9KL3;{ zR_EE~YK2k21ZReGu~s9UZ#v!Qklnjdje>=%`htC9o(ZIkN(=|^Rn@>r`(KYM0a-x+ z@H>G8I4X$(KyH15dTmUBl&X!f!lz8qFDML)4u$pOea~HoZI~CHi2!xEJFO3MQ{8U_ zv`+MW*`A1+d$=JP7x3xJVo)@i)z~@0^oFWU2$trUD~tjNpSRV_zqig+v5IRbQ^jjW z%<(BNcwxQFe@hDCR!gxI)M*}S0DL>(x(2+12yk)`0)T}5lTYdM94$0 zh{$#E?R|>3L=^eQow7GTA@<4-7WlY1Hv+mt($30A^QJM8)K9D1W*$UH2^N)T0k~L zfOE7402JGHDX{*S!u`}BUl_xC_xx?B%-0RdG-B+g(8}kspX-75W2^Fr9X@}(5ukc9 z_(ICzIpTx`&c@@oiy%#rOLiU}@u@-&mlWZc0~{Cy(7Ju7OR_QU5En;CuinK7SeU10 zVUn4jMkt7o504$Lg_>Zf0dN7=0&*Y%T*@N=pj0o0oSmFKDdxpQ-vy1&tSLV^9(LP? za;g=S4cO-ss{yG&5m+oabN`+vyEVA8g54!`PMo5LA`~G$=cJFAjgmCRp6+ejIE}34 z3!{K3_l;Qz)VtXgqaPy+wWjfh_RWc9LgvG_;#U=T#mTp!CKze}T)?$}T!;YI(M14g z*!58|z3@7)7U9dj{~vaf&A`r{!cElI5=9iHmwXtFKs?b+HctvF%9|SSYKhPHUKUAK zDb8wEnS=0gl`x?e6{Chp;XSJK?A3}f7zI%7xZp7saH%}Cn5G`gl9NgiL~06l(|oA7 z;aq6P?u-I8!B7L>0?bPmR?oC7G{}y&X?;Mx{eF@( z(PYR#F{^Rk!?%{UU;$UHD*0R*rV;K7V3my^YYsgBA#EBVLFJ&8EqAg&d;scwk`AK) z?_Le5bK4>%DVJMQy;YLCQjsg&s-nZc3%;Z+|Ii;b19bp7QA70lFh4y%5}lgy`<;y6 z@LlBheSSsDRbH% zS6`7ldJ(+v<#Wf0G`kw`abSFv-&U1>{v|r0p?R7&%dsDApYf;eL4HA_Cyi%aX(ZlAZIElWq{YTHFQZNKqGI{a}(Ohrz{iuc!p2W4Era8kdU`bVHDujDO}nf!Rj-VVeFJED|xv^a@D>BX{-rZaw%p8c=K6e-Ln0_6i{aJajAppt#Bn`k+p4sVp>UCmq`mOvOFP zL>`^V7Fv(?yZcO%tw5XbY*$0q>VMDDkq(=aulyLg8)cDYqHVqM8ilyNm!`9ThW|_c z#oJ^CSQnO$uNp^nsL}j*sHwo4)TtDlBE|`da!2kQZ~JLi#mEU?QuseeFw~GM0Ywl2 zo?hzUgJ38^g#9x<%KV~qRP>Vd&0Qf9$Jqr{=1bC$xfDeMH&H$`R(Y!)a=Mzo}pFJf1F0%7@ zmYJH&zPmyN^J6m5Q-4uv%Hj>*jerkjVmokueuRiwV@^$Y5-iowSe~!0p86) z08s8X3FZb(l2167zuEvo;UW=MQ%hg1t(nGG96=?uT8cns8npYM)ybV30Wy|mrMOD= zvHA-S!--LwY?^l;MxYf6ktmcFx_;8|T8B{p5zgFJ{DM~0hhBmYbgG3s+2;l|Y3Ll*Nf=HJTx3Da6wa*#12WwCj8R}sa zAjMT$lyBt9ZTcpan6u0MTLTW)#u;u;H4dYX z;c_0qMuvc0z8^~K?l z^5C3Is0oG|02gpApbR3wkD(j@I_|cU4Y!%S-YPL|dp|!R z)7dUaw)$FDE&K4d(75?mgYg9K#Ip3+b07i=*Y447vp!hBRjbOX5OWo8?iE`mIi8mh zWyGP~CTp?FBr4jT@jX&yjsCE%+~+}!J2(8x0XV8k!aL1(3xm;{k}cP@_GjGi01XmK zzXOPp)!oEvX=t2)#U10k<|2}lEiq}6&d0G-8$&>D{bB*$suBU}xY`b=_$%OVt4e=c zTyW$1``j37hRHoEi-ONB437+KpGoNLSuqcU(QDUxKcz4L+7PuEa*Jsd{cTlw1Zh>d zN%Vx!Y_@jE{dpQM-e`d6XnO(RpH`J&pxY6ZoLIY5qz*Yh&|ex-bMd-=$Y0J6=>GhQ z>xkJcHyHGk%qmg+gP07n;)s7mL$%r4{Gnc7p}VEy=>x6@nL)~sqmOlq7;Qol>N&VR zNptL{Sw*dwy?%LBD{*HW;&dmcD34*RHYJ-AV?)+4*?n8iUo((oQ_xz)KWXi#`O)|5 zc;NVpz}urkh4dc;Tv@C9YYlw*O+e%(_!K;%xv*-Nw{~o|IWvVpzuKSJ3D~Wgo1-5p z|Hw~NMn(d1I>}ThAN2pbP)_H%T^Qx@(XZ%1LC%N;%;jj#KE&|W_nz$mN0@fcvBhB& zU|G5R>-F#1jUzUXr&yTD_hal6aoB@}`dHpJioSK)n}9lk-9uq{%V>MUy=YBoZOg z;#DV|vE@(`3^f2Q;95X6L_pB^82}Wytet_{ByNa|#e_rpw3i*9lJkI_!H`|;N>@33Q@6V!26gu@K<`f(w4JJLvBB~mHW>iq>^sB&nrMPe~ zo4D{%0cN~jl1<3L%ru^2j2PkDLH>!1v*_;zCk;>&3^f2Q;95WpM8NAm+yIcgv;3=v zkx0JgQXvZ_lEe2paWKtMj*)AGvUtyqFIy;qJRhCrd4#o3Zv=QgK({BU`HUpt;rq3i ziXio{FZ1z_+HLi~Iqr2|E2$?i)&P0pG?^FWR1e7tqnaiiBYOb(*t@91&)QY!)#4O9 zTKu6V7-|4qz_ox65CI_+!2r-n?jG{+55GR-nyxn?aXAZ8sud$tn43A#$^^JT zwNHd256RCrZv@<-(Me3$^0Bi|%6Q~Q6PP#eVc20t@Dn{9v;p$nHQ$C&K%nBjL1n3O zk=Jit9o`@MxBM|V==>&8rStCzFRtwNGeS);)Bw1EYXP+o0YH%>0I0#4J4(6YCqc1D=^qN#tHlwGx}MSGoRmLe&f?0}NTI)Xaz z^bY&PA9U5?FGMb9*u)>G%wQDI64A!*GQI>FsuMVHeQ7F&$i_;SH1m+lk5Wn|hUust zYJ#B#zy(|jsDlUyH30%Zr+LT2{9Yorivsk!)+&jl&SxbpygZvlWzAgjoYXcJ$DAE%f}sY$1zZcLhX@FJ%?AJxI&n>(P=$MGClaC4 zKePaNa@WK~#D{Dxm40&)6B*?K>ibwGkp|p8x~T#DeK~>C{qj=z7Gb?!bNIqPwkeIX zGFZxf{u%Rlk9-R2C3zIb8fn!N6nIWUcl{L_l~U5&%^HRqjFW5p$1dGQVznT)`MwW~bAfu4Bwy^h(3c27^054i$r(@73wz zU;$UHD%sE^=Vqy&CCW7!OV+sKpOFQbui@J!`7>+ugfy46Jc6+X%<(6ytPlSoPg5gt zG)jIcs%}pAv2*9(p&A|k&ifyTIGt%fO)yJ3qd<6@cFhaHmL?v;onx3$Nx#IN{NNr z@hV@q2DKqi(U{-Du(BVgh_i*yVbwzqCyB7((Er%T!#dIQOuhtDPUxlVcbcdK9&@R`-cFS!Uy z4ke!5etH!P|0!dOf3H4uE$u*5GT>#G3Dg8b4S)-{763ls3E}TGz%hb`;FZ~|Ql+S4 zKbb!0@>PFg#MBe*x@xH7r96pj^UQ74=NT)|YaaJYd%FI=r$6$>1~*DHzGoZ_i~_zJ zyoKrHCMtW<5=3unw_ER6UONk;fYavi=yVIO28F#lnOmVXxBr|`BD^Gz;4Z^;S$FGG zf}j2fPTK!^Ty1u?1OdSB1pXQ-_Sq)@sDv-d>C5D7dvlk>WXnj|346^~CtTrQD8PG} z^a^;d1%ZkUTuMu7Y@#=cUXkE^WzG`J8lC8$RwZX_IL22Ysjh#-nM5q z)ObT{a*jhI)zWf9Gdeyv-!Pwfak z5Cal-$f#4HzpuFw5RHl=02F-p5m)=}=QXdDFiC?lMJ}#agyr{iC^9JO<;eB8yEzwJnSq*%PPRykZT}p6xH<&Qj4?PQ!mN>?7;4n9 z*>G+Xz2`}(m)z8!z&E0MhcYP(MgdNGb>4?u3H`dh{>H=sdf_Kr-=kxPUFzngV#Fnj zJ^G<07-|4qz_oyOh=8{{Zs4oHb2a_5#ecNCpQ2^`ePq57`Ss|y8buGyUFxVK2!}%$ zsBO+H^ee_&;6^}5;inpplJFOA3<@0>V^Vxf+KC)33A)(zUlbNpifPlpD4?6t>g3$~ zK*5+htGp+(_I~aonziuk8ooIN_7!*HugOpo3^f2Q;95WjL_p$gI{+v%GeiHji0M~r zEe5x;^!YKFF2#yho!j&dqxQObJ3MtjF#`6J(CB0`uz;&pl_R;4B2-3s_lNFpp^rKv z9LbSZi=Ss<42DiV(GVc2hIP%nymhxvW~HSZr$3*WO2sE1)rQ1OA|tMEFoiHtEHfJB zgG7!vRms?t?>X^oqcAGJ?%bKz4$-g_n&`( z=K9r}J8|$ML>lnT&7iq@Bz|@G_f4< z@7sUh>hDjk_60hF0N`g=ttyj*0sx>SeYS7h(??ANI+4Z61xe^ga&Knr*P5lH%#7sZ z3+wcO);&rFdDgGa|F)_;`ERwVv>|fMkL%+)*l)CM8naGS39LHWUwhUR$<>|p?`O5L) zE^b4w>2X{d5wANpQx%}?I6Hw}Ndv7b>qm{6D%YXL~Iu`nETH*&)Kc>;T)mJg0 zCKze}T)?$}9*BU{A`bv4AQD8_)sXNpU-xYO$byn`{C4+r_FxotOLw=AJbQ60P=ma+ zpOG9>_C~XJOXOvkdT*}OI-gv-h@m*&3T#GwbsQ~DhZg?K05P8E&YVh&$t1u-GPsZ= z@~!ARbW3#i$GL#OdPsbXqGmaHa(&50!0})06PWZ-?SSy!X z6eJGc={4MbhUArpH?m)n*wCm-k-25oK}|5!0Jwl_0sRmGnUt>pplxF%*PO78XPgBy z@sfDdj`S^hvX?H$|Hr>$Pu5Uk?7tS5^L zSZ^`igbJoxl#pM9!Md{Iw$z8k==1WD58d2?EM~pNp#@DS9s_U5dB4T`n?xkQYXG=# z|F6f@EHDrR0KXG>763_@gL}2qosC45QGR5+``wbdZ}cN# zj=KHl*c;zhWpL5;W4zMGnTJt8RcnpNq)i-|mt5>G4Y$#pd=%6SBNXSVaI;!F(hQn# zs0oG|02gpAU}ZapQX*o?e0R?TTkI?}zw^csg+~>DW33Z&eBYU_%*Kv%qi=033JKsxrH31OVdvkRqn-zHm0`sDJOyQoxJ#xe%1t zAx$O%)$##Myuk-RhYvE{&%Anb{429VlCzUnl5qMgf`ce^ zIJ26iR-&rQKYz|oo_vW0mz1`FWOzK^m>9Ge_9B-bl?b2Ch0Y(6Iqn`%)9PksMKq3&${$fyVsK&FOB^xF!XyEK&jJA{g@D|d&nKP(W4Qc?q>|K|=k-zA{ zn?5?`~XHEB&2#I}w6!EA21zy3S-w!h_d-*-81Z_X}s6nUKZlpJ@WichJ^@3DfiEmv0VOl2l#~$`|y*{ z3JXNkOyRz}mZP=zjwfXwV=tY^sU_cj?cE7u4Peo3CnsWLT*WNOw*M}gt**0FDlxzE zyCmg`A2!+?9pU|TI2(aE+KI@whTUm+9^zk2`n}?cUr~z;R*8)C61Qfb`2Y^6p ztU05lidSH$u;5WWCv*btMsyw_yD5iqbe-^}$wY~`E% zdZ0zBjr5yu-YaK`^>$Mds$O@h_xfNIU|3zA%@gqPflt?rWDSPQ-2^v#^O5fyox8F| zQYqslbWjrvH2^N)TEG{GfTGkf@Omwmp@@=-LzDAQe5o>3{t$Q{<|b~ulJ%$>8j2)t zB6A2Idwzo~W?9S|BLhn0W9jFP08UPn?E#NCeKylkD0Mx!@Z_VZP z*2u8Zxyp@cU4vq8!br)BM{6oaZi^k?>;v#c0p*`d8I^Z80%*cK5#j_5-4_c`AKl$c zm{n+2MzIK2z7&l^RD4|$MhByS)3`^BI}F5~Z@%|0Nbyxo?`%D3>c1eYBlYg)VZUG| zgPLHd0dN7=0wy2=-fxnD&)6TK6cC#ej+IXbSkT08V{a9W3W@6PD(K37Mu*Z^Q!K@z73-Q22WeHD#oAR z3_IG)W91Giddnz-W%5IQ-?EdSp1%OX_XQCC3*+h_*d#}l4Uc=O3B!3dc%Y)gzIL?^ut-l`Hhkt+dHe+B$)RaqwR6#$xw zAIWW-`rc)lE7gUahIaD18nF&fmry!*^9Q+_sHg^zDCy@Zxzn1@-&U1pkXDs-@&d1^ z(*u>Us}2$J6W)bcf8C6~YE`K;IDBc@rtdc0gP-}3hw^pfZzhccV^dZ1d)yofkr+ZC z<&{F$uX=+B646YaAKX*4xZiDjPxYkE4Bz_FD|u*eA9D23m`3NsRrl?JVghT#{A2YM zJRe52MB$iw=dp3;@dJafe(fec+3h!)Y3D8C0j2Xj0C*Jy;xs8|QxBk4JQZN1+^4&SATfVS1E7kWrAp^b1 znQqcP!XGH75@S_;>^SXJZn@<9D@})w_aoE|3aA0_EspCgj&BeF6+mnNsPPodO^W;7 zGNtHrd~X!`8E*;J9`Bx2p8?5!N~&LzE>Pnn_pBrIGwqE4*G69I`Gl%ZVnK(hK|&Q3 zmyC$X2A;FYxJ!CiLjg!GFwQr8W0}1f0R2mzJkh~dKb!bwtWH*nNRAlHW>#YY?Sgio zCKze}T)?$}?+^i%WuF0{uU6u%k>9>+6e4bB@aSa?CO3~!JV|T%v5fcgA;sr`K%fK0 zITwoV|B?(^On!usE|&tL1gX^G9Nc3q}Fb3tSihCW2D$ zaejXoL$&!5e3!i(wU}by))*zP@R=tI)C5BffD5=5Far@#HPHY7v2@lw5#m{0ePWff z9+`-vl}4}fDO{ZvK~~F2E77O(7trga-B-@kVZNIh@Yv*dh4_B`7f;f?c#T>sBk}lJ z{p~+C#xd9xkpjcL{4ff@fhyc$bdL6lYt#a zcT#QysHV1A-}}~y+R?ch+J?@~dH$T8z%wtw{3th09<-h%0i%Gg1RoYC(ezqX2P5{@ueaf4r^0Bsg>Vto%No^a{1Vasg3%C|A z4-rtSN&^5<&%EvucapAiNntg#-UlOmpVu9>LUZ z-{$mFc9)APgCC}!F*Beh7-|4qz_ow{h=4i|UjXO}uEQlEkndg3(k*6MPdV{dRDW6* z#U1fg**eh@X~o_Eaj+w&{A76#Zv_10bEp)5Zcmp)O*+^2lb>50h&SE{gD+4vbPy^rst_3VY1k{60 z0H8-tiek#yW%{!;JkkKXS}|Wk-Ja`Uwuwx$)lVH9p@adkJXSRER5Uoi0IC-#i9xbS_U!EXKD-o~z7)yg`D7T&570qVFq zBDC~Zz*VcthTb;-(1z>B4(lYY44Qt|&dB9%%DZSEFfyMmJNLL^m~ z!ZQB0syzQsT2+QsTx8~YX-OWujsN+;jFqnK;K^xfm&;MXBCDp?hRQI=LEM}|u9~={ zqH}9og#Ol^bcwY`K~xJ-9%+TZ24WNkMNey>Af%Neva_MOel|s0oG|02gpAUSf{8$yaqwKSdf|6dJjBIN$qPbffwel4U@f7r2h$m1J3^f2Q;99^c zL_qUn67cDd@?pR2*3#G;w$=X>p$z&X%3a_OJeH5`y1U&Rr}k(QsJ9pC8kX_=!Hs}o zfhCsd*{Z?H?7{Yu=G^FK&MZ%93wytD(vb+UL_T^8V-2X7+FxR~7@B&pmYHDcRk5>g z8uKH=oH0mD)wvPWiaG=}!B7L>06ts z0|2?CclkJH)tGs6H;W{w2p=}vz@12 z67|fy_ZLvs-Roxo*%!8(8sPr5H?xLfbPzEdhZcEr=pal3*MJu@&r+Kw%V;fo-o$pG1THJd)hweAe(ZRzRJ)I& zegIVdq_W>{dwP6R1IB+<9#F4!r?dlanM55Hu*NCfk+7+m>tjyi#l1jnABIst0qBD+ z!3fIkbS5Dn_K_jd$H>=jkd2ZGZwZqJj^Kx`Kus{z0Jwl_0b39Oox+a+Ad1`JvV<6P zj3U~Zmfa*MG|mV32)jeX=)VArCYnxP)qr9}3BaD^vBzKmSFI|IMC-X1B_FdtjrF!? z{XkHCKR)1EE?G`esipt_xJ-%Yg=IBlqPK}`+nZi3SplI^}bt+&m6Koj~;Kmjj`9>@1jCN$1FP1r5y z2&YVxC|Ojs6+CHLXK66P$GsNtx7{Pc-ywc=cYTWtZe|Ks7+ONa1dD3X zzVUq?LlcG(PzOnijU$#g;cu(Ti~m-uN+xH#9h^suoc8r*L#z)k2ioO)1S7u@YM)MS z+p+1Wl7l!g+mPB@#cYCPOS_QS&BV77i?x4^-`5BwE8b*9vz&n(q!g^)&Uct^WTPcx zukpFB8x|k&6kYPR3}*7Yu6pn{11lJd67O*KhVE-5{KWa-;-9_02PdB9MCxJ%aYoR1 zEq`8P7J^!Hpa#H;(sfbV{!0>kkg_{^8@zjJcFJtD?BLwnx)xZfACormjS7d4Hao=k zg9)}iRyQN?_Q3B-LnZ8g&yEllC^O+0T9}*B3%8K<-i<3jCVz+EXY>nq089UA@F}c) z^gGdu$`Qg>s{c|uJv)Bw1EYXQF?0($Cq03h@S z!Njss1a(Pe!PFR|_%5XM?;boJ=VmzEWI^maQ6&OO^G)1d9Nn9{*)XZ{`oSo|c>d>W z?_9$Mh7n$(xQh-xidNC*>U3|5K8^+J*%9ZF zEg|3Y3kmtDRcz)zjrU0z0AGN%E1I30Hxy^YXVRf27-|4qz_ox~h=6`vW$;#sj)32$ z$h|Z7I5%{iSCx+~|HN%&&V18wEm`pMYqzWg5;*OADoav9x)I>ueST1_z~Ds`y1>%) z=XK8c8wJ&kd+$h2l8kex=1o4pSOYfZB9MfbY#Pn9dHD9?7ia$Prsm!S0`<&9HPvi6 zxeTBt7-|4qz_oxqh=2isA^@mUt&TEgzF=C+KI+JN9oyE`>c<$To0(=+A`h*>otgol zgo&Tvdde)~jeuH>8fRO{jv*m*Z)K5ZV?-o62Iz}qI>Lqe(SwrZLa-jBM2^~W({su+ z_0y1~IFF@IX6H4ClBDwF4r2}Iww=v97n@NaMqs_1wzb&>F`s65J7c+>gc#HW^ps&h{fI*i zfY*TQ8gKv+FcjGc0KGsP!!zIbeoW!Bn;)C+W~o?YFp7ivvzOTx$KUl2wlC0>qvHGM zouK6#0X&b*ahG$a>ab~1jCb@$j6U=pggdRsD0o=PyK}9Lalj~mB9!}GqJWkO5z}m{ zK;=cP)|!~l15Z{Co{a|j7aDjBCmIU(~)`2jrS2w7UEfe0d|l!V+oBF}-a^;zU-BTEq1RUQ5g(`lIJz zijUArF3vt0!YF_vOr(yMF?lpEqjkKY={I*!(_G7Ol_Aj-(_l)-D-KSm35FT~7jP}$ z5F%h?Ng4q1-dAmpUh8{mIa)19ahyF|!Ccs8t-9y~QZsOJqJ4P)v^^-Qq_XRJ4i<3L zs(WN3$T% zSO+H6ub==W@l~~9dwO2p9+n|=R^_c96TW9-Y46m_;R3D&{P`;&5K*@{2xSac007cz zbY$ufIUQ#YPR%^mH*oa}j96GFbs(Li2*8*o+D8RqFRyJORFXCQZB=>spS7xdl8X5o z*>8phgW1rV2yyF8FrEHcVU4ip=efe#AHNkzTC|RmlS{^P3~iqvBUka&S7hkep;(9t zNQcV)cy;{#&B+ssFp6IaRfcNI-$`S`bfvQ&KV_qIQsU*FIaSr%JeGCOMCeV7`F4sz zPN`9apf-9(N3!U`Tc-IW2P*{>Y#xvj2I_bmhHN!lftNJumHcuj zP$vARdDZETT-8r}1* zQ;L9exJtcR(*^lA6W^?0=0tnRlM7cfY)i5i1bQ5yW#4=s-L}bRy)`v~^j-kQiBE4M za76tD)A(@j<^fg=~L8YPzJt&QGoiZEdr%Eaj~PB6|$$NybM)``ud~+pBWrN#EsCB zN8lU32>*p~wF7(t5%49t4FJM%%4AF;D8^g0?rsRpm;R%6-$X8xJD1_jyvwo~EeAHx z_F`yYHj}>iMgUVRJD(QAf+FjkOax(!MO$?9>Ztpij%gy^VSFEEagAUUARTz8Q&(#3 zOt8L>&;R$U=KNj++9wPZj}<-dd`!}}sE7IyhZ+E{0oOI)6e8g3M|J>c6`eZQi56euaJ=D>N3B@h3r=l;QNSx9fp~oKt{=p1G{(^<3?!LZM@Q#RL6m`vS~<8K}^Lid!Ltb~@cW4tl|4jz#rNVTGkNP)~?l+xB z=Xp6~E+!vPyySD|=&4n0Xj3`RaOH=ZV5k9b0oMY~Ap)id^#C9Tv?uXCR!zG3txl({ zDu(t57Jis_4-8CX2>Z&?k-9j5j~QI<;Xloix)DH3_@|+Hw2J^TX#b)_})0k)1}9A60ztd)^0r|IGyY z0j zzYEL1jrOSxSs2s|MAli+e?R#-Gs$h}wFsk?hb60B0&cr7wyQu*h;NEg0d2t91ij9}0LU~5U(SindBfnVO z+RrhV5^kM@u?9HwyhcBC%$s~YchqTNjDYZ>nh(|4wB&{Ot%GLld%C4i6AU!~F5pT4 zCIUpj_XMzjZB|)UoI8CjtqyvZ`4R^Lzd#DDw=rh;LSj{1jPCvE0rKG(=!_u|{L`=) z$>tdG4D^y(7n!WVl!)!q-d%rPj+bXtDuZpGT#`F+Vmpf+1e+d<-a$Wl5%{=kC=AF+!U&4{eU72^G7Ryg_oWUNdB zUh2SGRU$wgfA?+@sahBWdI@qq*tXSICihBY6VIali!raySK@6lKQXstaVclLfa7h}yiFaQgZ;IaA6w+&rjXgTG~c zLl+o%`_G3Lxe-N2%ST2(nY>r2%%KHm}%!2=3B33R!v7U=Vzpkx^g?+2Rm4S3h^yyTXK+pJbW2oJO8W4;EeyTTmKR;|e zRil4$#71U7o+y-W+FX(3jeb`zlsS_Y-l-7kZ1NujTunI05CID^;Db*JEta?SLlV^q zUHG*ZEee2T>wCZ0n#u)!?%u+5_HUF1VtoD3Y)W#;bW;O#wS~yVKSb;{DsH6_ud^g} zo4MJjHpsf`=P2RH5v^kC@BryKA$gqN&_2Ou5b$}% zxS`oS!O|N6njuVFKe?k@2F9=%0*NlNzl7Qa1m|wyQZ3hLy~A<9hEc!-g@~}>3C=|) zC{TUYNm^Q`y#CyR5a>@NEH{xc;hzgN!B7L>0(4mKF7th2jX*1Vasg z3%C}51`)742>v2^Lop;N%B_>tU5J0;R;_Pwqd^$mOZJ7>{W4?kB2axYkOAO>e<+0a z?*ZuDR5V+H;0|T~)9h7=V#YoLX$7g2a*`V9ZytEN*-0F9SIjrBuou^@&SW#&`rGL~VtdV5k9b0oMXBAp+Jlz~|u_6<)GdXKN0cc@mEgQfKHH)|>M_ z$vZl~%ViZ$y`<~`v_n&j=~8P92Ma*5KSn$UF-9wT{~9_ayEUi1NsAJvMe@^h6p`qb z)=5}WI8uJQD2xI+8{3|dkj=7b#oGeGA6REfV~yJxmP z`~z4knjZX4et?SVZAYcMN$tTbQCwq!D7;rC0@QJ}H;DCDz*Vox4S(?I_^!ZLE=g`w zmX=m8D70K=U3Su&rC*`hhfv3ne@o@!902OGRJ=@Y9GpF}IkFBwMEp;hRhF;vER6e` z_@JsaxFHmh%Cyq745}u(2ny4p9nrRz;(+d%l1hV&S<#bZLapkpXBs;a6teAp0cRX= z5On;%NB)Eyft2M(Bfxz+ej?Dv-YiA=r&RRLE6T>Cw8~&;itYp#q=KpTzSL(>kWJz_+}aS>Yt}^R7(O%{{oLK~v3M-?3*V<$KpN0)e{|NPCFJn< zEz~ImY5;uBxt?=yAOe1T2VVjB<-%L*eGGc%t163MZxTqC3GOYs%|GV&a~AwE>gf;% z7tkO`-dpQHljKH#;Mdtn^&*j2w{yN%Bb)c-R8bfW)eaez1N`To(Yunvdiq<6o`53D zkreA$65m3uzhHvt$R0+p`DQm-4$ExUBNX^*Isd^&9BRl_4Zwv6_=yR=3OKE#_!uQH zM_8@+Svp_N2#B8cD7!jnk>lGbjgX!v6#>v9B+k678t=o60GGwggayMwUgQ~_Gy#$( zq~~3Ag_mui2HJ5$+yUFf`K5(2WQZ0s?|G zNOuZ?fTT!=cfP{l@0|18XU;R{``5j*A7jtVnlaXA*1PB3d)9kZ18^Y%wgkbQ01!$p z3YQ8!*qa|xYMYs231k=t%11SrO*KW8a8jDS!2*hmcuck4&icDfLTxSrKk_Y1b=^HB zM3aRkJ&fLa!-MY=%@CK66187xU%)7Ujpy*0JNZFhXn6$#Wq2NPyLgP|aX2B-(#!P8 z_B*KX&z?}<;Qxz&%Nl?O5wL9n?gqlv$*oeHxumu~w@`xYlNPr4V2(Q|e@9#eon!Fn z-FYUUw<&)T5y{-&vk)O&ObD3=QsHsYdCatxcN(&|or3UBL^W$PW8c0@#@T^UK)tHz z2Oy4=!2X>M%)?*0PSsjCl;1_NE`A9%pA)a6!dJ@pUnCf6$fW>$h=83Ka7UoQ`i;f8 zANS^cl;>ZCzev8Fxr|eO*W(?ALLerPooc)U=tAFS7euWjeLV`Kad(jaSc%3nGNS6B zzxS}YLiSW0y`rO&ZSEwyO=k!PMgb}MFJ6A>@~!Ycf(@M}ezRfB+(3w*}mzY?jqw6j7Srt7i^Tv^hFay?%3l2j6>H;B9H&j-t)| zNgx?g5ca+@Ucj}0gHowuv9Y)N?moZzM4yfF8Qe!(pdmuuVVOc9GQ(p~g;BtTrRD*9dN5c3Y!^sp>Zpc z@bgb&BXU&2kDm)R7 zZ1s%*BFgnIeUtYfGj^-XXTc)M%}iGUDwegE|ixJ%@J-~OXl<>fW{) zJloQqT)cCuuCNtQp`Xp4X$luO%+AS+jFo%wC77+69b{T$VQ!V@m)}Zp-;jSitL#lN z%DY=P96#LWq_RH?)v|}oQZm!H@xMQ;!oDc7?kA>JNorQ&OFU=wnZ5{1zu zP8recH`@%5RERYhaV8>N*d(f&I>NHS?`O|U?@Z-BhC1v(4Sq?2vs1}vN8PRw+a8{ZK7PBYHBCH$EEbPi1XO4NXujTNf1NHF4Z3EUH$z%B`?)PvmMtW zqTtmv0Z5ir=2ZuPT-) zQf1BRCCvkcDNehPr3rhk1+ZclJ&HLi2=0@0p%)&>jFu(eZ5G|<=aogVy|ABO`39qa zIT;3u(TEulo7V+Qw#Hw^`d9A}x$KvgF_4Lsaa-L{f|_8c0dN6V0&YVD98H23RPi`4 z$_g)d%Jqa*xT;m8HG*_2ykxQ~owGsl;Fv3hRS>A$i9%vVN33)$;Fc+ALh(t-My7+` zkoE|-?b2`6i&??`;ACrJk4kyARTu?qM)Pvh-XX?eYghY-$q>qo)>q((_gI>$aTPbM zbEY~EYJ#B#zy(|hAcY7xK?g6YwCTTf5j(qhHxpN+ii5MBKE8P|K5qn7Fb>mrQ+|?I z6(|po4R|*-TXQXd^h1oZmjr_-nH%W1wWZziMcX_7!@%L^eeygsIJm2OFbc2`;QoLZ z`=#okd!7gy^MI>v@p|cr{f|vlFbbaC0wCtM6;DD< zFw_9JfGYvy5CLbV;KdcWq9S=VWiSEuV;VHk=T__){*N9AYz?wdOHwxS7YLOAHEt|^ zt1AznyRHG%#wP)91Xs$$+n;Kh#>j%_xMLV5k9b0apSjAOgywCPPG zmkEjJorTZCIg$=4Fbd$^Q@73ArA7_?es z0Pq`@`aTXnA z*v!2l^Zogq_LB=GtWCS9&0RJ*y2W3FsmGaBpPB=uIrMqdt(6OwRGR%ZRHm0fNIy3O zhw2Pt&q!XTD1SfXe)THr9O)Vp5oM5Hn>yQOrGZ`~@oR z+4wnWnbJ;+^#xu7u4(}F9|7QQl|KSd5$S0FAP`e7sx)nl4+UTA{c+Acq1fn*@t{uKr3r%~jn)MN(Y=fDpAwpJsWku_zTH4lke8ir7fJaplrv z+>vB(sC-w5#tqah|FEO%J~(nc@*#-o*uMHY6fxv78kM&~{T|EG@KtG9x&z79&yRnyBzuM1OULV z1PDOA;ok@VT4 z{L;0PLoXC_f9i7|lY*Qf-~6rZE|tp7u&7Ai!lxZMxG)NEI1bxQj%Q$aHj@x+^I;YJ z>5f@*a!~$bP_28^msd56P~YNE1K>5_ss_+P1Rz(|fltoK?FEpg@K^qlbI`FAaW#12 zPAs3Y%zZ3x`_>Nhjq@e&PHH^}mzn8r%UV|2sZP1iL{^#0{fQzWN`9z1svJ3py^lcU zw&vR$p(Yq=09?S80D6c3G@_f}o)M$bw70tgK2uU=YK$saKmSSOxMw=T zz#5Nl67UA)l^2jV3YDp}7!Y$UVEXixmz=S*vfn^39fg#`0CtD#$;91-)6|5%vzhT? zVHgE;VQZD7-u`3(Na1+1=I7_q#iP)T{@A8T@V#O@l3X%A)C5BffD5=1a2Fx~UBU~g;9VRS>Fmk-qL0-uXW%s9nGh{w^YRRZAB0# z)&m7Ca~b&J@(BOJc6lVo01<%UGzI`ETG0_o8Rb*{Wc3a&AW6hVjG6fSD&u3sk)d^V z_Q%e1AUT?d@aN}_fi~=gE zPQpBnO)Y2fcLy4d6Y(dLZIYdFGGA6qh${aKm)g z0_Z9n5)kqG7#S?!vRx%p0_fy1clE%0Dckw?FTb~#&53)GC3q?y-fdLcz`y8ZuW%g}1AOK1^JW0?dB|{L`)y6&rO00Ag0*MOvXa@JGA1saSx0yRIUp z*=k;oprx{&@W`=4*9yp9BOa8Y`l8^nT_y5A)1csI$A&!(WFqi(=iK?^VZ`miubD&; zzi`>EGOXc)ivTsK)#yX9WoFdeh>cPGXn5OOC4Jt53ZH>HmLOZP?1~7py<|r7yEu-C zvTtTgv4Ydy2hsGARszEUvDP8ekFga}aeSELqSy@&r}Tn9d)eyUFg(f?A*mS3tGi1) z5(pzU%zmKeP(u@rLaxR9%e&-5t&ux#?i7-V7@Z4dli=WoLaioH1K{Q6s@$+Z$_ZpD;eBtY9Gdkw_1ul4T%sZ;kSMIH|=T@N_+7^93b z?hZAUq~CDdSKNTH52*5R;0XHZKCX6<`544%s9Sot38Ro=V!$`Mzg-G!1(O7Sseo4S)-{62Jx#fR~I60FhK2 zMTQ>?=2JYnC^GdtAo)?WXfRKNU`%v|qN^2&9SoFkY^r>TP!V`7AgfABeGBoTZ!Li( zcfBYwu|UN8M+;^nsMrai;qxxNIgA4243Wg%>Qhr!UaXmuuugQ7qAfNx{j^b_7m=Ox zr|Ud~nqa5_Z~<2W*dYS&dt|_)z@e5?u^8LC6V;43)1_Aw`=rj|Ti>?Gt9`t8bhYlD z03}SsF~o6KK-U8D&h`D1Qy4%jsViY5pS`8$!hFx3Cdu-w>1s@lSq3Y?D4@a%H@QoR zp^05_bapvRZJxpMkd;gE$I;O*#q1jvzfz$l7-|4qz?A?Fhya4KG61NLsmbOo@_KqY zww?lVkFDZIYdJ9_u>*EF`-J*8$=>ICfJ0;# zfkc`1>NXLNvg)2`zMLzJ0=!@UNR1XH!61Iu-NJVCHgv?;w}@ZWZk1>zZRxYtOf1v{ zLk)lnxDvn#5kSOo4*+_`u%K+t=6fU-^@9Pe2Qbd$P~(DCxB2~XU3^Z>Hxol3_v`2G zWmOzg*8=R4N7V49@IPwgi}8#Te++L%l<%Ivoz0sfFRNtMTZ8pDV7;Y3R4?Idh%yG9 zn96aVNhAO{rFP>YuDFuvuF2Ob_?N{I{)O%GgXcYn0Al?C0O+>k+Agxhx4;wae!ceY zuL9@`H}biYN`YU|CN^dX2aAF14crNGc~o)N0uuaFm)KKWsy=pU1Rv8mgue)70p(4q zX*DGVYR;jiJcqFcjL`X3I@K5mC+dA}B1-*<`M6nd`CRP%=4yUkW+_!cHPp8_)Bt!5 zxT*nM5CJ4_A^@P5oeVpqCqc&P2hJ0<%x-eF<^l`WYEe)JcKFPKJ zoq&$hZq!%adW7zqXmO%wb+WX$w|(RfoPRE%XhuQz;k`PH0tPIMSWkTQhLb5x689}A z&zbYEmoUTaGQShoCI5(d#SS&WPy^rst^{yH1l(%11c2ljrqD@jGZRGwzVWp?2xds` zBy1q83&g)p9MjBK!&n1KYx#SG*cf_(Yrti@O1k_x;{Zb{6~j#~cAYm;p$!gq7pQ-u z_MdkLvy2hX!MbdGk-s^gSR{*qK-kueh`aP>pdo*cE}cMub44DzwguG?5Z0PoN0*?T z#u*cLUc@i!bSI4Sb5`FCb^`qii2?U^Yk0d#=)=V2D8Tbaz@K)NsJHiD06_M%6|@HTjbl-WUb;GMv z2Wmlq8UU|2R~3gBQgO%_Jpmx?Sag%a$&C!Q;Ed5W&CyH^be=~J^B&&$x9_$yyF66{ z;)bof+TvKjxjyQ^Xir!Rl8HJJ-}{tq`JvJ29oJ!r>7*?~c%|^VQSCUam%t`ud)c0c z>%ZlXedB{lfE{Q}pHC2+WrD{4c%=b^{p}2Df}sY$1zZW>g9sphRsjIXkQP7QQ`X;V zsg8UZr}Hq=?dFp;*>bMxZno*YlzqZ6<*=aAl-y@fQj|rs- z`4VccGW1HShJ>zl#JYeK#u|XE8_pxR!haYd-a%8H`}<76Xp^9|=?q0s&+;ssf`=b! zf}sY$1zZW>hX|kuLj{0vWw9G}>1-V8BsKZ1WRv_KaPtZ!%(CYTvFglpS=_V&ioON4 z(z~X#UkgZ1^+jGCC6PtG;pw2|Limd2;TMi*-eT7{bgM}A1xx}M1#qz=Xx>7{4&S(Y z9*cChb|%<7K^Up!_7I&Qb2AbM^Cr{;Lk)lnxDp@$5kT4K3II7!za=#sPt|-^-!JNI zYhJ1xpChPjXOA?CwO~z5QZ@+0IQZ~H6Iif&Enp|;kkC6b+#OB%&RoCz=gOdJ)q!MD zpj)Jmf<)@JCam*MH|Rs1-*c__(Yb0BehDnXzpz~% zcM3uTQ0=0FXCJUEtMX-kgrCu(b5*JEgkx;UNNboI41Kz3BKG^Z4h4wL-LZyay~J=W zz-RKL4&jB%P5>Q}Kk~RE&}RXOfiF;>s}V4{tn4@Y9>y9lx^RnmdKZ9lK;qx+z-{A- zdiWiH#HPqVzu^(IL_Py=RQ4|bxT*m{5CJrF)!@tDzE*hFQ4U6a!NVO@!hb9g4}1rD zC?0O9)qX506BAViybTa%B#$&wxE7!v0uVPkpISCN8hTk>V0)<2*JUfiP8djZAS;r^VK!=FVG$u{M?Q}7B4~~|&+OcvfVC(zA-$i7HN!uI?P>Vd&0Qe|yCEz|pz#R=g z@H(vq@fCaR_nQih94Z1De*O$xWt`%3IUj!;&G_RHT2m7ct?ErN4ItrfJCGA3hdVp? zY$#@fKA~hO$zNr-0MwE-35zdTj3VRY!(eS({=jT_lQ?7Vpk=_ct-nRO9FKzE350u4{l|n)l304q;NNM{B=Cx@e{H_SP=k$J86TEtJngZmWHS zu?7^bkmb;ryxDl=?i*`Svgk*#FB4O3!NbfJ-Nv_0AhHKF!B7L>0L5uhJOTqeoW_uM3N4p0CXGkHS76ge9^}Yrqh$bT&OHKGVfL> zjepNNymUPIIRkRhP}O%_#z03XZN$!sAP1zG=QbC)q3^{RkJV>03s``DD3M~Axv*!q z>LTZJ62!FRD~KU7rv|ojez{vEr15$Z^KFO?*H5%-6;R(BY*Gl{k!`gdw+UK z(m?L`X9oa)-1_so7y^PA_$PP+{Q33IFW|P4*Ig$6yu#my{$o!J0panVn>3I+0gxR$ z1SACTz2G0=qYR#>1jiYO86eO^Y5emwZG}&!#93y`BAfb( zYt@>FN;D^@Us6)s@r^=R=`)rQ6G0fLKG_ojI@Oy`c2SYkx$eFucniGWE?}ba(b%dX zrEnQCOW9+Nq;Utd;P|k1)~7kW-Zw=ml?c=^+(9eb-u!1Sk^Re z;(AeqKX=hha1SGcnqa5_Z~<52k|;y~qlOp&MCM2LR*=@I?RG0G`MED<1q%kvMsXTa z)#E)K!`u9C6@a`|k(`=_`oFFPBqG!nP3oT@Np_U?OXEKQ740A^I8jJHyt~*Qv3Tnd ztTlji2@7-V^9nW!_XhO*={WcJ#UOO`<#gF(}05hUe zpZG=R;)AFyH6QJ*7Z)p531aTn#hM?5aL9?xSz)XJ23V7Fs@r&6+I>M6o!#YeUIYu7 zsf@K^JG7(QbDO5{b5;N6^n+jEQoy4C0C*oPfcc{y0K~%LLxL%1Z1Jq5?V(+RA*Xv_ z%;Sn?Za=Opt<1gk30S`8kW|Tc+O1)p28SZ+xk$Fh(4zy6LW}@ls zrMn82!rHF#F#W9RZAq5v(+<9_fz2!pp9c@Uhm-g}1jhP)&f?&JUn2!h+W&dG6!16z z0DdK~0G3@c0O&8UQ~IxT*o-5CLrTzW^ZY_stwn9#-)iF21P4N?DOa zm0>%M_jdAGef3MC!t5mx&|B^;OB&Z;(sd1J>5Ub#xXGmS-sQeQu;;qXNfDi3f=;<^ zMdFT(jm#>n0_5|1a|z>jGH4V7a{}hl+ZC2$R3*V+KjQFZ24S{A)<&iS&KgR}iQy`Ytv)q|^3j=)(|ng{We4Jdqfa;$nk zNm9Huj`^vEY{nxU18H~pPExm~H8fiCEhsG5i z?vGyZ1~%1nbIz3I-sJ&~g!gUoL4Auu4S?5xs~YeGB7h?t3EZxQ_6BD|C|k=zrf2p- zIV0M&gRTOH7ZvcA>taLYoZ47pJ9Cn;uvX{)Mb%Aln##JgY3 zYO3}@99YsOG?n%3l|J|czax0~jvv{1uT<8}zf&A9u)v6`h6}h7AoWLpKjL%N0MvW? zKmf?=xHNr?|3#M1#~?}w}^#Xao2NB6JJD8qn6mU^a?6j zZ10!AQr2)&xB3guv|p#~;SnNVmY%P}vET|bqp@6&BmfsaiLWNQaor_79}l{<~d z1_r*RQbwlHm%J%Mk+5DM&-8egg;^;ETK;Dq)IT3%eevrLTvJ&m#}sRY?r2j1Zxq2B z7+s&!gavmJ_dqN!&8mdVj1Y{JfTp)YacX`l&enGn>}zxUm|=L1*rN=Y1yhKUOhVms z-%T|~Z_Bsfl@)wcEnb=d(C?UIMj;q=ae`5OKT+m;n~HT%X{5~qwM_ITTsyvCz%uBL zjy}bJ_Sq|YsAUam09^f*`lpb($IW~M0C6xDyxVf6n*H?X`*64N0m3sY%?z~!hW77F zirU&=9wh+90aYo8QVyKgBcH2V|DwW1RGQb~&%1gXNw+ZEZjqQ%J;M_^FCIC^ay)`j z0Ny8sAY%~oUcBakK_OS(f;4%?Mb$um&+CE%t3(QuD5wdB8UPn?B|sV?fJZM705V@C zKLRMuc=7ZKIwqEFZ9A_e7Rju(`hM&4$^u!k&;U_x8s@PyBGF$9*!bP{HSEE;r`q(#~R_nq&85Sl^T+ ztKOIgYJ#B#zy(|hkbwx`jo}8jtX(kuo_d5O`kbzJIL<|~3dhpb{Xj&iA-s%W?_R@K zA>fU2TJFQDw!hcw`fH%_ucvDo$c>wZMP%9imX#up)+~93EWQ{$xrx9)4Woe9Z0-rf z{iFfj>7K%f2A?Ful|H#58#&OiPN_#d6O=rq9^Q8kMgd&FtY;StX3WhFvb*mk9X!6>BCox`qc7W*r%LO6?Ya&% z!B7L>0FVS3p~g>Vxr_`6$gk3)g#`5~XjF>Lt?h3%_jY{~jp(xCx^GoV^u;m-gaaNVhdR zw)hqfeyI3t1XJ4c8$ABjp2_{l5Nd*<2EYYe36O^f5ae11fJR?Oyqeexm|NXw`SPPp zCYq1^CfB2a+Qn}u?qM(F$@_t(?bC-TEvm}b0?x47!%QfDDLJ|97uvmegi~bL$QnXq zu7Y*vyZzm!PB$0@NXeIZ<;y0JGH$EiW80N4r4h5Nx=+W0=(~clpyJFL4K=|~1KPgMedK0hOFtK3c9eRzm=!K>tQTDqDO zX|>C2d(l5Dxc4bD8p!Q+dhvlJ_3z?ssr#F0jW3A>J`Cv7G`+YWq1DL~ny_#zmc2{F zS7vux3&t9NWS`%twZJl4xz~Q^ehyS6?<~WA?PsiP_Y8w{Y=i~gISAoj*e=h7C_w}~ z7%T^X@Tnf~_#O)N%`K~%a8wdfPWuGD`^5X*N~W5VJ{Uzg1Nib>mR_S=^3V6hEsqh; zKmnn=ZOjWF3`Pl;Wo{$B(OnD9@GZG zmC%V?3Q+zd;7_~ChiDw&1?De|cB081we~H?vCrLA3PS8$AiMvFF@!Yg`C~aTEo&f& zko0!MZ_drjc9rOmc9m2&npBG-WoZ<)by-s=!m6JaCWigft}+-z`b$FSCO54@1AY`i zQW3M>YzR@j&y=+V4m;LJY2A->kWUj?O9;B?Q7q$gOIt}yYo+fUDpvhr?@l_%A0hKd zt3jq8QwqihN~wQ-*fYH7J1w=ZIf(!=$XmAFEdPdN^k&5w){F3Pl~@OW?<7;3Nt*Gb z*vwHa`*A)aGC5)v-`y_bJ5peQI-WocfDbrV1C9!$+=vKw13k4m1w^+D(3ed#{Y*D2X`k%dhlV!=TjWASm- zn_AO}7LKZJ-*;4DEH`I$4~m_~5Io#%45b6xG|4iwTsuE~D0jNUIxsPwjhQxh;eBHI>#I#?#z2y>_}&sV)@V~ z-;W(aLG(@jO<^q)!1o_tNDr2r7mp5T5xo0xLOJXB&}PpUMgbfV1#d(OZ_fJV%kA9{ zB3aKun6G$2A9mZ(dTvIKq#3?iDD>e3dc@^`qXrQmR-gj_dHN@Cko(bdf<#2l*~H=l zSY+E#N^OKI>`v-8<|4F*fg&sTtEsrR^sj3G)x`cj;tPuTqy+=q&G%*ODC**v)uNR% z1R)&?UWXWYFbW{a?yK-ZxlwE?6rM&xG5#|oK^>)TR021sCPFNG(2Nr5TO4Wtyars= z0Ck9fM{_Cw&;?QVn&<-*ry>IlzL$qLm|Q9nHP@5!YT_b%K8~(0Q~}wH2zmynOnt8f z;4l=ba7ee7vF!;E@+^jan9Jcqi7QQ98y!DQe^3}t0;7OdVtxFFSOKY%6%`4+PijX+ z>U6tnsuA#gn*r?l{M6o16AU!~F5pUl21I~3ktw)k?Y?gY1O@## zwSphksfRO*;>RB?ch%?xX(IG%vWo@oP_in7Zm6-vB8(ykl)zX*`B@f zy2`YeL3jV=X`4_?MBYNCJfb-TRzjI}oO2e8HQ=k?XP38n$RsM}@h+Q9uZBDn^PSng z5b5)t&-aBRJjj5WV5k9b0apUFAOfBMRso_>6$2YlRWuLZ=)W)aF6%3GdJU~A{Rk@i7USCezver|5CBbjASfnW)v z0O1$yr+C6yQn?S)iX#qiS(MNcuFQFzFY5-iom4Igu0g^Qu0MPRy z%@R};eM80X_~VQ7-hDFy?A4yT6rX?#R#=i#43j|JKzyOI*R$`h1uW^4(M$)2)>(WG zL1-#5Au2L6D>jm1>wVdd!7=(&dk97W{`Y?p$8Wq5TE;)w0qSMr{74WX3cYwdL4*jb zqbR|Gua|`IFKm~e1)f6$NNp|xK!rQpqRjn2GR6^@SgQD0g&)5oXTKK`gjM#0ovZIN z>LZ}~Qxtn#QiC3_fXjB3UCqMxr_&FFYo+Tkw%={}gv`p&Py;Hv(S zs&)G2hbnyPG4)tspb60()@iP);t;lkQGnPs(IZjykI^Gt;kAcq&AJX zr_#ocr7&cdsW_kxDNqC8W6sr>qXVfpGTLeYknp+5v+gRqL&naAd9njRao%Cguig2B zP3?ii<;xZr_keu9Gv>}Kta8_5&K7Fdw#w#ELdR28?{D0%XzrOI7Jm62>@z-cpCBQ_ zmk0IT%Zj555g;3V z9{>uLc=m`m-J0$LrCTRbI<4J6?rjFKSei2_N0Nl^jQ3rEp$5Qfz*P;ag#Ne(r9eG2Mb}azOZ)oO@m>gy6L8RM9Y+adcV~cNsoN+cW9}eDY{TTWL zqkx>A{F^V83rRjtA7^bPvguo)TQyQ5_qdtvJJV6s;_yOEFw_9JfGYv|5CIAZ1^^Ha zrT%=fzLs}_>?Uf=q=Fds4IR=KJidcU^sI_X9gdqoH3JGHegmGr=b=uf9t^)sAUgC& zY1=?drnP=2ch<A3;qp)Bw1ED**-&0g3`30EpFbxpg{o#q<`pM_}n7&dBTSZKM0?(mDjflM2De zVunEN6Ry{D;k_TPYe3?#e*&)Z)57Q;gg$&~S6sK@gxCN9BX3_9t`~ItzLYQukTb~% zDLAv2dgHHdAH+pgoNt$HBpyrEBcCLLGbD?P4K=|~1K>K>Ac z(VGWq>@U10#M7tc-#ztS3L&{r*OvN zH{*owVefqm4Hdn~v?(X~9o9=@BM;6Ht5;1M3_xk0MViCqB)0lV^~54El(Cfn?2Bn zf@BcSas0=%0D3i24&2-J$-2dZ-2T~l<$lyo7|yrEyM8StB&#(a8N*luj5}uP+24kk zuYF3A(f;&kYfQ#VXeUYfz)=jL>~~1nCe#E&4S)-{5?~AwpfX1UJ`d$Ir__sj-Z-b$ z_#}lcjyd?t>(d|A**Nh-rCr(n*i=A?7C|N^y+o#K0j(i?mJa-&w;h%5Hi_mWX64-OpU@2Q|S^ z1K22Fj3|%TuE@U66WP-`sP}|pO%gU;0}-fxrzO` zfd}sCc>B-Ze`#3>zWe`e1N`R$|HS>*m;KL2!TU7-w3LKw|NT|}%O42|0=KvP=ZDz! z6A`Z-0pI=KH^6_s0s!)izjp#I=L1Xv0N`g{wyRW^&jNr3G4#G9*Y2vMD=$2C{HmGc zXuXVzsp;Le8`-m4g58-5#L+9kdLDbYe%Y=P^WSM#83JOql#0c(mD|Mip>J+wa#3sV z+ASSHIE|4S_b=u#@NoiBoesUI{qDu$Q5@G`@W$&TVpyYk>)65kt%S*4EtcLb$Sfs5 zoFAd{=YG+chu?b)drV!2ML!9Sv51?E;+Avq>cP51HG+0PM*3S>@kRE&yGj;nlJ?bC((`^^a zgn_x>g71M7tY^kNRQvBaRQJv>kCB+k&kLpxgbPNr-8Tz$Q;0OVgO7;>b=ZL#a9x#P z`M>-B#&a$Om<0g9{~WLY&5s2DQ0PpGD(PxxS^VQf6ZW|xl$RF|MqMhVkUu5{;d7P0 za{{99gfFu`!~1f5WO7)e%H<^ioFJPJVw~9>(FuEmX)3q%q+ipCgAq~d!8wdIfFi30 z=Yhy)PInYPvu_(eFz5IY`zF5C{qSs7b^yv#?Im7w6qu(%`?|6K~Wsed4$4UYtf!?s0oG|02gp2z!D-r+cX+{rlMmacfUS< zVdXq-thja4T+aN&weFBP1AF&r*pJcEN+4hP;^(-j7mu$6C@(v=B>VoxX)=5Se zIKn$2`W5^}G0Sn>>~Y}@SQmEZ(+Kc(T^TsXY{=A9X7qQQ8j5i%y4V4PwHz}Pj`<%z zO)%5|xPU7GRuBO?8597}V}aa>M}L?lg0|>eW546I=&Ch1^H|&|(OtF%#u}jDTd>T8)A=gz zrJ!TD-8?R@h6q`KS9q<{9HPT-yq>R66AU!~F5pUlHAH~!_-6n}@ILKU%iV?vN%xKW zHn);$ri)TuVT#0#^dR3`dm1yO4|IDc_)xy&XUw$#x24bevCLzKsji#)=$KywP6 zz7innP1OpGc`Ghi!zkd}V|1U*z}puJvTPn-R|E=dUOGj4J)e!GlwUHDY}!ACnqa5_ zZ~<2WY#;*k@j?I~(ix=Uc~UcLk7kpGzI_Rqa5_)aDcrVc5aLa3CRgtspk*iF`a>LY zs%rssi6>6=MBJ?olj-#5ru9Ybm17Af+)Yy4RzjbBK@JQs3TS!m&QGO`fz-CoRb4%G>)Pb-)I zxg*;w~Ih)H42LClo-L^1cs@fWDLXXEFj zWlB3O))%;dD*-S62=GUI_9Fn*(9aG4G9dR>K;)F8DkRxuZj+xcXyMx8n!{ZY!KH4& z>{@c20uuft9uCYl%DHS;iS@s0SILK;>TMy9w`4p)1&XGpyS?~8kUbqiQ8FGoYHpMn z`%aSXsyw@jS-rebhce*^N1D%yhw6pu+VFE1^NTt`a?f=f##Oh@PiaO&>u3eGHt3Fq zee%otRV43EV;qvQYVRotKhV!iK=c&7H$d@KO)@oj<=ytiv-utj^_ZU7^zTRid|$kq znnTF;D<>E0bXk+?NfI(fZyC7BW$rOErPo9&;r({djYX}SajMD$iNc4Zb|y=+az@7+ zO|0C02gxGTIB+}F&DEKLW+d;Tdbq{xx474)8JPZeFL=RLMVtxf(3ouKuxBsme_2gG8E8?(z zO|)4?IXP=2Mj|4iZ6@itSv`ybei~SX*{S6D#%D>!e=0M0A8L5_1ASBbxa=_Ho*1SB zG1LS@4S)-{5?~JzVEpR~0MzNdHC&y$k2y1RkoBd8HwRyaiQ(7piD;5xw zWFK|mc|Py8fK}s%k3>6!naSyHNr|~2=#g!IU+Actp}Qd{S^gUPCamW|+#bov=^hKc zs$7&qw##M^*_J1`LGj|bfuC)14fJ{hFQJtexiQ-3r2Y>^)C+rbX-QJC}d70$BmYXLTKs)_R(ITp8n8{HvH zu~o&X591msYkffewTX&%?jD;ajI>0R-O=0&I zCj->CIMe`m4Y;ZSjt~K+W;p;*w|Om(W##6WWr)L+s3I4g9d-82#(ridV|7*UCLY2( zAS2PO4*X!0iE9D#uaWIvFFqDH%E5X5G=GTtbB3~k?-YX58nwF8Nb>dpi~>RxULqTQ zU(FZ&1`wm~aNDB1fx1aXpBjf~XtpRe5hD&Y!B7L>00!G6)2Ycu!38~ zJ++jZ#oHL@kAa>s+A(hCVB&6n;sZ6oPy^rst^~M11XvQa13=?HGES#MbvL-wocSxV zmpuwFQl$)!ca4!NanbGpg4KbHzQ3G@t3PaA3%CsvhKAUI~eV9}g6s)RC& zVaB$U)1M%s4uVlYSj4-OU75w&`jehtngcxzh7#}R%jGJae0uLpHQJ29zb}sPFKm}b zg0CO~tQ2YiAn8~p^^!QcJl9;%1$&%1_FWFrsmS|*A^zBD*V4ER>(bH{-O_=E2_E+G7t+Hi`PP|E zxDD(Pw^RmWi(AgsoGquIzQv&iz-z!&4RD1Bum*MlKnjgwYTTmxW6IeHUk9gjf6^g* ztG8Hgvb>)t9{E@U1DyN9Gv9tRD>7OoGNJ2m+j6&E()Ar0}{36z#JXYDtmLPQ$ zpk-?pdd^8GyM~0&GHCYTlka(^`_>y(b}DfSvKQ6b{t$=XCSQjdqXVc`4p>MJ6stOP^$^l z0C>5%DmU(sa$|e`7yx=15>wsNM*kT|ZdZtcLesi|5PL#UyDULOD$9G8(_#x$m$;o3 zqBkplJ>az7`0nqQrS5Yl@{D@njR#W#9ktWq8rn~6$9ukw-H%|s2#=Od#3PcBW$l^t zu?5SFe%uN%({N4i=}ji50F0MjUh_~B3^f2Q;7Wi8M1Y+@2>?{hOExFeWqW(^wTjCq zW(}iUuCGa|$-XC(<;<BkA8%+5 z-r@n8KT#a5i2%Y_1MdG)v>{5P3pu>d%Zi)fo$P7Gk5jE}=OW(Ky5B;m-UKzlPy^rs zt^{~O1lT+90ziFaGNokZgV;QS^Fa)%UfUl`Haq93w<~Q``d2A$CVl}r&agL54b1Oc z3y8uu@XR=&&+G@7;^Mre*X0=xSD+gu?ssP$UvS%`Q-@K2`Z~gjcM2Y#^ZVucfg}dA z^}$6I1w!+$zrUAJke^_@g_>Zf0dN6V0=yss97?7DpeNbnQz}OzC&<5zSVnrAXxt1V z%2s~9BD+1pzsGJjUNPXkp$`kZh%GUYJkmsL;Hzvx=U~^p1NGq4wW)Wp3ac_)S{BaiZZ^zgqYb>E9d#KSVG`i`jU^oo@CArrxiv# z?Jafx+>*ioR502!v1;%8+b}}A#`o$9Q!)WF#qpQXou{JAzo+iP zD4@&}10?@3^lNPwT^fP_WnHm0d&HNXW~rVOTG>e1JCaZn3^f2Q;7WiWM1bos_()Ki znpa4L8>5|FPI*n9H&gr3&BHO(kwy2JyLHC(Jd7?t4(DJa!#DQE;2Ln*uCji)n29elZvY)Qg=jyP_p~FB3;T1MI}nBz?kCr=_Lc z^cG=jo{&;c26Ybf+b7l^P`n))4M^kKS147?X@j6C)cX0zYcF#i2!xGJPz>x zBjB=Kr8_S81L3W#8a{)Iq{b&U$H(D4EH>q+H*if3lzVQ|l6W-}Yd!!Haem;Yy5p61 z*{%}%&t;fMHz@#sI0Hm&06^UU5%Ia9VF8{o_-}xuiSW+_kXx7!0+Lz_d4%yUoVHV1 zXHq@@<(MB)VJeI{9`uG~@`LC+Z^kRIN$}}eB2pOOBNbtP-@mWGh>tp4{AYy8UU|2R~0AVk2mnePaZPh`KQw=0f02x z{#^PEt(pB2I`$8K8DvPXvn2xw7t?rGe}w*RP%<16rYoEiBk65Bk`?WFm|c;0XdXw? zw43)dU%=`Z5!MU8s|BreB8s~XG4#B5zU;UlF+NAdq*qBX%vJl~ zA>I>Y^F1+Pg@$F&IDLieZzml&uCh8h4Da3uf;5daVZU;5&SuVuA^d7OPiHDt4lOt+Jvg;9j; zc%Q(|)Q(ScY*hk?A_;D1I2(A_pS*>#J|HIy0M@7}PkE5r%TSQurlm=-9 zrIGFukVZO`8hQX}k&qZl8cFFAk&^CEkdl%VX*lx;!~1@}zjMx1E<3j$a(=2VVur8VO%Wk;)sB)NOyOeDaA?qP- z>d_OKh?Hu4_j=?SVr^acnIOV{VY~X|5e5<9?*_j7P3!X=J=cg&hmW#Os`$8~bkr`Z z8NvyJR!V=p%FK4(r38|{Eb=5kblJNZ1>67&W;QP;D)$q;HGz9Ms%WY}q^E7$F9QzFZUlTD zDoyX=cXW?@pHM88y~f7y(YJQ<_IIO|kf*Qc zu@oo#@XpQsMnH*~fuBZHg$%EX&1&=Sm#5xiaK@Rs~8)3DiRzY5=?jTnl&&5fID@ zz7<9Rr-E%^Q8Zw42E+O6L$4#<$eex9uq2O5-pn|GXd?~mrEN}Zr@a!*+b4x)tIDo?A;t3#Q-NuYxSXX>37 z*V}bJ@vK+sWxvZ-<1TZ~9svJ5fVaQBFt488JpPY2{f)nR<$uNguWxVOe)E(3{g=T1=)dpp z`e#5uphZCVU;Qt^uYg~=-YdaB0axb%kwF0P-(0n;46y{?5yz|cbf;wxHRNzW$ZKr} zX-D|3$hUmOb_q@zjPCnQK?T4^k1=Di5=_#s+EwCR-3WfK3jnAUk}^S1GeIz+Rnz}x z`jPaX2WBmO6Iv76Ouc8!1b-(bF|`rEuc(6ODZz0jk|qeWFlDCO8j{P(3 zx4jOTrSuU9K@!7zIPD%9yS1oO`jI_w2ix4HMDFxiu&<&T6$6apl71XAPI90~c`s|^ zDpve5CAL(JWCmx4ZcZNCn`qgmK9?| zS9>(}ui;mW+R{mLc`uV5=~s@uHrb9;0P_4W7yJ6)(Vd%dX`i0t#CBr72d|x;MFc~M z%tSUy?(@vM%E1yDkNN#%SeNl?xP70NKmP?kP6)$J9aoo$T)|opo6isOUB&zb%9zAO zs0oG|02gpAAQ~b7I1j#2U$CUU&jb~#B_?mv+^4edf?4-4JePLQB=C3c#ahRBAJFb{ zl%9p+q1BB5Q|q$Fi4+VG-%~jx>;3CVnxv|^BbNq$1$2c?G_(GE0Amd}<@#OM15%Xw zb9ZdezScnBC%Q0TCg`^R{g1b+aVaJU0NxY0287=McPDZ9CgJQI zyr5T1{jF&} z(3yTYrq0VP;zod6yxcegfnLL)%q6)60&r|9}n zg|vAI=S72am3J`-Q1iB&!GNggm${cfO_@zrPp;RLHv;g)?>dprXq2BZy5{13rc>p3 zIHzx5hiS|Z=r{BQM~x0f0iFwQ1t^#cg!Ebj``UNOlf{CzXwiPQCYTgf^E}KR-R>pS!b81Il!z&rF(nuUyfgM>!r!8_^BJSO zC1su?f7Go(T4JkkOg2J268C!}3~GX*2EYYe3wQ$&5KRPbSSsEs9lmEl{OgYm3RhHz zTPU?DyYGNTRb-`n)x0V?9V*aqNnD~ifivMo0H5mY9O)yR?~{6NAN;)L|9Ig=;|J+U zFr|Nr&0&+?cm$&Wc3Wp-{AlkJ<<-N%{;IiSZ@uj^v(UbsPn~syqfx%{P!kL_050HK zKmtTS%u{gF;*c?y75Cb>OwsN+4-8V258UxpO&Atvst@aJ-+$rd&Ih_55Y@E>t_|M^ znB+KLa|kZh8XvG}`Spb0J1@2iR$Gd?c>dsJV7*xctiP+mJlnru6N&xWQ_97PF0 z=wx@1OHt(rV-2W%xw5JJTEA^9$DdhuGA~qOFwOhy*v2<0*lqC@Ee5GS_WbK1&=FO`0TM3+&#{KpR+eOD^$=gOZ> z(XTM$}Y4|x58mimq-bYY*?HMV;2wv`hr+8K4I!)j;x&7!fyeIX^{vH|Sufm``;gv&x${GmKObbWZgy^4IOb#%FL1SHLZTynCin+4ax zkJ|L-Xt6$b7CLlvMwHdgn|HMWKRE3hxUu``F{*ab@}S#A)U{Y`D|VM)2a6My?ay4eJ9xL8C0i`dC;m}>4KG8fS1ke7jH>+ z|JO}ay1H5QU5g*Zs$V=X}HO#@v1PObpJ%(^YIzfp&vRu#D#m&ga+v&=LnJV&J6T>!m_bF%1jIn0>eXM||_Lp3iz=+|mFbc@E z(3iYB5lJXv$xbLjWFpvwT88pCz)@JwMlvtlMS~pbzy>t{UiYr+UNS^L!V~bqO@ZpQ zq;18lU9P`Ad|NB`!5@>KnaSlXY?1uFW4=X-vjJp#ZuIH{^2gd60ka#JohF|1%iN}N zQuj@REV)Wed5#^kd@w9`ie-a;y?{}Gn4KpBuAE3-lTZ5RTl>GMS^=Fc5%TU%lDMhA zp(Yq=09?SefE0*;w?W{wNyNWJoLrpN$0Jwl_0q-CJ5 z)q#iZ|9HDP4@eCHfcFGG4@gD?FDv_26f3Dbmt&M9?yJKC+&wNa!ew;grFleAeVwQ1 zpM}~c0-Kl!PVxeTV3Al>8l-lR9o#S=?(#6;8+W;`*><2xJ0%qqB zy3%!h9s>P{_|Np`II^g^9&){)NI0>yG|M772Nu(l)HOAXT|6{h8)q1tziN2X37zP>2IQLYCv1i>}&a`-aN$l z=;}~eY;Wh{wa61LRA2k%hw%+VDmJ8Qzlt|{LguhgKb4pyTo9af&6O@ehEbfQ25 z6Rr7t-eR^WW!h2MUT7ZQQ9rCZJQnme)bfZ7zJw?Eu>Fs>s~V6I1OV>|Tmw=YK>(0a zGCqRJS=+V`oj_up;01-2?%M%raHv)Wy$PjQ1)HhIq zFnYz%9_-0-a0nM?EFK#kf28}`wj2s$4PXxDtL_TB#axwvn@A}(&HIo;ha>(4u4&j? z7XI!f6n?0OIMe`m4Y;lWAc%mpQxgE_Q<62`Grbq#6KFKEOaq5;(&{otd6nxr(Z5h6 z4WE|O0FeuZbGF2#@-peNnlV2!0V)%?< z6rlPPm0CT~mX2HPD*=Y~i*K^|cRC5(w*||{ zofEsR+EosXm%gVx{9MV%F+>+C|B%P+&h0=EGo~S3?&ygFQX@1FsvG-roCg#7#O6&fr^@ozu`up>-;mU*BggMveVB`DZ{p^c!~@(1GTn4ksW+Nrc}b1g;SO@pe^ivV#ENJ%I&e)@lGiM{9Y+H091ziVOU8LRH+@ zER0NXQZ{kU7O${f6rHLOfzm`$vt{ z-QU-mfZ6t_{C3_6@5QiE7uL0LJ zAO|8K>+m%IiJwElYVFk5uczTIR?uQ!L>fCA3zlW*=EM<`R_LZ zhPwc6io>-WzbuFX$Ol}rNLG$asWNLtc2?LFd!H@C+9RD=;OJen$d9;mP!DZ5U%4-* zR48d|zGue8+Di(0r%_C(35FT~7jP{g7a|}>U;zNS9em7G%YtWO7=N38{9G`OBHM>( z(o?=l+BL!P?W|rL5aF1UgIZ-Ur^XnOy0l%7ZDd@XpApmqLk)lnxEAmpA|TgY z3jm^Wxy#Q#3OZb_sEXs$&&b}cwdtP-O^R=1p_ky1k0l3+X)__{dvaFX2oO>(^zPGK zmwZ=Zf0dN7=0`edN-dC@J+XWoG6?lo;jQpLgmh1t_hvD4ZB$B~lhW#vI-o0l(@ny?!fDGtKN)7#E(ZiN@E5W2tYnjxGb01~FJ?xe8Bh z1c9jNee_!j8E%qdmn?~gdJUA`tV0A->Ikg<~YWWWNh+Es=#zj}>kns}HHnJ-7b z`)4`z(VZu)?6HNBpXzH?Vt#&yu?B>?=p>}H|KN6Z2^XQ^{)Q?f{OHLf>JzHdw_iLT z{CFh{>Is^Uh&s19C668^mm z^Z&J7WjH8b!`KLr9F4|4agL(mOHGN<9L$3&9f{On$W(HF&gTN8G#}~sGt$PM$>&Se zPfL1=-W6kp`Q~F!P#>?y>v=my$P8q5b(~BF&O3e_Vg-Jcv0enAYQ1zi*Lh%0Z!f4za{ zpNbEH03iE!eu%ge2R>g=v1>Dk3#_KK`d7ZojF5EXG@>=>=#>JMV^453;)X15#vDNa zM%S>epoHcRiSOOyq!GpMzStz|&8>!P+6X)g_5BT_08h4$V|x)FhI`&WA_MJLkI|yC zC>T#ZGzurY|B3nFA~o{X-s=s1*ZJ24_V5LBpdaDTBd%&dDMY{r zcTNDPteDD1|IgP@WBdxy+qaYg+yB&Z7k3T%_%Fq@Js{}!2AZmLSqSh{65j}57tN8T z3h$6V;d-^+QX1QH$L-AuOGul>xd#xJEVR=SMgh-s%TXJCw`OQLRtT~m#Sd~8QwuA6 z%;Q=wjCfMWY?=l25QiE7uL0LJ-~&WJ*~c;f$Vr)5$frqgIjtguuABH+#~+k2E2tpr zYq6>(sY)M=2NWDOz`)@@{#QE?g8S$fRzH6{70Y|^RZE?A8+7n+3*c9PXpcbRyROg< z>!MlH^mF+qEL(Rs`mp*9kfzP+N}XShqNLe&-kH18=99bwHNj8=-~z4%ltBcPAF2RA z@=*;kpX=mIbcF^OzEWYg42Cr|BLipX)BA=KFMq^U0}YAz|`z$Br{ zFH6s&0@UNl!(`R0B)AdqLE1=+<4yK#@}oox8+pV4RMV=}Hd#*^#07vm<99n)KMRaR zuE~~hU3@%pGgBxcOzQ~D@mH>`TYc3!QZM-RW6BBC1Vasg3%C|g0TEE;xefsB8w438 zqaG@zdbwn=6FeQH$RPgy=h=I5(xpDUp6bl^K!-Eki2XQ^e|;9AzKKn7eC4PT@aZc?bKsV93BJIw9lLfBx9pjBYAEa$gE{r z+zW)7V5k9b0oMX5Ap)xFmH;5Kx#<1Yj^;nL0gwOu4(;w8U9IeK?4O_MB1wr@Hjk17 z-ZrahpHq|gS33|@WOQxIr#ma17YKA?i5h|#g1hqVDu&Bx9A}*P$hs;pjsn{BDn=ps ztc~zWyWFrrAwQoU~_b`ic!Yo zG)URCGR4CqwDq0`DYscf|L+DG`g%L8^<>%d2kdQ|>>(hVq?ZypS`R3xGJP5i_Wb2O z#{&xSf6?Xc6N~0prV(cSn*d0U$E&`N0EGYN?Yi0HO()6!)e#bWVb9+`e|JC&exyZ^ z{QLa+;pTndg=GHyb@20>?;&k55w3%2{|S`*_vVv-f6S|&_3C|qe?tDx?P{0*?C;0Rqk>R51Lk8EP`p1M^HG{c9?QXX!&B6ro35-K_} z1&k{SC2F%jbARsijO6{w4(3`u@FR>S-=*sJt!_UcFU->x(|B^9I?A(g=Q82Xk(W-X z{eVb4yqP|j(SN*M%}{&{0)Y1fo~5kw2?4iJcAc%2RhB}07uQ(j%!g0iIxG9tRr&+r z z*ZIV%s(j9n)lu7%tgL_T-g7&73~GX*2EYYek4v=>0gVVi0H_&@r1{uEDk0Z#K^VXB zBK2vQZRK3P9NMmyS!gO~q6p~CqKl}7vHj|%2GmIC*z?((f8rntx2)JWzbsT>pAg(# zI7@ZlFx5=OZijIckR0wsXKa!^ZwP9Mh!6^-{IDtF=r#GWL82PtQ1(!Z3TlF(2EYYe z3#fw#XnG_70DaS>d$c!S`sTb=f}H64GzJC2?90J*Ox>m`k5{jhN3DQZe1RXnU?To& zhC<-w+H%Wi7;f_mW$T>1Sab^mm)zMUN-Jv;)XsJZVOW>+O}O7#*L?c%LMKam(e?|VT4b%if4S)-{7Elin&>VyW06qOxu*w~#8NYcseyVmvjS>LymwoJaM0oGjW&P0t;Rt>>U5yE6OF>y}5ErMM^PkLL{ z!zhXPa$u|h;WI6qbC(a1=VqPp(Cn$m9Um-}l2%r!N8^vgu?<&pLQOE#0Jwl_0SyoV zEghQx5K;844dt~%a`LTNPZ&QM63zKlJz# zB3TCM(U<$IZH(ZHIwSlSwyQJ2Mu>nm^xpuG_RqVVzlPNLRr&{Qc0w*+beZ;sGi@(Pd!EtOls{rRVI?l6yTuQ$a?w? zMgexN<>Bu%wofl}b$6yD17>0e6S~WN(W3$P^7f*uOPiq{;!p$NHQ>4iG(iM>lBWb; zvB19KDzC-GQB9d#(k$lW?+!?gOGipwj>7#Z9W*|~2*lb4S}pJu%H0S6#IC)HJpi=R zKi%uh>G{d9X1w&O_}5AsiQC}wEWA=!KMN$gW7<#JK7Q~O^~pYogB|L#UQOPM{;wbV z3ANSw*KmG9O)%5|xPWT`%@6_YuZ_SfI&+AQ=98M~NtCs$eZ~GrFg8_c?T+}3X-L9+ zdz20J0!U8JxK6tz^#&~9s$Jy=9!2hz)waIqTp1?&*o(oo=$g^1zhgTJ}bJebr_-d9CTDwYbfi!%8v%}l-)Xu~f)IULuj&>x40!X|G%MZ9JzV-{sXBUeyz602-}D&@?h?yJsTpFupd95Lfs7<1o# zZ{9Z4x2(`^2FvbAmqccB{7@Kc(HqvOH2zlQsl)zhJ)Y-#f4V4}?{XNM#C}bV4MM8( zo6o&pNow)NF(4%z^k!z_7R}iM8*eoE_NZgBxz803%ow`zXE1WfVhhHUwm_O+!;Z(< zrk(w5O{eCGlzkbc5Iz|HAgJHpMLN^Idt3sU2QAq?1|+@rxV!tHP~us&Chrkv`igpU zhS&Xza7E+6hB+A3FQOQ^278#*j)=TL?2F^vT^!B7L>0y!@8)DGN($ytT zsl*1=cy}K4<{SHDp|qj`sQ`n>m8-0dHv%4Kr}Tcp%G_Wqv|vZyFl4YKWVPe_Ublho zr?aT`dp-b00shBveFv`-ia2?6f&@1I+^=`TBWF@(9Zi-u)&4ya2LD|M^l=S(#MQ|6 z2_m5DZ3+NXojwsx~ts4Q> z!}1^RQV^Jr1mU|z@5vcfr4u+Myls5z+Vi03mzi82i~^1+G%}54rr&O5vIlD~FzdNd zW#xP^qOtv)YscbT&JDj-4|;x~M_dVLhY0ANas_~_ls=`CCbU)DF^ip*w~o-H`5^W4 z-L7iViT2qOlxgADK+fk;v;*f@9oFw*9Ez1aFbXiTsY%^$)2w?Ont(27^Jr{MQhUW( zC~v*IkCD)~HUZwQ68aGiJ>secbU*}rH4XrP1m0*HSY$mgt5|Bqa;$#A%8l4j5MPuU zJIz68sCpvf3)FFxF}qc)eR3lpmRDO_Ld@!=KuZW(lD*T;&WtWG4KANM#jTmP?XAxx zFba4^N-m>lZ0He0y)X7UWi5S#3G4JUYieQO>~K|TwQ3mZAr3VFUIVUcz!!*szO0V` zQ1Glgqdg|+ElXwXRa!!aXE;cB`I^SfJZnm=nZy{Ze87j%4o(V!8b5CYh}cO)-10)* zta{t;y%LzV>BwG$kWeWJ>^ievpr~1ab6Qn@yd z&>ABXs1q|8{QNvj_eMY@4M~^oOA?2|I#W~2tnwenZKCuNO#T%-+LDFNBL@~R)_|mG z^tI@W`Eu7l!h%xJ)H3qyT~z~D{2%B%jRbr`k@!#(3^f2Q;95WzM8F`6CwTe3AHJU2 zTPpf!^miV6<+hm%xf47}MbVj`dTd$rE<;-ec!yW(xUoun7cAhaT_r!(-Air9X2NWN zXillLAoFz}M&_YX2Ngn^CP5elL<;V8tCuD}u0rsY++6P34Z|%tI4gdD!@;cJ zUBQ$e0UDqXA$ce+VjZR*K(dm%_+UgqW^kHMpKmUep_4qayp3(P@^byl^E*30o<%Eh#!<@0SM4fE z{+R{^zx$1k19^g9sN5@;QCmd6eF^#w*_QBs+Es>wJQA6Vgtsp~<>RR>D2M|WkC_Se z*t6Q61YimjDP{aQ0m-aAH04SUVg;Ic-f#JwO?Zd9DyDK=J-hiMO%gu|vN&Y=@x!;s zZ0q~m+=MZ#wry(7`ZS)A9~57C$IoZ7d9ziu?ZAjlrq}>~*H$WqFAfl!BvbWHRjHvQ z48UkUT7)|!fLdG%wVFT;fR~%=a?=ATH^XHW;Ex@|Tyn)F3fQW5E!ejQZutcj)imiR zxL7zJz7uUv`Y8=$s&`tQ9HKgXq^g;xT z{PqSGu1S?GHz$hRsizkQmo@bjcy-V+H;_{ICmcSW0$)#vFvRRF&fwqeeus+HC>hZA?C~;f5==}!o`i+2IlU25^DmA_^ zJ%SGto-`l1qoHbF}Hiu;{((LLk)lnxE9b45irpj1po<;o2<`_H5@K%PqJq+f6Nj`iqT0b)cjSbI8YUk z`27OtZZ+<4B&UjVBY^w4j8KhwO$G`3N@TYt>ZJryey0{FkWq=3*Xd^hx2r9}_2c%Ngg7t{np4S)-{7BB!2FoiM*01d^5^+(mN z=zS)+qdqA`W1iB}tP$a_ynUf$c4?BrCIK{hf*b4h7KnEvK+&(!B9lDT5Osn}JC#A4 zdO+-5I%;8)>);ea`%j_+Ul?nEz)vwG4BW_#C}qvVOq#BAkdy`i4@Mjimry39&0bo7SSbKS=W^j5eUEO|UpdsWL)C5BffD5=5Fa!}W6IluXrTu7L*}w=+7p`8A zZA5hrD#oH(SzG#I%M+i2d2xvO3uy9v5t&Za<6pO99D01sH8M~|85r-wu|ofi=Lr&b z$qEi>dSjFwk>Z!*1Y-?Y+g1)cK((Jw>>1CSmBjZJ@gDMOtkzQ?j#;Ye!=SH&nqa5_ zZ~@l>h9LrGhvmVm=Be&`o@NbQMpdotprrirB+_|W)2dqW&9&}Ja`czYY~XF-WLd?> z1^--(f7PxMsX;Q0Fwd%CI#dMpg~sz!+uT+PI)jV~9Ie-nEp&sXU=$$K(ce^x@cixN zCj*-wt#r*cU2l9N=Q(Yx&VR1^^@=ltdN}X*-a^lao|RP5kku{C8Feez)@?}ABPwM~ zJ$ZnX1aDV~0Cl^X4;c9?;Hq8acXAW}sMxZI@Ez#`u^luP8&7p1!M z$t3eT%s|Si-z1icJ)u|aDoLTYs|*8Ws?zj)7GTW7!$bIpV4SP}#gsekJhJKGv$2Oqqn^NO@r*njA&}iiDIg ze{lIM=EJ+Zrm$5xeqj0=ob~qMc|Q$^%@@EOftp~b0dN7=0>&T$=0U^YHdTT9JFEHO z2d%QVG!mq~JMlaT*}Bzj`6=R^)p6_>s(GOBkPnBefX25Q0qo`P>hBlbZx3N7F!{{8 z@o`&waUOGJ6if!943nOqi`b4n&%->+ zgPLHd0dN7=0>&W%ek`v5Krs>4O8!pHrZayyB14drOelsrzGG;`V|aUvP(O_Gp8#rW zAj&x<_%GcEu(HP?bo#dE{Qgngv(8=7`{>zR#*CP^Kv)be3Dni^@nIA&z1+K5)TOV6 z{=M`gw{)wv?+hZf(&L6lb6dB=acg#%pe7h<09?SefC-3zMK%fmD1booK-(qi4t~1p zD`o6`m0`n)fhV(sE8B=%#HG&|Jb=E+d8|7MJ%h;Kw{iY!@^+|%q zT!n!1cSmeb2TfFD3XB52sXcCrm7=`w>x=X9bj~;69arK{joAspPFd6xOm@*Ys0oG| z02gpAU=ku=$a$y2EwtXG3)x%9xIGZ28I_2FmZxXFAQFWPn&qo{!im z8NS{Ks7iE8co{J!o@mA)M%EgAC+B4ER?ZUH*jL>bJQ39QwqO*HD%ji*FizN>cIsj~ zQoLc}#I9N9FshF;d9;(A%bkY^HNj8=-~z4%OhE)JSC0cg11Oi6MxV_&*vEx(>^bo% zks1vtGYUR^lsA{#bg=zK2}HKH!!`54rM(e=+Z*}41etT&b#Kf?s=kHTEF3xfnPg4k zS8=yaslK&4FbY_jr1p^>e)zmfmanqY8ed4XAzI~ftfMg+H01huNAM5S1Vasg3%C|A z4H2+%Y6@O5>28p1o|LH3bOFFObOKZGbO6vxL+jt2cO;3G=^L{SbVl*~^_-`$^+v$z zS1BfI6xn3ivISO5^}%EN8tt4 z_uT2-20vqCj&3jh*jwM%76uq^j*1N3pEN7ps}FBX7TLSaApSuKXkR7uHs=@1AXvavyGjwo zL1_+ZfWe;G0snJsgNMFoc3ek-C|JBGeHn&JI^(2&}#tbe1AGk9+_7lJTt-` z&j>9t+gW~pwJu!oR**ZdLKDI2!|sy(a(VvFPNms)-cO0e8)TQXubYWh_2@w*!=4A} zo~h|mi~-M12G!M4#=}U-4o*>M_3Ab7@HZ9z3ZO**Ts3b*fNTKBlYhQS{`)uo1@yJClQsjg^JaKq0I1@{kt%l6cQqR88{$9?D`I^mU7E)@<(L@ zmdD~}N*jGy^jl5V@C)<7jQ->8%H;PT0C-Q}W`&zX%>dBHH!3j^IL?7jna1{o=Z~aO zJN8e-W?3?0EwkPk2ctCtdE<{?*>CyU+>A@JZ1z7st9~O&P#iilo0b+#-A$!AIZ`{M zP`Ag3+VNq5QGnP}rX4dJ{MgiREM{uTb0?{A)OW6HWb3JYxl2Rg(p6B09jF2Dap`(o znu7@Vr85rzCE5}9hxE66y-kJHQ=R18BudMC=s)M*-R>q#EzEsO6i8l5T*Z4>Ab2An zTD>-Rhfa&|fapWmq~Dzg%8j&yA8&0w+N7Ov>wR2!52JwJxlAi7JU=}`DN;7__dn_g zy~Fe@mhwXbj)i|4%<{<*MGH3xHgC^3^WR!mLDM!6`Bxpbf_tC0t@vwRMOqDQC zX&ieli~>YROM&;M$;R`)sL#zL)gewJ@a#L{?pp7bXgGaJJ==$xV5k9b0oMY4Km=?r z`vO2rzqiWpyy(gO(6L{mrMDz^Rjr>c>;3*?Q#aIWut?AaL`m3=C?LQ23ru4@hJsyrr__i)E3NTOK(8r;RMO&!ESH3_$+?V!=Lf9av zq4iv$2x)SCK>;j?Z0VwsdT_kldy- zEQ|+0Uh6;E(ZH=O{0&8fvPiX_^_NwRyV#i%h6Cs+F~QM!n&;Y z9@_jL^;A|jiJ3%l6)Bw6!0#Dc%2v|!EQ*ytMh_}$s0oG|02gpAU=bo<&-o1iG|e%r zS!wx!r(HMT8;W(roYLOKvI(V!9cGLiTEvh?KG1?_E+b5@m+D5q<4VQ-+~-JVBezAF zEbinhy>l2d)8TwBqK&oLOu6zd4aOQk_p6Q&_h6$y{`Hq#w(0a}9%AF3>{lsVpgIqF znO2rys0oG|02gpAUZ8?0B3#8TPKfLh0p+rdudNFYA02pCKze}T)?$}Wr%rA>lF*ksO>>T7dWc(I_Hgcve+*G6~l>RkBakJthSAJP1)0- zCKze}T)?$}6^MX8GGqXdpav+yvnHmyn<1_S4W^`MF^gxlnlZ1;{|mu@TnILY$)>thY!ijJuxa~Mb{UeUQ9}% z%2kkU3XTPp2JSW2{|vpS{M}j7g5~6C?vcxHP*LyZ-jvO|FZ9^`Z~@l>e*P5@h^V^} zgmxHp5BzZeR|WCF`Ob3UvKas6{GXTd{ToZ3%*e??nVwl|6J*Ljd%h-f3zIedt9F&- z|KHkGrZhQ|+C+VKbnc6;cSUIOv`TsP+d0agO1PxN+ggRc;lN9*F5GtPJ+^yITsnWE z_1*NO%1e#WwZFyp zCO37V?RQN+x*q0IHi0H9h9{A+WHJ|>#(K$!^&hr+12vk7o*{qz{_#e@uZOSk zc0xzj#U#W^A`5VFa!CjuVs*0PbiJAY&6dTN!zkbn$ewGj1W&p9MUn@f{*Ha2#*ZV> zgc)^IrLAsaWiDH&35FT~7jP|L9U|b=oCv(Q_;Od#JNG`$=9KkHGDe2kubCGZaVmqp z*l*}cQ5@MBf$Ageu^&et0dEAHv@TF!`gW_C4!ga{$ooK1gijk>0r2;^q zyX%5v9@L>_G~P_Tn;iVZCd?tdGFJI}^@|U9t9eX;3j7vGK8@q9Hv-bnF=pbGI)e7& zafUeU?1?Koa0dN7=0yZH6&iADOAkFqaO9|CS>WhZ53B# z06-_B#@|LYGySRu5#D z(*aP1vPI9CX6%!dcHSH23@a2DAxb@Vn&JenA9WieQ1~L5bfzuSj|m zT1cO(yI`EEV^sNKHEux%OSbzZPR@Kz4G>>(81v%Y=ja;&Y2jm8z!m>o#+`s!vM9%e zgn)NGp}I>Qy4nNHU0%{zFxCLXfIe3|3SY9uqBMlm!1_{co*^6TUnvB9Nk@POB3e37 z6AU!~F5p_g*0lh1gn%t@o3cNZrax)Md#ra-X_ix))`Le<&zd?KPEb4;f{9Pxz6J6= zi*V@?3(taW_ zZ-DXGv^w#9sV{-NG9Eeml!O4NaOD>KcOeM>h3)F9m~Dsv#GV}h$j3Dj0l5-I*~ZFp z{<3tp@3LJv^mX!~DeLU^O#kGt0MJjmN}=oCkI)+dN*e)KBM%8Goq9OrtJjx}Wk~>2 zm_JFGd9yGbxwdO&U=+}5o)_Pt9^y~~ z;5Fd72JAotAQKY+K!d~nj6v_Qh7J|~EDbF-;dvALtWL~-o;3FUfR{0m5en4M`tWtO zrJ5Wp;Hq8au@fjz#>Vi?<$;&sSU-->#-4k676$UFuEl(kV)33Mi~>rn15;}$98g6+ zsdW+gsk0>qtF-y9GTe%CKou9GF+v1w38%zli}(^xwvpHcOFv;o>)TYwth1D_x9w4> zk$=H2@m zF+#4Ly52|VH&XOC!-k%$z+G3y<;KiUd>|t(W`Qlqf(J|NWIYqFAFjNee1SkO+HmsY zajrn91$P`|`f+o^|9lQlW`1ngWc-yob1VCc399VY`abAt1%d{eXj)C+jAZF zmcHdl3Vc1Z>6^1AH`2+ii1QugAgdro1Zp*b8UQah*X3ppQf^SQ3jrXn_x3|IoCOc0 z8Dt~A%wPu7&z7vu+9KA}cu3*#jL;*WHWq*wD6+zdERM@p@}38wdc3hF~TDWgiT z-6+92u^22ziFsMk?Ud{Xqkv_6oP2N1(yqATnhl**Vfm&wE)_C~mnG&$RtL)NfhABA z3^f2Q;99^wL;%_*BY3SyJFgwGlHMWO&yrEww~p=vhqL6rw?p<4&9F!2yNGoH%9&~X z7K$Bmxe=f&&Yd5be=E1SnCh{*^qt%5MfbFd_eJ<+#t?h_<%MCLeqdII0b47>AwPHv-yc-=>dzl;-knROx&3;)&*v?CTd^ z!pxaSPHdA0uRbusSObg&(XjSydA}(8Yy6HQ`EhE2KlZ{cOaM7JA9=%J`xg<^1Vasg z3%C|=01<%c;|u_mlZuRti{=Ybd^Jp8#$*;VKD)~FZDv3^f2Q;99^RhybiFPXM4E5#&Lo+D6>DZT3~6KE8w< zHk&l^0PTinnPybxw${BsDQgB<>+$oQ8v%F@&njK0KmKf{SFzDD611pQ?M$OG%@^@P zm|7y+2EckINb7@KBtC6!^(?-R!%YkzO*dfC`p~x8nCS=TXekA7LP@R1~gQy5Jct&Mq8$q@4;9Dh*s2(i5asr+Zv;^1T3=!gVA4> z``H+^1>H40EXEv~fqIBT4S?5x>l$zb5rC^B3jpEppf@dJif!QwihWpUq)ntrI^25j zgR58dZD`Ms{~(q*Oeu`NxM1Pn?l5tW zChmt(z`YuZ%t7HiD&^?Y@_6%8`%(Y0AFTT9X3wQW)CHf9^FU27)Bw1EYXQd)0eG42 z08q{|9tk0HS{^6iZ+ed<+K`N$KOqoU)e(@fl_EYluQdfC#xC-&mR$U6&9rtLvh_;L zg`InEau_468I;mk+RubrwF~LvD_?;|; z{HwCtovan;^O{qQJj?oC-OCKJTM`m~fdpUej;&lgzink9CCK zV~fEkV6(_eZBmvxwN!na3;C^qNh!MM3ZFZ-m5id(#r?550O+FLt8O2YvNj{!;JvMf zRJtnur&g5a%~d}{wELp()BEA=DiNS=SLXqze+B$)SBXx@#|{APywAwOmKwElr!wv)V;zYO$yVl#`@Ix580SyJ}Z?3wpcCa8MIUYONc#2}_l@|CnTN zl*{4@uOzV5B)j9A`s;w5&nKXl^1BsiKnodxjp#V0H%neAVd5G*9K$}W-;ym`?}y)9 z0BJ6#$mZ_j-Jq(O@+`eE!ZdhlLvO&|z>{`Ud)%iy`v^vFJ9}o~slN(K3J5Ixo>=i! zC1ltV*KpB$ah@G*rC1ZYK`kgy1K<_sy5gKcDh`oP6#%qd5UVB^)%DfEl5G9g@5^Q- z^^tH)O1Hdu>W;7m33LP?Mtcb0ypvn==B%SI^w;JQ2E(ilCd0QcR^QcLRrN*OUV5>) ziX32gnFgLJyz^CQ^?Rq`tD@j)%a312DMyGN-+mMBO1zW#=v;C%UgpjJ-GKpm=y(zi z6xf~5Fl=#+n4qZ9YQzT;50;?myZJD?cFV9pO)%5|xPWT`=MVwJoq7OJvUrZd9R5>& zPU2aQPmC$Lz4F0@F~%}(pH)iP_RMxTfv(E9XnZe9OKt>I4S1jus~_~?bU2>(%@<*B zAUWnDgS(Y2(wX-^;R}2KqkzY$>1vV=-~5NnvvnNV2XkzZ^FhRA1P(-$OLn8_g1Ar< z3^f2Q;99^1L;xuvH2~ymH##Jt!nuIgM0rA`B`1Cm-gRhYnYVuON8k&cGP@j5(LRNY zbZ&d#MnE-#KL1ddfWTVbW+oG4yQp1K z{>@tQL4&Gu+p`CmX%fj|91nH9-$6|<)Bw1EYXO%K0c83J01)FE!tjePmJ;F^@{U5} zE#BiNb&Ka#99=wfXljxuLK8q&YB!lUg+1OI0UBS6K6#Vk-`an4Yoms^=vaxe-za1k z*Y?FoXI}3Uj}90G>_=O+2-qbRC#HQ)lU4e4+NaM@7uG@GH8tu?#Li=^1vSA?1Ka115K*pUv`r^AMtM^tRp@g|xnNHpp-3mSp zja&lK2^azvy&DKb>?eYY+8F{_1gNm)8=)T!dzL+AMy zv^fbIbTAUY@J{9A?Y7V|cj&pE(C0NKvJ(Furw@aX&b9_shANe>p%xgb08YRa0mu*n zD8j(s1{qPm`c0kL7P%$Ap?N%fGnPo#RCdE!B^-!%PCL06{1|wDh11Hd#USjO0Pi7+ zd`e=#T{i8Ioj#Ig7QW7GF?F?6M!tM5{APESIT#7p-+G`oDn}LIX6jo=XWl}BKFIzh z9?#3dTUeIrNL1(n)B-~lzzMh_00lw-km7n`G@1MT&2)(Bo!;?{- zl$MIGM6>XI^fge^@KK>()cqG=0xsh!3;RD=-J#pAC7}*mBv^kx?E1sL-$I{WRTO`Z zLJM#JYiMz_&nv7O>Y#C{&Zc9v-HHbz2^a;W&6F9sS`puBGmk?+Lwo&!M-5%fRd?Sx zlc1tAS{LFkYb&IbhORUyPkH!12Ho2dTnuK`~KO?Hv0@*Zt!WJ1y1)!hVI_}rD7#6`NXs@u+)k%?&&eewC;rBbnxS|WC0ti znJ_U_+tA8c!dAqzehIi=d z?bmaG(Um;RYnL^wxZ;H3IM6s3SvU_e-XkH1EPVfjf~H55u8jrNbf600u5`sD+8-tX z;pjBh;9th>_HXlk54Z?@_pOaSXB^WonP6LsZdxuC0hd)X=`=kasM4Aj;Tc*pblop) z4$7G7DgZxI*5G=XoKUL>*C#uwt=VZJjb7xCJrLA|k$~@(<^qltd)n_$Wdd^5+1KW3 zdqDhmI81Df`_9rabLXHI7^(nHz!d@L5CUk+z`u?MNaO^znYYYmUKnK=;vC_NA-jC8 za@)`R{Nfq+j{4p(kVQl_l~PE2>Y9MmIC=vkT(it^d`!TnB8vI`;&+}NjE1aFSqp=l zr7d8Mt1KKZ?!^gX4tclPnSHLK6BkKRoML~AD4hN?*Nfa}2O+2hhAMy)a76$HgaEoD z@C+G%dQ|3WIqjNKt+w+{<8aLGKt}+7G4lyW@jmIQpkD>hl%X6e8^_f5ngH*|N&B?f z1hRNY;GN&^3Ubi9JeL`rkkXB{i zPfeH48F);J3SXuTKAHHxZkJ~!H^KqncLMhU407OEa&i=DaxHm@aWMzOg1!3 zFeZR!%C;{QWiWJeKhZn$)~{9IzUQRCS)0VNZG zVTaH6p0OQ!c|1?M>o3f)&WZ*)T08 zoEBz|w2355eTy5r73DfN2suTb}Yo{??$PPKE1k+@e}m)CmROh(eF> zXZyCi&=xB$nHC`J(Qt!adF`!h0%$U-{YV|VU5Xvp7nFMn$9C#*wf3KyQhxl^#Fgabe36&}|E&sa-2d0@vKPP(2Y}xR z+zYTUgICP(sAX!uKR1e=4esdTC(Jg}AF5qCG*1;VII>adDj&!M@@LFw(T`43UlUMU z$(?A6|M{2V<5V_rc5`kE4_+l*D!=(PInjCl#h5-A3FyIA_#nmfUGOYQ=(Wg0qAxk& zNjrsgI;%aeXEiUr+ATvp#Gwk{9&qIWI1mC@-NCEobW;;|0;@7Rw&^Qxx2G_c`l!&d z(A@Yg)$yr4Mn)(W9ccCNEzdZw&fnWB9%GNYpJfu+;6<>j{_Jm39Xa$i)SsT-5vV8g zji}ngfsp{+8V1Ue(+(_$jIwd;VK?sr%tYE!EHZn}p+ z<}j=WEVm8TFXJjH{#jgQ58(cK*1D^C_EQa{RMEsC(F?~}!&OwOy0-8K#>Q3!W3x2h z7Se59^6p_ClbY#FFjN--tmQkHrMo6?KHDh3mqm6_keredCcXuFffVX z9QX<`Z1=MliWk-^@d~%ok2oW_`lwhYJCsHURJ=D><8M6{#Kw|1)%z>1vJy=LQ-EM5 zy5C_gebDa3(hrtzFJ=ecEEi^4A~iAx?tyGn^ncUIQv%vc4g!`n!t@P=Nk&n_f2fvB z;wLiX*BL;@L5)L=;~hpi%wI3Pkfk`qWP;CvW0PcHNzK8#Zdhodqhb}mvMCy@pe>TgH zCV{g@W;I`}##3(+e(w4%K=#Wmi=dX6pdZM06kFJBjz@oe?sIzas)D_<-58CSQsqs{ zClWlHij?XYn{$F1UUrqLyLK=VU{hbr*~Cqf`72n^R14qii?g40dZ+ad<%)xzSF#<7 z*iZ`$RRAa8ih!FC0ysh7kfPOFl|$S-Dmoo>w&V(SvD{%Bz@Pi3fizZ3Gwzuzjy5ZOu>5ej_E@H9(68qZYrxLmpw7LbxTFns0V08ft-| z3g84>5kLqbfJYP@R%rcUeBx7mRnEPPc&}Zvvz(YJ1CPu$f9rHh^cVIR;P6OHiM#;B zAbhiH0uqC2S?&Q$QkF*vxa`jPB`qq8DG*=GBG7#A4`{>wtqvmr&KJKp1BzN&fw~S3 z!;|*v)6@sHFP+#re904H20tqjLM<><0i1v<0*D|4@J4_GOA8B_eQ|S-?YJwSoMd}u z0dLF@5#GH!qV&#qsI__@ynP=FC*w|karUEY0v^6KS}W_o=vE9e_hj!g!wxCl&n&Fp zmT#|~Ust11ps(GDuSog_OS6zc4tX|Kxori7qRN;!a(WuZmg@)B-~lzzMh_fD}T2 zpc8oWg6N3l1RtsGsypT$54~ze9z6yK#?e-k{|@5ae4XW;Gz~Pzrr$9Vd1ri0z{w}; z(;N8cFFRemA9&L=d;;N&h!Biy&%B%jF_yaxWWz{6q!EJV`faqGG*6JYgV_@xUZc&O zW5(3;oA)yLo)F$PhFV~#0yqIz1du@p5PA>Zv1OtB;qUJ`T9)UfD`Jl-Ftp|Hv26MDS}D@0Aa4}y&3c&CkwZU z8FJFDwb4OX!b5CRj?S(A(lA6TF$+{#m22jbkzc!vtE7a)Ri;ZcC*S#%{z30PqKwx> z(=R3N;Pb!YDx*LSM5uYP<%6BTH3ZXMF|8Mc+2U1-TLUxsulA}=dm36nGCI8$EJ_Zf zD4Sdp4^fV(jM1k@!nM`=c4R;(%_ePzkl{zYj(WWvv}X$_uSkC@-=x}7YeAFk!8=$X z%}KNFbokK@BW!mvI%Md~U4BoXoNe}G_fE)x2p4d|>Dd)ug+4Xa=goxbCQt=%yScI( za){lCYJ>NQ+YG$<4nxv> zI7-U1f+7VW}aYy?)6KyH4 zii|(fJmEvoJ1v~dYQu+NPzwxI04Lyz015~JVp(bcP;6Q)8T!iRcFqvai+wggHll>g zN4AGb)GZUreB*X>%RpIWv;#}BuSwSgELzha@swB4tI!jRA?Q-u1^iG`QUzuDtsV@f z5tMTK!AJmN`z={-BxL+dm5@6U3N0>}K&Kx5sGA9lb!mO}I$`jiAfWap|3Glr;ZQ;d z5Z?sv7i*AuD}!5)@7o7QjYfMp8XsAZR!|Di7oX^Jj?%91M_ZuC+Ir)&7NWl=;YrY- z7?!0_Bv1f28-UFd#Bm?pxhLMEM=`(66RbLC!h?|jw4$dsBYe{*+f}@$_m*WV8r+9+ zHpn#}`ZFu9?!9}y0QC@uDu8>yl?PBk2#^##27uU{6`f0?-B^7wO^3+8Bxb5v%Ob}P&a?O@Wz~eNgD<9ftf3YdssK*F6#>)`0`5eD z_l>V~;;@};&D~l^tz!RRFD5@G!Y6djet;g2OS9Jioa_ZMQaRiQcxXMnCIFKpwv?24eoX5r zQY~uRMnv7C;!q0=RRAa8iU1l20e44e0U*~j{U4a3D>#LcH4R+#Pfghh&)&>`YLPzR z>Bd;c_E-esH`YiX=)3&A9Ap2*c{+LfmYTg?t&qh5a#vB&G6hBt zaK5E`08p>lMq)WeYwonkk|mWBHJ^wXeJE`88n+_x1JnXT6~GC&B7hb`fHeIac+a$B zEIdM`=a2fo^L{h-%L&y()BKsb@Z^K5FcbFR(%vVa9-Y+z!32BtwFh*1Y0+iOxBZ&f zZCL?k%%u#c-Yqh=aa1Nf;kjAxBdP>O0{k?FnKu%8e$Um$jrQN9#qKmlQ+}L0g)%l{ zS{!0)0}m@i_!rvcnIIj602#NB;N5blgdc@2pSDCe zKr;rCNGxy+->$2@CcsmCWyFMah8(%Y?)higaL#n#4M;tC%}D#73v`lRRH&ZD-WQD5Fq=p9=t4*?xiPQ zd%KsoLaWFHra4lfoqg6v)S#uOBzjS{s$X<~zLj4TLUE1Izyw^zRi@;zx-Ay5g$Xyz zm3r~U64F@Ni#^obc4R%yG~m%$JcW^fN5GYzckM-s`;v^N7#R)hN5{L;F+*JtRi9Gk z95ES-f+~zgYQkvoMk`Cq1=*X(htm7Io%1z~36;=zX%+lKLGZXr=q7RL0Stc#xQwfm z#~ucNET!JKRLC2T(xH9cYE zjRF-%j08B&>99XGbio(JVllEnF%|02idqWL>c-pK zxHnm4Q4QZN1-hR=S6n&{6NCW8LMs5MWRj(s%3HPYN8Uc;d$P&?MQYtQZkFMiG%r() zkvefhfYNaieSVIwORfpMzKunLGvoA^r_r= z_la2`=1qyG*c43!BcJ2Q&$YE{ird%$6ulbv0)a--iF@=->nzs+LCyWHlpW={DHJV)*%nXFN)(45*G}Avk8k#_MUkl2g z87^FbT41OGI007#us{es+_EynUH9B*Zsb8 z0niBF*Zm<$9^EwoE4xPb5T@#iBX%All!XWvrYA-$M`zh(LW}d*3HK zrfJ*R@YgG0(bHxAYUeNzC=f;hBI-XIw+NWE^+@ES2)eSUv4%UVciaz6R$E+HY>|6O z4)qX+Du8>yl?U905TLfW3|<7v=&WRiGJ0#zObUYtiArg&I(S-nT^rp+VBf`S(KR0U zNJ{j*DoU)(wFi(&zroT}0@R2s$x`=7>rI@{OAePk`7%4?rA_G{OS=do0Wlk+xI8hI z6*ov4q+0SC5$+xNnJO2J>!UZnN=W0AdI`0_Pz7)Tt_Wa*5O9z0D*&`Jx$O_Mc+v4{ zV(c34tsHq?$LXo{M}?qwVI)dYXZ)0SjR{0>)feI4Z@f++vh2o zNOE|LFrwPsW^Y>S>stXM0k6?#R_KoS9%wedR4q9eY{jFHNUKvQbob6Gj>83Az&Ff+ z?(xtSm%RWxgaD0@X#nVhF^A1XPw8_l@+-t5dDw|AWt2Qb^B3Y#@mO9@K7k|^@XmuB!B}#faV|y0F=GR_bnwuWQfkxO0%-! zZsCI$shpMh1qHlE;^Hu;WXfY$ZZG!JGK>T$>b>2p?nGwDUeh*d{6cVcB$P>h@wF9^khOHU@8{$Q2uGtf zNo@72BX5$th0Iq*Psi-KZC{lIlZqdhA@qbVkUgY?y?LHld(lBrr&ZH z!=5V?<`PL(qa6ERdVxPNk5|!>QkVaU;26lOTYugEkI2VAPh-&jx%yAZp9jE+l2@UU zf3E(#<<6b|0zv1#NmHsQj67U~y zA@$eoO9D8<0e{{86IZECs{#O(1u_yyIFqnFd2`w|vG&VNVGs+&C9v{W4eestkEMf3 zAeqx(N?wAvbnQ;n8 z;K9$BMYczsdux1#2GiTVItJe=%#!Z#&xijjHkWosfasE7W6Hn)F)2eH8KNwIL zmTYRNnVHZ&evmF7Hk5%isEkoj-j*rkZXc)hEQhKnyXx-q0(OltgjU-770R8_JE%}k zJfI5x7bd~w`G2NeGRYMV0RP3{W!gHfW#A$4nZjxD`>KIIbPVn%p(K@5Dc;Ve7c?GU zIeIe3%W<3lybaQbRMNz$y6%_iqm0SwJt}`A-zLalGfAegFC%<5=IHM|=Fr`;8uA*} zU&aDuTQ<|4AKNbf_}u1YUT)-SVbtw5cWlLMNWg{>o!Skxz)%Hn0lkq_SOGR3YZou8dH24de_>1#YJs5&-~?O|zyl#bA9nz}o#)o?UimZnx6`$951O&Q>~h+kD7{^a`01FI zPYs;L2nXu6llh9iO0l~30Jg%6h^M)&!$j&-wNBYL?1qW@rL_fx-m@HMlv4dp=!cPj zn4{RPfeEB$^3u=L(3g84>5x@%}z`#5n04h47 z&U)Umi$SHGr%`kKKs(rQ{dvqS6XniU4CA?U@>@VeplafHQrzG3Bp0+@rCc4~z7cqU z9K^Ja*}b6MIA1L>LKBNSni0fdo&c1oUo?9hgpnHQvlgEg=2p0r;$YzZXw)R_zm zaLEOJgIZvy0yqIz1n@x!Ff4lj0Ewy{<1e~wecmBDTr>0{L_Czo@a9JS!7ypzpGUQH z;RsZB{#tb~&~xY71HKa~C+Uatewv-W<9LkVOM8r-u=>P2zzdCfINbXl53I|xZaO+z z1p3O5-{CEj+{8S}TING1j5zP$Uwayrhs45E2DQLY1#kkc2;hehV03N+0KE_+P3NKA zNx8Sn%ZT=rUTK*$$|>x2j!*f9`EWApgJhs!Yr4EZCZO<|fQ;jinNJHpD8>?Z>Rfsc zo0+1mi0NM7`}Wv}H!H_r!5Ues@uJi83Ey(tVg#G!Ga{kc_np*gB9Sd?Sm~(WJ>%-( z8*C!{3+?i|fB=L5lY4>S4K)bEoCF=-WE~QwJK!B<`?T_ZY!tA%&9}QmvCr#c6a~~E zc^T-^^kV&*0Jo?orOlPXeqYMOL|&;NQ%V{YoN%V)xx{jD2AZoOz`CVMsE*HPF|T3+ zib$LE(0*r%urS@8ulCUjlJ7<-XVOt4pdR8-1#l0z@&G{y0j96sg6FIh7GU>i^V|@5 zfQi;0;x%75AI;CG&t9z!RGsf^R8a>KY!1Yy3Euu|OBKY6BgA76@j$@RgC`F4{@-4d zI{J)Y?{UYh-@V}`a`BsI0NZi}8OHMf0PBIEU>1HCfFb(%X*bg1;IFJ!rA=hwFWHtf zWN+@@hgx8$0yqIz1PDP0F#CxH05v86dQNVRB07nh?B;RSx7FCx6Ah4BF2#K0+0M!d zmj){DIK--DeGUW@a2Z$m6T{#wk8jC+U3YouUkjF%q07l~PZY$xd6-->5Bl1MN%=E8R9$LWtN$URpkU|iFBok1HaEr|pMK5A(XN0Ka7BRd z9|FK}mBr!c7I*yspydG84GD$72!oksg?a)(h8JC`1-xdr6B?Ii?SJ8_8UX|2t6ixU z-5f9DDrx>%T%}hGaq+arq?gurF&gsiAmNvL9yzW2+Eq$3dL8Ym9XGVaB@%{cR=CeH zYa>ARwGUzxZZ%9Y+>Hto*G-uS`4(a5XVCn3)%$=C;p84+)2}=(vn_|o=si3$?TtMu zrj#ype;rGSZB;8*4}`@Fm8^DC2Ls)y^{=;l3$g;24HMcHT&cem#xD4I0T?>nyK{Kdoa&uQaGAxeTa5+%|azaDJ? zA-;F>PLFR3{VSC(eP*U!KAbdmPqu`$P|^~O7&tn-DfPKv^gSn^8!z4w%(djA=*rUT zEDW7Ax;Pt}9w!yyaz{(@(I-Q-HK+nO^;gu3Kz#3hA_f4&i&{j(7#`RucIw@U;5kEo z*71d{TH14`u z>-siF?K)WJ>iK`nuSop%D22w~RN=j8A}D|XRkQ3(+j?L8k0ipDby_s3N9op_`jg|hI!2!01 zPsM15ZRTu4vqmh9N={T39)L|-6H*{uv)LoUv10&cRBp_dAR zPb!L=DDho!BJ#-hVmbY)zZry@IRsZ|wZTXLa=Y;3*mlw%85z3NnCz7`r-)>)&t%Mp z)yS|V8fZe`t2Pk+g?2dxA^{=5cE}3=TBJ2ECGh)_<59d}fj^U47Z&Mz+}*;i$-&PS z?`BKOzpG?x*HJJ}P2B`91PH?ATH|R6M2URkNQ5 z*BA@@*RX%V0aEiar62e1y^1e2`KQyLNKSw zkzSTeupiWD4g*F38!yf zAbC=rg9*5ds}$Tj=T>~XF*X@5xVe%)NKjARz$8)WjG%AYOMRzc3j`wp;f9R^j4r=B zIn$HBpSjm&I+xX#Hpu1l;9qz?d>w>o2XY-=(pacY@Y7u=@0q0i;^i{N+qR;}A~vc@=Q?r4*`GTDxDvg13)HOLM%+;`*Lo~VU*P_vw2?^tN2B$@n+SL z#Rj_wBggMt}8B^Y$6$Qs@)QXi?)4L2kc2GHzX z7`^LgqOGy|R0oOgMAznI4fi7F^z+$e2`fpfi1(a$NF7qK|kOLH3u){{=u<}@tj znk1@=$fuj!lFLhNu{%)*y4Csu6Wa{brYxpxZPaYjSR$Y9yXE#Kz;hB9-Vc} z=@{xHDF zIdd<5Axa;=)59aENaavd>KfS#g-Z z+@Tg2ssK*F6#=pk0$g$S03Z#a4&&u>WicI_oCt-jT($w1r833H<)Go|0n^D=Yd#=b zQ4j@H{XNlZ0;D!=Hn!%N6YedSW4+`f`qnPW9g1eCQ1C)k_Vxfu{B0NsK%L^dS!yH#M0pHX;?L_=Ud^jIFZh z=66iTN+|*W%Qa_74`Gd{K}4`Fck7D%+*oJk3(Oz#Oi_LlIa`hwMcZMFM1grh1N9Jx zDu8>yl?TW}2ylOk1OR0yOY?W*vHv~|*Ni7CT0c!S)isXaz3@~I%N#^2Wy}WBn`Sjr z>n;7gTWCewXOBrcURzdb%I_v)q-(F`>#096-Zr6mz=vGJuAKy<2hafVBra%*?EN< z%^$e-G#oCSq2YPoUt7IcfbJGqhVK;W^4fP8~plSXhIj#Bvri?C*n2){yhuD8{0` z3VTZVh)6xyzG*T4CYz)lzEl|DUuc)-0ZI@8ybBHiAo4x}43Q%~XMB);gZ zKJzG%bW(j;@ym^e=oXN9xt~v>Wclv}Ihcdb#>hq@#8SJUQG$(qBWlBG~I;%0=w1>oUZa(xR zW%m8Ay}wNr-=ctO@=yivUf_xV6$k--_xQk}#r~ur(sY3=IgDl6oa`MNvGv=Qofr~5 zdj;T0xCn$eK+^PS&G#K6ieLgR<0?HiKg-mwM86QRat@*GLXk5`R+H9@Iy*1%KMuvM zd{zx30lU6s*+#~u^v{$sagQIaeVp!G3Ub=(!|{6dSmuT8?Jdyyps}AqWKEobx2qeC zv1Lb$Zk& zg%RC0j4q|7``WpOU>Z`2?)DofQJs83p-TJVGOm&idR%1`C@JG*V2!kx&t(7G?l?q2 zhy0*D3zU#Sh?Jjvy>fkAXyvzUqybpyd_amCP$<$cHq zq$%z~YsI*-tkp33c|Wk}q@=+Gt#qq|aN3d zuub}UrP*L~9C!bzpVl<_QJokl^LEi)T#ri!i^Wk94vl}hybJZh!-ZO4r~)_vR|Kd- z2nbYI2Y>)k7b6y1NHnj)cym_yD!NcuStA!|Gn|OYZG8vs3e5wF2lqj4$$hxj1US&W zOl3pOXD>QhrILJ=MK|9OX2{1BhmuvC;ndc_`V&S19JNkP;*S7dt880rqFzoLmmz6` zqzI=DxwuAAyX2I=LM<><0i1v<0`5Tw2zrSN0Cgt$Z~F!FcHcE3dnUdoxgURlJPRCN zDM@>5$_^4hIR&ajJAT45NeR6sU}mJ&q)v&ocWp6X18v^Zk`eUHjDHgEG5-mU{VS>3 zG8hSHM~kmI^y43YF|Mn(!0>Tb@uh$J3d-S+>L>QO_0NMapcWXa08YRa0U8hj9{r94F~|zWKFM1#-DotA?aC_dc;x2kO$pT59AzdI=6!rkfSIxq$E~ex zTQ`p?qki?ISTyaubssE=&bs^bU!!A?U|k5_;(LxQa{M_CYMh|#G z#QzG1d=$88m0z0sJCv-Q%@1Qq`*Ds}fVZQF)y-Q_4{@jhxCdN$fEI*+kYp|ZD84KS z2bA>Nm(TyBTFOzaMPpKNuXDkUc@44H#6#lWr9k5f;JJ1<`0S5oG^1R zKj{mf9r(y_nmu;G`HWBKa>yZJeovsyVDJw^gFlY@0MgokvUY*A! zQJH0h;1O!0;U=e>?lM-Sl+w?EKzv&$`87}r3{?Op;EDhp2m#^XB@rM1EmO_dZD~+i zgxC29vXA&3lUwPwj)e7w+RX)ptDo?I6501(gf>UJUlX9%7C}>h5YJm~hoR0(DckMe z7W-t7ZW5#~(72muJG%-a0UgQDbTNBdb#((pb_K%>-{w<%81&J@@f?pP+ZN6FP6f5V zPz7)Tt_aYD5D<}I3IN@{59CGYz>{Akep=t=fK`NrNiPx~@Vn?;FVm{w*Z9jHCpAz<)Q4|M?+Okmu?DO1+e#1>Xfg9zwYM_x<%j z*Nyi2*5wVrf8Pgd|4V-P?B$uDUie?)%ecxXi`oEC40nJ-%v!%IUBQbl^yZ>KH;UW| z{7)2ovX*=wHTF(*Ij=m5;`A@`>`g7xRCyr4S9V8Lhe? zn3Y8Az6>(gih=mUPlXfTVA*h2Y|BlE-beEo6J0`VYeH?;}Qr?jLphxsJ zcnbT#>zGWdZcOC^0#aK@WqSJF7f0y>5)Bxc+=(Yw4o4F}#N^!>wn0vPS z^-Bg20-|D40U+e@h~8Uoab=Wj`|{Ntnd`SDx3}X8s$S2Zs7>kLVJ-&JPF1@c3cpgl zCg2lCdZhQ6DZ5nu=*Ao|-X0OVOe`E-&miEev`rA*ST&hmcC z$Sb6$C|jkY+cTQRM>Rm7Df(0+Lxj0&0!)hr__gv6~L(HP8dYvU7)Jny)$}nRPL;-ao>Qf?B&i|e#S(j!s zU}n1E>FDUwH#UoSD6sp@@RaFLGCyP+ytm%NL>LK}YxOy7?OUOWYdi^=U`llR1PBC@ z<^Ry0*qX`IO4(+HT41OGI007#7()n%11=hc>sxIma|2q1uCK3CIAg^YDWOpL0qm*}@ZinFB0Hr%&9O&+Y$ZXh+%hGVTIp;`g z*eemOMpdB}7^(nHz!d?e5CRhUbOE5W{QPbzp+`uwvpvFX5mFcC7ArrbX2KraIFj18 zXeY}A@^<49G-ZYgT@#S{ADQUXLH35+txjP$;`8;uZfNk9Q zvGa^i^}MqS&P%j?qD9H0v>=u2vKQ`4FjF0v_sTlRjZ@IP7)EdoA~gxiXma zEQkSZ)3b^a4<1*E0JU9?2wD6g;4-cbWO_*6cr)@9n(#6Rx1hTFwshgC`iJu7 z$AYMDm>#4*^8yBxSlgbdtOZ=gRWkguxXKY4uRA-^BP``SyvaQ4i24ZY2&x>PKFyzf zc6;9FyqiCE+GZgcVWQg}|G*z|T%anBeZ(Dn zw2F7{TYI|BXTMVp+$LLHF331&n*LU~>Q59O_g|{N$17dNcjnFK*$mnmzl4wTQR&Et z!$^JBOY;M%yhTb&iXy}GD1tMbk@}(z_9}hePvgFBqgLloZ4Igb?t53hcmEId;BnCB zPe1_B5w8d>g6(qXn7TU~dsVqliXr;=qdjC>4P{O-1%IV|;EklvShMbFm+PJn$MM+R z@mY*a&X0WmG}`JIcU<(7IyF0!tk}im^QOfd7zt2ZcN}<=&qNu9JZ#o7mZle76)X>u;8hww9Q~ zZh)0Ur1cPDAa>wLnfJrmzrX*q`B0!gC)z>y!t0+}L8{yBL^qXoUtBVA^i}&qcJFmq z37{2aMOp6UNkRG@ZNt&G=i*WDIuT`nut{OoC)qKb)D&ugp$gyxToGUeAt04E001Jn zaK0^lVaI25PX=GAhry#{3|r;=LBX3FjE!4et_$lx<46Xg3_s1)YY&j^!|XjX2Ox|R zs+W5-hAOHmycyZ8=rF*A(4z`1kp z=)P^8`sY~E#)e-9YunOzx07&xErsrlWQq*Bf@guO(vVX0>g8R8$uB20AG(+*%~7N| zmo_6>aaS)|SJ6Qgz&+r~18g7!yqxX@{~8vwNGM$>hkSQh067dT*ZAa@BA2D!m*?|$ zdZ{VMzS9BGX=01oZp8>*6L7!av!7Pjjg}CjA2Rvrq>Xb)QzF}3<;|;{uVhAkt2V+& z0QSwFA)Hvjn80E8%HJh6@>WfqhD|`{k^!sS`HCtUey9b8Du5GkMSv}YfDFDI07xe@ zO3V1o=FnEIxeV5K=_%~{OXO!3b=hddRzg)660$(uLa)#-@BE0a3Fy$#$USk*zL~_h zjm{sNW=iL675#OLMu+}TrI@}gy8uQ4TncR{cz*A$f{r%>sqZT0-JWgB?Acg*b?06~ zU1R^!8q@+q6~GC&BESwpKql}707PUq{)nTe4%a&IgDcK0t)RnimTrdRO+wv@o4P%5 zXe2-aterCD_L{%v>^}&35UH_lkBWO1x1z8!rE@X71aOZw|MfO1ZrrrRpBqL3mMzU` zVsP*_0flNZQ$jybc9wfIzw{GoSUKJ56Zo090JXqS1#kkc2(X6`@M^XI08;J3!dqet zRddO|bVXYFl>BYI3IO!JGMA=gwFWl{0xH2U9M=L8{iUM%SZbVqy#6 zsod#|#2ASFgOi2E|GlJT!$Q1Gjh5zjkxL@=N961SB9@E2KWy-hh4dKp*g zcuYPUsERIe6n2!+pTKO=@NzJfD*05NwZz@?h12IckOo~hi^ttH%HvLSf-h>bB2jUK zDZF20jm#oU9Oo#-njpiEJ`;%ORnu>O*~NAe<()LsO)c7QcHp&(zE^$nq-g$yE{t|_ zpr+ag7-pikKjUDIP<_Upib^OFuOIx_YOa*D;WQM!Ob{wb|3GjF+k-!_frlS+=92)R zJ$k+G`jo^JfEodghF_KZ?L=%*`~spq)cu^Ur1rt?K$U&#t>wd6Nh!MS0c7yRe7zr5bwG#uVeo+_PaaJ5Om&+{5N+9~YJ@={c zeWjJ`7m@;~{Rvb7yu-QbaGW3nyb+-U6A(@ua@_8;E270aV7Rn4@e-&L@Y>%(16Urz zMT7qM5zs9YD_WQS;>R@s+{L3ztC$z4YR?S;h*P!EG(Kh?{ZlN?d@V0tl;Bw8!bm{b zYaZ**E7R*O#nr{sZ%cQ#lqMwAU5s0)EoU_hdrPUI78t4kPQVob&JY4}d&IKnyXC$1Gq7$NGu#hD^=S?9EI*B3>gS)01-J9-qOU_|2-Ak9P@)hXaE49p}3ev z`R%2n_|PlAoap99D;wTl*>}^YVI;sN%ST?sun{|df!3SuOt2L-9O+(hha7OBpo56R-+tY9P{@uyhq zFW>0OM-eV(H$VJ%Dd|0Gsg=pJ9J(fyi~Qj?JTe4odH;dnk^mP70R<8+0Fa~o%awg> zgPBHcqirARAMQ0O7=re9GSD}A*!|GzH8Fr>gdBG6vya5C2{`2+YdxJ4cKyjbmmvLF zNSk6SCtv_!Qm~x#TVvnGb66LPe@1;y^_|VKYEdD3TC@0d!(A`?T!oN!J_a&OyKE*i z_+s&YP++K%O9EUW1Qb4V1Ar#t_jL&C%W7qsJfsgzy2wfIa6RBiC1&nuY5SSqI}{7l z6FHSh{qXkh{gSW>5@+swibMO6vWCov%yb9!6I#E7z?%taqujnBw|Es8J>ZeBee#<= zf}4)Bamy0|644UG8}@v$*365zjEB7%g7Af+P|N!d1eXN3K?o>XPXvJak9uc@TL3Am z7bWTpfuhgEEbFPiy83h~uynC+Dt2}N3HI@A8j&jruRXwTmD%DoZUfaiMQlSqT_8ea zWtowr7xfB)P85FHA9EM)26` ze^6kkl1l>IAq132e*uRT4n-0^4l?>Vp@^2ed%+xgUzRScvi;MwngL$h3!8xekzIGV)u(=m8Sc5g1vu&RD1s zVT&64tf`DX$|t2ptt@u@4+eWfzidK1)rTs8e;2s=F5m$npfrsQ0Qwx)kF&&``qTE% z;8S+K+0rsfRyv-vSJYB&DpQNKhdwYkK_dvI%f%Q>z-3&eSJ}^Z*b0vF%}P|J{WHIY z?9&r>wGAW`=Q&5?b7!hmVI-hd!jh7@gIhYI?1-O11%C^jwj{WGQ)ag=Yn9u9DUTZ@ zjbB%sxgI$NS`Ptzr)1HdnvuM?;cMfzY&YJHNnO4LkE?`g0apZg{vqHpuCi?V4FF_c z)DNs0EhYF6QJTT@H3(HTAyiru50zz6hU`7nlea=Z$~RcCsCv1RmvNO$f2Ls~VN(JC z&+j9e004UT5fP0oEer6i!T$s#1BAaOKvHUj*}nJ0dde%VXc|oVB)ld`J+gQED^?0% zUtkU|P#=Q#i|W522JL0p z3_>k1Q~{iTD*}8V1iby-4gfXDE=k85d`)sRkR-AD9% zr~)_vR|NP$2&m5Q1b|%BI_5kD4-Y5QTZvHUjvL2t!sFI{7z&-<>Mn9_&AXa(%2Ji%D}aTY=N zqM`DRI%SviIU0R(QL>F3&`I_)GSmV?6~GC&BETO)K+VMg00d+rJSpExrCRuy=qxC1 zYOa%_G0=bJKJ&T#b#aSKG#}8zZ1^V0WBko)0`{H_KKCo{GQC@~rYqpf@WrZt#q>49 z&LPI_~|v0GixE@@ZX^j{)Kiq z{uBTq;Ju*?0Q8%9(?;ReiWWceZIpDQ^(I%}^m4sd2O)`?HF#lUDRn?0MGIhXlN z)*d_BXonqZ&_w$2Ew|R!LOsNx3g8}ay%9(1oy1VNNCSyxj@9fa)3whQJl1AW2$w7zt2rGQ{qoG4zuUsX(UZZh3CR z@*|@NMYeX%#TB$c>Aw$ZjgatHAp2^dFNsReNHDK(>~p(gHdS+|jjjrd1EB~5bnk=T z^9?1%nj0C2b-&2on{0W00j39Ih*0Ku{D1A8Wmr^g`|gKsBn1KK?oOps=@KNQ8z~71 z8Knl46eJ`DBm@NMMj9m~1QF?yMnW2aJ&!Ov|M%JZ*t3s$pKp8C2VAq}oW;oXo9nvg zTK78d97Sf@zwIio93}rZ6G;F7^&hzw^FK`=FCP6<^pDp->?Z%5NcumH(;^dGIY=V^ zc}DuL$G{8GKi|sbnK`acg}ydL^f`f>;Qwjs(thfo3JkY_HcKtM3?uYDwB z(_oAS^D!WpmZ4VTjr2$G!pYanMN%a`B5d?l=JcU&?}|R_l*~Q>fy7-k`aE$k<}U0i znJ;bxXZ-{O)`-fP0kq8kX0+Nyf3+V;|N6nAZ)8SmMw@xxoQ2>|QxfYQ0CGeN(x-&z z%%sf#v@!b6Qo_OhzZr^-IkJcf7HskC%T11qx7mdxtK(-_@ga(G)nMc9j`y10eDgyI_CZG=S)B-sD;cERM6 zU?Aj7ka?1gb?FehN>;7ReYA%+@YtiG1co)zk?BXZ6UT51!(Z8G!*VteA)fpsG#8wl@}6%z7r zNX!)hJzx6cZ%hXg_>~!Jdlz@Vu=M@CB=sW)uo|%~(aDen@3m3S)fUk&IRvSe-#)HN zGXigL@dmTLI!D)~Qui54lDfwSGr%wf2m&q%cnT$;r2|q0OlG2wgd2W@$B3i(a+^fVw|DGZ9Y=%h8;^R)2CejRBo@kuh1UTvhHvpfo zo2rj?DYZKh&Kw~2*~;~Xc^>z5UCOUxu3?XfyDY2-JG|9ez^$%nRh@`=l90sxUvC#x z;8`#bawbR>XrqPHEb04ShaYl+3j%_IfslO&0qs7J@2BNSxt$Cn4V;|< zCzzQ%X@i**vr)4V26n#1?WJ|}?JOWa_Zzj;^-)V#1OzU(_gkY4Dlt^pf28LPOw83c zA;1vAy8fPrjURY_9^OTr4c61A3q4wYsk!34`Wjl^n&el0;78ze$G9Og{{v>k4$LGE zQ-G)fmjnbu3FsJv^r(0{1pOFFUElRPcbCp?X7}`&Q562eyB;q5C~t#vSYQSirT{^}B>^E&0zPs;`qbZ19vn`AKH~qvs537Y zkc362i4JLH`&i(t0;960WR!t-*uS*tdDhI5WA$j_iqjx>=IWPnv)M%3+Q1AjOaX#` zO9Dcn1bhmHT&oJpWb>vQr84gt&vEEFzxIPyFibioLAV$PGhC(1Zd?-N%&bK1!o_V4 zA>hKU(vfD+4xhYzeS&$CWV4HdXhQ8Ey;^33Nh|EBJYzjJDVzk%Bj*i#J;C4J;Q79$ z7qyYTr;wqr_>R?RcUH(*rv69;tYt=Tl_g!K*?iz%Z{Slw>NbawfoEt9tbg<1!O8yF z4wxH9#hSLfzOy`#kmx*0Kt}io?=V67u}S_|=rwL^jRG;$KWa?+|4|eL2;DUUh?xO?84Ze7`!3W8SU6V#6=SP@Q>!xzwq`Y!H=L5lhR2!{mNt?esoOo(pS{?v$qyEtt1cb1_Gr&1l9i4y$fuiD-4=I6Aaluk)t09| zn)numRN7Yc4pR&fDNx2oJR;u8ls%OmeyJ1>`8)k@8~8wnDca!SpkX@svAzTE?b2?q z6OH~51tVckk3u8-X)c&)4Wl17Q=r6e*+2|cEc=UE(`LkwM*m$Om;r_1DcA_U)rpQA}r^HA_J$5K~$ zJS3*8dsnNOrur%0LH6)C9AN2o)b)!0jC~^2aj6S~{Eh zZ?oO`O-~%Xk8cf&w=aV z0{WF8bM{H_AJf`6d5TKk^_98KdGdp8052>>Il9IhAH;JFQ91Cw17#x#ID>yjc=VLXeM(KLLdf-%q zac%Iu;|PGZwq=vW5@vv53J?Tb67T{_z(6MC7NNnrl$AU3Cm$iEE^~^cLT)k`{2E+S_uj;^p)J~kX-`V>+GHc0hH^m2pCCEIQ_U^ zw<|1pYM@VOTF+h#s5zDJj2>u>b_!BW9)pvB7J{Y?wxTYw=g-)_>)}`iY>6_jA5oPV zvjvkb;0t;nu7&&y09@vPC@29#`jESYf3?L`Naay(*V;wmuFQnd-~B{rqwI9{kts3g ztlDQ^1{63-89`IyVsJ%3x*$o)qxc#UF+KS(pY|~V8_bhm&Ces722AC>gq2HQ!AZc~ zf};R6zK5BOe%Daqxi>7Xvrqqu-W(X7jk}dWl>$P8ndDLMukfM_TI!=(_%fYD_K z)#V2`PF!~uzmfd6S%gTTs8%RhJo&m&^-v59oH}r%rI0Z!)H>0d?ogoSZ|1(4 z{`A_j*g#NTU)^px!mbi_owyhW#Qq`Rk6q%p&qU%n7=BcqcbN4Ml+m9S^*S|fB(p3&u~Myc#73bxY2LhtiEkW+RGAXh`9I;8ztC^3)tfRzy@hQjLzsu5T#KoQU1N4bNjg9$n+! ziVvJQn!b@LEimf|OaY?cTo#;{Py)toLd*)a5(T~7g6V#S{(5s9&KYLi#Znt(rg?Zk ztaL-STqZ*o1aLonM2zAjb49>`unxeCSpbQmv70GM{F}%JQz-yuqpO2Fk@F%l^N~HA z1W;oiSuxanLGDLWbeAh}_Dd@EjoW&;UA;bVZP|XG5esI3VG0lgToMouC1Ct9#IQ6! zTKmm%)7#~p=9J%t-EaE?1v)2#d-(zu&a(BkrC%R`T#M-KZoamgydogwM{b;TZ&Gg) z-q0F$&qgS(A{UeU(IDfeN0Qm2miOb~B%rjb#RxytLAw7sp4bO_{8?ecs=+))6mPOG zb%Y|1ZmYozFiZi0fJ*`rpae_|Lrja$v7?oSN&*8qy-{ZfpJ(8?h7{kuS6)jUdp}n` z+hk%4^vEE(<6F$cvnvABi|K}ydq#)HhZxGT1@GZ|#nN=No8l`!HzR!mIKYJ0G$xv` zW~bje$3K4*%UWY(Rlih`W78m&$GKi~CMymv4PjIU_!qW|alk7m0aLsXhjalIJM;Cr z)sfCKP=$>Mj?A<9NJhV!d$&h6s;@~*rILX7V{~tE>P=8x5g<$RxRPmvdiABb90_j) z7XN@>o0v!EI@ieF(Nm-naRWGW0JfX~kuQjlhzw66u$TD7OG+8j>q#WuVtZC2Pm~@X zzlZq|hbchhfXf_^2qj?pIb@xLQ&l9%{qKbtr)T9iP8-MzTW3O61K7SwyzN8#&}cxl z3(~OXUF0L&?7AXgu``GXt2RAbBLw$lW+~-|Y^4}GR#GJYKwtH2I zoME?KiZOX7CEn?I#%;VhwuZ+n_ZsnS5b!T-7vq2wC;{^skTuhg*ml1wG&(lfg?%Al zQ%xLk(fZtH3wF<34?iC}NAc+f-ILULQXGud03qPQuCmdN+VaWS1Aaxbg4<+IRGOVJ z91jo0+L()^q`4SCLCJ6u@LG9}($_xFzjZ#1^CM#e(afr>r7g~bSmah5rlnVA_F(gS z&cl`%sE?H*78YvGrxN9!P+{NY1ml1{zjycrZa_xZRl-K(f`He52)MATTsVO&omh-s zktMLSIF1~~mto8O-Pdh8fRJICIkvQtKRJ4|l@fGKk_bb(#$Eivu96M5U1d1K59?a&QFUfUTlbmOS+>lZ2XV*!9cP=jGDaGANPa zY78D0G{v8e-9e><858Z~5>q!^ztc87g+; ztbYu~L;UWJ8nILlivo)j*(f|+b_Sts4w-qFB?YDcQFAV9PAW9xEEk7;;M-9jLr9`Y~@cN8)OjQ#iNswvRCdyPCu!yA`i8`b^y@jLgHqneS@%`RlWXP4e)u4X z&i8Y7$C??E@Gnz$XNmr#Qw|1q2dNU&v*Z7VD} zZSJ@J68j`aht$dYyNB1N@nwnitNlt50Awo1$U&198Llrp;7vj$=78FBvdMX zROa?y7^S^#ij?oB@rH(*u8ss7W`JP|5CmKj0EQB<)@=p^tCq2&2(#q`Xw34&@;pu^ zZErKUr4+2Upd@iJ@Vk_J6y!p%r{bxp^OsRR()kh6F<4ZUM=;4e@>P0)e5rla3`jpc z;@e6do1J>R02&HC7yu^$tRtN$A;zUM?2H1UU+@RB7<%d3v+?jJlMYT_>j6#xFar!z zfFR(KfJ`U>8!VDQ@WvTtVPYq$1OJ>>8nc8+V4N>Hcy8jQ;4psrCd+sEHjttpssfAs z!iOsY9!M^UGFLB}bgi+4KWUh&HKUsXB!&oA#VqSKj}S@8!AXF(xZ&OFy?$1*4?Rgl zqghjS#0qVXm<6?BY(5C(ug1{93@}Uqf`Cf`vY-U~3>F81fgAf_e8xyZdJ1XJNxQxL zpAx$ra~suFKe3@S?6B)42jRp}uw#E?eRxH{^%kVaucKS>{ibGsH`p%=nGWZ++0wp~ETqbRml~`s#m}BC&Mq}+1d>emM6F?6O1dII z=gcsusc+5ez{Kx3AdEhvF$Aec!s&yje{d4on0f0coCHiMRY@)C&^x-d$1FFx)g*;m z5=C13I#>lWRKwfg`wz%T^}0xk*2h7zzX`2q+w9`)ug#bxciMoS-&EU@h`F{Ao8 zGL16*)OkrfFYK8M=#Cj)DN3vIF@%5%yUMwY)A14~i7e&cupiq2y`K7{`}Y@?$uqCZ0Z)hFrKgAOpf^k3^mS>`vcm{SWPwbsTylr4nL)loRBB2 zJS+Em{(}Hi0ss*3f8Kylt4GMw|EWR!#|!>;jimka%wHap1OTWC>1yvEFOvoUFzK(3 zLFHEm{%<=-5H;|R0J8Jv*GoelUB2T>i%ZCX3p>m|I>29^n9%K_1DO*HgdDiAtK4}# z2Lz-1a{q0!(Mz|(Fw5Y8v;98pPypZBKT>{DUk)ewS7lW0aLnM!bHE?-f|9dOm1i z^;_eGI&*{QPsH$cHrvtCbNDGvN?-%EZy% zR_d$sS;ohQ<88>n1@3YCs<^MH-G61DYc`5I28ot=;|Rc+m7*AH8?hzp>@q}-GLckm;wX=mvt!*O2D4}GNdkLq}m4?6elGBULFa1@iz+1 ztCSq==Krv8R7+k*7n=hS1X&|>5BTI>jZ6Z-8)!Aw*S6oGHL}TZtCIEhPd%J}GddJ8 z)z*VWG@uG60kmc^_mVdk*aen0i1i|h?uUh}p@zJW-_rgJmPO)>&4C$Um;wX=mjt|p z60l#91hHxeZ1WRmx(Nzfzp?7(_<7y|<5d5-*xFl5)msfdG|ve@ca+8#c3QX=uL#iE z)hbTu7mfNF_aINv8sn~dE{lj`fyB+5QGtgQ%pTov5@65X&m}&yZs}W$e;Cu4FwBxr zaAHq-sOr_mgq=FrrUEm-Fa-z#E(yqo5^zXl0|e`{R@n+N^s}HorKo;v%_WJ`g>B_| zWFM>$%KLt5RZ#_mj~XO@o{rjnMS!S;mb%baD)(*ckI~rqn8C?TQTN7siU9OYz?Zr4 zFPXXNyJr>RDf?9WN9wDQlHaouD|QU~o#8bt-bW&R*+49(80LRZsPQQ0WK{U35j)V9 zz*QzN;w;JD8i2v+MA(r~m|J=P(MGTJoQ9;4?nn^*PKm9hKQ z=95s9-vY8`pG8)|mArRF!0#KZRYqOTsw^PWFD=pDgV=gW_D_0BuxZ>=xlm{?yma zZ#9@yrb)a>l}q}+MTsS2A2d7Ah{IV0swh;~bY?K|T0$bF&d<=-uZxj@vlaDsw}t#l zyz*RM!u*KC6d-cIWezBU5^x&P4FtdH;KWZ`L%+XgVq4mcmDZ3hOjfk^@a>iyM^#zt zv0w{`+MqI} zw*gw?zr-JX&gzQvSzQCAtKaN=wIrg(24Z&XP%a{N4TKPIVONDouP zhA}%zpM6`)U!fyr`JrKNDC*YXBw*qw7v&L&vFvBQ#F7!*r`gM*&a}*(F~nuqjRbfj zOX%PiCzaKcIg^i2%CkNo_ba5-e#6TiuSEBpv@3jO-)1<0u&ad4$VC-+|A&A-c9oa_ zr4k^xh-Z0NqrNT`GxdHP=c3YQ`)Z7y)@N}9eWUcChf7`8K$35Y3Vjml+b`@YIsV`5 zDuo1PB!=q35^E*)_Q$If*Trrgyd7=5M>_SOvO2uNCX4yHG`FSk?0}>0ubTIhM#dIZ zBza3)cR5)|!@5ngo^mpq&W<9xFCY7$qWm_z^-(+7dT4rLq(qfS$j>5uKIm!aribDB zJ+}yn4?A^+S=HrKX}Ccq+cEuWOO31s>3bx9EiPVMQu|3&yGMJ9>D%|+ z)umPg7yHuLhEI&ZQcuSMd_It5Vf92mOO}B5Zejja3`HF*7kZ5?A`#GmAAhv%+o|-r z4Lo-pSP_Wb6HVN9r3Mi?*_bH()dxj z9_&bGtYSWBNC7ex@m#yrb=%^q@>Sn?`mj7$R^Z!y0=4H{jGZjqkRQZlAnkDrIsw+1 zvJ9MgFZ{NtZz(j66$qE4ptn#SEmd`)+zc$*WYjX+>J>o0F$3E z_%=2ai7CzzGqqsXHQ0)a%2x&@0M&98(g&qhKh;Rgt6m>{L&HeiT8_k@>E@a2T$4e8 z$?Y5_VG2S?i0k5|e7Si=0E@}$mj6-p&5o6<4|K703}u{lwRGggnvOS|2;%*(#lT6x z^+tc*?MlLp-U*|VIz^l+Vi9~h^?Og;e&6BEe(?-aZ1k6D$S8aDa?gVl7UP-^9~vpo zP$oMSH6vN@RL)ygz@Es1$N`r*pd3m7TI&K3{FHM0#O^RE`vCdTvh`6ahJnUFQ z!P#5qH*#l5RBJ&a#rM9OYXrLw1)f1$5}Y}pg4Xs;NOR#t>-$K{fF3*vcl0iHq0q2! z=29<=SLADmyEb6Q7q;SpfJ!I^rPl}2Kl?o*k3~0#1+T_9lBs-sy+yKrXZGv|8~G09OQzfHV98%)89m z_rWes1)=21Ss2}ELdpxBOQHICY^~XF5@0lP-7>kH)Jzb7jMQtqOyG$cb?3l-(%VdV ztidm}ln_Ax%=p3+e25C}$X{9W6Xp^YDdCASmKrnzL@+PBFtX1Ix?jZdJl z`NI*UP!rf!`7Q3o6#-(m%rJDUz0tFGF?3c`pJQj+=WeW=a;crpx@XzyGCqZqfNwrX zNT^xuA;o&tJ6RKK9GPt6-&#g9PS4dHL7)r};;CtLbf1 zd?E8@7}T||8OTGN`Ul}aIQc>qRpCKsGkb=lLjf2_!@(y?374KsdV~i#Ew0$Lmn#LodLOw;d=Og z^Y{M$>n?u;I5_wKz~w*MPZ{k207NzOHrMUWT1#`CZqJ5z~Mc~TeiQ*!EYrd3V$I4 zK{?3KUoTK@I0!X*sP1bqCdLZvIIW3N{9j2AcMOaWC-9v2G9n8&VqjvnlUW!vy+3%jPD zJgm7p2EWMsg?e$o28a}7VQup6Ekf(1{qYg}9;oIq!O~Jla|?I$=;N&!PXYDwDc57* z_uyB=>MQ)mVQNs?V`99-X7SRPc4ECto-(XEh%e5ZNxN)@{yoe_s4(5B8X_&k0L&h2 zkNA(hZxsNPfRkN}tftV!N@JeBeB@P6H2$F%KzD!45uddsJ>*>?&@Qa>-JE!H_7(og z)!v2t;nzQjC5xLBU!M*=ElLS~hs*P;^NLJYw0!T3o3;QPTd0zhSrt0VRAJT216I}@!e9t+aR zed%zQy&!HQ`KoFs`9~KBf9^VFnuDu%tN#-#Sw-JtytCKTWc$N9|C(j|kQ0^mJEA%C z$9GulXN92De;>}A>oHa{9~7@2!o^w?+=?8hl01h|gkt9(@A7K@Cq!I`0hm5mANfZA z69BX#I`U%_S3_d2%qBFV_wJmxMO)Qh)grm>&u=N@N}N@I7%Sp$_JXHg-s*ca)3Pgw z$=*?GKz)|ze)3Vu?)T$1R|~;Y75j2ktR-tG^$$k1=rw9%kA{LhkPKEdw9jb+L522K z&QVUHXXAqErVw!<24MPNeUxi`1Xlp4G0uqQED7P5?CZF>%C1HYLtJNdeD`NjF(?-AHg>X#U~ z&B#b0#HdMDC8z?Qy19e)`t&geRjNJF{D&sQCm`ZN48Zik`l#3Xh*AI$wdk)=P6s^N z`QRc7IPm~IU6WS}e>XCvTLa!n3PoS^04+%4$#dbRWpDM3UlH2ZB2Rbpv2pMh5W3!x z_~DdmJ-h|4YAk^wdY&|rMg%k=_p(#> zzyI`BUs`_O!TXIa$~0xqtWr68oI43Z%!uj(TN^3)nevy4kx=UA%39WDlC9c?X8$?N zaZ*5=t9?wZp&a*ah-Efz0X|?4A}+)LOdqU|eyxuz2>{_KPU?#L3oyo#YyDoEGsiR- zU+-45j5Wx_!gzwjn5qx7l#4d1Hq7h3)qnmd(3Bk4=9L6so5mhs{?yzg@At-D7@nPg zt-r}c>N=GAjwq3LdFj{_nD60*oii_GMwuUJfT@>?j$+}kyw9QC_f;%b)`~(D1~H|MbK2OA5R9zASDlv{>=vGQXj$Ma{(Xbyk1r09=;MFs%8GlbUx z0MrcO;kAv7@^DSyE*FtB;I0-GLsvJ>rGI^9!v56c#?`dxDhxMsmwTi%Zipyh@YAfk z5J-4ok33f1a!f$Lq4^4NeGl9ZD@;wf`}hj(RR*7DUgLO6vc4Qr1(&Ap7bn2j-GkU z3F0&YF#sEB;E{%PJ6nON~UV3Z^n-KGKc)(fIot8SzY>$!?2`BP=#s~*K z9@g$MnPM)!-OD^S4yUdDwfUBL)EnPqe<2HSw2)oAeAJ^osF&8_M`zYkFpqV5N zvuvyqTG(0H=Yry%vW4Wd;F_0r11%cegf%%dk8kzS2J6cz1il@*^+f`=ddZJ#@ZV`}s<%0@F3M=#}P?4aQ%qvHpOF3o!uG z2kYZp>tnqDfU=~OB#^>3BYd1-yC zpIZE8JZNXMJyZ1V{C!U0H?b{Z)|G;#SnH!&Q;Z3Mu2AaBMJN}J%d_f#?AXGtu%o@> zo!!ifgsfL2&&P*LoHOwdA}+)LOdqU&=UN{J7XaFK#Tu25t>_<~EO8C$vf@!CX@6n; zW1A_Wp3j%LX_F7AFp;`C#DPaf z{@gXS0P+K)R;`nu(Z@-0qC98BnrwhNmh(sUOY!wCu~>LbryYaQ;%{2So8SsWE9-CE>hcIgAS(PgCi*f02S&= zA@E)@>DjPxUd^rksKtZo{*^T|is8JrMvHMo8^koz=dH}r3U%ft<8U9upwzd-e4v8& zSWR26#Od?V;1h-Sq|(Ao7CDBzqn^`v-#bDe;zA6-^uhZ0*ZPDQm!B!9f8eGv_!xgsrLlu2>*1?nWi1GDTjW*PlE44G|Y& z0HzPtC%D!p76*XtHKn+-a^Ihg^Y%JBGv1|qPV?_R0z@pf(g<`H;F~UtXm0IL z?^}J!WgHU&%oD^^OxwE8>gq$HRz#_2e2x#?>&T2A0?-hl)X&F#yG6cS`s;W-DDg0E zc@E{L@o2WJUN{`?Vy%Ra-~mKjhyj>BSfB7(|6VEpWSQy9XulmR;~U*J6`5zFM?)8r zT^MRiXGnBf8YQx_541jd_O~=?e&|vk;qBGBV)Yw5OfB32v`@NPRSFDA<9Do0O(``z zv$kGv{LZm8UxiY?Ac6b9x1nKficv18rWE_xJ(HD3N8aCF4=`v}vWG`|feyP#=wj@n zR40mx5P07C6yrr3=M0`3-|KZe|xB_ zAN;qC;-Bw?|LdLC_x*Dh=)e3#_`lr#e|gx;r}p2U&ehWZKbfoN0tcXgW4-zc-oW=< z-MTu2j3@wbbqgLr-;Wd@06NS8MJhD{3uY@g_9R21k3=!l8nk_>b3S+*1@U{2$OFj> zY!=cpI_eI?4nq;Z>x%GnJpe!*x0oTEvLT!yg|g1oq9W1NZ?x(DorLxZtHm zbPc%6dz3C$A1`x;!iI1ZQR;rlAs{vNY7?T4`8)KD9I`F4!pqMyHdIdod^ss!ezdjY z`qBVG{H{y8DJOa|9%Xa-TI??)iapkn)!7p#w}OxR!d*LhH*1ew>3>G(rw#pIsebX^ z|2CAV-s2>IMJl;V^-;SyQzLW_%F(#*vCi@5PYL*jxl2jl=qge0d;}0slK5C&T4JD=-hq zDei5aInW!-gHoU7uf4Z3I?L^{{5k%#Ale zsShgMBLJ%BC!DSDi!57@>FdiJBds|OFbYU_pwWQvF(6Lt5CgE8AFNMutxrP?0AVZy z?l_9ZZcNYAQl!l2n{ti>GuiYzU`(IS1W`);=>{^R7JBsYM7iGTmr^a~G6>`6MkG=q zP&_ZsOFj*ITJC&e6;r@$YEt=v7D|0wV>!f*8smsbGYJouLU9ULcvAE@r5>A-lgu=> z6yyMixDW#{eX#!hYkm4h01*C?lWNl!KyVV9{~C_?p9>pzMYL*y%EtSQoQDg)S$+c1 znkvj})<*ud`ox)0Lpv6NfoGb*lYY?1|Cr%ttURT?bwH}t=;)dPbp@3A86;)}BeN*k z1|TQXaj}hh)_RdGzqMB!TH2@k?O}(x5OE;}VESNv(rbN2IRFS#N7Z*tkNHV7uTprE zB6gbouPtBh?3fIj>wns`A9oJg2-bcembce_JndE}7f2je3q*DEXZ-GyGjOXv z*Ca;?M>V!XpBc~4$7h(XW57sBY)_-;k0C8Z1y%AJJiPq}qFGmpBt&O)aFQ|35 z5PcEtVn6t{a}>x?ZnBh!KxcWYza#Q0Z{Oxg&KldkG?6iPYxr2Dq&rghu$r3{9`W96 z3zYhBu@mT=;b|pdkA{uPS&6j8zH=&C`gk1G2w|iPR{1qU#Dy4u>4WtjT#LWOV_M`Bd6XR>R`4@4!R%JHOMQgRtF_0w@k6pj z3TxTO^+*NlQH;oF(#&3w8g}ZkvqG78wd(j#>R;p)yuvjxfAlqHT~!{vM2GrrRJY6C zeKab>UoM}2@g;+*SPhQ?7f+wZ1k<+U83IowYOs5Wy!>(6_-*G(sY@h4%$U+<6qSu# zl|Fd*7ZGe6MCyc7VCTjEn1BK1y7-QyNo z)7-319Mq7w#7f1(!^}V}x4``ip!#T0MkUVM-oxLA8;Jj`JsQAWu01ASEjE%|t}1dP z0&Z>^!tofw?dlLmM|CNg@D<_jL@)jMT6Il~hWA&uKzX5CR1Qyw; z%$qSB&+lUdN6l@0kIExF7aYNr_KVB97-9A?a}9JJIDVUWb!26B#<`8!CbMEuXCq5Q z1v0>4e}O|+s8f9Y%W7ulDIo!feZa(5$CIG9#|nPtFS$s5a|z?evDVqK;cTM{~a=S>cBd{9?+EO&)v*`P>(M?&7oFSM`)Q_`+2W%JE+RAx18lMyi2$>ZKV@ znu?#>ABX53TEQ=JwJc3?;lSq*Co_lv*mwtzcZ%!TPT&UsRMjg%iMi0;{Q^)@LhCt| zTB!Jt-3nc|Ux|#i9xDlr5a_L697Ay)rE$BjWBh6+;o|3oI|K4Nr`J^JyKoHImLJv} z!KxOYY{#=qf>K|1;v(ASeo&B1g$dkeoD)6|i$YV%QxeX%tcLa>iLs&(aUlj^`e1#^ zYkiSs04T^RYLY*iFnx&59q};{J$F&QXHmj=q_fKM=%Ypwb9Lau$Gs^n@1D@!>Z9dx zF!cSYa8toK&Afv#^3>c{pxhu6e!(uk#E^(B?=h76c6zOr5d+8oiQZ&~pr4IJL&Sv`fa!zvA6@H9Gyp)v>$+~sm?w9BknY}n<{wAePo}x?0{%R* zd|kB3$7rSw=+NMk2v=IXdaEy+X7W?QSMcxGAg>dzFLng0qx!Tj_w(I%UY3kwJOV61 zsUPVVv1R1h*V)y1WSbDEHd!Y%(?xZ(*>ajzx}ZMw7k0+>^sywGXcS$JhEVumGUx=+#ATl%T2itz>|kEqnTb0Z?}4^a zOSBb_6S84hD)3=c7R7S)te*iUC=8UJ-w(W7k}LJDA0jTq08AgOPkpVgYzzQ-_&MT_ z$DNP79_93;G*^j8acV6>2PP(4C5=?ze&SpPqT>Y6!@HV<-0F+b`8kuEXt~HESiN}P z_$WvaEf~)>m%%Vsu#L6eKzws#s;mWJg}z0kWcEYBDo%pcc07|cVkCFnRdF67tpF7t zbuzIk*l6AAZzetQ%{Q;h?BT;d+I+}Dcw!Ne@CEY$h0~DQL+4k-1rr0~{$pKHjf z2z;WR78x^RVBvp)4QFHMDw?KUJfZy=A}+)LOdqUId#$fy2>``MuA4iFI=v}v2dPvn zvK>bXea1GAbU9v#XyGWQ{nHGjKbSZ<=!yPttFNG)<)N}IHuOt~1C#HZywYP(wJ}rn zaLW*JS}v!)7TR;^&@`rm;JY^&yguKt9R5nk8B{d?$1u0Tfd%f##2fQoL5R2z12BEC zKHasx;XMGTx$M*=N{QIZV4D1gNc+frwZv}|^3uOM3x$nzN+u0Ofb1UFKOHNSe_ZM# zm>$6&f|!a>_jNAfxq6)$&BK-lrk$-kNsP+km+D(a5x@23Lc8BzrqQ=lg!ht8{Ihd7 zaru`O3(qdcj31%%cPmhyDA$;QMvl&l2o-ihqB2}axaU6+dJ<7WyY-&GGtq?;a)@uqJI_6z**Tk8;J#J{hRS^`=l|LFm#`edlym#>=bATam6 z_1t%Eg7E5wyUqf=^6eCeVV>I`Ky(KZh2MGJm#P#o*e~M25kFo%vCRadg8c+N-#5n|F05-{hCmDw8Nycgz08#)V&(X48?AaD3lb)!sf(?Lstx8jG~^>Q!f*&fPEg$7M3o@OPP9YGjFJJQ=xd$mO|TI~&2<9^KrDD@FC$?U7Pkz?O4vHX5egpUP? z$Vlr8a$LnHUQ#+fvL}X!3o!uG2kSFl>$@NUKzZev3Q5Xnnsw)s>pQvkCTxVlT|&q; zkx)dJ&JA9^k_Y0t4rpz|+cn4Wu|uJzx@06=iw zOj{pZxQ`K?FNUA*$o2SDH2>Le`Jg{@tg+_l_+bEOv`3nRb-#4@R^QX)%`fBC0it`% z4Ufw}$d8EQ5Kb9CxQYt8SqmpGp>RW~PeGm6ZW8_1!)uFgwf{a^*jB(+jmP^vtfDcw z12c(09f-IP12BECKJ&G{cL@Nb$U8#QFQ3x)B>&(WFJ708bB;1@89l}E?5Cro9t?4B zAZ>891^-fW^sT<{L5=F-Q^FzLr+$9+zy!S(5>u;n9pm{#lT3rxJ)}NR>Ju@U#yKp| zmAXC8ah}q1V$2hpO>$V{ijXxrY82J9goB6+F#yvC>$6m%^SA3GIS?b=aE?M88{GRF-2PeJ3cri{&%{qJQF>lvYmH;S zg+FRFJi`gBszY6%v!Meh_33y2R>e#%3ku@mDx!p+wFOBn3664+=$Ii7esZqOnt_N5 zF#yvC>$6_#hYVhxC?mUzx>Kv8iy8Tyc@3}RPg$#eIM%Y$l=at5e&!6X7$AR~$Tq*o z->KW$CuH4!8uj(ptK+3T&aH-Lb)~LROV~9<_MF&UkK!#6D52DEYwF(3_27Ik)x#|2 zNs8cH7Ed1(Q@wgmJ%^B|F@z@*A}+)LOdqWO^jbeM0ssmoJx11zeln@_Q~c3>UtKrO z{1+jjixVzWQCdA|Pd#Ixs4Yc-%nQ$d9Wt3Z)lCd9m|XG4uukE-_89zq{pFtz#Nm}2 zF4!JOZypOnsc*~{^^(Y(zqcpCmi@5K9IIR}sR2MrRt2{->1vCw=L!)QVgRNO)_-=b z|IQi!dPLP^P`-42FGvfuY?l6WhNQsnFAmx5c5hGTE^_guVu1G?52+A+B<3z_|DQIH zlxKfakfbo@JK~fBaA+9F1jQARCBIC(_~GUnj0sehf>K|OT}k9ko`Jab7m@u{l|;J9 z$@^V2&F1s_%oL^p#8_OQ)4(#`5uha2>AH8S9yz?=m$e1nCMQ!KQ;$@BKh$a$SQ|(< zh}+eoA{$sA+y*km6aeB}*h}-Q+y<8Telyu%b=UR^G4pGVU*(Ka*C8ayu_Ob+xvj73 zjZ;=%wSh#2+y*iPB$6~E8m;T1y1+469jW8yi}X_dXgHTxwNt3H)vFyK2~uVe^_l)j zPg5>j&2{Xs-dj)aNwn(moIu1wSUs87ef4Htv0bZR@FIj?ZjkTIZhWziMQqy0sMW)X zQm0kreodmHU?@jg!cnV~ZvJeJ)ReIoa&r=qGTl3>@p}K7Rpf%q+C;PW5T_A{0oXhP zo@dyv=b3a*07xAzJ^R4#K5;mI7OpEoY}_%CtQcj_{c-DiA%kCecO!vJBljnkJbJZn zUt^e`>t=hFD#mF#9&x{RA3wE_*7jg&iGH1}Hb23)nX3w=ezRA@S5?_>tIvtB)hs5S z6Kp4;QQs>)nP8VN5Y}bwg*63%IEnl(0$1}4$F+WL1puT+n_o=)>9`c1zsCxzEaA=j zIz7TkHHpt~;XbFFGSAZ}mTdCg00&2X+|rKV=rkmHHw#n(K=i{xDdl zER*hOY85h+`kh-(6*2V-aLPdD~1XD~%O(bZQ+;$I_%tgFDqlKsCOhBo>a6lis@NC*j`4!cIY`Bx21Vb$D z;=!ZNtkwPJW#I?K5OE;}VESNvu510O*8q_DJG8a6qkFP88R2>ZinfG*3is5RaZuONiFBC>{brOgg9(byg8S@FkV12X81foJ^K?% zeH9r}kCqb+e0g)@ykLAXnopb~sLd(3lPUS+VPwy?Js{#j48Zik`rOz0jc5Q6;ilr? zo=8{B`<0?ir9vuUR&$Pu2_L&3pMQ4*o$QT21|qd5g)rRDiMiEpV=lv0enNgn(%YQP zeQ#sRIK$)5qM_dQ&pIMh+SDj_DD|^GZ?NYSUWC)&CdsfY2(su!cy@Sc;_%!}X)tE0 zHt>ar3o!uG2kY}(>$lZhUbd2P5h+Y$<#ZW7bt|EWEmg)m*}w+(F~;=r_F>cSB2M7l z!W!Gsnxdz-`mT?*G;|QXG`CQB-|{!*_G{_{cGIE}MqvY5>uksNI4s$^Z4L z?`g8oCRd7|bQSrZ{2#Is>J?KnTyun$nuoI2wsmvc~(e zk-7}s*iYf3g@p=Vs8}(o~T$vp< zOBjevOC*i#K|LLi#7}=TX{7h+vJd~XfrJ-Y+6|?BqsJ+h(6WN68(<#BhR-tmJ_S$l ztKn0e5-KS5s{~c8I$v2Rn4Nj@1Nx?%pF8QzIDmWvPY<4>-Jf7D0ok0UWO5FMt<1Bs zl#giF5Z!-*GWDi19xQnC-hG*#(!EuUcR^f zXS@A#6gT($zka<;{FDBl(f{#uZXV?F@BANW@Kb^Z;9fnw+YJEL7YG1c-UDs}Ig<Hn^E|(s%3;v+4LlEeF8doy81jM#l&f|P(UUSt366OD@4P*+z zsNmED-v!&($VlU7qx~K{Zz7}QhgBTzP{Qd~e5(QxJ`6fi;m2cia*>uxbfsVI4^)4w zA0qhYORsc<7mYf={BzG8Nk8_FVokYFj>a7` zxbUyhT^=7JfCrX;RW42u?#<)aO8BU9dp&1z(Pe}<)j$l~jK*7?|Nq^%T741>09^jV z0e*|K08nBZuI<=1Ir@cRr01@VZO^k#CQm0-0xIPVX^sXdSz4gJ|8b14kge|R>kwOq z(Y7u9Pq7Vq7c4$#Z&Zp%IrGjk_v)YI_X%aRgy%u2pY()p(>Ol_8)15?z>;0c+KWmU z*!x!Af7I2 z{h}}Urh52e0_Z{##)k5~-RoALKGF|URF3CjI^(alWi)-3cXZ7!i^3F3IH@QDblrqZ zDD_*CG8*)MO*s%G66=X$>y?Y2Q0DIUL>M6G)$z{GI7mXog&2V8gY|{4^>=08oFJUfS-~JwOr%b1$fk$cQ@6;lc`ZNA- zJ^a&vjD(&G$An0>g1o7?MAMxVD)Q9yBst#puv29(ch>*$cD3IZ4FFs|4!|EC@jd|b z*a+nfT}SEXY0VErsFvMsuIRb~d`Q1ml)q<9;&CE61BK@d^EX+@J8$`MzqSGHH|34I ze4|XZ%i8><_)M*-y*Vk%xgtL>jf}GdN`4EG2Y1(fchKEBpX~fGOy!~I663_vIcdUn zQOkR^f&B?$Z9@#eiXUA3VmJI4e*qww6jj7C4E~uyhHnoi)9#h^`~Dd>oKZhSN; zC!ZY*lqE6FobC01zvagoiQnU5Ji-xH`}p}8e22nce!Bqn#PGmgdint>wGe36pBfK# zc7D_s9@vZhDfW0RU<-=qwwpSk6P0}^xRRE~=m$|3VgSYu<`=)=$KSZ@kMyHyC6#rY zXg+&T(2(L;+#BDF8LelA^0G9mN0MYS%Rn!q*pZ@ef81MsG;^RxPCTll68SuDuvG91 zm-wyqQ%v7F^_Kie>&`jS)W^+x?_>Un+Q>my%WdgtJ6Kll{c?qWu4OVKlk zx)1{}elWkp4L>OY0L0cPw_;U~{Ag6p26E&jcJ!f!%@jW)P)#;@q_s#Z}_P=0iZWq=X0~PN?G-PO*I*NresUi z3Wt^-iXsus?&B1Rsto`MOUmKMBTEi1`4N5}!5@P>DHcsQi{_jS$POxb#Gk7^(42ER z!#BkB3mGr9^!kPhC4c4CBNxwfd!UP%;7E6^a8&%0qq2MvCTkzhMeg%{<6ofKS0s`w z!S@!nxlA$N{usyGjPRT=e7gHx8rx|0sa%#5sKkG#xnU)k?!~N=usQv)LiVBaUr=H1 z#?GX5O4lRIei%QP|2df7A6{$SAN~mt0CL!z{&J+5csPm}MK`6)5K0%WvqkV}x~(rr z{P%}6D>b0%C!F`L3?y_{%^*?#cg-Lx1QOKnQ0M2(`e@T5To5ROv<~QHyZJO~cF2!` zn-6Jan$(FThmr{AY-GrL7~eYOjhByE8EAZ?+GO|wXDTj4woxLnDp+!SH_+1?aiwqf zs7lttDTypd&B~UySHnZKYH4cmkL^f}&PXJMKtAFNuZ;(&VWD@^0=LM53#SZ^t}b;G zm-kqj-=Zyw{x61=iQ9``k-Xbn<8O?NHM=amOhH%+AX4^&rM;-40HO1N1yzbpvfjUr zYC2E*K1(AVyqzQT^tpMjvnY})eEh_ZbsTBm+JBW#ug4=b_f95DDqmyO!}S#9`%n(} zL{(P3sch@yjl>kCIh$@Ay6$-#jv5qiFFr~-&d6ONh|?Lw0Bpd62fWnHe8+ZpxyZ@h z_ijP>`HH{PA-0@sdgF5nl&laugBFs~c}{^PM|B`Mw)ys~70&nD-JQ`VWj;@xNL%|# zv6c!;_X12BFtzw`}1e-Hrl>YKl61AcMfQva}eE7Q6=0x4*HgT}9lfX?l1)-e;+O`^NXlx&mj6NcOZ9N`69T+@R$2 zlj%Pt%dZR+o#8CPw3)@-{o8WMrwai6-tQplLJYw8!Td5e{1VRqps-|hXM(No-H%%g zEyT)lw-G2mQFa%9f1(ajNoUw?wgOu^__`&?LH~jLamzUbU=UHp^QA?m5AvCs%;0f4I*x$>-i=qA=PxPRBUP4~+0N>KFm8 z4~L=XBuRZ9(C+(->hI-C6wJt&-y;pYLl%ho9Rn?uErZf4bCdbQg81iZh`JC1Fn%z< z{0+as+T~G}Z0zksUav;oGgf1HtNyAip8Zg6`izxK{q0#de`1jj@E-ag+sAoMa6?cq z|2d7P8rA2=Ml$Jx(FcFuOF!U|bQS9%DQV(%?`dd4Z-8?07sK$v6tz@;H9>B1fVGw0 zLu~OD4W~jTYo$s?E!ZmM1fnj)0E{2Z|Kf(<3I_mUj7;^H&fR-4vM)5b_AxE(lsvkB zx)Z*ygBhWi3aM5fXg}R(O{!qZeLMM+KVA-<^HX`~^^wrCyT{cF-Pp&y`;S;Q3&o@T zM})DdQ1aIod*XGn3gieK5c#hhqB`TP#xGTBH+LoBJrwYmbBA>Thx_)T1F-4`SHI#7zem~S;Voh>0BXH!T#7C>2tX0nWP58pagEgBGOIR2 zvShrCvRzr0*e_qgzndw5Py3ieZ!b{%>S-^9)RBm=9L=$+H+PI>i8X5M);{o4tMP_wsHX9^DJ z#@z=xQgh0`b!NJ{u--q%(GB4iU*rfJJ=ByHvJ^8TH>aF`h~(zCi%xq+L-maWiw;VD z{`cympHpO?hZ<3NNvDXe;`s|utni?44B<@8Ve__pfT#;G0OJSqtKIMyDFZ<0V~m-& zax%JD)!vCffl@ZCsnE>XjjtL8WW{X-Mu6~Uh{?^3HBWWb^IWDY8(Ycj~ z{ajGz{WQawT&kn8Ula9WTj5{SBLW@ghO{K^FcREW|5^EjuhQsCH6+G{iMoW%xtQYn z$e84O=qH`(whq@-A~<%u?pw-S|#~ozjOmndi^j*;>m+*JNl}AnHO4 z!1%%Znm7DkegQ!B!|#?W2${{`xdtoUtvaIPOA-?rmPKqwjL+kL9yUD%-u2yS5g2f4 zy5-+1%*@hA8M&t<@*<6w*TDfa%J)+7v&d@w+Ic?n#N%Bk`R{gD?d`)=W9^a_$62-_ z=sj;=9eqhD(vI@w!z%M#Y<`Hk5CbrNFu&Ff|EM|uH2wD=R)5TP$s53&(#J41t4wzP#7K~3 zMZL@zgRmvRMH?OYngXaU!3W8Z&^cS?Y0TFI{$XI_^eZdV^2fv?rDo>8$X(@N{UPBX zZdWh;bin*q{UQC~*TMjxZ2p&K)4O|IR4QD$QL)(gBLuc%D-B0jsrT?j+Z}5zfDaKe zq>*d_rmh-9qW^CiMB>OZwqbj09@xeKiKAoR$cM)Gue4UXeEmx)7pwIIUl1hG9$M4< zhsl>hSEV^~v#four0%rLc3P4*i9eZ{m@fO~P38u*CxMGWYD_>HPO>c5eR=1w6%Bsn ziEmP$aJW74N#vm%YMw92%15YsbOy1-e*XR*{}reE#Y#}KVOzQ74Jya<;hxms+Y&>e?P>NcOKI#Deg|&5m8?qkt&g*2#|3&!p7amtDF1+q|eMx zWa@ncK2I0?DfUqC-=)X<);alvu06Vp}5 zI3(~}rE%%g8%Cx*1c6lFl4poj`bTE*;t=;E5CgCs4R}YRcg>Fg#|r@2_h9CfSiOu^__`&@8H~g4_08lM+^*&aYD5;~@J&s@ESO~jZi7L3&7H96?(`*_Cv&w)rL>`8{ z65-%05P++{?~}ho*u=5xuI9TvY360L`^tw8#UGoV7mjX?y+bAlfs#J}LyUc(X~FTi zZFox+37e5z?ob zEob^f4lic0%(cWCpJnMRT~ZW(TirHQ2O29j1+-V5vai(UGkN|lAGK?ELo@Q&GVg3B zxUNVcyu$3@Vh)`Y1W^}a0LBmIH@e|xJO_Xxd?)yIVkdK{CGuN(xYY)COdd|T+OFwj zW{MX8v6s|=FA$j!i|QWd-15(O#WXQ$KO!|_(j!PPOi!S~@{FYj!K8PT6EJ*x9KQ!; z^=mMnJ?h@2!tTe)NtMo?Q=9iUV0|(?XQ)+`+DIsr&kIo(VgSYu<~P3K=XM8xn0<2H zr`a(+-WR8>;uD{)dV2>U#b1}K=x*@pp2H7iQlJ=$R-Jl!J-93ME&OheR#7=ZDE`Au&4#R&l*jyBI}A|@o603iY^GOK_$A6k_vJ3qcq&t0f{81KC! z2NYsbv$R6|^{+G69%81jhoemsVOXzHJ*sR=UDTLvjzXBK&;Ky{O3g6O56bEfjn8bM zQ$(z8M?H~une8zZD=p*5>-Wu(M+!be$4P$*Q5RwW#t-H(^b}hu#vA z)%Lr#`ficm{i>+>m2`1_C*d_u)P5rXil2Mu2Jx_JTu%N7VOJ}Rm6XIziM{A7R;LtQ ze)PW{cp?gt53>LCM~;e;sOl1e_Sk~Dc+(ixeeS!`o`aDrb6pwY9z7l9DGT@LX4rjx z{ajW6J@zG@@_nYbW+=eDx};m|G)3P$O?x7_g^;Qo7+gYx8VLuv&pNbjD9zffAjUa zkK|1c$$yi$y6ZZ1{Zqn!z5=el1%J6rP+Z=)e9C~U@8RLlD6YQVY?li<|9$)C4m3D; z;eXwKwd`XS0Jyy4s#Bytf=9D9K@H^62Z#*$I|(^Ki>ZLzuN7Ve9pn8R%PKzgdM0-9B1&z}tW3IrLW=3BAmL z<*{~QCYR`gRoZ92Kg)K!fO0lE*!;fM_-$qEE@SH>RkR6d+vd)?P>MSXvV2Hw!$0f`> z&awljSy5`2c{BjN4kq}u$k?Z)Z{ib7By1?w(Guo4BwuKSrSzV9*9Z4>3C4HEZ9vK2 zOWw_*ukJ*X$Jf419lpM=5QskRVt23vUnkc%p2m3x;=TrA;NQ$f(EmsNfAddX@mmA{ zE}#4*zjGb{B)U%YGFe7TQ2m(d_3}PB!bVAm0JSX@WpBBg#-gSI7m&d;@=o_V>VF;R z79wnr_5AXpT!mP20oiR*iF$w`L|uph7(e*6h~*8x&jbKOBxuNBlV_ILJ*0?PRjSjS6`>~_ zGCLwqf|wvqIa;U%bV){2TamI=zI`K_LajO#t^VPWcrBYtpWg- zk8@f5VKe~H@?AQ8`!cd}j@ah}&-X6wOOFsS?5J`jEE8|)R#@o#1#+VS?4*t>`fvHg zPksPAaO^&}2-nXf-1!<3bN}TNBdzzE?sV21A6C2GLdj3=lQ*a8s86gO7-8V8*fH_U z?r-Ellv7^FlhVx*Y=S0;#SJk4tA23xTi@^}##~;fDuamzkOlW3(;V2@B~$pxu)9r> z{?N#l@wlaRa#?HghWx`x7tKv&?*ob4ItD4mgeF6Ib`m$vIYZ2|z7 zk8@f5*<=9F?0Dg`-$DnO7mguaueuy;JvbiO{^HOMq-eJLf|m|R2f~*uhPlL{3g1>g z(WrM9^Xe-a&w>U4L*y7_Jj?^<{RjOyu8af%^3C|TP*%TGeT_fhlf&Pr$a^pBPQM;Y zVxIl^3fjgG$rqG*<`n{Kp!6TxUp~MUzij~E^42APc?STb06^s-@Gi$YU--gtC&IRZ zTk1#M=q z{f0wrwl@duA~fXE_%a zchQ)6o_nG(jVn?cuE6&FmnHijZ&%fC7XY|?oXhI(wF7`~KCbm@I{!qIb6p~MotiTi z;rI3{d|0_%x%`jLlGXY>;A?IaF$ zPqk9vi{Qi`8Zc4>CI0~5qU;XJFH_7%i5y>~y9!B{ODQqwa48N+)_IW{R!}s7hYBxc=?!vqldm9jp4<{ z`ndP$aB7Bf8Laxj)o%~xziby-=#Mbr0051nS|QQk*<;1DWImbm=X!jSrKyLM&?{Z$ zUX6l2{TTyDQWAd==e9g|)h-hAf7dRuEpT_8ji@aArI+?PwFu~&e+NRJYqEROEBbo- zoVRr82URBb;A{w!S0i(o6_b_>;S$Kszlg{B^BP-oS4aNhtaYK)EnDHB7uFJ=I3meQ zR^@RBjv<(7>`fup7tQ-EsH2KNSWLFg7Zcz1?7#@~T~A zRp%Q;f)we~!T8!=4sBm>nAz6j4%G}^F5NL~Iqi@`0HG?mB-F;YM$OVDA-6XB$U85Q z`6R$^TT6L{y zf$GzzJ+EGLFPqQ4CKpWj-vZrg?uUH{Yfxyd$tnOk?Y<@c)7|l}JAeCLrvd}H#by-!?fWl$Ed4^2`uzh*sq`PZTm^XMUn8Mg%R$NSzF$;k z?!K@`(4|C};d&gYp!+(QTohS8+SNbRRNB)FqAtV$j33PJbj^W=ph0hRm zAqHUlV1DNte(Wp&$V<|FtiGw<9|bkp8u9UJla*PFk%5+#z;ANJKWdA*&w#I^ohAZR zYQPs|27ky!84@Zrd*)`e!bM_vvJ51{{-pc1sPj8g$UVn+8JoyjDEX5`7!;)kR@&}u zp)sT94`ZZROBU>&hb+4C`$!Q#@mq$d3o!uW2lKn!@RRaiwv5Wywr$4WqQ%K{9*|M} zML@esz!xrXaUP}Fl+U^$+1k!a<7?f) zI5UoMdFrA?qz)zjF>g>UpRtkuHl+aGoPb}U*zw?c8L<6znUT2ZuTL4U54qs}54Nkf zy032d>2@xAxiCp)`1M52B`1e|`a9~RLztod(r}tUWqFy(a`QRz2GG@ierk=hBkPtQ z@K_HaqPvH9vXaa`c~J6CqHhnMMyoRam`HtHM>+Nql>8=Lp;#=P!2=~p_Or2xvZsKk zQg0f8J-H}r6{3p=4o@H!H^cy}`oY!jdc)7z1ppD>w+fYm!<2mGp5b;(B|L(nQE+PF z@6siWfx-xE#J~sooX5E9Exi2KOTX$L&CC*F>nQVm!RH@RQ4i~X3E8F5eH{(p78W7J z6n+FHf0wQBS4EK-V}AA5+9kd8r4o}J^zX^yR4g9fLB`&Shg}!t|DgE6{BAe=;&lMf z_cB4G?Dv)W`EBqiVG~a8xbVvBRN#(DH25owdV_v`11bjRZ+1LsC%vuy0Bi-H1dW-K zi`KD80nawWdms8Y=wFz}U7%XNUl9HH14@4JcSD%Whs+|yUxXhisBlI9j;Qo6`FVaK zcf`I#MY0_OvA7`yVAT)ie|^KR+yelSJY4*(@sf)G-|Jg73cjgSVk`fH4wBl@v3qs4 z317a+0r~i4KB^2EEnM>d(=PH=@CzU1KQaFgdv_fbRogZUpAzZrl1`;lX%G;Q?k)jo zB%~Qi29S~z6b3;WDFtZ(5d=h98l}6t{6@G2pXYtwwdP)PU;lk`x~^du4hOIG+sAS4 zy=U*^q#oWyUUgyEePNeg>(GFzeIQrDh0FU;H5W$y59>K1LO>RThrvF3D2``55+<@S z%sTDpn5GjB$Y_|eAk`bqI0YYA@o!RT<`O5qPB*vJkWJd8KAXmQJe>Wc*$Un+5_*03 zGxvL6^8aZUiEMTN03i}pk|7z}89A;_ugkiXgn8WSqkgJ#Mg;mXmNq9^wgkkICmRc1 zls@>=E)omUE)sWM)q%MT>(r!D3WM8XI|ZMWjO(ghWC!{zdLG_lL+e)@y9nC5tj@QH zLD=lu!APX}v$w-nc|e+IS--6{M5(;ZsCk55zxY7v$iP2JtkyKFoN}KeD76l9dNF5Q zb7#&9Ylc|siI^`Zae?3@jqx@HJt-0>&KjTV2-c=CUmZB5=J|QP{IF0#dPoq0hpxG< z)X(0|3*cbnqpnc)fm%hN2EfbAWts7Tlo@Af0O*YTPFzH%*9Ts_SCl%r7$&}sRJUrQ z2Hd^+q6Utbo*4oq4d(7zeDwc&9i2D{rvvY7cGIjTVveAPp_5}#AOAD7gXf$V1`dU| z^l>nj8T%kar+!-c4B@0uKkE`^maqC<$|1uSZ*0$o+osv@(V*%=4S@4s^7}&g{fohO z^YV5iNuQE}&=8Nx8J&Nhm3RpaN#s2DaM!B9qQg4P0+PHGokVtH;=SI5HZiZa=#st4ZeuYP zNqG3#VKP~6xbkiW>Z8rgR*mQ=RgMucplHgu9`5dH@ijle%8)x%u)@?+d+)Z2RAe;7 zUvhCFR;U}fMYb)r_;0LW%>M3oAwRtbFN_O;gd?wRZ@ha`VyTO%bkWMS;)d^$_X)lp z1;W2D{_JB0K==zX03gF9Eut>Ai`CWRFHV{E0i|^7?~Kn9?uGkz?^9fGrAGtrJJ-1k zo0GBu z(iZG_16_lVpQ)BmP>{ZT68PxF&uI=jh0H(v=f{Xgpj#ON`nr+L80as%Dprl@=uy$W zjn?kfuf3$Be&qN;1J(}&s$kj&UfoYPg-?x^%%Uz7pj1(i*UBS4Z}rrHUQaqLML)BorPV@9cGf2$K-CZJ1{ z@%_;L+gN!|3OD43Aj$H^v013RPy^upSN=f||6y?X=kMrC(YoCm2-+JwHn8~hCD{nKB>Tr9Q^?2q*L81WQT z5L(EKucfhmr{;&ELjNpdtymph4&f3>_3U0s)S@yvjQ(j4=Nt@bb>8ojYcih*vzk-k z2V8(|s{-{NrAtvf?^g!B>9i!zw={KHjq{iDzw7Zh^of7vn;c^`cIr}B>fG#sclj&ZnAU!dJYqm*jOtRaWkdVW~U>_m_)55x|- zIO=Jm75URL68k@C8F`LQ*pNe)@=(4e@n+70oo3^Zy#vA+daiY4os$;Xcak7xAGBo^ zk^VOGeSk%kY;yi-y3&R`s|dcX*^1dqLAC2z<8$`4^3+R1rUl`oQGA+#dOiRbw7qa7QtaTDpqV zy2?1oVPW;+t%cEO&`veNua z6iwhS*VP$FsGDtdqJ z-ONXx38R0*uhTTD{t^s>2~M_ndpyPv>zLU{P3CgHWff%lvcq1eyifz+{#X7$h`$W@ zVwN_7?*UDU`|Y=^%ID4KV$o{)ZnBVIA{0435&0oV{PPF!uJ9Nx@lE;5wNEeWfAOat zBc{4@@oI*G?wNWyof*odQ|ZWtILa((rBzRRZ5aJssOiu>^j8ukSH-e5ER%fr@~Ms6 zqldySRv5Q#8@W7z$_q6B?tkSU0rA%aU(06b)6nXJ5j9NB_VyWHvfDl4neTovw*||{ zR(Vf^YCFCI1HAMK^&em?Ug!VUKwe$aNUfG*Y=o7~XsG?&k>?@k|WfA{SfB@eUi$*G0WzZMt3?8>$E zwu_W5ub1my_rZtLuCV$3m6dKb`+H%Z-$CVt8UXjd@_!ET4+Y=Il2I2YQ=;%YBcr*o zhmZ(W(Z6_l;_x9lk5xm;czwnsI*>k9Q}b)CM-Ak%V-n3ESSArB1MJhiXoWSV+Kw0n2#l&lgo7~dW^Ca$)^@^bi>26P-iPUUH(x?Xi z1`VT#{BUs*xR1~*)yGF^>{r<1hZ-3)uz!y@_;g$>-4Zlj*IFAaPIRMR{|)Y>3Xa)f zfL&GvZ`pyMn#sw@PME+Se_Dj=0l-6${O23Ae|kvLUjGom?7EvH`1IWWHU9RT1ivSE zpdixz`SPC($$x_Wz6JOW`v374|NOdte&uDz|Kr!wUWcP0pn#uWe-HQ{&o5)Z{U-m{ zxIF%k4h4W;ylftck_5h$EubPFy*iZ#_1@5@Bip)+d^ttRLDu3yRFxZwC@17wPQY9D zBV@meV!i&;JQC;MY99F@Cg?`(R>P~hJ`L7!Dy<=I(>7t_CSa2;b=+*Es~rW1?7=3r zyCZc2u_)#^l5_%HUsznW%2&(a#J#Kl`zcOA$Y-BevkR|`q85%n-Tbks#;5WIcl=v( z+&2IhJ1Tlw+~-fQF2-&WpBBpmdYpoH)XnlaVSrSau!%DT=&8uPvz&cOOc3!*d9mqt^!vrB%B)_DDx1qwvk zk`WqAeZ8KKa^-iF*Q&?O?u(IXE#TBPj#4?P*M_&*Chs%8DVSuBfw3N)&S@vpk>_UU zRAqLi|J3VOTl@KgA-?!d)Ei;kJn|j*XJ6nN@?Ve3dK4Q90KXB~zY2U;Jut|Rrj%=Z zQ}Z|7_?ob~^JKJqdVCYxNm35`djs!J{6GzdDehP46PHV6ULKFmzt-p1Pg-@pCFa$O zVSpT)^V|=+?gF7AXteu)M=1%`WwLDnU)vkOjRaKFy?=8ixJ}| z*{pQ~_QcQ>g^I59wg>sthV^?W(%AD9Ke4-^@I8ze;M3FtX&4@S2mfoVr!N7jK1A_#g}t~LVe~KCl{l<+tCi?NI>gS zPgd_q3X*Goy7efjG-ooO&O>*T1G2iK_7@cQe1hK~vFiK#e9~3`!kGWqq^?JibqqVN z$}-+M43zBxYR^tu-s3L2sf2&(F>A$wn%+v{`R zt=A-z{}>1wH#(e2IT+zqAh8Bj0{P2T4}t5p`PcsG4i4z}3>s6%G-TCJ)H4JK>bnu+ z$nrj9HH?Vp4Mu*3(cf|yl+fwzO&;-u+k3Xj4}~;DghJOw34JL5FF6aFu>>kF)Bw2u zm4D(t{x`6|EkwuNT}z9HSEt03X=g>~=R*v8dGj9eOp(d&aVlVAlXC%`A6tTs`3QZk z{W)4!mW01~38rU#ZDgvO{*+f2<})BWaqOxvad4GC)g$+x18)Sbd)#v^_c7{)^7g&F|&zw%Fp_;Z09 zi2EouIiQHfBzSyr(6fkE(Iu(++S&;425+ayU(wTXgr@V?y;ndKa?O zSi2a`sxtLN(wgl=_3e?{9;m2mZD-Uj{R=&258VICKjqRN+(vRW!hi}7$={FUhdT%UtZM*w)0#AdE3zfpl^>?B^n%RhIA4g?0YFm75 z$8XpvQSivm>-)XQ9Su<9arz=;9ZUsP{W}t@qbcvYCOOI#XIp)V^{X z&KCr|Uyf@K%I8Ju4Ne=L8~kY_=`y-Lj9hImG!97SPVo^`)cm-uiYrlM1PL8sG&}X2uve+p!BOc4>Z{B|F~0Zu7jE*faCcaAZ+_G2Z3TIq()e zllllBQQ7s3XXU|0!ihDkP+F?~imq9aWVD24YQvO&8zFs$;g~3!1xEjX_!tVAoA~Y; zvK#A8RjiR{3vJoU8$$?`sOpmCC!X+|z5WIMtBUs$;%^0BFDaItZ0ajFF5j<=Lhh`| zfTp34IQ*aWCaZImi+BvhQUyTV{jd1*t#^rlUSkiwZu7t9p9b;w z1h3r|DDQ`Csh$~HI10#gM=LJrSEmWtHa63|pZff}p7CY{5YI5efchle`PyF=xJ*p5 z<;9Q|R(GL$XZuUN^7M~Cp{k6XPA{B(Irn*pZ4bqhm$T0Pca@?yi zbl_IniqdJ%OMtpV3pD_~$8(kc=@5S)c=blIoyQ@c?s{2yuFi6V^Kkn_GRcc~4SY@? z9Ty|~;ONs2G*f(n@_YRJ&nNI#cYC5z23K;JR)3PMLGdGXzk}v`;LOi7SMti~R9-Ou zjanLv{)Aap23Q|aaev{bYV@VMx;0|SZ@dUGW38`t=n2{Dn1{*>H305^<^KxepAKHU zHI+~>x;(mXaPlOH1V?8AZ(M)Ijw=N#MhK71PjMfR2vnw#NbK#{KfLyrOpE(IZuHE< zf}KI@v<)4bs!8u7|D8rIonKs}Szp?>VDv|j8C}?&3TV!)Lclno#pN0c*cJoRu;fiE%!uMs+ZOodQJ08dg$)kh^U({&>Oq60sxDR8W{cawR1%x zL8ZZ8upRT6Tq9dvysEo-d#6{fquxD_g-aj4bT`7kFfRB1Ga&v=;HBFM%RRg@HfBKY zbV!vd73sytdJQkEv;z|~Nk>JBs3g6n(zlzmT#?6G zGB?csruCt9fUZpkig_oD{!-2OZM$7rH@IRDWiY?@i6WqJPqk^?Zwv^N2za|u7XvlD zp$5S7|0@48A^!a!0EjIW(;-X0Fd?zm;7cEB!Cju0p`nND6-iACbl$s)Ssg$>ZehMt z6rQu|{P&6_bEXvO4$)_-Igc~hq*2z=QM3v9{?1~Dr8-R+PynO9#ysbe$mHQs`u#cC zUvp1)lW0*ewGE;X7wvLsvER3^LFI)S0QbN02SNPj%>W=@esO;{epfa;`4|G@7luCv zEt9PU7c89e-DWafv^Jgq@3BNBmE~EUg8h-K|E%7ff^NpZ^og)GJ8+0Cw8qHH%)07r zFkwGFA<1A!@{-vujQ)HscdE{YJzi_9#7GYzFID~;2<@w!c&}X`BeIU&xz#d6SsU^wZ=0^zkm{<1kig&X-@ZPS;qqL&mV}BY-;z1fp%Jt08FHQI| zevFhg*L)oG#Dx}5;!i`#2++_&+OFqqLGS8(eN0z;pHVp6+C%{QSktQSmVV)AZE^yk z)vf)`mU8tlsBwB_D^_|jZb5H_n}+(c%lVNfhcd_(a-b0-A+U`eO0YDrLw{qXrQ7bYyeJWSVo?I{Yi zjzA577n-X=^X8vIgNk_<05U~+mWA+iPv~Ytt^=s@(}{;XqxP$|;O8Ar+MdmjzCi)1 zJW%Xdl3yXeo@hWKcE5dwTxU}zrxicmJJ>I+JM*AF*?N1I$niPtJ~ga`29e_-5J44z z!p{5a2(J`F&|Jns7oUV0A!k{O3`@4L9#mea0dW5-|7?gqjTQiuKOfwT9@(W?@#R}n zdx9zIlxK$4a}${oRoASr#|+N8?`S2o6wrp$5SH zul#c${yfhCAap*asef`KYzhn14`}2!!nMYgB#_n>R{|>TFZTI4) zLlS)YNj~o!W_(Ms>VEa`rFf6@4BdWx7AlPX`x*LH!7cLRrqTU7DhlLkWyY1HV{arB zRmr4lwn%o_pr$v}0C@gi<$oT;-+l=I>O+2jVTo(1$cTfvM4=JyBB0GaIQ7OnBaX)J z9>Y7Ddq5Ibq{d&19)I`$GX1J+%L%8+lHz`{%TXqLr-|*C8cLc)oBpP9Ylqwo))NhU zJ+_XGd$=9boKHA*gzpGA+$?89i?T`l$il}=@=MhMDlgOkxc`-ZKEyvT6##maSd{+l zlP_&hd7}lxwpX+U4psI`{`k`x&^Oik9EE-^Vux1B8yI#_aydg!o7 zeQv?%{Gd=Tju^esGnHudylEQ7{4WV`2smw`OO31f&a~vY>;8Pyp+}M+Dl}=cMaAyJ z*)CLGr~z>QEB^wBe}XjtB(AW9rxQt>>4;(!so~{}6^X;9L6zw;_zGj5&ng7IsX?z{PQ%xCmK0a3ZLs1$9O3oN#;m< zlM;v{-1{80*eNl@d|)Y7Q41uH*D;pLTeAV@|5aPbGaZ1ijYYHUfv;VmX6kBl2aA(k zrq+EGlauQ1B)j*pu3N-Nry1(Hwo7rCKzhL|sh99Vc=0aQEmyP~Oa!~Fk2eTG&(FQ6 zC?}^xH1{$$)bgiL?IG5d*u1<^%KU;xRT~rUZlQHu1IxQXph&R9enGS0(?4w`@&A*ylGULt^>hoP z_mm!EHFW!{a1_?3pD~I2HaJ?sk-YPHi3eoc{4pR*o@xehC&p(*V}7U;fq*TqQ&F;` z+U%``^`0o?Tx09w>|E!95Rbmcj=z1_FwVXxGL^GDOnGFpJ(yNcM8OMVt#MgadvN6M z-J&;7r}8qTTt{O#mwc>eOFqWbRXpSin=90*1Zn_$uDP0PiXpY;dnmYt?Ym*;1;x_$ zmbMP39A>&X0dEm2J8bp|aUSX{<4sEJ1L;ofkB;4tdaw625X@e8$snNh3?^nf)yDsd z7*mS7yE~jS>9DK(HrW%Y6h?m#?Z6i+N163lIk~C4Vh?8`TFDn=^t8_z+7X7GWUfJr`ZeK*lZO!b~N4#Zkn)?j!8+153%_jhb)sV-; zq^F#6xcd?z8&f4g(lSbC0s zQeEy;@9o^I2mSi}T2WMi2j(>i_{+wShdvENqDMo<`La#3o@zScx~WE3h6{VsJu`E;Qm+sHoGU~}`GoHT|3@!kY2gO5>VX@l_3 znh^elak>Bh9^&tQ2ENwlUWl8%6kl^!Y4hjxdlT9W>$iV2Xv|`5JA90`L#%Zn8TTm2sUm5MwFxjwhiIA+Jdy}92UJp_Kuo3ZL zwD=nBTF?U`dpf${(B;^@r;3~gK-y#9vtzEXy%}7MiV@}Bp(QkVmH&VGF#Z{|myiGF z1LUXw=j;FX_q2as0(X8yLO{80;fRC)`1`Z}-81s~bu@&3+DiWO3nl;jB=q{n|NF`H zKT7h?>xi`Ahd)E%>I?W0{M*5gfa~x7#}hR0KklDj1^#;J{~`2G1}nd&yo6Dxzb#_Rjk-h6R2eAp)4(jK3?iS<=#^;X_n zz0>2}cJf3$$oU9%6!HfEZCvkjEQ6YnIGlI$hWn8#i+;w0o?`cCSztc*Z7EhYeejzN zBo|ICdM`^Vm?tmeJsVbvkFv^Qnyv;aGSuk?Y5;sby4oJAF1JTO$j!`W08rs%3e#|1 z@`g4^Ii-KYW;d6STr_Plql>pX}JE{Lq~O&&0@x%`eI;VEH_dnb?GV92lh$61OFVvtM-78fI zl^1FN-2ckI2IBuy5CEF&bUaeDk$tR+;YOKkyTo?8y*KhXjxEoRjf%jpfC|yBEqS^@$wBWkC@q; zRz@Gy_w~1?cA6Xz3%pCxfw~$QJN{lYh&q zTTDkrwe=3HZSG&2pEX6lF#|!<9I;0twY3&|86YEX2e#>c+d`?nZ%;lvH^en1r>VA+yah?B+ zcoOX%dF)fFkMH9q(%QYF%oeuO?@ruFh{xc((WILTWBzNYx8vm$3@#x6c-PtavTvhf zlk4b7AW&zj83;(aef5FL3pD`lf8}2f@u%AZfa)3JY&TJkH)17t(WW11Ui^5)*jq{W zG#gkhYs)8}y$rlxB*-@?z=D14uZ&-R&%{d6JlyW61;a4vuCR+neS*3^XXhlnQuwfo zDUAMv31_H1`oQ}oy)2@t(Q{JVl1vz3qxNe)y8=~g+vWmLd7%ct{jdBRApXJ>0FXwR zJ(;j#QEa#DYU^h7aQ`d+Mu@+P2>?{}4(%hlofXSM$nZ?nOKY-(u1LEb)`8Yv%pJ1^k0U04 z0dE((A5G!Rf&H)AN-DD_*#sU{83jKuk#+OOkxDZO*YU}H+p=Y-Lp+xeqk zyck`E*=hLsn9=$8Yb7$?JJhX>vAoQc>f;`HAmx0}u<2`$Q?)arL4n5!&z9459Vgs^ zaBcA=;_BUn2jFcb5ulFCiT~57RoOew6OzFbCPPr+WTZXFstYYEOHb zQu>eGt)vPnlh6|=Ki(vyPG#ZDRVc46o1!1gqOCts*}<1yrjJ`vl@+JIk?`V>4MPRs zl~DM5kE8EUO>4n7c3w2X=d**UKWWy5zv!A}M)T%D{e#&WpluL70#VS10w?`ePQqZC z;Iv54U4@*m4ek(NJO1k=y(hEklEd9;Uvp4juUhJbiSqc~1-VvJ6RCJ{-E=PEo*H`? z@oDyHTW_$Sac2I~tA{(>%Bheuo{jlafq_0LKXqs<*f7*bzaQbpnw%e%lw_mLNIvv1 z%Y$)?kNvbEkc`*+)b}Fk)9t`HwSw;pQYPW;baDt((I3Oau%Q+-r~&YbcUAE|K`NfF zB={4UEPMXgWos5!&HksJTVHGsT5FYT@D1(lzYe~`eYwsDB^zLc+&1`G4Dr)s5;()-c*6-0c1wK!l+OLWwf2Xj|Di@vkh>s&DdhfziLd zGDSx{Jo{HCLx0zDT@8IRm#J40T?Dr6c9~b_yu~A^yifz+{#X7j5dZu%0LU&jUw8jj z2$L?UNa~Q0F0Wv8JVPmRoXj&jn-{LZPH{liS^51gy8Lg~`7in5f@!0;TLKU5KEjsU z!j}i3A52Z#L*A@vGWqlf(cgg4pNV|Xb0!aax5(GeW`j*>mUDWMVkbOCBAL1{XhcU3 zzOXC8zc4QMcv>O;P3{1YDDns+Xa=crf+009liQkV>Xwujfk&8knafVkIU+3Nm57hB2Dp}?GgVbv;QF;)a>d50PRum4y6 zZ4m$UU;v0}KqvpR+gb;E=nwFvblAQ2`WN#aJm!%?%Y)3SdAUD;Pi7Z5K0a0Ty7uR0 z9xfO)3<<%+-8V-doMqC|QKj|3$YOFjdgI9qna1(Kwb^7l=9C zs+mSMGJ0l)V&m1!9`t_WBqXso>xk1me z!orT}azDXGnLt5gp0@IR@Ch%-@!#WBC)2g6=|-gP@(Y*m6tUY|IQIw5k&RI*s0~^Y znnhvsZ|2EcJbzcdFy4I1AVW&e6nA;Dr;wHJFkjQ%~Oxr+3UEw)vEYnfA@K2P5&kX`#;o7F}f zC&4FdLw64^XvJ;5VTqtAh&>3>XVv+-Tti`t4( zdJTwZN2GUSVX_eHf7MnJ)Lm}07<$j=8^RKbuq{WS17_o|qc=Mla=5SRI%GM#Vf0_U zuvgt+(D;$N*ye}8@%!nH8y}#Ctx!okrMbplfy5cKe!xmxD{rF|qxrktj{mV-Ym`TV z^XuoNo$w|E?tk*l8){5;2~l=|FE zkZYh4jGt9U-Mu|{0(3S{JH3mPmiVWwBoU;oBm<@ItrP7w;$F(=MNV5kKL1Ih_g8Ht zz2$ln(Xw+lZ;S6OvRAH>D{g*6#LD?Ft<_d(D@^l36~tH6@c0=oNYOj1&Q?5h%hUG; zNfW08#-NyXkrkeR6E9?!fKO{FAu!IC?LaifE1K@?`s?c;o3XMet07UM8 z`z%1KGD+`+i|f~@DV-M*wgm;%W9JGPymasRFFpWo0$eWm*x8G(CmPz&-|k1`_xdRJ z7T=DTD$^`jE%1*tHs*euV(n+|uo;8VU)(9TiRST~pLA?d)W9F>&pm=QAbK9p+&Fvb5AX0oUT0&)q82SK3FCa}_U07+2z9z17Q0e=E82 zTlomK^Hd(G<(S|T$A`25-)f~jhNb(lR}EF5@RT4u>(i-p3U|nC3Htb8Zm1I&V6bG$gXsKs#dgcQC(bn^n!N_OYd=8hp}tdG zjOy9PMhC{!nE9z&3_&pFKS7pL2<4aZ;L7$VMUwPA>3!+HH71S%w`R~c%WCnr;g?n- z{0rl9N8=mBzt9c<8fv+C{rYRk>Ctq3z&XhL0+igTz$Y(7`84-sR~F@~Y@m>qO|Maz zxWsk-|9(AN@~c~Esc2;H*_M^pZJJ{;GyRV~i>+d5TB_(tb+?ui zOF@|D(Vex)3}T88L?|u>L1)YwP}3V~06hP%^1lb--x31=@qSJMaO+GJbqH;9E}#d@ zqmJ!bq!oVI4w^;mQ($A%0NSv=RHLk7e|_yw+?dgQig5o>^quX41k%RD6kw#)MdOPv zyh8D}mGs`j+UjLXRTDT7z`STB{mxvpAJzTd$>EUVWE~RXiC?BF&}{`OFVq0I|CK+u z!wxr}?OZ-H(DhkCvm6N2x0LPGoEGn@J8J+0+vl^S|w2Kccon=It@g+v37c zy+8BZ{i6x{V@?IuiEeS*7;{18g&F|&zw+;e`0sLqZ>>tZh&eA6pk8_=rZbO0CCdF0 z1GDPDnNnU1UAe+b!U!mhrXGSgzhZFhk3ygPZX{(->4`))7v17q@r%fjTsELmDU2e_Q?Z@t-M( zL>n}hy_ibl$BJ+WrT>cgQ?5EpnEipT2l0pzjQ$wMK08qX)Vuv*M`(J%H+THG^Iv-a zzdSc2X&kCN9AAXW3pD`lf92l~@n=*7fCOap*){^OOn9x)DJ(CWeBwmaN?|qAxT^X zYg=K!L~N|X!ma096($zz0yN(4WWs#yPPHl0vPJzK!I~PyjgWvaKYB7zzM%Q{hHY25B)>XX##j z$mg#<;p+q0@j0*G+w$+rp7Pi90XZ`rqf_;A^#8P#B>qp@O14Xn?TqXi9iQyvShu8(vwM+>yKT<+cV0!O)%nfLPtS>>tv#h?-S#-RKS` z)u4Q>nKm@~<#B*W+Wm$K174uSkEj+R1Er-MX>P^dRmmKImE9 zA??!+`D0v4y>S@*-+%WG_!T!0FSOK8iYY`!A%LYu`Zll$^@E{JnFUime64hFefY1( zWvv+s1%TfO?C;bM08M`n+luI=btkR-p@=KNU7Rlbq$?y^fZa_BfyHydm>7uUuOz|I zLHYNh)>q(M{L&5=FVO+cj*#eWI;`Dr~&Z&zsmn%h=2G30Az6o<1p+e`#mo1q37o6 zi-wl?nKRyJ4cVv9sO&(@_$WZUhYq1uf?|JskpVyg1Su)mmewgm(@%(E{CW5H-+0u&>V3y{kt51e^Nm>)DC7>T>i~?9ULR{B z(ukx-=}29CV{tDx8D0D&f0sMUlU6%m=cd$$Tb{*5Fy=qQQ15}8VC23-Mr%iD-H|~Q zsre^`;shHzWR(`>Cu{KeA6&El>v38CM?wMMHv-rHT3Y~!Z~87x_UVU_WeL%rCyg=n zL*}Z}d~Kk_XgU0XqD3tPpjZ>P{xq&n^0hzfvxkqvZ1PaqWbw-;`_E0*?n?@_`n+{E zvL+PNx}i)7qkrU1x1_A55;u=nbbtwI!VgbZ3XNm?+8fo@vu>t(V#QF?8)^VN|F80Y z6yiTH3;?AVxdgp>K7-USSTkYsVE!QoS=jH#^QSBGE_ocFg8XHmF17Xr#!uSdYySyh zZ(Q0cY~{^-U|?t1C!J03ZNQB#XK47(6dAv)a_zwAZxl|%vd!D0zF(qJ(Mn}z|Fymb zmo4jT{BTj%3gsOt{5D>2&i>cqGXKXy0pK?R=l{9|0927oydzJdN0r2{FhW$ZbV|SC z5aVW=-#|R8WgP_UDgpZOQU>(5@c&&a{aHz0p2-)C*!vB<<_4+e;=ifwJ_5cRgsCrW zaNaiH(1g*ydJK{3B2KUw5eKzdxMd6Ra1tt|g$;5OY|LnbF?Lc)2y^V)dm$ zr)2Dr<9&gNhc{Pow4m}r4S@S!`A#0xj(yP)$Mm~R9lkRDR$ zz71Gqa<1TI2g-_~i>Hax;e!3I+DdMv_AQy>5uK9@BsCPE3E6JV9?-4L6{Y)zN$jWX z_`ur6r_$SuVopBqwK2UO`^kBb0Xe~q#|#PT^z`y9dhAxb%b;=3;%`Ymh=$lolap&C z4pZ!JeVg7tbh3TAzg0g{V(121sLnMCnhsig&2*UA9@Vi(>8laRS0gM)*@}k8Q@Jhq zKl~BF1@LM}{%tS`>And50Ra5!b(_e`Z?B^N_anGt%PlVjr_wz@)((zT4`$BCEfy@9WpF2=_p$5SHuj#NX*B05pE@hQP~(B%@%}{8lIDd(UNW6F#@0FMUBXDZ++%|i@XgMhzk$9> z<^{hhO=_?6e{iMk{#Z`wv~gH~6kY5>}!n2w*tgbKjGr6rL8_2dh*(>FT(Lb^tzd#p=KK=41k5a%vDE5F04dO9i*2vUdd=zDKZR%?W%N8|m~k<*%PI^j{5&jpS@_nBTxwsRDqcM5 zD;WJrk<}!;iKzQVzRs6lXeQVf3ZRjG63xj=?WrUGK;{jAn%+X5?5*!qn3H#I88;S6%iodK0UFd`wcEbRL%8-Y4}Zfh5prK@ zitfI-%srLqp!oRxyCvQwORfS-?HErLVf2?dHXYQeSw-(^V2Nt*w^-7%K#wa5&Y42^ z(c4q2nnVtj7is|9|H^;_}&m>e61lF5c5g2%%1mST^Si3;^c{H&&3Fg{;XJ( zoO*7Bmd5c`x@hWa6WV8D0&iS<0{sAo4ZNM7TcGkn4S@S!`7c2H*+>8&rdP8TZA0ca z*R>3#nx>tlUU(#iOn4>La&|iO2(u*M0RuK9CW4EXzk>a*+DcA2I}%L)LMH;2>`F7$ zQzRb05L+ykPnr9~btu!6a?vES>=3#C-6GwzBR^WgtGm?-)LT zV=0$_h05CLa@8OCkI|E=;Qm+si)1ZYHq=vcv;fBT}8=47v)E zUqQL07+v{pYVI>WNI+3yYyXS;-GbR zh>N9)*sv<`l*bo4-W<+-n$FXPLq8Wr5s}qnDMqiFTTP&3@I&@H(L>(w!u!>^eW6rh z@0Y6b{;SeC71k3vry+LDY4Ltu9M(`;ar9I36EG5?oITUJhSi9CYFV@hU7<3b!{_Mm0Oq zw9o=^Vcg=qrOIx#6zHNG{&viHmVGge)NtIyQ-WUP-O)Tw)iDT z#WU3dfQ}7=DxtrNVmW+NqE*=CId)@_1Q!aN^V8m4?YXAT^Q-^1Eg zE(hy1;lm!Hb?c{=I0vb((1jNH-IruH9gdm1?@v)~(?U&er~&Z&zsmm=h<`Ex0K`T7 zTbab9^!c%7W~)lZIEMyTFR81Xnl%TB*Zq@_iYA~$#Q0L-8`6~cOK7bq{KU?A5H~i?sH5%m|J}P@}!xG|LB`g(b<9%0j zpnd!RmjG(x;I)4Woq;VM-Y_bgwS)}ypeL8aOGIsZ7TG7C7V2e4St9LV^uHMx^~=%g zb!n^7dWP*_aWfBa^6=TjPP?xyQsI}FCU{%ff1&(e`L99zzsUkX?h=@WD0dQV8#i11 z654$fdl?EMTI`9E2d3hAN-UCaffksXx#pksH~;#FM^gVX%)puSUUm0u8`f>PCy|!q zoUB>>)_`M8T%iF*e=D-e-mqcESEN(EX~TE=_7U_SYek9-j*w{LvEv{vyCoA(1P$4MoY<0;#@057_ytgG21b8M7Xc5NXUsgqbc1pyCoASr zpIBoBA673Pb!Sn{3%r4U;_VCaPG;x(b%9dacCG%Eh*n4KnH7-yPNt3QF77=0j!Jhp)bxfL0MGxc{NIH5({2Gk zNpi>Ht_s9!2`y!$h0(M}((Ojbx@2!qbAGdye@_#|1j-wq+>Z7g^uPB1;tewQl6H5U zF<3l#ujamyo5dCJ?sl`0O=O(Lnd}LyXFM&V<6jef#l$CZ#zPcD6g@`5nQ`c$N#EKg zjcKYk<2i=P3pD`lf91ag@fX7bfHZ$8bhU82^DcRhY=OcLLR9JNdFkWeMoFxH+CHOi z5(UH_LqWuN;kym?ziKOan1bEdY3L#$XYLg7})JTM?f{=1*&l-HlOl4Ov!lJB=@V&z1{WmG0ZJd`Q@4n??~#s0LF z1fOU;^E}h8VJx+wXSbRyG1YO_L#i9U_%c^jInjvAa$exi&4u`$)2BSnSD!yj@}$~x$H%fhX_H{`>3Ri> z8=6NLLERT8VWE$scS|>?IhZMh_bD?QpQ9`a#VX%f(1rIehQ1j=kGR~>b}lzGKnS)+ zApm6c$UJ3+ac>)uXty^fBkh&MfI6FArR(R8M^uV_??3+pDldQJ(*m?GUQaanq^yFd z9v^=EJl9~3Ho%FlFQDUgps*=W{<#!ps_|n9Mt@{)a@`H7S%*{|^`7@1_@nD|tD<%Z zaqajB5qqZgY9BzIN1z74Cz`8?W*6fBf)M~BGW%_kM0?V4Vds)DTloZCxDt1q8c92B z;s0arEyJQ}A9imV>F)0C?vzHlTe?#^h8`NE6p2AnP(me?6r>at5R?uj6cs^2L1LrK za6fxL?{lpGG5h}V9(&dYW-)Uz1DwBgUTfB@bzZN1-t*ae1%frlJn&O-ou2>We^^{O zPREsLH8MyI#=@pM=u}wk_;jtoY?gDY`|7wWoc{YsiTFw1!@TmUw)p*U4W9iDG8*pd z5C+HV+E3ZDREKc^?FAGd{J-#j59WVECkV1AY!yU7+W33gmq{u9xp&=F@thbJB_i|P z$mY1=Af7-l>*4wXOzvwFm;O&WT|Z;OznL{uy0Dh<31>glZ z{m-tJ(SO&KTiCdw+UG0`7JG^1dO#q8l02x^OySghbqUa3Kmo%43;*|F{=W=3zs^I8 z%988bSrR`jenU5zPoLr{bBjPzo?ln!r%6v{-7~Oc(%tUUhb{liUx9YarZdV!91(8t zoIK|VZsw?af7sbIoSukA8TMGMH^*@LFHSXiG}(GE)H}=6-MS$eZh~?XiOV&@6z5Tb zT4Z)p6`;L<0)+n;{vW{n|D*Pm1s1(O|{LBL~^^#1$S$b2HmsgVTThDTd!- zu9ChVw(6QoLv{A>jh61b43S+tJ=4cPW-1H-v=>l-@c+X9pHTnt(Ir8U=h!>X_0!c# zwTJX_1!t-Zmtz~2ZN$e}dJnEGCaoo>fwAWZKB;EpCtl`1=hnjw`>aUqqZ~SrYv066 z9W<*faM@$=tAfrUF*`}{Ry~yaag&&he!j&veY|hp(i`Zr>TF&8lHK*=>RAPQ%iJlT zy?_FQ{}=xMg89#^0fJPy**<6cFG$Lk zjYazUN9(iq&hqe{TJ3cMMXwi>qY-|5C;WG4;?j%pe%dc1_;dNJ*G`)jB(wqT1r#9s zzwrME=D&3x2ompK+1CGVVe)J%U;rC`VuOmok!` zmM2Mz;vP$0+$Ri@PW}RJ*y#?3+~|vb|F}m=&6M70qf35UQNDAmV}>f;5(D2PY|>_v z08uN61i1V?{`32<|9@*G@xysR5TpR6YgsY28|s*+0X5q@`W5)ZXDY1t!TciQul+{8 zh=9X!AB@wPx8VM%m8AMlY9+ssM!k$Y9jrF%3I6N?Zfi3P@&88mNxwz}NAAZ+(bflu zMhedk@@I*adx0NT-i`+52t?J1p~vZ5lPeBglkl)sf*osQRxNlV1kx=vw8PgpV+bSW z>u5wrL3ck!8GN~>PacZ~Cu?82Y$0iGtXlSxuGBfC#?HlW1t}b9nbB`aEz94^csmam zC4d4%)?8%GF)V8eAA=x|?T|rHgm(UJliR-L9Pg=jyKt?TnM@;F^^YrG_L?|=uQFzR z`nXg1>~gG8YPIH^E{egsKmOB~AXCPaF`<^B&xk5h=<@-nwH=%er~gfQiOwasdHQr4 zR-*n!2PzWd7M zb-hA0)JiN!9B}&2Jl$XR?c|EX6~PBK-Av}sC=cQ`p8LoQ^e#FK?$lV-#;$@-TVn3d`d$CIp7$ff@^ zIA+>=%Ub^T#ct?z^oVvX;|^h?;k!3WY0YXz`;=P3>Hqp8uYu&J)rGMVB)GgJ##+$= z_}^*R9>kBMc8pQ?Dp>*A3n)PNf8qZb%>Nyv^IFj?kdinqK8vR8h~X)>n-CtF#;#XM zh3{~CuovjpiXYhV?VcW0cL?nt|4$E*4+gV1|q`4|2PLm`eb> zY0ZBoKY!R%EoQ7~QhX!HT9jGcSH(25UFE9pZKM~PZ~`#)IZ+T@jK%4<|1J7&?~Vt^ zX(uXgi=mJ&aD*YF4V%3H^cPTo000UAG7JE|^AVsYJX0;#g+-yOS7|ELrPgiNvwxky zlyL96saaFXTAVD{`xvc?fO%c`5&+s0rc}K4-=e~U_cempu)#r#%D!SHJ`0mfj|!LH zOW48*06uqn&#vXzx59;uoTuB}F}j>1^vPNSqMeWObNkPR+5r6p6d(YA0)PSoK>K_b zFuiah#q&zfCO=MJ#)QH|9t$g*CgmN+vl#BHtfuh<6kysf`R@u2S0yh2IL_A8!+n4{ zVt5zJOW{VmjPDQJuu#>zZ2t5gAu+tg@HTnfE%*O{g8hpAYL;A*ioq(+HN3raoungE zd6Fkwx8J^L1oRhBfB*mr04fXs_w)CF$M?z5n(w}zp0yj8xua3(+! zMCW7E6|%}L%|qn{iP;-Fel57N-eM-fV#B?A#dR+M{RI>t0DuC31_JM9 z!-pMRz4hxl%0@OqQRuZ3PrrKeh2p#t2&Hla)6D5zBhW)~J_i6L^APzMqQyKo{0Uit z;q?cn<=-f7Hq)DjelkB&>4n72B=c8g2jB#Nw!>VU%co0Pp%j0|1PP36u z5HF5<*Qz1a->?7s!-{_j zBNdTAe?;dp(D|41<)0^mH9G#cO3A-E*o&V(!+%*|ukiO41bYDXoQkkJ{@lW(|MfnY z@W0;ocU_SadKXmj=YV4zGI|2&{O-Tyk_6S~2c35et|co!QSN6muDTk*8l}46-C@@K zuK)PN$JRS+a$OxPlxb~@dh-nOr(BZy-zk?&g-nF^KHkrq+s_b?v=PqD4whML`6$JA zl90*KW>@z>`3A&OZ3Lva*2`wkCcV6e>!fXb=WY5{IkM&LY2>lm16gy}yAtf-jAjzm zgdWBWqL!^-+qECEexJ)~V!7v?yeR@>@Zl{Nx!b!Id*!|-I5zHueqeZXG)rcKX5D*> z&F{tzXUBCinSg-h@j& z5dQ3^wQSH`xhLKFcBgzgH-2$xhE+Wud$B(krFiqM9lZM_o?f&DSRJQdr9iDqeA{`! z#Umz|i;4~(WTvZps>(6^0sRFOAOL^@a0LngA?o=_Fk+t=lIHH~X!uOeG?PkPp(FSD zK4$mz#0IEJ={3ML>a-?+Z6=0bB!AMczhW;qd>gmA> z$K-&i`j}k0| zDo%8ekr_`9CjbrG&O*vwm4f}L4OfVBiSb9RL`*#N(l#ad2@oq?KJOzXvP^n{-wmL~O7+Pk7bcp7Cct|g#6uaAkJ%8`LYm;^X{@_> zr2N5C-d6+fq#1IXaJT#GHvswzC_n%J1ppTY0OEcOQlCLZJOzh}|hAt@QIpGl2=?Co+a+(4>0 zL0`4iNCjsCyi4S|J4o-gb%r7oSQf4_N{9KGww!)3gt+j!*+(^-$AJC<3J?H50lQ3jb9C>m_8B7VAW;VlgJ5hCkIJ3(D}N?Exk!Kn zEj;|sMIjiO-)T4fp5WV?+U#B5$Ens3?>gL2^lG4h699dKSRw){Ar-9RS(k_e>DW&d zImgfMVm}tDVv*<6wQU0Q7f^rz015y;41k{VD{iCMG#FBJWph3rilV%C#$n>qFC)Lp z*_J*@c*-d#8?ps<&?bpK8wm|R2LNUJ&yh*J9#?VY$h%Lzp&PQ%rlfZ|=#)?SCHABx_Y|dH1P(sig|f+wW|^p+T0m zbz504&TTD}BYr(3qslq1Cw zzFGP!^|~SpX+rJ|q}Qf;a;y(*X!$<7y2hnwZsz zMiq9t57#kwc`x1-yuzxuVOM*z=JV6ca7n;14N!m>^q_+t5flI-`tzcpitoex%;-H8 z#o`ZZPQn^-Yu+lw1>C|OmYTA>PWt>E9#~AnphXbJ>(M0uU-61D7mnVA$xX%yJatj+ zaXqcH8hVVyYdd*&GY zZ@Tp6(|WkgD%VN7ujQd12gS=AfpN&5uY_s6lDGt5!Q!!<0w;@^wCf1^*`w*78(5=W z*;sw}tkHFbLpHtWZ~~A`=O1slG*GL1b*5v6WDd3F^{p$uG=AxK*F=zreK!!tJ^?rH z|3Gk&0HiPgV$QopMXDpz-d4-L>Z39wSn1lOhFr~Sbc^YK82tk8@Y%pDCfLmvM}aK` zui_E_{QIxWz7=lbfHv)v5+CL|hPBxdJbfM>|ID#plji3ac)Nzf=6ZB*>iwklXAni2 za-~9h=v?_YtT3OKdiE%|cOnV#@z;OgFQDWC05TW=kn^(PSsTX2#Ctc@Zu-mBwL39l zVl6%mXinivD)mb7Kb^pP0d_dEA&%=akGuq6T=YBsaim`CvZ`5Wv`+HCCymIVRH4#t z9Ez)q1O&?Ea3;Vw`BHec-M7wGt_>~UGE#v2t>w&{01UnfRPuLtPve;~L3 zfE)%u?|IueRa%lGf!uP|5`~&%a9~usOs4I``$`@p*&DMBUJ4SE;ILn}a66g>^DY6v zi^qAs9zSzrAV$-W(=F~Hka=C2o+s*ne55aJ)#F(ToB%Kr2p-5kre8<1P(HRyZ@$^{ zLJz4t*5zG5SG*T$%|SHa5DzFo>;pje0VrSqtej6b&>bw$dWzKZIefrX0BP+rVTl|P z??l6-QJ|lZ?aLzJc<}XYzj)nKsdtwEM0?s=_Is=4RY*VJBRvj#%Y?=pD(G@MIx_2d zVrp0KD>wl#_wk(bqDynut0Yxjdmk3N!+-Q$kCIQnFTrxb2=^8qpud0u1OQL~D4_rl zqnuB#()Ef8t!PkLtp1oG{=2<1&KCIlH&NdDr}rY(`kzIyz64V~$Q&;&<}N%30LAqX z`8UMgj+?lS@5Hcq8v9}T6MK4n(2jvCt6fKm#c8ZXi2%Gc5X3|}Efqo;QTGQvy{6x> zDz3l7_k^2WUo+1sJ#(}tq5_h;Lydv{a(+jr%h;hv)=vJuy(kIU5>;SW3xl&u?H~)H zZxVP6xEKPc{sQo)aFUqie3B(Jo%H3Vo)aCfvls6237WQfpyg28(ZpTbF6SmESYdo>2FnH_h%+>7639UNa{lyw3x3Maew!>PcwXVoN$n@hn> zIz|>qD06&qUT%f=89oXAd{qMB*W08VK*C01OR!d@I;rhk_55ZRU3|8s^!-ZdX)eD2 z?2u!x%*z|^x)_zzTL+AN9oX57+*rE4J!G*3TOMs=qACTz88yL=31_gwT^C2R&JGl7 z=-f|9vX?>GGMf~iYChL{BYOcR37`NGHPEP`hDD9)`DAWQ6kBn)u0CqZNg<8o+A{1m zv13ypP)<24RE<8pW?&TDh0MsWi zxaCb9);SF;dWb4m)Yl0U*#^dTIqfbySqcA=3~#q_M^*BxEPurVne)pHqVH$LilsS> zlje+;N9mChZ4L(^K4}LYNq`j>V+}0~fTTPSr1LC5imnXsy-_d@a)O}{EU0QJo zW-KE3O)=wKHI|4N%3p~Xu8h^h|jN)?de)uXpR#K@LDZw~R_yF*ITA^g0-`e&h5 zGMovpQRC|M$j%{NQ1MwevG@&=DLYx~Nk^*NsSkVP(4Kio0B+!b0z?8p6Mzl|K+O>d zl7pTg;4(LNfa^Sgp)lZFzB*m}%r^I@h8_cC8ehtT9jqK5az@V7lYa>SS=3dcYhH3% z7U6;K`wy{ag}zCx*QE2KM~@w^tpttCzzM*dPv`U@yP000Gm9tOb3`GoG;aX8Tl2?{-W56Nj>$Uc58g~z3JLv?m~R?jN? zjgYPg*waRL;0lY&+e-k#<>%t#s^|tft}WM{noTWv(IaCBB=g%WX-Re7G#EmH69B^i zA5pou`(OH$_D=eCcdB=Dx9_Cnkh#8F8A&8O+e5TY0tY;>;$jG3fC2D@5d;yW4m)eC z2~0z3k$4tl#akA!bc;Cu%Or_Nf+CrfH+>WsGcC{O-uBTy7lMzxxFznaB$My!hqd#b z8+U`m<1sdRSi-xCkbOdyg@{c!0boa;7v~s05b$8->2Rd^ZS37k(4eln;ySvEns;rN zI~#BV2NWO@0Ga@dPyk49mqCzbwj(#+Gz{J$5s${i8{0KE^D8KPuJxNfnie)<4Bbcr zBOPOB-H0^&+dKca3q+simMGyYwED>&(4Pv0OMQj zj(X(0ukfgagzhkg^gLWeS8?5Z*Tt5jbILu)K>_G5pa1~?6aXd|0Q}t`2-8kt?gnzN zn3ILBa^G;TQux?Vl#cYGQ*z}Mxs7x_Nw9wa^_%gq&OgP27pGgk4b(Wos$ztAfsU`5 zEJ;e3^L5x9p4s+`#z?F%R4BlE!u8`ww$3Yx)d{;Pp~s2w@24X+<@Q{-C^~++&|)D= zjCuh23n)MU00n><27vxk5QMS)Ez+q#PHbE0{Rj7wS6U1>e}D}ts-EICkGRwcybuNZ z$4f)>IA{9K0YLHibGoHWJF$KPb5_yQ__E(sM#WiO5b`R_%uu>H%9?jvk~)HLCcy5l z?Qpqk|MAry-(__zM6aH_{kHd3c6vDOGm_PunMoVOOP4aeC4`MBm``D~EA zoIX6or1AQZ7Z^%3Zj~>p7@x2 zs)RS>Pjud-y~v}<1|tdWE{E;Tq5Y|zqyw&=OoeQWE;JC$X%zXqk=_N>}i?A3b+t*qms=P}#6{<$n;Wflnqtq2z3HfitHu28B6OqeIlu(YwtCnqRc zevcgLm-p`A23PG~Riw_fgQ1vfPHWSi*E`@n(b0$VCoK&wfz%C}K1x%)&#g3AC@~TF zEsMj+ed*tnu@wQs1W7QzhrFBBZ~mr*_=?k#udJI%+_< z>c(2AxeE%JXcJgk{Rf@>#E|vnaHIZ7=1J%&fsx=oj~T&4w!5lj^s&3z=dO@Y4wuQS z`>JrJP5P*Ztz2zo&d)33oE7`xI=Kad!%8UgU#pCGzXxn&8UXqWC_n%J1%M3(K-+Z? z1azCa&Ck(@Q}f>LlS6XGS?24_pSH%Bq+gHOSIf&&x`Sn0SKr0x!Wf@~FhW8?GQ0c}8zn!II*Maqi$yiN&C66}t%o4ei zZWU;gzHaUO3g|DO0096L0CpGvGw;qX@H*)dYtWTtgkYp*x1cg9sWPi;&~#rRx$#WurkK9i_ZNhK{sIaR06+oYfB|sq27+WCjPFu2 zRHTPx`s>7Mw>0z+x;M=)sR|x5kTmv%*VlrbJQT&7IO_v10ig36e;Z00;W4}}rwyt$ zs4iz7GC-xBnXe!)=uxWp$^a(-@=V4?e1=Wk6^BB%8%uPl!L%6S4<{_Ei?sSgZ9um7 z0R06NAOL^@zzGF_lz|ci*(Agkl)7srU-c{E_*=l*ApP=JjiS$q1k^~S_#~UmZ@{>@ z@mmjR@)<4xn7V~4IsY_vd#uos)~o3N-_&Z(IFIfHzdMHv%_4Nd^I2In1a%2!mA z2qxY6EC;GmMxPGb|CyV{f<~y&BTV28=r5oE0RR*LE*Jnx>mZ0kh0oXt)op$@>E&n*FM zWNnOBz64I=3^Yn0?~n`gI|FXufC5AUKofum20-#W2r`{UJ(=X$h!oL0zT$8{JHfC~ zxcK^4wQJSiMHo#AI~u`(0^Zx4GZV;{0FVamx87NfwR%#V8?5ITXR&PA^s@z*#B0j!60gEKvVpL9N{WG!pMg62q ziM5XBU6cX_5BuN=9mljb7ynrYBcwMtN?sjOOm38L0)WQUo@rY&`1p)3EhXd5lV`My zUFwp(@_jD+{z!E+1=|paIhoa=gVrFwny3XXmt)Eo!aWfzB>^72(wFpi?|$8ee1GYc zO3TR^TVGpEps#8q(iZNJgapY5C_7g5L!KnqWI6xfsp@xb0Hvv>MkGt|Eik2d=UB~&|=ApyAv*M(2%bDT><_1%Jg^j z{0oRs@nQ(zO8}jJ`?r3Q^tBcUQXtY4sB?mf|sR)uE=diquj z!C>s&uJ|v#Gr522C+Yv4`pFc?xLs-w;pV1Mf#+`D}TP9P&i4M#lVRyQ431}$bKPw*3Pn_6 zpELA-y<7mvp8z_4CQv--PQ&>JVfr7J(-%03T~p?FA*|i1A*kP2YTYFFO;j}-EbhJw z0Bf-!->#RV`RD4Jg6m%(qPiOQCu~V` zS1k^6rjCwBK3^2-eJR&z9Qpz&MQC=ALyyb=M;t)G|C~tw*Zjbcuw6`^x>M5AEhuCz zRR=8h810d8_QLB+0Q}O=?xhzGU2~rP8BZDT?AZCb)9vfyG51ue&~-g1O3mN|;5&}W z9E3L^&#l*9vdrVN0`CUJD~WZ-)(PrXvF|w~qJaJa3J?H50T6)!Q0WAMu*>B-*0%|4 zaopHB6tvI?)^RiOxGvwQ^DHC#!@kseSulqWcVSSM{K_Q&OmWKS9+;I?W2O&9-{VoM zOybmazxe#?3Sn#DK(uOf5u5;ACru7w7AlCn!v8B#a%*ksE=o-KdMh|+bA8Vd9i1LA z4L8!iuw3i}ioyUGjyyjy$v&+iOX9RP$k%rDejEM-o;=3GUFj9smGaHLO=Y7!u+V-O z|9(R{(NR7ANk)n6|=*)6A2ELZ1jERMJY`(N-MngC)j0KPsvKPZunb?>zngN48Kc0fb? z5c;&cmx3(U(eJOJosNf?I(}fI6=K`hg)5IQ0Z=g*Y^!v%+7DRW(yevFT_}HO8^rdP=FW$ zpa6(N0U#&B06{#Y`o$aaGK6-UGTR6;j)~(361;cYqDTjkzImINOL&8AUJ&AYe-rjS z2jHT9($I<$gYTi?db9pVhrEj9dvTs$eg;3oFAy)T^Y31f2g3<~z(UU}uEn->9ls7H z77q8O>cmbIR)gau=0Wsd=`EP3knoq()OQ2ybs|#S3{&YmOJ3DkCsCVrRm|_6;^&v1 z@*(OcfivP_2$1*-z~A~waF(pD(LT_|1 z&toepcz*RJR(FIWPn9YfL_w1KiHh$@&I}ti7hbGwpk{U=ua0mdKYjZ#t=}7NfuCxyTN9Y-lilYd7fjy6@Zcnr zx{x{UgNa)UPhn?e{yNI1yzj(qfFJ^0jXk=~ z7_OQXOjO8`>hqfcMNQqQN1-#T%=>GTO3|Gh0$eo8NEcW$rIi6{%4gC4q`)mnzS zHO)!twp^XCTSVX;8`r30+1ViNdG@l5N(DfF0R;#Epa4k20H}xqK?nzThI~K12x5%V z-9_)vk}_a1{vAnXh_`V!--%kgx&cf(<8M_wwkmT8K!sxJ4U;X>r;gUV1L_lZWn4zT z+4o&tex$QpoBrtIyf>Tx=xXQjNoNk9)Ka%~rxv;#?%;&cqM5eqS)o{}ess2P1@sqC zfB*mrfD8$3xc9P!SHQ~e7uJ*lLC&9x4KY}4>$q%c~X5sq4;pe$0p-Z2A3{&GiA9r zSwX@i_k!3{q$3u@u}`FbVYzr0AP)mTVi5$X#8-0i`)Nubn&u%=!Rc{|WnqY#aqFoK zVWVRWx||Imn0??Ul9&2Tze@nvIZ;r3+TVWL)5B47%|S+6Wss3|pUJ%m zCjcz8WlE?xqcYz9CpY{#*RzjwxFjD{`{1dg7;9S@Ht7Ox;D7=|0zeZ$0S17LA_!u? z?1DX!Ve|7g_J^P}jO9f4DAHMiAJxNOZdH{u7a(zhl{W$&1RmhvUIH-9{!H0vMSQ8W z_n0AZo6eF(Qa4M>2jiqKZ^T5xR%;qg05Crk-N)y~E_(F>uM_0+R&$J=K4PPH%bW6b z`4Yunn{CYN}F&(UhpPVV^bK7PuSxSTm z+|m8&v@mDzEFGd;iKw3h9wRP>0HwbG{HdR$sI>(_9Pi$c!#J64x3OD~1x>By>;FK0 zj@?sX<@7E==pO#VNw79Gam358P2WHDlZ>$XN&TT9gJdP21*xpZUevr|bXMu^+86bc zY%w=0f+M$1Sqs9mmAgdpTfe!}j``X}9BwI$By2RrLVQS`-n8Tu^>{Hz4m#<7;WBb> zIHq4!Xprd3cdLNMsh?qo9D{}xDbVN1yrTOATB@}+ox`GX511r?0z}k6qedAPHLs~bkZYLl z^dE@Rdmlwg7k!JpHjYscU5%e!)WKtmeOk)=fflT`>G2u|lFfWM)-+gP8`T$gIqtzZ8(qLzU^Op5Z*eIBA40F4yVx;mCfU)tl9~|5qwo>WEa={PZ z&{Y5Cp6oXR>E`opR))i%s8YPNw?9=(@=5u7`aVV z!HDC)czFv)drHRC3eE)hN|NSwWxpud0u z1OQL~)L{UmgF%qDF^|iP-rzptc};JL`6#V57=X6sN{h(cPiNa00;DX!_aCRo-^!ZSb&| zOy|TtgY_G^e$ITYZ@#y+bX5>d0Kfqcthg8gG++Qc{B{0rQ`zuLphLk#kTnU9Y3qZj zA}89qraY20uQTJ4BTCf>SYvRWRJtrd_Y#1R2FDX;EfS)PH6{0YB24c_LQ!cH{nzCF zIFF0oPSr}l3BY08g64~+4$nXroVooc3dTL`&R`C&FE;644Hd9ud(i z2?Jmz2?S{|LMoUndsTbdb^3~xx7_$`Q-B{+V2L)3tQyq;E{0= zC1chn)y#~y18CbtU#$T83n)MU00lq`3IG+7@Oc@G84symB3geiX1TGW%~D>Xwp=M{ zs_F4fhdW0US!^3%d%O1F@9S-w=Kx&PPbxIMi7u6WDcTZ>O3kcCoi>NnzloY(vmxKD zg-qV`65b2J^V^ICYBjy;?&sMoQyazXj0J?GzZo{8fAgy=@KejjK8UgL*ynxY-xGTy zcxx{csJ=+Ar&~s_^dh;i+19s!Y~CU2Cy@Y`iy=V!F93h*C#l$vL68+SHOau#SGAf= z3YJL9JDMx9_iw&7*KqlPExFLmtE33l9Ytf2@!{C|Q$NY{pVUtpMv$D~9N#G9@35{e)`S-XtXxq5dfxVxIZT#;oB-ZoSr(YN4$A8LHG=5#Iuu75UO#>Soa7 zWnf1gg)!Jeq!ONVQ{EMKWS0@?Ui9;>@%zzahMYuLmMmoBY6 z&}`YghJIQY)0&2pyyc-jK78B*7$$%MMA|^pMhBKQx~m{ang3f}PRAP=Z?YOoDcmm7K4Z) z6WbURV3w?^#*i{FUi7P$FQPB~-1b{EN z!tm{DW8;~@*F^4^3|=yI0aiyTZ0uwQV7Fij=2Ki6{H|>1{e`CcHx8RZ1i8`urdDXFj zmIo&QZ6};GnxdUdTzT)j;u0`TC2m`@KckP-YUT-?G<)KRc*}|OFDw`P8+tGR`t?B& zY{JTN$;EzzG1oh`Q}4Yl-rGJK7w-w6oA6{oMi+9bMkZ ziBDgIE4Ew!H*i1!A_1TYpbrCJvk3$_>hOKPnMIJ`;fh9cc2q*Ol*!L^uZMzcqg9mQ z3B8F0n19HZhEF+#@)7`hwELuLqCX8Csn^lz@Q9^TjulQHHy><@{qi+Nx<%j!CjjOI zG~+A0tXkg}UzTqt#7*1=H;v!gu6hRWgivE=ISm2?d)~mq> zh)Hk$Jpc@007$(!KhZHD_g-JO!D=NqH&BDRWVUVY>%3P>%{99Ee!JcUw0bb|z4MQL z&M)7+1fU=4&5QKzAOdbavt#Irqs>)Fk z?E`9T@zG~-+>df6h)uDsPAG!?f`566HtQW-0$}fP3?gmJ;(xzLR8~8z73UYGpS{It z^{hVR7w^2WE*Kf)l8v}+4=06`&c_gaH21&{#&rl0i>ac zAETG>wpj!?xvHN|M!en~kJ({V&qI@gDz^0E(CYOvdxIi>k)UyDnGIkU)Re z|F%Xdp09!!|9*eI0=@nF2z34Y=Atd~qC@hJB=(<&plg3$3i^84|2%r}gO?fQ`H!GN6Tl<^bpGAn`bp|$LlA`3i};z%9TbeT)w3B-H(w;<61;`3J1b+T)@t?0SIM^L zo_gQJ(+dcd-k*6L2hpZ}N4@6Y#bhA%8o!-mEc=ehy2X`datUYWx@k|duyELsNn(~{ z<6};2eAQercVx~r-s-@ekTdN!*R%+~BpZ;QztN!^)%~Pd-Z-WPo{K@XqH)dScm4DZ`-$H z-~<2(W5k;feAKa#5L+C8j*%lh&U2_PM))Jq@8+#OLt?~Koc{)-7XX++0iZ#?b$&ji zvM_6y?#gsG#h7i}^-rVQalSFS3J=$Fm!EaHgBPg4270dqW0^3cF99&Q|AOtF0lkf! zud(Ak+N*Ct^j`dBTO<&#$3IF2*21#k1c2r7eneI1w9!sa$5{0swY#YfhZojr=ZS{g z6}h)W+9M`FH3zgeG*Tq4%H>l+c5&+_wj z)Y>qxp>nr4p-H;hB>>4k^h1`2J8T;jk~Te=Oxg{VRx~a6h?Om7Y z*Yw!ZhhoQ5JoO-3izT}`+M=1x*JT7l1Yklv3-zd+TJcK&eo=G9&+$gH@nY|l68tFU z!)bpX>F-@Cy{7BV$#@4W11A8zXt~_BI;W@;I>T5GR|*s3#b-Vxeigfg^3+v?a&FBM z&|g3S0strgmM{RqKY$=U1^eTz#_T)177jn!SBp#fstrEy2uHZOJrKWE%HbITHp=(4 z_DgS@yaXV|Hf7GkB92@X`^KBS&5U4eG_0(osAS61b=x$Zm#7a%uLdb`P=)~d3n)MU00qDb20%qR2y(kCCwcM72V(+W%g%hZ zZNUa9L)^OYdyZ-MVht>=PmzN$u2)z5%<}%zJ$5k}Z_=bKRe{B{{7tPd_|H(Yv2e}Y-5#y_SeOBtR6a8W;r z=Rm=`i~W)(9Bo0%bo_gDkrC6@N;IZalUzbQCmkQWr>J#oJdMPW3i0$V%b=m>ZSs!_ zczWfwJF-hqO`6p3RU{;cPhdPRi@55?9)*lT6lEsvI}Jv{V~b?F8xT%)H)W-AMExW% zA{Rq|-CqFy)=$!^+n>J^v~tOlTjum7i($^crZsdNu6Dm)t>!mf!of(iJp*wp7~9Qt zXIzw6;!ph~%f*pNJ0uXOy~y$WC8_L@ktI<Lm`l~QCXrO}Cw zGTpM>*)d(;<0PdljPc?=t^H;J9h0;^XuzNZGi7u(ZJlTu4riD4yWoIGu2ja-sdaE$ zQcY#_yeTUsq2?mCe?a#+{N_}@$F=?6-h8xK-ujGH=IAzDJiE6{wq_^-@=3$84Qi-u zQZqzk-+#ZME|wZslnT*3IR3@5i#@Q)S3=T?4Z$I!d^OQ(?{7vfggtWl<<1sF-zMqo zP>JqpT`0zzRkU)|b=fk3diiL7gCDyhVZVqJVS7EDcbpsu*KxJQd?i0JUav-xji;T= zGO;ugq0zhI_#GRe8}s!jjiWYN3$*8eV;Z0U zG3Y@v&mNX}evtFp38Y^pA<+QZXQE5Wn_~DC_cnrZx8=L^t-1g%U{+P;6PcQRc zUY<_)Yq_~wC03=I3=mjLw~d2KaZXh^_MNyS;GlHryDO7y9`qrZN!%4(Lok;ABS??{bCz1CV{pW9T0s0Fl zKmY&*;5rO|{%{avfIG3j|4DSydtNs0ucijCLv&7V;RHEj?4ehgy~E^70^=qj=hHbK z&|CuW@~t~bX<~}pX$?EB2IFi?PmT&wcE$2(A#24d-gGn#oB&9a4r|b2=k^j)hvq~m zNHzwhZll;Af;QUp4jRXsPm%%s1r#6vfCAtM1K=C!`ED<-`#o)wLcfUdQhj^E>`-lk z_@|kfX$m1;-F8(tH3%ouVZ$IFjpK0-%{) z7l77Y^hg6^e}f!_l5KJ~ZzbJzd=O>M+P_^dg#=Cjv{AzZom;(w?{I=KgvyZgT)Abh zs*qDK*^IQ1L-;7m0R06NAOL^@;0yym@h%8r#3jCpCgRyAFx~q7nJVF0e(2AW_yK{L z9V6E1iRWhhU?DZdaBgX)^h*HJ%snM^UiXg6v$}ov_!@56wvO{0?}rdN7JeP_RZ;mR zI02ARvpKYWZ5e;>y7{DZ{Km;0WqAf{31nO$+8bM5#TYz*{sIaR06+n7fdSxAaGn6H z+k z7xj607K}L-9}m%dA?{H+ZZP}O$lJvxuMQ^wM^o|;qA$u5ML5gfMjlVm8|Im;v_xVo z+h&d@f<8^s0Qw6kKmY&*z!e5SUM&bxGq8|Tu*hUbW2F}vH4w~VF|VOH@9(?4_>*h| z^mF|lSWvdWxyo!L{1Sk#&N^4_*4-fbz}7g)#oNA-Zaj@tS+bz#>*`Uh8d1OjCji*) zwb;Z1A%lBTYh}_KVV;Yhak=nIrHG6&#;~O{CHK+9D)!+ockvZe$HTyLrYe=0rPPy#d`#hzpcMYpvQ3dt(|-9!%Q;flQfv!q>x7sh~zTj z`Vpdxi5FVF`&oev;$$&t^+ubWjaApkOSgZ>amHj*CH*bsuO?;w5=nf=P1sno>M_v1 zK2u&aNn4>r!Q6mVKt`i&l8Q97M!{n3(|4c>Cu!VEc0VfV7X9O520i*9i~6hwucu}F z$c6mdrfIf~nKl8F1WA$nY=&Ci;7{CJ>RmyaKWs@ zgcE=TjOVM&?Vpp#xRu`t%_p`~Ob#^P*3i<6!~;ABYTThEoMrq!l67 z2AIM|JPl2WeBu&-%%+-0zFo9LMS8Ts&aV0o#(5PZ)pi2R=t`~M_Lpo2!wJB~&kr;u zyVPPhAc5Utq!0s60B*%-$OQ4Pmr;o=;%D$|H}7iKR40ltso*@$!+z37lm_T8 zpa1~?6aXI>0Np+yNSNwY&eC_T;X}O4eNR()8cIK5#o*4;xSv!H%UxS&Rlr)oqExm; zt4Wstj4eOnT=^{-Re08z|1S6m;S)DhSJ0vKOICgH`)e#8hv5X^1e7~N-DRfqX+A0M z?Va&rj^iJw&3LckxZaZ8E20lXbdV$c3(LjZ4PO`lpZ!3P?6UvG-d#sUwZDJEr$kyh zq&uZkl$361P(n%?qowPBv)TLFcNQWJ%$*ZE{A%19WRe#ZPwG1uDYSD1o~a)CeVGN48Fu9#;}Dcx z1Gw>xJlXhTbg2iO+`CPd0}^L0H$9B{7Y(36&x9~lH5V8GL}w)8l@?&wvo=qZ;GXTU zAr3QQb?Sc(silwZGo9mhgZcu88i02Ia0hS#1E3~+2>|tLo5X)vDaF~Y@mu_OOGRN_ zb8GQcXyZFjV5!wt1p_^xsOWb2PeH1tYXJTP%F>wTk+)S2Vq@zoj?v6Qws0SMtsjlV zPX9=trW}J2fXlp}tpt~dz{yyw_&nOWLHOE@$zb{gV@rkRgUgwi>rETH3a?oFACJ?N%YpK^Cf_*@sm0-HT44y5i#Dvhl1>ejKh|l$7|hMLBmxO(|Dvc zsq!!aV3s?JtBxvd?8ev&Tn7Y(5l#gZ@l8HDa+~@fw@Q}K0TShRQtMDtSDT~2{jj4l z9xMUUa5*Sm$P`JqL!ze@34o8EM1Z{1@L$LBz0mY0Mtu>v7o(PdxC<%Pj%N+`Fox88->gUFW%9|VYThFBk|ZTl0Qnh>u7_zb zq>Nga<#!7!ZW!RWpNb(e%?1@pM<%%4{0%wkSnRz?!mm1%jfKuox7J26BgRqn`Fyhx zIgMxG0o!(LGmO}*K{Z(20|nH0xl;@hNRA8$Xf%DMh2lbfKKzD2v)jf{n+enayxV}g zjq6`*fMDw8djOEcb_3HojVcR>>-;;JyLU%u_6gl64>F6yv$R|@#$H6AGI_*Yx&sLN zdbx2mdV`Wz@WNDj<<|V`#Y(O5EUEj7zC<>zjbY;4y0lC%0ti$nC&%T+7BadcH_=hE zG_tSxy{Uq2I{^=J`;E6v89EP_ z#EB~+cNSm-VDLh?uG1WM9NFuma}I^sG|672HAwp$pNF9=`c5q03Dg%j)BwB#fIEOY z7yu1fI{+l$@~A-d@fpY^G+9E-+J~z%AwDbXe)=x$H<^t1j*q=Ss>Lt$(^^3;*B#*P zuP@Cnl&1H}x4b1hLeo}bTVGAjy5k+LT1`YxC;5rN2%szQ5H>$+;Ksx4CrQU>pIeVD*+>b7X#E3+9HCBU&IPhDg76#UcAP@LGt6? zGcQmZMCg<3hx!7C8i02Ia0l>$07yLmfRyIOE#d}GTRqg4Ipu{(AD(`hNlC)aM%xD_ z%n0Z$ZvYL{dThu^jM}aN7)_HO<%?%ce&eLN&7DheL_j}$%IT&XZOpWElH61}4I_ZZ zLZ#*7G!b7-du#)JMi2Qi8NTu`MqpSBv&i*7-r)QUwZ2dTZ~$Nc-Vgv^r2wF?2bQ?s z>qvNr&p0)yNEq81CqlRQ1?H3#e(f1p3)tmr-G<29qMd_&dj4h8T53HKRQm6TA% zLqw?cg&KeZ00Z!W05~WBfatR$zmcKl%VxR*`2)54LcYw~e^T;Zb35giRN2Mdp#l2y zlimt(^-#P9(C`UUK72*}@zRf7YLj{t)fT%%K zd>iTEF!jgT8HoWU$zWN9>?iE`T%qd}Q0ogd00#gD;0p#oOV1AgnGy=y^QuYjoRrap zKAq!`yc?J?QNNSi)Fc`C;X%}97LcsAy2SkF!P`p!SK}u|E~qE&-qF*H!)W{2@6y(| zT*6PfRVI!bBRX?e9=#0Kt6c_J&Zjf&@|=0jnW;P7f0SNSY`v`azypwN*6KSUx!woG z6en0@Sp-hpZxRG zKi}c+qyPTqe@waj?+8bPWv|+ak^8$;4I+IB!Pp(n%XsuYR@6>)&OjAD z{$RAHy0L%8PcmIyfhT!L+_<01&!`0@~NQPNi^*0dap-Z!LaHEVi@Y zVqeQ&0sRaU*pfhoPHY|%`e}*lB}ou@rh}L38P-!}5sXqM)~|c5_^8flB|37_BM)gxq#F2hy>$tTUr&_q<$k1_o$<{-Tm}jVFT5(ILHy?${5Oe~IRVx+ zGPbGQx!IJGami>rE#<4<+N_q_h(1V%;ll_ZD72P50!K{vEuR)U@~fZKs^?=nVhGK@ ze*qX(NfmzxL9H*;02}}q0007D_!59Enc#5R1h3;rLX|69hCR0G?4oA%AbaZ(q_jQxKDjEJaP{bq8pXJq14Uj(!FjXIb4|)Sj|_jwfTVc2sd=aGy?XH$5fMfJ_ad++=RVRgof@T-5Ns-in@SWp+heTaq1)H9qC2uQ zL9H*;02}}qKoA4~_vIcb{|fW2Sh+zh!2f9m#oZ7ga!=d0h^j%}^cD`zc3+tdfX-5c zw{Y=Zi(dmkrXg7mit`@vLwf2O&glM_0e=(*q6x?MgWogiyE%phs|ih zad%l}DhGlpP)sl%sPVmPv)wXBF@{g!K=>E7tDV4L2mqtYA4`dCiRHO|nkuC7r}F)H z$bBzyGahTXoBZqpy`Rwj z+~bjviYc3+)g7`Dx5ZijDb)Hx4Zs0_0fa&T)Lb5#z9Cual3!`$NA%NX<+O4k#D~9w z25{4x(7ix3jw%^thq|HipFu~6}Y!90%~q#L@&V4P(t_@wyPx|3<6;3 z@|RPwLQZl?qa{swcbH#I*A@L3K)ZRcAh%YDj{eXilTOwVh?yQ{a$x6&aoGW`#!uc! zGboQaSVC8OmV}R*{szY;l0Mea*qSE6%RY}T@R$Qe05Uo;+bPP@;*^hQn8Xc*eFIDn zF1ELm8q%s?86eB}s(|wL?~6sKqI0auAlaylf3Uh?bP%!P^Z0<`N3JqWdaX04D0rvg z({ebA>hv=SOV$&$tRt5_P=43?&X~=cb~?;&@D2d(0O5ZD1S9IN1=AB={)XE2^>)fs zb8TeZ!Awv<`J%%wB7PMD|uevBOQ6-2#Fi>f5uNT|7YVTd2!ZF?d*Fe z>n5eV8#fV=cLMy2>@|QEqh_ulOCE|!Pb6D{ybVSs&t~kpUvg%Rd6bA#? zXAHkS?zaljBoASIgcyw=USuoXV!QAQU48nA(8nCwkyvSFDnBFJD01MBkV0+yr4L6O z{(_kGk$SGC%C7x+)W7h=2>zUv$;Og=R6klHKPp;OeKe-LdbZvcr>9nQM+s|SWQv^U z2Z*=^_gwjHLo{V1?cxQ;Zql8h9wJ-XT8D=@?^2R-jBi4YeR99yNn*vM#n+82e{HBb zeLyxWISE|*k?poe);kZ{tbmdH1De>WMNX5^Sn<+wB%zXTD^5idB!u*BUoRT#F`VS# zyS@KH%L9`Kf_oml)a5BTs!9ys`W}W;TPe0}@3kRh4>Z#*L?9z~y)gtXW5@s22Hpn* z9!@=Imb~8Uq5kB+v&X545E;K{;7~I_cA=BdvzPP@quf$$z~7m@3q}AcG$YITQnyde zhjj-yvX=UkMy*VlaO%bv$Q2JN^<7P%?$kgHz5q=v$6`b zF|(CrG~w}7zF(^G)lNCE^T9C%axGyiB!newUIX}!JZ}1lY}P1=*7-HxD^`kHthf0e zXo^2`dMck;{Tzvb5x}9Lt~RR&C$3!{I*zujCyAl4+%ERTyDR(poinIJp)e>ssna8f<^_En z6zjwxD9{xS%>|-UaD8md&X&6dz?g$L8VYEtA(X1r;^1*K9$n!_D6WanZ^HUM+;?-L zA4UMhwgnjz>Tm2r+~pEO!`L{pI+4Cx9`aDrC9D*iPMzCAeSt#_z&ilA1H6C$IK8|E zC?d6EDVeD6P%mL|(%p}67l=UgwA|0CONrZ@K+-(949GmF#9D2>WqS=^Qu3bio4uuG zRb!W*^S04)sNSpik~81MCG-@Vmnf$_U60KfpEzyKK7E-wU}NmK8d$~*Gy+)5!ycuHtV&bjKq;TbwhkM4^$ zZRWZTyw`Cu)PK?N&#%88&nOO3-B^DtFvo}Lz|E)IC03E(%dQ@nEr_ZVJK_)Pr8yG6 z(~o_(%5F6av~;MFWxE;Ju=LQ(-w0od?rm3;if({fU#I~%05E`P2mrmyOM%G(G7PZE z2?hCzyRCQ0RbE?8Mr`Qpw_Ff)alY=V?{Nc)?LD-tdy)Ll^ug2Tp+a4X^_wyuzoi1S zWHZ04Vz1&Y^Cab&db8H2j1j@u0r)b69r+pjvR?yjP+BTA)uL^d>G2R)zjV2$0DkIW z!j}Mqe_^{i^c4dE5PmrfK)|7ZZ7$JTZ?1TqO0)EP8s4$hIN8%JqKAkLvOoLz+=2Fd zk99JbU*%md0fQ7n*drS=Avhmcs?2Lp{6EClqLVhKEpFmb27e1RfOR62RHRdqs!C&Z z%Pl$2Nm9}7)YE9f0FFB8)pJL@Lq&&ts4sA+0eA-hcYv1=0F{^HK=P5j%w;%P54sL- zv#>=6ZQL}^@{uspM}6JNAHl~@LT?dQ9pKep0Ds0$GAv$> z1VX)8!D!nue&dCZhSGyDViJzkXGC`C5kd3KV$y=go%=um{5H~L?b+Es<0n}l<0tnK zHn$qaL8!llc`lU2CK9zxG$OCYPfiviAs@!DdMlkVV-EBDHt5u}A)xuv7bhc5m*FPx z=>|y7f9Rn|*0+=wT+2cCj0Tcr76q{bOF3n0%P-1i6Ydy74mo<$l>H>|Y;#f6txRGp z)(UFRVUK@0R@hXdx}C}GRVognG=!t2=CJ_3x~#lMu{$ON_ZHLM+5Cu+swBihWM0bj zorl^;Wgb_f=u=gjU z%$G;To7SQL6lwP~Q^e{ts-zbx^64{o+Rfyk))#634gd@w4gx^>a{6F3cDB_(1*MGB zn)Lu1xxl-!uP>rnG@T?Fg3+T6;yhV_A|RibfgGWKhR@N&4pL4$@18aDU1*(4+sv8E zijLOD4w0BaoNYR*A3lZ=K=)6!*+xcPnmtJ;DK$2NMP3qazGI&|X}YIUL2WmdXQ9>? zY5)!Z3?Lo?z~yrOsM;wdpt`zPtByba8kdB{;IZ=U%6wgB37-oWcx z*TTB)0A%TiHy(ONT4;Sa9G1`%jeVYAnC9{JqWfk9wHW%e$^eW2HYqkhSjP0dIzz{M z#26%-*ll*V?qY3NIVdt0RSd9LLai^<02}}qKmr87`^yQ$Q7uJ3zwY%l%{zD1mh(AA z2YK^HYXIMj(+JkgPQD6`)EiFa@;Qj>%F-A`e!#rg3y+Vd zKU#zl0C7w2Gkv@P`p;j75yL2$_O~{@56BT~UN|_plEpe=!6y(S{0rOF&zr9y0C+BM zc=A!!Axwz!yrnnXU5EnGYa&+ z7}QTjn~ol!$6G;w#$9cF9ZpazQhh3n0DkqK3Du@cSh?vTN#Mr%Y;36vnWPwz09kK| z7V|t}Fab@+m`AoLRZ-MRC;$BRm5~=KLwL@=Y0Ldt2S6hVxzPnaeiHf`akT`z`3vCh z_(`UwZUE@03iCxi_xuxC^A$iUpH??>?C`JCI@;gwtKE#_+Dd4EPez>W43K}F{24#V z3Vr-!1c*iN>O+O&G-+Sd^DF!P#Mt@uzZ++jDD7FzoUk8ua}$A8~9l2 z^(Wz$mUN8~-!nPrd)2q?#3{Ewp=sQ$-R3ue5r8z?9sv;+rxp4%iF@zUQ$&x4`r2_e z;^H4ezEU?$2QWjeFVp}W02n|j7yvWf+pFlvbm#5MWe zCJhi`xjQ%sL{qm=PtBqI=bk5lc}nyZa#C#lk|%+;CAD_S(!9gFj~`2H2wBJrpt#M$ z2mrwxr_c6OQ`vNiM7&ypz2t`rR`t`tR&vkod#8Q7Uv{9@7is_w01O}v0^s50jn<3S z(u%)IjwRHFwy(vytaHDq(LKGb^D@D8*3HZ}M4%MtaHQ$+N?>T`x&v5~EWDg+II!ik z93fk_K~ss+@~EsswrM!_ojuu_qiKK5uDwZUEehbR$I$QqcGkLy*+uJIP*^3 z#xsC46a#8~p$6apzyQ)A0D?gP(9~gWJHFhkr^l9QBp`VHCEgB>T|Mn!uQC6(LGJB1 zHlUt~FOq_b;y)e0w5wnp-#T2GL!`rk<`A1a!|Ii}Fg-nn|00{J!WpJ4i~wZnJ%n~k zsqRu`?PeU~^9bLn;%C0%eNjsN2JUVRyAeW3>60Kfo15CG*Sm!qfRB6$Lo#KWpw z0~l?a`;$pc>oq+Ja9_R^;0QcyzaRq|n<`?Ve2^))?f`V=DiWEoDeT^Po#V~K{R!Er zGA~ZD!zFD(+~`Ea6=K4-LnvRG$Hkxy78c*`D5}BYHknQbK&>y- z02}}qz&i+lMKJ&<#M5)GLhXoeTEg)@EjIC8`x}W=qPL0XftuYYUafjB z)vp0`&xty0@WllXmp}jf;1(~y?X(sBMB$(Y6?=M=PT&I{i~x|$9>}{5GMG`huQRT! zixBx0SH8e`eQedyYWS&eVL%0HeW3>60Kfp=g8{G*-@QD|=`~?$flrxaOgr9%W<`4i z2f_f!foPqDij|N6>TS(xpaC*T&>J9P_cegCv%6Kx)p14RgjzQC!uEUGrXKu7Vs^y* z-cDpk%HK3#1klre%yLQ)Ptay9V138SKB;-@RPu3_nsu%Xs`If=EeL9Tp$6apzyLBJ z0OYg)peOkc>XjY$1IX7rzPFM#l;Xd81WbP#ULY+P%mq?^@*C*+iu*_Efy}3C00-)c zNch0#w*aFa`*&1;d2`=_Lxo5k&L1#oWtf+HqQVFu^G>KRnf3GUV|ad&V z7XSbPWR4@k|J)=H5P_G|BqhMlgWvy;VUz#!i~fH4e`V1BXYB7xNx;>_%fFuke|Jdk zfBdBYkmvutN22*}4-pU$0hdo)&Y^@n{paC7k08$?AcXw+@am{zRtVtF$B0Nq!7Lx< z03g1$xspnnPNn01id~JsI&oHl=6&H2ZcM*7MZHrhRb@aFqn6~GM(uHb#!s^STjM7K zrO-kKZf91fe2njk>oB0*F8x*X^#GTv+UwTSJpZK^;2iFm%ZmM5b*3kS2G|-#$7>usp-Kts0{~d;D3R+h%yTKW3C(fqepLmo5G%nzO{!H2BpOay} z7ZlyuWpQWC;Y0i6tm@SqhGR2j9d(1era$%mkAOi87(3Ek=hMeeNC@ZT73Qh<=Ee+5 zy|g1(eDZGyy)JX74#?(&T3@IEH~?@*$^ipl#aaP?l+i!m@TyB({>>`RJBXXZkt1NC zdf;FkNa#U3`C#K)67aSYKt1=i4A=EOiS@mWzF&iHBi=s#>c(%$H={8*`D$6eAl`am zX~@>fy~D?F2JrdP>TIItyBTKC)D~v4Zs0_0pvme zh`k1YFkPq(u!q)Mc1SQCiFPYD)I(40dU;-rHIE!kQ8zu|0CH4uY50sD3|<3B`F_rE za!i$tUnPMQYF=|uY;P@|RkxqVg7UH%Lo<>PMgaV^Nfh>tEp<$LY^HjfTfY{WQ*R|` zH5`TOjZ*)P%4COHU#I~%05E_L5CBe=01(biD~gRXiZx}k*Mq3;j@0h5NAd++FOC=} zZ@cs>=J^7VS2u zRv$Ay4JZVXm18#$lW^P6+%5R9VPRjpMj9IE^xck^2Wowx2H*g|0P-LJ-aouN8>(eu z2nS8<4PTShOnek@L#!qy>II&8s!|r=XE_<|KA`NbTmis&GwB+DV|(kv22y>pvk!I~ zrgG^4{qEe2L1y*(;h9aTX3bQeU<5EBXZkL0O@@cfiv6Tc3E`!wlw@}zdhMalmvEol z3PoqA^@SRM0{{cahX5FS1OOQ-VZ8$+ET-4jw`+tlJFx3|t?4BneB_leOmaK5m`(xO zSL5B45OKbB4Zx&+oO7E8`Ar3JcGN50;a9i&Rvgi6CA8|Zf8LaPyASILu`W%*FL1xC z^&}PDQ&vHh4|^46W!9NFxMp{+CQG=EDiUgap$6apzyJ!s0N7AN03Z{p`S;{c`tg=m zTNWQxCFLcX95qXw5bt}xdLVT`uonPioS};S7!i+f4PYvZ4%AYUHY*q3G8<>eF9}*? zx$wQ{&2Nt%NVnq9zi!*lt0zj?eh%PD<+&7in&*$Iq;i8x% z(WijYCrWQ0sptJ_olgOhE(1O(1dU%@0=ODKsgg5unBPyTkx|gSQ>`+|Xc2(4{_A0x zYe~)G!<>`>dl&&^T{ONLQmJv5;YK%zD1A@J`9%#>aQFVPf%h8!Y>!|MNPX5U)yv>b z6}9TxO?;(N(a+vnm4en@=(vS_d{r(t(LkJ-3KleFwe4jAc=#95d;-UkPX0?}pMHE) z8_BgsPpE_g00Sug3m_QLfIXNkwFCfCA1u?0$u@Zz)RK#j^`hNNJ+nO3H2ufy22Ufu z`Tmd~&<0~7Q2*YD`=9ZX?El&LN!M7dd$k|T!&|>6zaLRjvFQ}ty6?*E8lG**haXN-y4%+;h9w}?r zlaweUl19lh&KV0QHsPT>nNScgW3{cR>DI z1ShRuKL2wqI08)`&cZXPNt)$c7FH^!e*CsAUUH;(=`~ZL5m9DcR~Q$)J)ZF!Xlr9} zYz}LKtm!6!{$w8g<=mU;6u%X{R z(E_fPfHDYxrwag3%7$)J)H~ycZ)JZGnfP@r25k~(vdXl)vV`T~arnd_y(oN8F@WXp)4q~yJg z#j($~g;P(?%wYsTA|v>wtlu-<&PuVEnv}a{cXIepi(H4MtG9Unb4AZDsP%;!fCB&n zsDJ?Ig*nd$O{=SwffLPmeNZv~KUYM7cbS0HpFe17jKou&m1_aZ`}=cq$Q& z6Z2Kv?szZJ9eoU=p@Ujqr~x z5D-QHPhzr~Mrj<|c{`iJRCTv)N6@lF$G^TDB5=JyeptTP1GTP}2H~9a ze_Mzsw36?!Ct@^{+G3_$W#J>Ym62rn+7`!D#0DdPrzNti2Ux=q?RG+akLBV&kD2Y? za$LomESW*3f91gv1hu|U18@Lf0M!rx)<6L07J1XiPllP`QyC<6cd&0rDgc{|BRpHfQ+AXO>@;u9DdJj;fPjhM<(No zhP;D!HGVSkMASPfkX1X!oNSC0xXebZ?Dj3iy|^&jgACu^zN!_ZPR1%n^a<4@oEPyY zGcTGBjvVTbI&Ap{5JhP)(xCV(q}9B@_#yLHk>iXRooLwkDJiK``k3QK1zck`&%oJAhF$Qd=q>1GSSt4ZvFsxYc}uw3yJKi$@EbLvis}4ZR6Qrb;x#Amc{7i4TN9>&>y#GUdSBSf^<4&u*#H_tM*GP=Vy%v z@+S$q&lHQV;b+@H?IZs|;HuTsf&tt?SqFe>YOq+u?#aETuP4r^eMVqH^=O%Rr{c>O z9CQ10w@1NeK>9Zs>PXzNsMk9i?av4daGz|uvV23QQHftk$}iD$l>1B_&RG5EiBmNK z9*h7wP>E4Bf=WxL%2$tgKfm(`S83d{Kj>{2Y8mMm;EuO~`T~a?cnZ4vYY@hx_ab^Hzf+0QR>5Ai~mv#BxKy_pLSOja>l~TDKC$sFKqGI4$R5 znNGAZ89;XZ4PWj1y8720;4`<`%gNhYB02=4{FrnJ-@P=dEsR=B%;}qGN9TR}*I)!t z(#&qDoAjWSi-0s>I)od0Nw$>9iRaM;GGcww9lD% z{5`#q#4_wo=OZMss0GO<2DN7TR@`}&4H@wt-vJHEs4EWdu{vG@n3tn^kNSxYPz$Ku z*nDb0CSO-frRpvIm9_wgeuHu02aEuMQZsZ{RA1LHPli3xsA}E8Wv-XFH)n#Bq5LFN zK}X>nYJH&w-~hk?8X*9NJ_A51_=LHB3-P~EvWROx143LrzEdGN4J(KPhKSPnCj`C# zDoktY$!-5;y#`?0(er!?KbhYCA*X+I&DL;2quSvwb&)dQhEG0|&fVWI0tggQP7QE! zNlXik04=`Ms|w7>@&7=%suGAJX-k7^Z4b4+Py=uPU;v-N05~xuF82YvCU6FRzi|nW z7ni4~YL+ind_cXeKAjU5{siBJCb0o1N?49i`H=4AHGpkyV<&M(Y>m)Sv?Hndmgkcy z)%a6WFJ1(s3%$%1$=QMtz^sxF37WN@|9#_xi87v|T~FUCE5QerXfeh#tpiS>@1fQg zY5)!Z44?@DKy3PQ0&61CR6Y5 z%E=P39s<4-_5*1|9q$&#rlQm#GC-dBSG%Ok8{Z{?E-!p?`!jy>&VMp~lE-$Kpqlhp zzZomEyDw;@;q@NZb_Gaxq4I@hi<^DZ8i-zE_YOBYprc*DLOxorRY{pbSCTi+a%hXJ zPv9M|d_3f+V-s_8HLaCwq0tCeJ45+1o10{}-tJ54Sl+EOqPpyCks zM<*YSFDpSl=TooE4=clp!z3=VVlLTYP@4(V0KD6PyG`p~Y=B_SDLVkjdzrG3j?Ek0 zd@StE>C6-ZFWKVnil!ca_vb9f8l;=6K;^g3Z;=3BRb4MPo~slMW?Sgz1S2#a<9d85 zO9B^9Bq^d%t7GTeP~zv7VFci*+RTVSllF7RbukBmi2LJ}p1_r=|9|Qo2=aLW#89z_0Y9{3n;@=Cfv=$V5v>v4+c9hSf<7-?2)Dpv% z7q?t0M@*T8H~TQopO?utfAHyY5)!Z44@qXK&}!1lHw4*=wyhV2y1;r$k-7< zp_Db=TJYgF{cZ?Trj%UsJkU4q{jHyFBlFh)oWpfXux?Qv=R2nQoiMrt|7ev%QyrMA z;vOdOE7S3Z^`s@$q-zU>eR#oW}*^*sdI1oXI2^8igA2C><))#634gd_G z0|LMg4FEFeTDs@&#TN0JNCYYPl#ddJmg2+1+3?6m1A}>5-)U-rqFU;X`XPO!*8qIN zBxdp&zmPbF;j0wRvwghJg|l2*)|2#DR(cJor~W349YE+KN(kPd5K7zco!-OSCXxXlT3huC)+*oY(=WZj|qcKr55@GJZf{)O%8Cyq`CfE82# z$OjAf)X*ZU;hX|zN4!fO(=elNqEPg zSm%9D?hpVULH#e(AKU@Hf&p+-mI6T0yM!BaPAt0mqr(jjsAe=c7B7ziorWCVO$)^H zXCik4$(`>ijo<0{=RCK8<9jg=*Q4YdQ7z8+TM_MLnVn;7Kil&UKglDS?)aGoBY^kG zEZ>{@#k=!KBe?<|7oPCFVMxOMk=5D=WMYV<;dFx9;h_fLO8^)^7X*N&F90<5C>Q?~ zE&qK!=UL%Eqhg=ia}tH5bBtvs-QTq+FyAHtpSDlPHWS&~Tz3Fh&D8|!-#@|&zH8Jj zG+Vum_hL}0ts1*8@8_QKYU+FzMgWVp^cb8o?;Zl0LFs3aZLE0TOU#D!`@QOZk4fQf z-1`Z&zEA^j0AK*!5C9S80MLnpRe*ou;~tBNA3qvRM~Y{I9Cy8#>17dqMJd$Xo+k(5 zdTn-Z%)P6*1aLKeGUc2$rr)w-j(EgeolZb>CHAGHb+gZ4*NQ^YQdI&jtk=6mEK~=g zivT^Sjb1c}3?cd#J-Zo5?%1LuAlqjv7P?IW!nX{d94n;7mfo)-6ZJ`ef$Y9F8{1aSGp-|>^&jW(Cp zJU&Zu4RS0s<9@c${l-{-UlP^gV{DJ;0z$K3AD}*c1!#13w z@>}d%T8S_-_-%0ya%A%U*z!x=wwKa}1S^ZV_sExr1B0>{39FqaYn;yv=R$2@>_~IH zzXrU{kJY}?$)OpwXtNC44IpN1QQ}0McKdds^uUixKv4bPyuSkZEd+4+O#s2%`_TZ< zd}dDMyihm#Q;B+$Gww7bbluOj`I}vML;$(hi)duwKr+(8-ye;Zo?kCXxYoKC?AVjC zB6qD9$a9a=8Z1kfqsIEFO0&hh8Y#rQU<7cgdfFOmxgKb4ZW5*4^GisMj0*5^7Q;{# z;8M4AV)_K?iUTzOUy{H}QZE<)5BvAaB`I<5)d9YT04~21AeiR~ zHvqJLdu)vJeM4c-%yHzLcOIbZ=f|gdztBpTbhQdNKXH}FKRB2^T95pAl`Pa;Wu;-1u1 z7VDp59o0L)NDcJ`4mAMp0N@VL2LbT9=<@2DcPuvDg!ghMZgPT*;{5Zm&ee0#e14Fl zCpVr~e4lE6-xq3qp$6apzySIo0D2VxpuVrh zU4r7Jck79Bd`K;%!c6XTs%GwU;^CFOZ4Qt=^8`BIvO`(J-u!Y6AVG#VNotl+uv1d( zq1`~SS(qf_%zUs?ZM9f{?2jl#Cl~=(M9E{H#JG^FL`wej6!=bGkG6|sN8GscyiCaw@4^TQKc>R?c5b zSq!FHjFa~RnL{Z0bAr8PuK}bIa8h(HJ_;4^-~7hwAh+IC#pX!R@zBc8)aHs)z2LN|~K?s0*lK{}` zCQjhDc*D3?KwWaBWT_L?VisyY3xVT{0k_5T(ho*JEcI6}i>WaF`Q=nUKl=#atrkNj zoeSQ#GvXDu-qSez)PVcP-3_?y-p^s}06Du|$@#}2=0s+m(eqfTQblJO*b^2j#+gN~ z&bQkZx}eq@; zrmf^4@l>bCxh5)uwj|bNHFND`&kpKwpr`JfHPO6a{Uv~_@snR3u0B)1L;vvz|A}nc z&DhVVn``}o`<}H`R4wSA*|vjV1n}UV^u{=r?OCe5X#I1>%%Fpey~L=8@g;kK&1W(( ziZLLi-MNEDDwEuyvq5Jfr~O*0=n+ztV;Za+l>>~V#Jj)Y<0mf{b|~A`KEOx_;4=4j z{3P!j>E$iiowHGV*L%j=A2TN3I#OW3eB|I2@;?84gc^GKO{d2fz{gYlt6y=ZasP~; zg0SpRFrNGC65O7)1iKHob&tddHAZdnGJBCrnut~$8+xN4kZ?we8{*J z8E0a1d28OSq{1JXh8w3NzPqMpQJVfvpMNb-iur{Gr9^O_P1`Lu>KjO0`2gF>rDCF$n9t zZbxDzP4O*GWdCfVL0JQ}r9lnAdmgywjs7JM2<9Vu3IMrZPL=4S1K3w&f8j>WCATgA z%9Tj=l6w^^m~&kJ>ADI~W?N>K#Pr~wGctlijl|Cf8uCKRHKn^SsScQGGmWD4pS}Ef zgHND@ITVutwEx30t=-?RoM?LQPbca$3SPQkjPy=uPU;twf z0P4e+GnW%3Sbg!btraXmb-E7RLkGSQ(=Xjcx7n5CoF!T+s)0|D3I+1m9Xqb~dP;?c zv9RKo@hejA@sKyYv6~U`n~~Ua?iZuMxk4^Vu_$kk_7`sE*Nnmk@~t zMgW-{C756C?OZ%QOIH_p!ClXqRK&4*D@YctCxFa=eoql60KfnyAOJpN0YIOE z7S3l5s~o6r1}Wm)l__vxcm4HY=NH4&xh%09BXOxpYyAdG+`{|!U(`FaI5ZZ ze#wrgg5pj3+E2f$s%K}?!;EH9EpzEP@l@BK))#634gd^b3Jids>k|O9oDy>suOj^1 zVUq6??HLgQ{d<1VD}^N*o=O69ss>ITQZbuk?<-`Bc4P2P&7o4VD1W%rVsZ zLJhzHfB{TH09Z9#j-XCYY|6>vQ9!e8y*Ez(!S83U8Db*NhOIw*lN2!i z`jC;`0T&dkL8MFPKTsO|nGI;zG_#KD5%tgfQNmz!vJJhbL0sY|h&nL@VTAH1x$*sh zk2$24&1p&GcVO%Qs;9Tg>DEAE6~pMb z3-f6T-NYDNlazu|WHGY#Tu z{G?1uz_*f5!1pAr?mFzx$kL7z@3R3f?f3V%RG@xR}frs)75 zKM9@4RR@^;3*gWANda7c0O-BQWbDRHc+*zX`TZGbDUL@U+#4?BO6NV@-@{u|peI~c<0pM~tUpiuQgME@Bk=ML zQ%w>=ETdru`PbhWVpK_lLsrxvM3bE@cW!wNQ>z)|5PpR;C8C7oydZtLCVOI}{6Pm**G##W-)HdqT|jpPJ#i&%?yodJuz>st0CeVxN{xz%zOH1w&g#(} z!j9&NwsEBE{hP`(?!^eU#{iJY(8))WfApUN4w-f6v-3lkpNiUpFqIGjrnvVhRZ%J* zGhPfK)iyNJX2A%+(D6kwN78B;>*4sCgUI8K&%y&lZgbnmg~Ju z*7}dkg%VUcD)!!HLc+obA>G<7SLX0aWF6X7@Wb(ol;m z?r(>&1CaEKz6d3Z>=Irtn3m^2l8H8| zeqX_SpMx_~S?3$n`a%uB0e}H4fdL3|5CcHSIPU)CU2(7Y4bd}iE-)yfV2Zt6?D_sc zq2DD}D94HzNX_v?mNEpT_Zq;Dr{7QxWleDE)l{^TzvQ+0>az;P>`B~be>|?apioQ* zV+V*sH1`;=Wt*|A{YhI*C0{HT*BGUguhf3y^0fO$5o*g&>kBmi2LJ}J3;|%l0s!f! z9oO3cgtBvs8D6n4O9vtK{vg3@@$p(NLq-jtxf@m|4 z1CJ!SpL~|&jJ8;;uyV`VufX)-5{gg(K6zfht0Kf{at*-4#UoHPNh?oYlR}Gb)wUoN zJ!vA5YR!5psxb|ZT-Odp0I?#J48KIM$+Otk2FXXuHahXfweImYMOT9O`((c9!RL=6 z{0rOFPXRx{0EF=H0ieqMA^iz9vzi{yFERJpf3}MkC%deCm8A2S*3ka{*t_ensQPz* z^hgL2(k=q#7GVe(jg2WjdZtwbcrBHNhuvtN_s{aaR07-erLXC z_WpC$bv-fzx1&DyYwpjQHEZ501^|!&KJ9YDWyW~x4F+%-KN(s)qj}phq}h>_ir`*@ zDX4FZOnB5xhm8feZpoDIs{kW_(!DSRKC_fZ&Fm~KyLO)UsBAyCHBtxQ*2cX$1FTJ%x4vI;p8?Ika#~QcE8zTzpX7laKN$*= zh&l)_pSMPgHBmG1&lSrsD@@pCMx7EspNiEYPiN``;b?2%5MohrKTHLTqHi<|kaMH{ zKyk@O>ZHSb7v)cJ?asMqE+XR2P963E#`{ZG9!V8mv% zY1Ziby4XR*$R`pfp_N(FE}S+x%D9j4Frz6#@_Pc*)dXq*e7S)vH=9?}CO{ehVtvf{ zUH3~FnY%F(=)FHHN~h}TQOlzl?O)}Yy(k-o{6LJDcMDzUBmLLQjp0J6MzpGwGStk1k0)TRepF<{7gjRK@v=p z2R_PW(LYVJvA+hu?ua7SwDkLX6giR7843aChnu>1dRxVqOsX=jwt7pjE;p~1ZX8Kv z@Y%kvtYMZN|8|FHIN8#i<&bIylVfq9dNB=Zf1wt@0YCt3Ujg{J4FHj%T|8cTOT>UQ ziq%{M_>oOEUm+*-Tbdb9c4VR7w&@L)pY$$T>NX4#! zfj8SR>m>eKH(wKu$QKxw0Ar+sUF5^B&Ix);4HHRU9lquduH0_>kX5|4oly6wj~{A( zp%%aaKmhDO0Nmr*1%MX9mWKp#qT&a_ThCNFe}1)_Gwl+&rIr)xD|JSMkt79VXKS7J z+w3^K27s7cr8o9t9cRosv|q*K^CNN$2}~0`EhM)$lB^A=3;-Ab+yp%qB4obFBM^aO zx&CqTK!>+c-fQs*TV=)3cQy3&1E~FlS^x(C0kC@oz#azx>J#vKus)-t6Vyo~C{(B8 zcQ0o5`zNJuwQOV!RI9%`JAni$NKg6mPe!i+NN=k0ETy?_AqnsmSI~5?_9DKgn-aHE z?IfNEGoPFhhY+q zB4y`+G*Yu;Q1apETbW8FM-+*68Ib|uH!uSDetSAVk+f?$U3mX1yEAnyU*J)BV)N5h zt%`3f$9VQeQ2PtD01f~G;NS{?b`t>9@xvd#HgenAK+lu(3oDs;qZ406^je=RS-8 zI_`1MGGT0DuN9oKHH$hv-^IOaXJR5pgG{1BIC{5z1+*kbR*Yw3DuHLs^=Kmeg6?)D zspyzZ4$tqy!I6@jZ%!a1;Hh!vE#4h0RPp(sJ+xVFpQMhGn|*?A4y#UUCxeuK0Q}2m z{G0cP@c*%at1mae)eUL{aqg?zmtX(JQvP2a>F;l&2G;?>|Ka_g0hZwJ{NFd}>mQ*Z zh+p5nykYY9pK$pn{!O3!`wKOs>d&43&p+t$sN-P(09^Pteo`pf830PgXTHm<_!!SZ z(F{3kIqVz=)Xt>Ao{&}uO_hJur{n>Yh$+L*A;8%C6Fg6W;N@CiR+xp9Uv4aT3M)2<1QmQ&rXVB4H5<6=GKH{ z2|M-)7P#WAXa>Q$Q%WQ8`SDVE_&2jWVO&>7)%{D*G$A5)x03u6y7y~bbI)#x{2U_~C%`D-a&Xq@=ZEJ7>lcY$ z%Vy$6_p3HnI~1K7>RDAipTl34f>)9M@pic+{R#kp9|_=pUqTK5GE*%MBqE=;w7eZZ zUiFZb^-;iAvm9=a%tPP$doLSJeS!9d&LG7p;(upDF;JRXBw5ZF7bn4ckRWhkI_1H~RWs5N?` zN?cC>2DG0Nle1Z&3ajee+02gj&v_~>aO+1S{g;x=0b4iRVVnS~p~pQBT`YiQmX_#% z#XQ-aGMv}#y}4+yIWXh@AKNF`yLG~T^Nw258ZB8 z?mH!l^_g2XLMWNAGlLO80cl!SEfL@87Gmg|B}PFto0=cT{*jd@pDbQH)_vfK0QCtD zwE#W=AQRy93cx-)0Q6L%GVkI12SQ1gLyejQ=AT-Yeq;HMOdoQ^&cBKBlrskk``rC} zYN~#6JpsY{?n20K>uw6Sx&e0TJ@QdHr-e(3hR2m-R)6fS$vpG(rSWI&3Y@5 z4QhX(7Qg{O09*tB!2kaN{=&JG;0*GGsILL|pBCP1)Ga2oXdJS}d41`mvB;?Z*qO{i z@SqRq=3_KpfAaeb4B#?;lDDE0=($A2h)VTiJLfR!cK?s$7+-yJF)rkQ>HWb7SdUD4 z9~kz$6N*cGZ7JpTPDSnHgC3o!mLH28lWTTo2|&IJw6hcOtHb%D)kxaX9iha>6K3(x zdC92J?YwuYj?k>cjNtK;|Ls}z-@b9V6Zks-0RG9}_(|bK1OUjL(&$M?WCy+z|G91E z<|FUL6l+FG+XSWN6mu6sn)q$t<9ndrUCquuf8r1sD6+4~7 zh`#ygU+Ix<4IhKTGg<7BWA4Y{BHz0wPo%?8|3J$13GVcdY9V1568XQms>Pp9y3?RJ_TD1MZ)94Kcko2E9rkjl!chNu&JHI z-6I?jax;#e+!@B1mw(Ga8(XbtjepLDZ1tDq7MAhj3lSg}gS_g{-Utc8sI(y9M<$xAiwn5Dt z$^U|9>`zjML*%eQtykG=CRL9J=t5Z^u<#c*T z`8`Ie5_i*T2;np6xx1C~{mrOFsQran00#g8aN`PqK6ue%K+-s`+z`Lh!NKfbh)faKYE|GytZN3Ibo$1-L3UF93BZb6|vGX zo;v+!%3T^vFaqEmnG8&M*E`PA#0kK9uy&?Zcr;_1li8NoIZ+f%ON*e?8AKRsyJpp`}IT(LS_r8uZUJR5MdFN^CQJ;~3M;8_Rlc4|O?t>rT z5&&`l0DK$Z{{S0&=!^SzamTrSIiW35cGdmQPD>Wni=OxVKo+*N{ z?BO%Ezovs}2ft34RDp6+F9P|o*^43Ue8Bo4P)kJq?Q~er1 zD4(v3Vqa1{PJH`eEN$}IcL{EURe1%G@JiO*#GSsU6cJ}o`wO)I4gdlG^$NfT@EhPy*~hmKTHDh)o#c(gZptz;Jdn$L zc!zeb0K5Ew*d~z_kQj(F@v9{v^BRD8UKzdJQWXjEhD4Lx$8mG7r&haVIqwgT-sU~n zjzV{U5kNFC6A*0yA>FxaxaM}gb1^e9_lUz=vIhIC;_r02fm%@e3$*|a00ICF0zecI zdzea=@QZaZ-n7GeE#rptEV_bvn?p6o@M_M^`i*h21S zeLuqw@t!MD%FLBTmxHK#$2UptV2SUupoT5W-AJ5TN}!ZJY_XI7G$470ahnz%KZyW! zyW9!9^%uaO_(@SQ@M&K}~^f8r-YL1O0#zaQr;lUm_6j@-b< zQ;eK#dUPzQs_DEX6lGJxy8;rO=5(+g$nX7Gn?hF-KeCEC!mHs3u&%uj_bz)r9Ui?b#D}=LD*=>h4#NM*$ZX-{gmhtiyVhFFKA7v4w>lg3TwyyNx9w zes+4~f&)Y3W9ca83fRqt=TIjJ)B^aZfs7jTt5M?xKKVCsrX%CvE;p%$AZ1d{YRKoQpgoPQGiy2H_`;#|+bFDfoM2msZFw#GO(*qN z822`R%Xu*M5sGWN`{^}U&FxGu&?xe4HF5yRe_YJ+lgH=xZBqNmNP|jD=9wJ zmP+`Q?%iCXd;b~_|1++K9{>BDP_xKGB^Uv?8S18JhJHmUr!83)q|?27P&gMB8;`21 zdLHQf;^$d6)c!&(fCGR4xP1k{8T>imfuF-(iA`o+Yt?)$n;Y4s52ll*-(`VhIKCAx zF>P-I0#S>9%h`*N|62m$U%2g+ll;;QRK8dy=LLU;@a_yn7ebXSu2rlK)fDpxtN=JI zNL~pl-(i>C6t3si7u%?db}9Fh+<%|iyCUbAmaY?nfRs5jmeG_V?YBWlI`RZbO8#+MJ5?r#&BIvfTtIo`L`*(tcv5FN~9gP zwkh5TbygzndniIR(7sC^-3=pv{$u*KpJoea%}ytg)~{Wjib>RuSI@OpO~(uU{N!$x z0kywS3*Z1C0C27VY=N^tOp!fvw<22;KjU#vN@vmt@?uFZtPizeGdO*GFWvsS2S~i4 zofj9w8gmUm$e$kJ7x#8Wf~aLP()0xm`Y=;*?9_zKEtJ#kXFTz+?gPjNyt^C6fbdqK z`umf0hT>VZVM67Q0ZT801Njhv?dP*l`wO)I4gdlG7Xm<>4V(tVh+6GPYFo>#5SAS8 zNR5?!kV&JnqM9v*j(xx>FT-g76q74>K0qG9ehpw$Tp+{OKv*DB>2?TPL$@<}{f6Iu zOKRn<=dztHeUk|=P5`yXGY*OPp--7SczFbe5!SeNQrr3{>NyCdCsXepz88hsU#JCe z01yCpR{(6md0@_p6oLanO&-Z!W8}~7^C~o!nDc(X=`x@!JI4`KVZs8k&80HpO7Z-? z;*IU`jWbZ&t>n@B9<~-V51;qQD-3B(iQ!CS?hVu*8SOuol_rBVf0Qb2fek5M?99HM zDmIl8U-wB=5GspvlS<-!cC$}AF|8og`8%{8CMbG8P5lJq?~vNRmCbSc zSO~HLw)K&KWQaXK&vw5%{!&Zgiil>Ql)jky(hfBVtJsxjNytz=5-g>=y> z2K=BCR7w9q!6i0=zt{l&;@`nRrwJzVkF}hfz3$oPt_jK0YAM?ukC5-PuBkU=&)ahx z>;QeDJ!R)QEpJ>eH$yDZMJx|2)sZ9QWd9 z3Ec;8o6@Ny?2mVwexREm$o{lfU|wq&Vj)0?gSwhPEr2gKkmZID0ziTRoOZlTS1_qj z{>Co4_W1B{q!%=$;&_T!loTtY>S5D~izowB<+5ABbVDJz1~9#t@IHUN@=NuH(h?*t zP=8n$hk9p?|C~X~nW7z2*(8hr+%y|#l0$A~W=fwtAx&2KVu#?#)jMeND1<^Sf_~eS z5o&*-7Qg{O01#aPFbC(If86DqfAbrQo=>%K?}Vo!?Ow9)lqADk!a%DJK8RkTDT5M%TW6ZwEzwP0)P|(K$04K)uY}ljbz;yv;$&n48sQcgPHB^ zACDJy>CFe3{O8!p8@+*Q2d>EKgdNt`6ClU1t({``=ljO{CyzFHS~5GAn8YV^AVAHQ9h7!9!VPIZMd1(yzYp&FXI$J?Jv{kPcGZxdxD6vR&tx-_YaTLFbEpTrB;QPYTeMa`S}dS#5Pw&`&=Y zC&1afGn(W?)%Iq#-PEYmdn$j=evJF*lVP3fip+7(ikG1F7is|<00h9DD*&_LYo8W6 zY%Cs2i~U%8c;=;*S~3%SCN%~%aZF@%D;DU z5dP2m|NUVgzYXEPMM?gbFii3P^4kF7)Zlwpf9QYt!DZ;=fB6RT^>+~e{G)IX0FdxW zaqu1LKZRG10{C+Wyj>m$q6h%|xqSoivA@)v69C8rw71Mdf%!W}bTuJ0GD`q$YboTp z4oWtkUq{9y$K4{J_3+sA3naa-f8r+v{&(UhLqQ6psc307s`NLTMCGW+j6KbK@!}&DN_v&F5p4W8 zD!%k=e4Qq|cwDFh2WkO)B0)e>{sjr}mofxj_MLL)78A$f1(?#E+X; zY*1!N%2bUaGt+|9%aC(7bEI=_u2g6P|Z z@kLYt_;;Z87is|<00aQ_6@ck^0LbGWKL2@U;R9@*Rdz`VLRasRY$nS#S0dLG3Tp0yqE&02&AYY4R5El^B;L>jU?& zlv^{23@*M^)#(ZvL{mTD#C|DS%%!J|tpUWGm^A#J9JP22pto8eyV6fMX>`@3y4iv= zERpDGZPcXbVBk*-r5&kx85jYSsDAVrq+AURZ_pZ;Ybfj8tz%Z7ltb~yZT8p?|BCko zYJZ^?zyUx2&|U#BXaImxR|UGHb}?V_{hAQ+9}MA{7frj%x|k}=4bqhPBC|aO6g{`# z;I!0xehuKgQ5n*V?J*r^0fYOqzM%O)_OA=NCL3FM&np7cxUpeMo0+2ce0O{s&2+2;2?JS*lowzT^ zXlkaQ5)m^HVzs;iqF9+KX900@zK2B*p zKhdz8zgrAK0%4p0n9g#xi(#hKVpHMHG68FW%N0ULWbHnF)0m!Z>s|YjQ2PtD01f~G zfc^@=3^*zUMc# zlIbsizwwhYZ>+(e!LD$(TqFXA@Hhk&Md2O)>P&Wd&!Dz$U*jHzYNy&-2Sok#_{G9w z49!3BlY;+Q{NzbJVunw;MmCmNod%n>Tym?ZL=540L?(CfoN9NlSMhgR_pv5%4WwB) z;+KIo&FZ+McxOxZvQSv`>H7;6Z5WL0N{m}#Flwswk5ZFH>Xct$0GnN&_Pjt+@bTw7 z$Bg7%0x=}1^T_TxEm%>^RQGdp>0vx-9dgDoDc2wHFf97>S#b1C^bbDd{V0(*MOgVu zlyqO}+1lUtNcuB=Qf&}5W3~VhAA$fvoa{kIhPf7>i1SbTq~qJmZk#m&iF6fSafu9F z9sBf9TCFBXbZAAurHFh2Fhm<1Z%on%G;Q3plPZbzoA7{<{OQME=i~gJx_%^$ty0x} z>q!u;9W~S!epkq1T5gDK3qJ=Os^|Zp;F3J^U-AHdnK=>wh$Q!}UL)^R!p=6s%03gx zyBi#1lrOy9IS*52q9`(>(17Cd!TtcmLjCJSk7%D7?K@7u!+iC*69!}*(ifP1OiEPA ztm;82tOQEau*OdgPKGh;)RIq2r!sPGb(3I+p>jGi;hze*Q`yj1myc6JUDKczz!yEp zqQ?RO@R0I50JNCX>-wg9Lz9`8ZJ*PLKnK-N?p5?x2cQ-!*UKjW{so}hHX;}I{?k91 z%Qr5LZybX(y>*J-s`s%J`?D3RG6-g(q6~zd8Z9n1$Hy-&V{hxgI01wWG}&w-F#FjV zjVCGHdlp^RisXgdF8U;8m=k2~O~cR0`VXGqP)jZ+0P7V1<52*}QcV3ttQUZoon|uY z*t&Md#VO?#3#M$3O{S%d(T0pO&}!7PppIO+;Tk~7sH9xSlgTib)mE_$$*^sQ3#k!Y zBz@A^7UQ_%^GXnm0BFA&_s(`|n`K@&;v1}uQ(KzsO2-Z0yQX}1q;B!JP=opehgtxi z0FVj5b_D=50}h`f=%!pON8*z~3}dQt$H;vu+4Fw+E$T|L+fn5<62=YSP3EK}604Sf z=VkM}G$p~O*InH5I!x(jJ^L6t&(R`FwEzwP0)YJrz#=kuAD{tQ)x6W$lXaQH$sciYu&%Gb zmhyM*&Dup!)zn={ZlJ(iF%N$VGVS#Q5c`GpecdnIV|v!CEz?CX)W>Jxe!Ha%NS74p zZUm~`jM6?^|;gc|Za+jH&v^o%q)P==z5D zBT;cmF=BA}+}12Nm9hhH5l_n~!kf05`$Tl7UVu zk=K+Y!XpUi644ynmyq`F42a2QGTg}g2Qz*kT$RT!g)(2WBx+9MtlreoT{ret<%IR3 z;B~7)GB5BJo&?>@yN^$9=JWH>mgVkwBn|H`dxJWgVSK3lg<1dy00F>t1t6Cj0BU1r z<-MrzE6)fmJpaXp9F2D;>&WlAz}>0?1lY zqZ+rWp22=BmZP;NOdwo%ro>A=C+|zb>$beNbq7SXWmJTMra$AaDdSp zfW&nM1ey_~bs(?Hr^uzyvX_72C+}UwPnPYy=6PyZYVu|ufvPGQIi-pNljBePWC$qC zz|Sb=o#rdk)K8zoBfqw_Q0+GVC^&YW9$xYjdS{XVdia_&6%!F@Xw0pn3NLx+*fR42 z*Iw!-ccXR`4MM1d^VIRO9_A-e~BCt4>w;HjL65 zl5eNc+64|B(ggKQmQ3QKJdnL!YYvAb+w)u}eJN7} zUfCOdx+nE3&F2MXSylRrz#-?J%rO`Nv=OTUKAf&Er#^@U47GMYoWfe~9IWyCa>gwd zJf-preyv~V?S)=(34rekz`G~lQ!Q2sJkm4z(z`^L8gepEC{Z&`3yFU(KW*qX`<(Q+ zh!H4sa6)JmPm_2JKsw(n6}0_4dpzFtk)7quNMmF+P^2DGEL|JYO(pCZI~V~t_Qv*h zw^%TRDY+G-$H{R1PEB1!y_fK*-{W9CVgX$i>dqw80{Gr0WN-8C6@VQt0O;FdbgXpr ztrEqLc5=KgDP21F(+2ICip|0s(_gF$88riK61>TM=WCCz0mx}k@3qPtABL`=-B(rL z@_I2sjiIpQnAWtn{S;Zq-ycQ*iz;6&x!G^igedo^X}wI;wB#qwU;zP0b}3$4DU6b) zKS0i1d z<@pBnFVKNKyr;{;qZO>DQ{R1?6q%Hu_7`da8~_A>z!d8|N13nOtB>OKUgC{<5py zULrfKTCiapg9g^@F;E6d8^RNGn-Q)eflrJ@+G7eGyN}h1xpM9rB@|G8E{57)s0DBU z5CDQ#0BT+UK)2+K;)@Py@K)HqzU)VFZV_OX8-H^aD#;$meXnqd2o)$cZvNmX;-~aA z0Kwz~m9+41Nx`>jn_@x2$)t*jKk2Q#Moyeq9D3%0U_IF?QqFjTsFrc^Q@IgO^gHP# zoTd`#QIQu9hxGD~>i7rxq4pPQ0UQ7Xz`ZK~$7tYposww!1xc9P<0`kXW)}2RYX!u?h z$spQeKi_CLKG%&Rb|n^rO}oPax@u)+Fz&zZ~zbhLJ$B7 z!ZiR;&=bnkvx*7tb+lmYU}Uc!%i;|&2_}WX1h%C&%=Ahaf%Z;pVZoJ!1lJQ_xz9s9 z2QhuQ#5fxJuv?6ZtIwK4Q(qc2D)3#a2$O>fi~u;@LT#th^@p5yOttF>+n-D}vMJUk z3?pf*=&ApXwC6`ZZsiR zpv18GAwC@Dzorq+8AE*x)Xfu zsIrLD7Po?~$zIwXf14*jlHp00wxT7e>*dC#6iY8T4rluD9L2tVoB^(bS6S{$sps-G zzy+q-+CdB$0hBmR%y6aFpcYzD`;rtiG*t2$%oUqST-LY^tt`aOj)DHy8mtbs%_iK04q>kH=WtEb_>*D)13*|g z8qq&uu{}#!-05k+L8Gh|cUi1x5xWoPBFVIqf5Za`XK*Y0?yB=&15gD45jgKSC$Kz- z2l>l53_LQL_N9>h*_7%&O&~k09SS3WUghk@ir4RMSA>tq<|Wkj8p+~kUf4&yr9%m3 z@iM(AgZc!AS^%E_kO?3T0icB21^_v%RV<`WWe?a0D7_f(>UuJ!x}{=jqlh5<^Jcpz z^-V;e_K9fz;G1F6YXB4(elEkeB^AxT^%HUBiemU~Q920c<@Yy%i(_yPaizuQpX@e&+%WBB1scY5^Po1c1a90PV*BP*e-Q3w5tp zI3lsH;CU?d&9nJepE(PskB}(1g$0@&!?eIf^c;5ll zlTSQZt|!29wXn2{$5QuQPANk6(7G0*bFp0-#9v`IB=;&F8*+!h2mp)DLw1_8s#R(e zKfL)J4$@**A?uT^XIg~^A8F`w73rb&7is|<00e;46@Zxo0La%pB?j$|A?^n4)4Ojz zy9W+Lw4!rnR;Fr#M5fA#Mc09nwDUdgy#?sk0G?I`N(L6~3Tm0&DPef_@iSXP6p4?; zMaMHj8e4S2Jr@`O*ymJy_D}V036n1qvrBYh>!x~MrMwfU#dBlBaPR4BDyaR1S^x(C z0U!+lpiI3907X9o=Df5$q(jBxIiY)#-z_Xqv@_J|hZG;euW^(%&j(Z(V40LeCZz%c zxQw6NFhe(bu@syp9Q=y)ZJ(a^1S(zUgVhGlnQkWXt_%em7y*>={BAvew}!ENAQI_= zq3&{vx>Y9D;s?7b8K)HYX6YD6gDA3|+C6+~ktvj!nu0z%L2gVmw&&CU)==%-T(eIF8?mn z2$#8+f9{E2{(Jrw-T?pL`tSQEe$wy1#$#T-3Xll^fNTE7Pbym=fTFwX1` zDp`#3UVs{VHKOZn+kWyd?IGzZKH3KQrr%{vMVGPt6F+(Xe=B}+c;?kDGi^Rc62*y+ z??t*q79^()5{$y^)2C$k_<+THAoP`YMEu)p;WpMDI>Wu0o6BfsZ_{KR04;lz-&4A{ zPhB0EtZ&INRJE(0pL@?r6L<3ZiRsDPS+1Xh{%KrE6hSFtc`$;!K~)RLY_j*tPx?6J zK1W%z4?@_T-+X>SuG+01!x09AI&h#Cz$X%9B0c;I65y{~AOHZ3cs?Zh9VAltggt-{1QLYt;QA*)qP zVAOsl{R>pWEBxpgi~w%4fPhS2hTnu0t`t?-b)bKXEc#7r@3UO;OA)4XY$uRAR+Qn z&#T*CK3?yW5DVOwACu^iUia_~VnuG|uyCZJ`FuEa(865rUis<^tnrhP!Y4*38Ku>% z+oGig>}Ngz)E1;xo-BXkr|6i!wZ%K2KEa_Dz$XA?0?0uCsPOy(fDppj8a9Xd^B?fD zJh)NQr=HRHEFyN_g{;^7mjCT)%wr(CD^^;ttAyV*0RH>wVJ1(r?*_a%!bORCbtZ6Q zD>!kpxd$mFP)7y8J`dvrh(nNDzTuh8*~g^Z8nQnY>Axf5hcdqj8tq^TblMPk1+~9W z3*Z1C0OYR#xCH?~4HVBGXi}+rcD0YmXcj`clHpAfL&i=980L1o8Ge<}2 zB)$fqvTOa6WD(Eq&D=99!Q&rF4h!ZXdygvD>4rK2qJV5UFap42!a@@=J9Y$dH;%9} zYd`JGTwvaDP~iK*Bc!Eia0h-hX7JShA8(gSfIs*VJP_ZWjEK9Ar|KGjqCUP~-r_73C_{cgpwD}p$tdf~ z`+@AwJBE`_EIr~r!3e;$gD?e`M;s5YNl5Bc&Sf#tV z{zXvhMKX3Y7IYTu1*h)pW#DP6Xf|efDJrkfu%I^>Mft*dZL~S`PUf(&x2yas+njkx zSX+COE8Ve3_EM(p9ybedi&vrc7is|<00e*%1c0jaG5|C|i7z?y-UK~E`QS8zOPclw zMRTnX_*622Hsm(7LnsQ6buPX#>mJj;%VU}brAcyU@<$kxarstJ7R;a^VC*eL9iYsg zF_+!`ndb=O1i-$z(fk4{&W6?mWDRSH4vFVq4!00;o( zD*z$u0MN=p!5w+J!?~7G17-5bgk)ze`p2KtUz(Qq5UW1~g{lD`k@nbCq`wNeUILuA zyoneyer33#<+>2ik_9eQd<^uzt;za^o^sjiW+^g^04^{jU1O+cgrA3fdC*7jGwkV^ z4-IzLaY+aI%Cdp;Q#Yvng<1dy00E$K1z`9#0Q5dWFPmI{))Qa)u(JOQbeh@JE%MA0 z)VNT+`ml%VW-ie6PE*z~$zVGez-9a-btPZaIg87ukDZyVM`aV=iPH^m^XeKkT{jHq zfyH~UULbe0W)9%yTQ03Aqn8p8@>n5-A%#wjVCUHB#}t=4;W0jll4;<{9a{n51exdf zu2>7YjKIuOT$Vqv&x*axFySpYR<3c2cV+<&Al(Ssa>=f zLvR2P0IGih_}|dm@K+;H1Awwje4Ss_gd8u%zn{$8zZDo&YT&0ahga<4d(?Pm!VV8e zHni8hr6c|~ep2{9i=Wh6Ma5EC(d=O=1=8t&iw@brM) z)zMU~s?_w#5#e?AKipr1LBk9S!b zO=qSpEDugHR0n*ZLfZ*3z>&pd@41fwdijXR$}V^itxDMIH2AKr*xmTNq|X+rI(Abe zbqcnaRaeJ8yL95Q=@PAf6}gB_$I_yukqrXR=%qf=XgzkAmAMy12II_&MtDk>*-`edAYf(F`=3&)R6|Y08So4UJWwy)bz>#pwGYTeQ0k5IGT)% zHDk>H4VD|!T zE_sk>D+j5TW!^4DO2}DA-6e+FU#JCe01yBgR{)m#03g>nyfVg%c_fW3fg5Lq;*??j zt3;dF!DqKdebXrUum=*RX|!J2;O zsdnqt!!yp@5FG)i{e@Zp2LJ(}bp^oD5CB>xPP0{|XQ}WYBPx|sQC(cRfyYd^8-!pq zABsMYa9{>BV?nPqrE~s$y#$ohzxjl})W>{Jm#2-(Xf;;EO;^RnBvVR{Wr6jcnBqMc z0qi#TY(Lj6mZ97t40Rrs(` zZT7<@x8!p_XH(~WwRIJ?RgJo!?mnsZ`EroRkSvyfM}E4J%6U0`+1yH zN^$4S{+)}18B_6EL4jw;t~GwP9JR**Hn z;{fuu<<5@s=^|YNnEDtbc}t5`-AiKpJ;70LX=m*B2m9|yBPwFTwLEl|7GVUCpN+SB z!`A#TV4?NRIC*>3S5ogWlL=un;U9x<48JBML+vlr0yqE&09^N!yOPwz1j*TvQF63(fSlua2o8Rd65&8<73Iiw@ zv^rMOMUFJT3VRqK&h*Dh!3cnZ?tz4WGj6wxm)p9tY5-=2#<6K6_Z$7{Ga3@pPe<^V zf&U9D00h9JD*(V%04VZJ7D{8Z`7Gjd_MchO2>eXAxFep;`|+R_&Fo;D6cwOI&u`8o zN@^e&z-9boQ8KGGNpVg&Xv_X*K2vps%1B(ImP(l99(5-WHy{nxx4&qu9e2)INp<%V zem*5T1Ze{0%I#WWQ9md1J+2Br{(qO8pNp;~l6=`6Q zWh)jlJbn^7k;{Dmy}tnd#7}Ar>i|GHUf+2TJc?A*nBQ~RF;JD(3C# z6IJIsE-z0Zu`z;97hf~7K5IRXasvklsrFVnC0!6|sQ&bPBAgO@n&jn?e(_3#ZE4L*zt%HC{soEB1WFACJPnN`zWOW2d;0Xq0reYAcOGx%%v=LV8*-qFm6O1E#>W`Gn8CH)K^OAbK6WB* zZ%F!Ea+Y2ei~v4W;?IGQwbIoa?@YZQnyLLr6(Wuq@}Akh%8zs-)6X4*+RP`!dbH(mE(>)DG_HoKHQOA_-0D->I;v955x=LlgtvzT2NYH&pfSU8m=D zPxp*@%JpbE%(M)i3kq*YoGDD*@vJ@kRBU31iDd*M0EbUsi`x&xBGTzJZw+9exs%w^ z_GsOc%~LZ~OshihGlJS*s0DBU5CD%M0JL~S0ibvuI#y(~IAI`x=qa<6d{CSy`MkFa z7EYRDdU^&yu{`ieDA8=bKorIG1b8OLbq_1-Ts9B8HrR2u?7>FUpj0|FZ}k@Hi4;Ej zDHV(We$K5;laKWk?E87(SG(-{6srQdnalZ@jdoemjFw}qq4pPQ0UQ7XfbkW87bXCZ z%MoSx*W}>6Ai4`aTMi%9;5C!?WlkeJ#25FSe&S2=0@bm}_7fio{5#=#bJ{7l!T=$# zY+&;B82k4SA3}ue8!g}5Ow*N6L^^thU<7bs?yWx2J@V{xmv_2p<-vQ2dL!ZPGhrQv zAK&U?abvon_7`da8~_A>$rXTB5cquC6jn^Fq=WwVi)hrNop>jS`qei~15t};3(Kag zy$QYnu`6k}9T4T!uP4Cad!w6HhuFlJ<|{b?_l#%A7W=OiURS(}iD&#{1CY3jd=<;X*+bGWIy&F*b3$*|a00O`i0zmub1psvRV?nAQ z=lAyToY>1Ogf{nWqD(S?CTT}AyJUs1sc;NX%s2Widq%L$HGtX<31kA-r6oL8XC?q0 z2DhFgSAh)2n|z0a*#N45`>=+=c;UEI`h9(A&^Fr}E=tq*10`D;RRaNJ*7o9|7 zSQ*Je>7NO389(`6{PA>FaN(G>i<`G);cnbB_cDbd(}1n_JL4wLL&+&%Tmr0u%eA9x zbKF%0@#FZvJop-V3w@6^y@klTYe<@8jrc1_K&(R{+<+H<@Z;DnBSS?yBf0Xas^T-x zwVV=?X}0xQc>E*+)a~++qxoL|f8!^$69~X>J==H?Z4!tk(&>3C5TRI<9`h%TpzYzJ zkKKOjb@G|}B7pZNhZaK+m zkRR{b`v@S~Pc(fSZq1k1%Z)eT>o<(dErnm3%*Ra4^f=;#o#J%U2)%Tt<*L}2od{tB zU^a;q=8wuvQ_na122DU3SFx{UmflRv=4<);0@359HK?lz)B^Z&16gh?AOLh2vH+mI z|A)Q1j*6;%7l%)Ghk$g0Qi61MN(j;+jdXVmAq-v8C?g;(5`svBG?D^}l1fRZG`y$- z&-tG7{??o|zvr*_oxPSYGy7t|b$#Z#_uRAhbsue$;ZjBqfi#MrFo*<*?k9u%DO(v>V90h5=fL9&|-}6koS0t$8#$ zp#(rpDTu8Y*X4=FlO6P;`QbQ7npng1t+-S|sB@M=P_Yuk{6Y+X0RRKAx(48o3IN6O zE?snre`l)}jc3wD5_feS3B16k%|?R1y+5#gCVC4f-1d4{I(^Lk2EhA+F(Y+RN>A}x z0}yg<+>_Ya9uuhtw7m$2r8P=1@ySpE=-EP`6==6ku8iKp3f@%zsMytIww5^6&;VHW z{82fO3NgPB17HBa0IaV8)D!_gx|;YJ#kg@jBd;aH$Gi(|I=#8gjgT0*7Iygh#=caR z0`1C%N%l9~{^>rL*w}~IIrIWQ+=#S%^jCQwLCpzH*bixxvBH3l{fiZEp#hAA@ry8Jt4 zu{MkR%LOsN z5CdQUzyO|r0qDpvT`hXUqkZ5#QEa6B5;e1Di}fQbLv&M}j0XOpjv4}uO0P7K=9yZe zp-GA8%@E*0S)uBrM=2liyzkRY_OFJ5F=GYgVZR=pdY_FaB=?{_(NV0}N{lh(r`d-A z;p5>%;oP`47KBR^wn7xE+(tG`y8aOJ3o!r&01UwP8bDkU0MxHbL5Wt@vy+b`JYNbB zVIeKeJ-B;$`2rqIx;r?&GajfU&xn1Qb<%$WK;wm~B+AQ1Y>-Z3APK{(j?=!|-{*%M zLMU{qLf@^K3PCvppptMS$`A2z6;sa7Y$0+8jU$H;krzJHyVyR}CUF%NfS6y10Wbhy z0Cv{^K2rcdf@|Xb$WfF7asey%PZI=2_O>xAz9wO#l`35BCPdA71DR2W?HmS}-ERPF z5?E5?@mEXH%(TI+6}%5i*GtDTk8!~vS=GS$_Q{zXN&rZB=7q;D_1G3n-{17wRtCtU zz4PRoIxn;chP#kh;EscsUx)!P0AK+2U;w(*9RQH0q=7}AGe4QrcBX#%Yg=E6%d_cU zwOmqf-BdIEE^^0#%0d+GO-@yqR{;LDpL|gNC8!HM<%<>fL*WcPUF07KgZGBU%`Hef ze^K{wGW>uN06#Y-+bU`l`xt7Jg8zhXskjttQZIIIRq>4K%xgsL_n=t?MkQt?cDpU$ z!)R(kN(NOm%b(U|I&MikaJM}ZW<5cT>lARCyR+nEo+0OKYY4F{uaO+ag{V>O^tl=n z2A9tMJAl7^9O3@U27ctfHf+4!d)yZEX9dOke@_#=1yK&@o z!^pq8;o;D3o);W1@h1fQm)tzb&0qHS&$)h<|M@%MuXg?UssDIhiN6y;4q$ zQr9L50J5%2$1qTO)B{)8pNm0r{?_kgvnSddIY&Xa+k8SXnGHz)L@$B9pxy3w`$@5X zr~PCk2!xc!Yp^oG=(lCe)CI>trn$JyJwLpoA{IqU=5X(p7f3{xY~>OCK*&LAu_Ujp z!ex9H-$Qop*2yi#bhYRgbczArj+@3ODWYM9%YN1i2{JJ4-boqmmALx;b#>E%B zk9IR8VcspNNX%j7&cvb>s`OpMj{vmm^q{Q+ov@Lr$WVx&otWzSic?$0usV+W8M`Q? zVsm$FX*^!Ix8>)~g6PMRSsGi2`Gpt&0{|Y9oUQ?!IA0x<-kP+RpIIv^x%V(mLza$& z1i!Hfx6b!xOCWPZ>NE`oQ0WKlkx*h#^$h?nziv07n(cA)b7DC82$66UuN}!P#~M?2 zcodA}74-htCUTx*__?Rk>=owe@MGP2I7Oi(eDLjX~7fp9?@XJrdeMUSQ)p_89} zdWgMe&G;75!O>Go3sQ*rg%|(>00!W44IpL^019*!`}BGc!-CRv+K59uKf6tQH8E^e zKQ~oCN*e1hCmk5X6&9<$MVEd9z@#ORw8w+7Hv1DV%i2ZI?R?{p(XJcsI@L-Z+p1_; zu0aVvBbbQv&G*&Rl<(CUYeS4VLR=ukCi=H+gvjBAkzBXQA?6oi01N;afa^7Yi8}yL zjD8=ys?Bg7+&gRGWU*SBs|D_I0-Z{65QgZK%D&hj0~ve+$81kkOKt#sdD2>^TH1Wl ziGSJ}v|RRW3cvC>w|RB^MoQV_flVB=6I1%ry2|(O4JW%&DbHrT4aT2xHqMLb3R%m0 zYl|wsoGT46zYqgp0Kfp;zyS2A^8ujEnP7AgYEWn25H62JI( zeJT3{H2ForMT>2VdIMm5Al%|9%MM!%m&O;ktrx8R3skFV#yHVarhqq~m~~qyE5KZa z;`g3=H1YbAcssUb4bFPe4FKtSv*%|V+MI1W6<>Q`g4Ixc@V(fUByhiad&DFoSO+i}LOLFX6&OQ1(n zP>Nr5p27`)cs2pv)X(DGiVko5SwJ%+Y0}R2)9vvtw~iZhaFb)|p#(7P)Q~sVXVDse zC=*IVM`F_P<}nSCsiI2BkK0C%N=cd_<`-fB3;-B_=QV({E&xazS%HlF!vVV)U}7&( zl7yaDc|YD-om+`dzVE)fxT-XeRl1_p`GfAs6@b6(Cm+vf-TU~wd3CvRZdSG^f-ZOA z^83YrmnQ?rh7_USI~+;?AJYb)ABw37Ux2LT`y=g3gk>U z+*CKaE8{qf#vzCUQ_+&9x}mE&2%q3Gj)(VH(m8Oc zx_-7&?Q_u+^psi{05AZrKLA4E_3wrn$kknaK-tDIc+>^(3u4x}!(4-8St}o!F>aSS zGCGhyK%aTxmoMg)YmhXv6yw0TRb|%~*1O3urC-pHF@`W#T0lmn>$+2BZ7wHpS^*IB%urp4W1*0b*un?mof0Pe4Y-VR9vK&%~9i9b@1I@s>tEv*1X zNN)Oz-Y?~$wr23>+9O(-Jing%{EXO2Yrq?5-bu&cf!t6Wd3C8+Xb4#bQ(vzet_gED zCzRwx(dK>NHDl~zKNEB9sV|DKUbeM(el&bR|BOexbRGZd;`kM667r9a3NAxsmy%kK z91Rra$TRF;x5Aro*8DJkOA9doMjlMw8(i}Y5_$ljw5&-+uf%AqSkv2BYOP$s_67Vq z$j2=A(B_Zs+lE&70%-{cIXX$W4sQlMLta5*?!3eqVc!FiMWxnb?jzbw4Xcr10qUo5 zqGnZAPy#T5lagoE(|uIQ0smqfkrs>O-ME;zF%gBQKz7VM&S`as`Gpt&0{{l#a}D6@ zF8~N5;C@e^^-B*VwXPpYQZZ-g2^hPSEBxPVdh-R{?Q4sG@GQF=`121vZUEHmIF1+} z<feA#%k}WaljxfAH(o9XQ|M(^$TN> zTf+N>O2s&v4T$-L7yttR2H*<@V8|#10J##3KN)@%o@9S$T;4L;$92e#l4Z@m9**g< z(nsu|k`Clf95WOjY)iWVP_FJL(Q`yzpOXIa$ z9lpN|U3VOYwD=Hil`n;dJ|>-xD~zFN!-}X21De5&O?LXaBHsY0si%H`z?*=f^J#-o zo}C0EOBb8-Hqp;Go!QdnODqC$C;{;47ZrzkZN7Lj)xhXp?i^CyssI3 z&*=bSejx_H0DuAbUjwMW4*X!<>Mv>twL(gn5c3N$ z00saIAn+Q1+6w?kVm6*u^71}^f77Tx07YbVecCBe zhHff=qGSq(R82)XTN}+s)$F&6wpy9b_nSq(Bi?S1jj_lB!H z3H(>0jp8d}1jajrHnj(;+}f=n<`-fB3;-BF&^3Te006`%(6u6XcF3N6*N!I;tyVHl z=;O8{YJ+nA@gpHNHI}ZUB&u3w=gl*Eiv)M}Xh2e|aYS$XE>}f=yPA zLKf+*XhsZ_0C>JFKG@1{=F7Jha^9k+v)m)0L*gz`OBlUR&=W9c4LdIz?qAsco&yEA z2C#Sq0QFOA?l+nZK6!Lhucv`P!T{gJmA%QYe53OyBt|o2Z-6pIiGFZ{n1ALzt&ibP zL5SoF)6RDT-iGm}Q_d8V_*n6I&&WK;NJPan`MI0SGX^DqHD`hj;PymwD%0Uudj2hs zcnQ>t?$@e{wJPr9ozq0!pi$dh<~mBgT>v0x*SyMI%d0kIxBrWJBtkD?s_{iCF|7S0 zWFdb61pfi>yZxjw*VQ0Ejc}My8GMhf#E9mC91&3KC!Fg}rpP@b@UBySP$&HaXnYb= zrhzP)^t=6}#C7}0t}VtAyQr>J?XGrb?6J^0TL|~uez%{D0;RQK%0DTvBvUquo^vS7 zGh@~HRoVN}X^{A=u_`%(ybnZU{76Asf3}rNmtkwo1uGN5GC-BCiEV(BY*qao{I1FM zl%t=A(k#kZD~fT~(I*9eLzDZax)bvDy53dTfboKO!XhZ8Z518S+q^wDtl>$Gvl4$$ z@tvu>zego9eU^@l&~@b&Y{eVMjvz<;l@{_x8X(lz@9Jn%bl^^v$J-htVvl5v*9erq zRHu;rXfTqJ%8*&*qOD|ofQ~|+IlJwSd2Ys7Wn0=Q)iJQ{gOJk;IpQyX z&}#tQSMN7_%!`g56o+_(+}d?#-U_2&eDFy?giz8NIH^n-lay5p^mmCTX8B0LdjnuI zc=4P--q|GnZgMN;DLOrae|bACTs^BvGwBcdxG89-97$K;yO>(wL=ZBA&9N-!WT(s@ zI?!&)zp0?F_ZBfsybtkU5@G=CXcK(283qPmLU1+Xq&zyXE<+K8wO`F^N$8>dhRc|U zzmCb3a#`@ldSx(&HPAGP7{_n8pza31d#ynu)Gu{Lw|_~KcOuC5Z_eFTL`Mo}1dhK1 zYW?CEf^rDx-76;gLN-OL^C2%6p9sB>-=}Fk-Lak@mny&}xisN?%)r_G&a1 z;P@pq>E)aC9oU>R+`q8>9Rk9y0Tf?->g01OSXxCTNdEd;h2{t0+&39dDdV$;jJNk$ zie`M2^4NfQO1?i;<*?t~Q~(dRz^t<=9gXP`{|HNL8f&Z;>CGB*-+Ar};~4^GF=$u3 z(TZX%8lQGPl!@;YkWY(JutgcLZpj}D&JTCTy%fc|3-JXGF#uKpz!f0k8oFjaF!#vG#&%dH3}XhPgTa=0La3Z`6d>W*+eBT zFX!S*sbMjU*3xr#pv}*F^n~J9kr|W~;QQA;IklGKF5!Xd`Hu;>5xzl;{(!nOwsfv; zBn?SI3yArJ7yttR1^@&Dcr1B!qRo!$QBKQdC?e0&`$znFOd%DDDZ1mlpzp4SC?;(Z zDz-q47)ks!Ch7+_04&bwJQw}@m_Tcbp)B9)SCJkqREgg{o14ND1Wt99-*!i&|%L(DJ402lx;fXHhAu~%o?Ws_9L=4+02 zRd1n`{HQ~S)(^N{L&!{+t!5dG8-uvT1+;qD+QO9QvwH&|ouaaeD_Kf)N3N9-r(I^U zi06?Tl~+^LHmBv?s(x>1I}mG^b`y?c^qzfBD_S@&ACO@qUz9dS>6YWC2=JdRzV{kp zejx_H0Du8RT?3fBI^R|V0X5_`569?Hw%y_UxaC-p+p)*wTri~^E>%gE_JskEQIh+q zJiE)%6@b6(CtVOngsAl}bCBx@ORHk0V+hY(A=F{NS-8WU5|f485Mgxr2I5@au&)bH%55;9L!rw}IvOm0TvOF5}Vqa`c( z_`d0D>kdd-gAAU<(wt8HHM(+nz>{BT8tu;kF2%*O^?NhTPopcZXC0gK28q*F+DT7- zJZO|)YK)|Mk?M6)sq)#*I3iz#8pjh#Y?obgjvX#I#Cz6{_E{YCk~1&0u$RKkm8vh3 z29TtYP#_i)hyk!_1FkkP;A&&)dUbt|eR^He>3GIWdVq$A%DPR1uKY_~tB0tCi=EtT zDO#RzKr&z?2y2$&`OR=cc=m3{S=!)29qv->|?hq~eocNFY?7F9}@$?=cd=Y0eks-2f28cD}Hh+mOHPNTqaq zKTmIMB2*SI$Gi~h^Uy_7X59wL3eY(kQ<7`&_*wNkR)NHLglNvim@;jIi>eIw$!z># z({_mYg%|(>00s~T24IGHb&c<*_Z+s71z(QW1RvtQO`&}6&u>3Zjo?r^1CNV+OMWyS zh&&-fn3jh2&zu7$rsiQBz0zs*ypMJ=YFUfgPZC{ITjbb&fkzlv?+dh{1hC(^-xkz| zj;b~6Upd>V5gDlcptPUgxosMQq0uyJVFY4+AqKzzfC0o`1JJ#?%HQd@+EFOP>2b9l zEuy|z6*qo4d*lAPEbf8+M57!k+b$44`Teu=Bietu4+a+=9OgMaaIif8$>JfoFyX-I z)>yHdqQ+!T|5Nac9$Ele6BqNx_X`ajj+-RWgU{-v;x*zzycbO>4}}ue&G=zwxxoDk z+usAuglhn=uKIlN(@VW+sxSjqi)juZq8(UXdK-T^RJwRtI~v{hlvN!KNSYM>OzW}p z?~@$hFOK1lK?%ziGphnYj;+rW2bkWECq>a6iPr#juR8rmKCdAG*$K8IIovBV zt9*=F_p#W_2}xM6%dvNlmK!b%7zZ}*wUp9mtLs6UYo*tNlF?{GlRlNc^5O!%DNw7g@+gb z8v?)plE47W#jhHV5u@x6Csg*}34i4zI~B6sSA3@I@R9fz`f}A}j*A7KBhZA7zqvVH zo8$(-CC3@FBs%|e}DA+xBcX- zoPyw-Zqx&fxFME&r{>&= z+t?tokx~rCxS35!wQo;bgZ^I)PhgvXSH6hNTqOfy1dPh=`Z<;dv_!%W) z`vO7t)YOa^HsiZn=NCdi)-4>X!jGaMzuQkr{X6X^qd>*0eseCSpY2Jl=x3R%HQrs! z9%^U_^QrtAJv>JECQuA=iahsP;k&esoktygaxU$&gal{Be2hu?x?f1ehKAQ$Q7&P0yO zl4%wYT2H<)wTdK24?7v=%FzGy_7`Mo7~txe0HGEhS3S|!u@p`8buLzvXX}Ut9g9?t zd6N!{M_&Uu>9QuPr-5id;^Vw0i$izxZ;nZr3^w{_3b5E|1sme)QVM87GOYGlF^uJ( zGQ5vyzL>TO87`WAoYEGTBGCIpEm%^ z_8!pQga0sAmfZc+=({+GAUjt(=TUKF&@tgo4XLCflodeCSmK_hD=+$tCY^q#Q<@;+ zmY?VO%Hy+6-x}sD*17Kx^9wNm1^^5o9Spz{?`mBX-&)U%((NaT$9JT~#aO?*$QB1oE7Wx`{qhez8V!OXWc))fat3e|8Co`Gpt&0{{k)aSg!u zYGtJJAr-1@ijJb&MA!i#h32-wB0I9E;vTcAh_)kSUM5CBgUlR@=RA8KZUFd2is;Wq z=U#X$SMk~()u5f(!;cqEV*D&8@7dUYnM?&`1#tHYDl3>2^h^G_JeI5?0i-THT+VqC%m#JkhAMa_jKH4W>g!lr77yzpP;0lm+ z4dCQzb;PXV3~4Ot&fF#*kGa$5w)s>SF2cUAL+0-BtqtKxsa^nYe@?0_uKtj70{}CQ z(O6(;t%d#ZP|#_L6m$AnRP}Si_V;31TGqSrk3^sZpn}4h-J_us`c$wJp0CReICfzb z+xt-XVG?Q5cWfs|Lx}l>7yttR29ON~V5NAq5bOJ`e3qA#q)z)^aYh|ML)<#-$b}I- z*~z{i?u%ZemlFf=kPnq2$x;n&0ALv7bzas?*l^VBHrqONPex zDg;UZr9>VnZKoszakdR8}VIm}H&UIzp;+)c*Zb>e9 zK;?67a`Iw-D5uEA#+kUAb-=W^pgn~$lmN~+*Gf>raR5Qpn+H#qD#R9}MnBj}%IrH^ z5Noa|F2d#ku7>UZ>+SC`z>6@z)iVJ?troA=W8W+(xwBUA2Km0muEd)d;#Z<`uSpRD zdLjw?_4fTb4OxLm>b%cm?@;|YA9DK`{tVk#8y@*@^O-9 z<%iLaUE}>w0>}u&-#?b-B+K3@T|`@GEoC+vj!B}+aI?OK8I{7fLvJks|)1H)eE+fi@X z5-u@TzK4bZwn=1KJ|UTrAf5E4Dr-JuL$;REhjHJ91bBnE18Q-XZr_h`on1ByL;*2o zeTdBoS^e~rkaAc|yq}sT-+%iSJCXG>xsR9}!F7GtbDy^eb<9)_w=veOBWQ*%K6~p+ z`4an8tNN#VQ|qm=X+e7t0DreBzdfMAyQTQO^!{+>rsHG|r6r$i)A=!xt(%}=B*ZZd zVgPK=0}pzjKjZ`l!orn`sGjkt~}lit;PWDjM{o8KT*b3L|K zkeMjDt?ASrlPMjd3;%qiVEd?UJAH&1HuVL$qCt-MTk~FC0~i$pfZAgtT$sf9`pweU zSF|OGhL~LoFSYbPI1eOBCj7`=R|iT8RVgv^b@bi<*yF<($LhQHmSRFo10{fzBOXV#?sBZUs};9OdpvLDXHhaON+btIBflw$*H=2sy-+2Iu7BPao2P^`Q=7sj{@w$q$I zV`$`N&{=6MJ(*{uP9AJ&VXI$&m|utiFaTfxdDj4(wE&>hIKa1fLu>e8oL4rK;%^w* zFu6IlU&^)W`t;2^ONR#lZ;dRSP({sd-T)9B@GLS?{#=T?=`wxj!lIAgAbR$p(#+U5 z&XEDDMffF@09r1xL&U}xdR_}I-(^kw?q{jr6M;ty#9bM+LwPVKoCX@h-B<2%NO!f;Zaa*pg2L3>ZBvop; zYUsA?T}oQ=Fn@CEHf_33nP^ z^g_b&nDAHb8qoDa{N`&wX!Z>NWzOscb^n!+@4owt^_;z|!kTO>DQBIk_&s+nMd>u7 zpaifTW=buq)WO6o+!5GNw(+?>=1YaFw^W`r8?`OG{ii61`Gpt&0{{k4a1Fp%8vsH+ z=(XO*GMIft!54svBZ^4jqk59WEF{kpD%buMy<7~4-@H*C>@pK{1HeX0G1Lj+26LmB}??Y2VNupXjj-Xu=n)m?~C6P=dL2%)DbG%I4B85+jwyV5t#avxq zH-nl#2x5LA2EYJ-0Tf;Xc)bDuxzss+#X_i}MOZ@s~o#|q(vP>p0x+Bs)^&;psWCCA8)I2 zA6LA=Zz>qEzca1>yxTBlCcTM6(3kMYQ2MeSVtye8zyN>&6kP*2PX~Y~rUf(^! zuYG>UQf}kHC0>=;!CFf?5%%NT@5Gy9fEt)h%XVQ4V^;tWtbVtjoE6y$o6?kS-}<<+ zJ#g?MgN0-GA{If&jL2$w^_R_e1SkQV9tZYvwQwv9XXG$E=fZpecv$+@DR}L3#lF$?(a8nmAnE z4VR0d!v{I3A%j@m03P{G0^iLu+u?5EQ+Z`S-)}!e;=}P$8uYGb9J3rbIROa9)js&r zX@SpE@1=e-X+j_{6q5}vbm1}2g7)oZXGuV)A)TkrVd@vk>PJUIfMRl_Fsc6jRV|S3 z_;NTe#6kiw09I+hm8Jw-X>6ZA1c0dMIUS$Y?(Fi`lSLnVyo|EZNf4O8cFJad6^g2M zvg`&7_(^6uae!rYGt`i1j;Z&YXMB3ia44Rat4{Dj4WEF#M*lfV4~?e!VLG&(r{wwK zC0?H-y~}K-j=8t3E}%K$g^&}z{(6yD{z>4$_h^Xug%|(>00vNc4Pe9Y>MGFXS8+ez z`xMM)mqyFxp~y8>nxvK6XY{5eK5O2yW7Psm4ALS#G>Tro0r22KXhYwwpMi1zog$ai zWpk@nHp{vG`{wn2Y~S&_1)yE==ve@P2ezT#o`SA>6c@>Zb6ys|$~$TycC9qQv)bNL zWDxTUF#rYt44@1Qz)my_0Alu#Ds?6BhPT_3!A}0+LbOC!Wo9E_d}h}8hTQ;zlM(2Z z%FM|da?X7NfFVbm!s`x;kvSLPPUfuj$Cq$2ZZ6Fc-G;a??h(tYMMHV4LD?;UT~{XZ z-b2&O#~i3-ZhE5V=-I`0*NgN0*HAx+Q;7M67yttR2JreCKy2UDQg>%7(&15u&)go` zDldDCnY_G|2%vaE)MvkDQsNd$8w~WNbT-GABFnu2Ag(0j_@wly9BD(a^WCp+*#)ih zUb}My2FryIAPsXHvOo#oRxNU+bYbw_N;!kfjl5wS1rMh^suhRwiC050PU0$GA?6oi z01N;aK>0O*84dub&4o23$M8~cq%e!loeR7h(Vm02sgHcnC<4|=se<`(>vB*d6#4o;p{9Vj58rTp3_b+UJ-)>f1 z0|-(FfJk&|OPucAr^$C7VPX9yr1c$v`A5yd7k2u$--u30{Cj}1>^SBH(QnvqD!|Em zz(6E#k3Z2zxN1B_kD@93>9V5W%~;?qz92q|}<9Ku`h{-T*+g;TH*VYD>6 z<(%|u&+QQdHKvE5GsG7-!~j?Y09Sy@YXHMI08kg#X$3937q91zc7C_~Oo+6l!z@?j z5(yG{S@{nueJP;W9SZZ(_m5a_0HomQEp~Cowgh~uA#iWmcPV{H8RB@KH&zaNyK`4R zm<&n)@5P2y8&U2sqv+t}o^UhATB5!sBcIowN;9~vBbR2W3^BhD17HBa0II+M9B5Vn zpdp~*bN9T!Xgt%39oINVE3uT8RRUADY4tDYI%gjd+<@fxaE6=;r@ybd{M&tU`ZQLj zg6Fj!F4}NX*Qx`xexdf;`ZiLVFd7B!KARzEPd!UFa0uml(LHK9_&HN8gl!EkorYrP z{#QrDqLqe@^G`XTSB0Vy&Y?yex%R|7YZ3J#;N@(Q_wEA1JF$TN9#sOO{8V3+1y&l22%(J|}gm@oYn5%j&fz?1LjG5Q_=K09dsF zSDUxj)u#RI>bzdUaMI2B(_-xDqU@&D+OS&M7~B(qdp7iKdzi0)rVc=CEzSDFL(=w} z;RffTN?7SU5LL}Lejr^czUEY!GhyK)-%e&c7TVM=jSeUQNPhGmdH(}vG>sW|o8a;E zyyT+$!EQ!j>Oe{?v+D6Fh7yttR22cYA;7G&`0KKy2+h+GSd?IO$pE^jn3>ZAT z^`fp;CRRf{G0=vO2peeJLGsc!S1I)dKv&s!Ur%n;n6;^IPgZ+wne=mhTNQLVA!8>? zpDn0C`3NNdvbU7s(XAi0KbnZcC1&TyoEOla3N@4sbC8*8h}#q0hL~T70Wbhy0JYZu zEW-hy3z_!!ADnTVGOfc0=xuwCrXoh17(Z~Qj$q?u?rJ!s0ntDq3bM~X{&SjJSjNZt zI~yVlxQaZl4Hwu5I+d*!Ih%uwKB?;@A$Vy++wEFz=brsfkNNn1yYVM6E;8&}#deDx zIOeu>Iu5oIeUsx5^9wNm1^^7;-8F#PBLE1&$!Aj15WsSmlrFF}FuAaaSCyXvFCxU* zvoz2XNk;=nB+w%d_q6Mu{T+49*MNVH>IVM^s|Jr z0?ehJ4>M`cmgE{Xn#b)#eh(z$kF@r&My13)%5EPIy?~fshygGFU;uSs08VH?0O;)y z&GO$5h7W#WkBdBIfGcrKeu(l~j)SQi*A)q`mh0)*)eu%O2 zfvbY3ZDvlgtFmIHLqiBqYciuJCL2lsPv2XVV;f;}Qd|^2k6gy~LP4@?A`=^F5O+*# zu9zeSLd-A302lx;fcMt`^!ct%bq{9oBI^6oJMOQGm)N@WMdJc*%MS|<`ObJT+gzM8oau%>hY~>VOPuWv zG>mVpjd|~h8e>!1bl86G6GdTv%pme3*qWt-m|utiFaTfx_16H(5CEVBb*6FF{pdR{ zUQ7>E-)CQPdD5Flq_eFfoVXzw60B$jubslhNFH!cm_f*Bg=TP}$C zg%|(>00z)-4d8qo0DAYVEMO8Ljql!4_1V+-=|xewheKs4(&tWG6v^=T-vB_DcXx(# z&c6QBfqFe$qbCGM{B0!J%_bRwCSV2FMO0lOrG?BA|C;4dAHddDeg z`<{>I z*DrsXJ^t4R0M|eH|Nbkk+CpA!G=ILr{rQ6cSGTXbRKmfLg7<(Ql=yv@=Jyxy2Dti8 z3kP@gG{0~CpSHiVj!j{JtAIbPb)Uw*~7%^naOX1VjXCHw@mN* zF_&#=CJp2@c9(xo3`BL;?(q1ZA`f=@Ou ztg&aWiq9I#ip1xq*tlA0qmz*}{>G=Q?CpcwuBRf(@$+aY2ERJiqeUR*7h(Vm0C-4h z0RwQ6YrR^B4~bVxG7UF}!CFD;(mqczzmw$l%K$GpZ#)yzhqunZ10NO>1q^0R|86_- zcTt4k*p%a{{DL!EcmCpHyy+p$4>^ z_=6P%r^}0I$*0-3^Spqh=7U=Io;BXP0nni|WQ1@OP;B2VeSc_KZJFAp9^unz$^662 z-nDwdA$TYOXs}3!B=6`_s}cL`;vmH?TevQS^uZ;pq9~*VjgxzCL(DJ402lx;fVOJ@ zYcl|lMabh)f>5cS7Nbw*OM9oZ1Gr+(JW~#J$^)P0?#C}<0^NPWGUxkK|ET~#p7ygt z+DBW@qTpp`#H3%GPgz*l5w_%p3jo>5E!JnD1VHkXyuUEDv9?kp>yitJ8?+p}cW+a3 zA}j*afjJa?!T@4^AqKzzfC03F0l11~UcD{Fl5>wgonEEvOCZk4o7>XJ&fF9Jw5E8U zE-bX5CdQUzyLm614wiSfbxx% zjYY(MSlS|4;Cy6bRjeYYI?xV_dHwn0{%%{dPbKhvr_ReZlX;^X08IS{^-Uvj?cqVb z%Ro%j#LQ=`?Y|Vr;NCOU2QL2T+lLZB25Vli0$Lqo)HAUp9<0+Xo0Iku{I`nXj!KhE zRk!DVK+G@102lx;fR1Yb3-(uM!Wb^;EH8&g#Xqw5F(V)!jP%3%+?ezW{?QhE_kL&Y z9iW)b?0&FqPR0!Yv7aGqmyU1m4f&sYkhX6nh8W`A3;`u5j zF+lsUhvCwnlrG$pBG(8g%9P~ecewF^h#_+c12}uiHvn=?MG4;&^@gUatHqq9ENwm( z#G$n-q)2L|om!pp+^B-G0z7@&6%1UUNDjm#q>_ypX;`?26U(l$=g$3bjEkQL_URY6H}018h_9@=Mq<8$x2 zTb9PSXx5)$KS`iHb@68JI|=73;CN99Wfh&4?rlq2g{1s37SYv3{#LXc0v$*;1k5J} zKKP=^Lqup}>WwD#HG9Q_pT_{n4 zj*XAMzq3mb=j?8@V?+`jVVq&+ZWj6&*h+`VW02p~N`5ti1bHC>e06lo+Oy`A7^y)*!ooF3|D0C-hiF^zn3hSYc zQI{v>#!^5FVwBhRS-a>rgI;lWik&^Kb=cVQqjd>9lFm;bW9MErcBoskHnaCNC{02M zp!TrI)Tr#0&FhKmju_+enx2lm#VnS`<3DURf@!yz)*VgL*P7(nkefTt(`5Mjvc z^r9CZPE~|T?nZ7DA@xP-6_Lr`rCLSN?A&39Vgw3A%6Hw*FXy-ca0|C>nk*BK@>YV` z3uTG78mZ=?OinsU-U~wERr(h2`cMK$3Vr3(A)8V0e!#}B!t)|R;1PY{PpR-Fc>E#K z++7FQ!Ygq9!uI#5r|%lTmnr}V?$sgQ3oYeHnVE=!MU&;@XEy#>Zzc&Rg)h<91*=JT zfILl9&dN@w*f#)%jaPM3Cm6n#$m(6*XEr}N-Q{q_Gy7R$>qT?bKBNot3i=E& zzYqgp0Kfn~UIPGF06=&Z_lttNmYpW@NHeD2VJ7XOf6K)yOxfrMArvI*0uF%;{8|{D z?IizHfGU&X5TAK;;WTrV>}-q42tx;IO}o*enW(bvTPWcyVo(AgFL{3I^0Q^-CDX@q z={m2)Z}vhWss1(;FZb3{Mcyx+L(DJ402lx;fPrfOW3~WL5KzWsT8@#nbV^qHuuD5j*!5TVC5LIY< zQ1yARW2)^glmOHuKhb2`bVpvCkE(ntLHX{v#FwQ>d-TP%{OOms8e(QPylYQ3bO;he zrN18&vj~*xoq3%R!9MXAe;jgvh9X28A<61_q9;%li1>g*dzRSopAZN;$Vf+ z07?M&H#6GMc^xth%Sna|ru%z2^ZNSfQ0GF4sH4)%;t{$bzQ7>{z$yT^0t{aR7~ukd z_~@5hGh58q@7L?e_~_QW>*!^fAKCSPsEVe(J5eF=0jL@I4mG-owde`}g7xq2lMzp_ zboUm*h6m`^esK(j@mje(sx+uPgCmK?$7(e0dH^K=1yxlvF4g=~tx{4%LrTL11@mXX zr*$T8lig9Ow+r{_K?+J9ktA%QMCtFRt zCG}I0aCBk6_%$!w^=se2H?xww)W!dPjp@AP($6I*r7>84i$;GlGnsyR(J(clVlg_P z$gw)?HNA#djt%gd@q$=MAO^rn4Y<^df=i8;uhP}~O$)Phj!m!ort?hE81_wbRTrzA zFLPdsm__)K+4~LI0v~xrs_c){h~A7fNA}q<2u82$Jk^B9UPVSYj8qGKU8I(M8a8(p z5lFlL6iNU^pC0dFf2$`A$7~MB61cAt`XXO)OCYmpIcZCWS&e7XiO zgaiQT6ol?0TJ5PT1#>8y;XJB9XC8Gc?|lwbcRP4!vbik)RJxd~tA)q^aRWeQAWGfp z(KdsetIj2$86k0QSvYXv)8Lz7hLv;W*>iO$0Vwz0p{h{Ng}-Fe?v64vq<`^|_(H;0 zbJe00uAy2H;IU1ppo7p=5k8$cWNzeucIt?;lQ<1Hk@OdtEU~d@h~u=V<^s+T|<~os(t~NgaV;VW=qS-2o^8 zptz60)!OUv>1(wg4H+_3@Di=8q&ukTV3jwJin&|C`j5i>3)|m=jqz&$-lG6e$FpXB zYq8G&_bOo=pvtb_l zj!i&(fkO;{RRC}Wn79Toumk|LoFwucr*q3WnV%5F3l1w!Ue?S=y0z%qsMHQf8gzLA zgLp7|&SPGW+yJ;sG>I=%^Pb@Xv3~v6>$OVpz=-ad1_IB4bS0}iCpc#)0Sr|v?p+K6 zYDl-`jFGjBw~O>t89xGJIk2^SZRLr+z)rXP7YYCvz-KT3A9_*%h^w|X5f_7#nJ$t# zPJZF`dBZ()kmf#5s584Af{ED!}LR}J>y(`A%|cD)nBV+I!9KBd~!!aPcfeOD^RR9%A;u}De;l9Yz!9VXZr_x~P% zFV_IPZ2+Jt?jnnTJL`m1gReK)of;LMQTSRrl4jpwFd76oJX_%eS_>;1epKJVx&csG z^fM_Vk&hGY=TJyM^QVxoP^8;d=+l%Xae5LQeKF9kcOn{qOR&jpz2V@L!$vvnZpBHG z8i+`$AQQyksW#RA6?W0pzXxFQ8o*s{7U;+u1+w0t7#jB5z5$rmf}T*Y5f2HlLUqoJ^Dy^kh8zRExqFiwNZq z@N|q~4H%qet@O-6mi1BjIpAvpe1|w~$mmHKsupWdFT^1pVgT$I06YYI1q1MY%c>^V$*T(RxBcWSE>{V^ zxhd0XhFc45MVQs9=Kf;COa6JCU`K{>9ApeA0U+ygTeH8S!0RS`uO^gEm4#^iz!%tM z-<(RWxA==o<2C5Ep(tHK`#pK>6>+6UK&(;5)*N#SP zM0E@ggK}78yK0*i8`a5Wq&r17#hyLCo^?!P-haqRcVCmg!ElZ^hZcySMty)r!#>|J zP^0ek+#lLmN8kH-mWgo<{twzJGvB!xIT0SGxfR9a8&WAG4P~mN-iKIBAO^sy4Y=A& zU00jIF#xF6@7;HYCl;7vXiet?ewr~FiYmc&qTvN;B~-3-XB1w*2QQ4#B}B>oxx!CU z@Lh^$WU1i=-CBNW;+>;Am?Ct-XH`TUF~3?Hi`>|ttTvT7iD8A@E^Y8AOmclJfr*wh z1i@cbC`A~yB-2(8TRkD>7h(Vm02shD7=Rx`Jpe>DlOST*!9w-T2~oYOZD5UHIavZE zK~}^^0AkHYa4rN=h|Mdmb3Np{Ip9R0qE=p2{iZGOzI#F4k@wcYCFni^?TcM_93a=H zy-6D=0c5>W?YNyszy2z)C*XzSPp;a}p_7ikP=5Xh3P`8I+GvEBUx)!P0AK(!*8qH* z0iepXbJO#(2QMyGWVNhI&6@X~!TD}J^*q*_Wwb1zWeWz9s5DIU{nA^!0U#R4`RFXR zh5p%sL>rzq^)s7F`j3=9F>oyuQ3ewGnmftW9a4=P2j%pX2G9tW8yyl zkW;hk{SqkRnO{~iCjQR{PakQ2_BG&ee@T|&Y8 z6}1}MMpcn{Di7xs%l6kQG|tzzo&F#8?m8^Wt!)@SCEYFEEuGSxf=YJ^h?InYf(%ka z3DO}rq?Du}Er^mzcSwf_N{L8*qYmu*`QG<9uKSp0|M$*vJ4~F;M$g}zYglt#=h7B- zOb4TEeFanU5Zqkhee>h80>~9`JXP;`ZneF#8;tQJDpBb?P`ks5fE1VQ*o@#*J`qj; zm3%0t5}=y(&LO6i5doF)?yvS}F?gpi*6-&+xKSz{w|n& zE@j`fRh;`0K#?7b`I`yGRi7%iTUpnN&OWlSkiVw?q_LKDWqT^p5Z*(bOK;#1hvv889m=38$=C3ew6 zZ$+%_PSLr;WArP|jBr+fHZ%9w{iHIzH&j{fgiq@tISP~AoC|jQ{2Z`ez9(`d0DOT1 z1|TW`tO6`w00`0oL7X0sYf}`fG+q;qUW-C%N?Apc5maF%+bXS9Nb>g4V+1olF}tyH z`#c|70sgk1TyD79H=swzsDx=Q-5{vfpV5UHnR?BD2J>pz-H#h-&5PjhHIh}Jg zAZNfV=1W5dh)iLdsxjB4s*Ae8C0!x~r22d2Ys+u@Fs16HFjTqg1qt=BE!BP2t|S zyuf0UGJYU8RR-{Yc1Dmz~;2Ln=^8DR?QsdugKN$%rGi2$%-F|Nw>3osH ztk*3~+E-1Q_Z^bdW>D`iR9GX=^sl3J z^Ioh>cCLnnF`K{BHfeWH9(#Nm_l>H%p}^e#Y1gn?jQK8e9GoCaX2@!5SM@5=JAKvO z78sdDp@b0Fr}aD(;ZI?_{&o)uu;2g&{3l3ga{gZ&e?hK>fS`YQQ1D|uau7uJL6)~M zMQh^>`QUr4!Rok@XSKnVXeh;vDP>RNm1-Tp^qKGceSc+tx_nP!U|+rRqE7S*vHrNu zo21Pa>&cl#*G=g=ShovPb03;l!wFy{!1?Yo{cq@|sb$1Cjgsq(guWYVRC~;6%Q4*_ z(~1%2;Qt$7{{mRM01(Cjf-Eo%Oi8a+$}bY_et5Gt;@8$Bw(pFDi3#$>3-gQl(h8>O zI-tHvvoUZ9;LD44GhNYM{GofnpXb|D{F7Q3`<(V9zj6(w$c8(8g?D2dG_|?#a|U~5 z4pml1)~<)sM^x<+#w3DrLS{E5yk%(z0bk&N0f-6!o08Tq0L&VJAf}keHu=jx)==fX zvtCUAWiCHBMaIOD3XCU@o+Db9egk&xT$DG>mY=!=5P?LJp@qIF5L)7-kSdzG;t_6| zXC-l6L{@8EElOww-jBlR+T4%x-<^SR|$6*6sL~zt~t{F_@X$pr0cB z!;?z@98qQU>z3K16&T67Mjm4AQ_4rGTOw7(l^QJ28-j*-6l>;KH-S5Ev)^T6IlQYll!~AiU!OtU;qLD48Ye5 z087uI{YM$pR2)o^UwF}{D7WzT)5ht%a~IQ#6)c0Wm*sEjO@N(LHE8-W3%M= z+ltqt*p)L99UIv!kBO*6=|jG7Vi0#nvu^fj!3lta1Pd*+3iF7MXNb_w*w)?h13HON z{%R_62+ESt0~1TY`~n6b0Kfoj!T^9Im7p8rAZ5R5e)RoxK0+WURf0=h@ZD9=cAoqw z&WW&I`1>EcV04CsC%W9Nj+X%P#-z<;KJ5O;F=kRO#ar==6ALqQ)|8R2Ul@J#hLRuN z?YKWlPe$r(ZzL1aWUcZRWv$$sl~Mep`qSV#vYW%=#(pATegOjz0AK*NE&wE8gCIL1 zHUX;=E1j))5j}GGlL9oIP8^v1uTaJ_Y@8$sR_MV3>9%k>?b};mYn27mV0;X?&n&C^TFN(tPcAp z{0Sy*JAnBG3_t*Y0r++SVB;GILVkX@(@NoFviCaXp3$RsBRZCLcgz?Yh2tg5NEo&S z)4+0LYla60AAc`R|7|~6gYS1^L9C|s{@4M#YBm4#uWM$EXNn2K5%bo(5fx=#a01Y3 zTBI*ch#aj;?EQH414moOT42>f=liaHoBC&}v94$kPNhhuqR~jvk=aCro+uU7rv4%M zhJG0rx0k%wbU}_K5MCVhI}Fv09o2zE#OF_iM1IM;KVGeFn5)zoFT9JDREq!r1MvM1 zfM8@3?%*JWZRmM1#9m>(GF8&a)IFqySmWWm20Jf0Bd)d*S)fa=Oq_~=uboi4@#ZcG z{BA#~`QNpl49#j%Hj1~k92QMU{yGyA?;dMzcT1n?M)`!8kcHLVgg#VOw6xj#Zmae8 z#L`K-UE0RCPR|U~Gk=kgUP-l5TJ858d=&LgF)+WJDHE%2G69 zottDb#X^ih%scGUvshaBffR^RRr}fd;YguUx#7B2r@18e);Ndo?>IH zmD2q`#m?Q_=W@G=mxl)qz!07X8EMj7PI@t)e;G|F$ni?L4KqoNPI#OFP>B=T1CpLEfupK8%rar(}cA{!d>?2!7af20tO%ezyR!A z0NB$8LAOwA(;29YYd0JnUh&zfpWNwm`oxx-oTpZ@0qd0Qo^ zkl->NYPsvEUrKJ|-V|vztMOYb^q<*n-hEIZAqD58_hz03>?n8m>drQCl5GHXd{icj zURdkh1S!*6w9;ThUcmeU1|R^y0PMm5Jkcx$K}ss??I;+TohUng-5IzM;9#J0cQqa7 zSld-9?`cnYF$?%%HYg!kM!)H@0=z{V{VC7KU;y?m0OYZN zAc+kVc&xW-r{&0T#7K!HM+B>h^k zUCEKK04NoM2b*!}e&d#nx!CuD(I+oip27*BeZ7*2_TH~{I$6tf-ldwfQW}z#S8DzQ zxo;I8Yx)U)1~BW?bstp3rwb zgXi`WdnLxFI4kIH^-d%krtFMp#>U@Gon% z3921pupm8=l}oqc#)?!KD|PH3_)d^0*>kRXr%M1xA3bfSdG9ky-u150q&61N;R_6B z4>HBA!Kk0kp*uE*6F{pvxCU3iZocjsLr!-ss`j;=ijCK zU;qv;09dJkAd_W38C5U|*gnT%sm4ulrI=Ddh}B-qTX_6rZ10lldJJaFu`TaTmokO| z_}hN6JjYoLyGC}6^>hWpNO>(Y|M7_~ZM7Z~|~76@JKZAhVer!BmW= zu1hzrDW{8{%c;8k%z-o}OE(cBDMat(`L%ZC#%p!DXFtcYUU7>uKdPs!V`CjKGsq`@ zj%YuL1UUX41NG|ph<2Qk%)7f zt_F)e5Fjcw(>ajc)9kF-#Sc`$+Jm^~Z57)pS94P1Jp3V8I`HY8^m(r0clGxBrFlGx zG0D^yOOB=9pAAQ`E7lSN(fA%C^^T{R=r4QJeMXju;l5VvF;oJlv_J-aS%!Jh8Tnoa zb@T8-+zPcxy6K3g#MLVp3SGe!UjQo!U;v`jz)H;#tki@OzXL&RnMf(Vuc%d=S~TV- z)N>ugoKp02EM3P@Co|Cx-=_Eh7O3WDqWog=?Vq`ZZc(JCbjEvFYjGsCeYb|xqI-s( zP7qnDD8xxKek}=302nsZ+n5=2&Lvu5YtQ^vH}Nbdw!NJ)9m|wsE1OOO-lM4VJUV|WW-u~jPiIE^h|RFJJ%y01Ut>3_uvY z2?+AKHY>FnL&M1|LS#zp>WgWQliC+m3T2Jg0|^Fy^?&668y$R_CI1=!4*;Kx&)J3c znntq0`Bzdsa$a=CsGxl`uHfsK+Z|+a$A2%A3K5*&74R=BKs1%1X1AR{LB>=r20X*duthMH3XVV9x zf$i68O3*~)TwK_x z9h=x4vBTdB4#;P}kbglm`ath7ei0KlgC(Qi7&U7R7T!axvA`PGclMAZ-t66j^F4qq z-JO#dJ_s^6IM2~5Q(t*qGV(*x3Ui9TM8ow*0Du8Nz5oyoodReAS*1!{ zcH?=O`Ac>yjpVN3uf+zs7hZLeAT@ou)Cb-FLNpmg=1r^OC4eB=wbO%Pom&eQ&F z5T{%q{R`vIiW4fz1%L(Uo4~3nrlEmEPsZyzPK-k$W80o$?)sXJ2PO3GjaZvHy_(=_ z{%B3J&qcbR0RFb0q!i@OY-4^O%lEYUNAzx(2ZkQIqW-q|^=I>uzK2uZW^h)3N-ShN z-RygnbfO{t`Z&7->-43sI>jAPXG~?0{LY(pAg=aK8ZJmyVvlpWqK>94cKA7w^P``+ zGRpLKBzqhwHz3+i0t@*I0QC=mKkX;MlF*+7Ey;Q7+mM~W`-XJ9)5DlaO?>j+#S%SLvdxfm~OOEXeQoSvYgy< zW&SRuOz7{&VMMv<@kZSAaU;o-NK64ZvArfX7W}3`LnGU;!E2kCY1%HHZlMfbWp)l- z1asnP-3Oda00R)y4Q#qWgH;=FGIY_YP4oFnA=ydS0aQX4B{NCgq5SDint93OFRxbI z%JCMv!6t$b&d(@*KQE^nr(G=eEa8apQLFVusR#Kx1GS3`_rC4g7jUZS>e!1&zzN{- zi|^&G%`#=LNwh(13f37y{opbbG5w0bUnxgoQ=j|*^9vY&000AUFR(+xTdK!hgr^DU{$dk;o?k*{}XVv#hP_^#Ldz;V<#-CUjB4AiO!3}OKb zG9!(5a7w(p1R&_JnQys}*!-@dRrI@5l9$*k`FfsKA8Vu$_VuR@%*1d4fV@wAaEz{A z@X$h>`KglUPF0X{9d;ZVJ*SIqHoNdWcEA@nU;v^5z$yU71%LwRXWTU7=ld&bU2^*G z2WAMfS7e7;yoCwk$*o(Zux`wS`rZKJFsz`|a=xX#1aM90#iNi0=LvfnyhSVmg{_Z_ zhDS>Q3xSVP!mf^{&tHKP!1^6?+hr-D&2!3-`S7O;vY&}+ta6NPU0&%wPot11CI!qd zU;qLD3;-q!KqNBsD3{Ip*f`{w~(YW*2i}W-ZMP4tdoNiK=73x<5W!I=HjGm zlJO~PE{>Cu6r0L1v$x~Ws*}dQ2LR?5FaQAn1_0{9dCH7=CC;T9y&iN>;Vo&q!Q|1LruM~xn4fS9Fu#BS2mmku z*cSlaK#z1KD0^7A-!LQgAxf|Qp3wVBr^anTche%hD7~4*XG1B6U(odKgS+q z#^DV~@wGpg!8ClN(F)p#*`9OYWL#?0nim}yK@BH|6979Q|DbU$PCPy-^<-pTSGbDp zO+2de5z^Yt#Nx<(Mn=H=0tO%ezyRRD07MZ(k99}exsF5hRUIF@PPAd6dwd#$F+KLg ztY=pGbeQ4onTrzmh8&%sxJ;nRWd+DqVKEMvGa0KmwP(nswMDztT3I;BlNmy>EB^lV zBZq7_0ld@{vL+T~3?HPr+eaCLiN$E!nyA=Sq_(qieKU;uD00JuWW zb_u*%>sA>CP8#w5k#wD^kRYBtj{hmWk%S}W1Jo8Ap%SolR2fWJ=%yW{uw0fPR9JuTY*@#L_$ z|M7qQ)1vav19F!S|6i_LexHAT48#ioL4$&Sx1WsahMw}~AeVg9BBF4%|GZgU`(~rM z=KV)1QdmS@+txG9!~TSi!JMYyvay&yx_-Bx)c$wcPewpSI>$Tu@*jPiaCPvKMiD9{ zB^EW;jJV4@!uSz4HmXq*f?0OeWkY_^T888*60+FxfjzG15?y}v^Q~<2nMppzjf<5@ zfk^Rom*@F(JfKqTryht7>9)%%Jx))C_gILwPj{Is#OqD477B_NpDz#$ z^0Rm*W(mG3G~--}#i;ZIEI5Dxh>8TONcew1f`X%2p=aQB1?ga#Yj$L>2eg^6KKeSH z_iPfg*7doVamV>lhi9ZMSY#fT`^)#%oy#eS*VYhi2xXazc23Ba%aFPHk=aAt(sM}s z;yoKPG{Z=E8_%%ml$<=c-RiY+H(Dxm)o#R}YLHAM&H3kU&v@*k0{Km7x!K7TmsPA zdFQ^>o-a+)sf(j?Zjmy6()pDr+3zer>OC7lc7_R@Q_?FlyNL&yD#Y!%tslg5jP8>u zFJq;=$h5jERD0jJh~p7pegOjz0AK(JF96Iyn~o%L3(Jo0wY09R6glZ#$0zxw%Eg?h zBKB~Kz*3AtJ@OcAOZDufrXEJyC4i1OmLhh0{?00}=`oYr{psBn_O1`D^}Oj}SWXar zx*Ko;7_dHLo*+6&`zc<_a2%z~PT(?`e85XusD%IZvp`)r9$z!a zT0>G>!E?-`Xrz;B_nEn`E-!GgKB5K2Si%Y59N&S`H2Ku)rTS}Q8)*T~t%e(X!DEYr zq#fixkkq%B0P_nNfB*mkKzsop3EF#XllnSWFIGY-W^)1YaF!6|O|j|5TS2`ZY%EqQ zH)S|(f@L_Pwo7Xwg)afbGzULi#-h%q{jRxC$BvGxrSkf5lxuNc7~xJHwx3}=oB%Qk z_PTs&ZJpDI#wR3FOb)}#@dlNC(2kZ9zZhY9dczAazkmS<05AX~7XWsk-3RZS;XYX} z4fy(u@fanDAbLY{eFVpX&Sh>eW9Cw9BD@8;8AI9n9)9sJoMg}K-d zSXlt`3mAX^00Te@1Mu_)wEyVL_ZL3GZ8q77`kTvRF47FkechxM$j=(CB3t(^aniJa zeU5(~y|l?Wz69_!Q>smp|~S44Im5>+B~cO$;8hYb*lHFJJ%y01N=x1%P5`2jVki-Y7+x>4?Jf z;Z)(SfFT8Rhqc<08wYU<7O28b@!!F`CpM~Wm6g4h02Fkh-7y?aw?S$SZ9VD?P2CNh z4rIeuBdq--j07V{4&VeJ<1p03p>cT7i^Nx!WF3Xi=jiLF@w)yVL{O3Pi}s^-!2ALR zAOOGski!7Pq8ET58!reGs5t!WYn)$t49h3{I7e-$LKV&-alm^ihGDHl;lS_N^>-gi7q31cbD-Zx+04V+d2u3z8368ae zZbabyF8$;5Ri19iu@^RjwFv#H6W<`pD*<#y%UH2&7`Q3g}=kLm- zB@zf!mu`!Mgml#k8Ce_^baB-RNx}+g&lFpM@Y|XID^g_iE!Akd=l|f^Pa6QI&}=DRhLy;p`v+(7l@6Wxlw$8+`q+I!!yi7R6*fiS74iG z>12uiC|s>rB3<;jnuqAF^~Kt!5yoBHYvE1kY!<`}Y)x~0Lik@pLYH{byKWJYdV6y; zz)3zPBB{upNqhf_dsckB5n}buhT-7lC*gA)LC>9s+#8QhpJ7*34W-fl}Vmfq+_K?)CH zFP=Nud+V7Cm|wsE1OOO-t1tj@w9vhm?k2jr@0$~sy#)zrmtm>DBzGs>sW5I?FS5GA z!TQ783(TlT6h89)(CreyyKZu!Jc6G{j>i~jxl)!VNz?;^7W2drt@w|*^*!zJ-~>Pr zG<-OosK0cV$HVodc?SoNg7vr88crv>{X3~2KY(@t^9vY&0009(bphZZ69@thlP->V z(8kHY!K~X%Q?|t#5&H83e_E*xQ>*dlp)E65#ZPEp>#o~BdoOw4+C8)%wI(DTwO zEe|L5Z(cM?$?3WBMMj9C-+Bj50F}QM34N`O*!^FpSJB5_N$uUC_1bq4j6Y_Z3V$SX zh&V7G`Uc~FJ^p?kOC17&J`*T7ZXCKFWE-iS5+nY4d)~t^|0Bk4i}!7w2a*xx>env! z<`t+ufSw3=JHa|gs!H^-0vtv2@qeqA#>(}Y$?9sgZYRm?bf$YzV97P`HA$IC{2818 zifnmGW^-Q<8rnW-zs+D0H;4c805D@e_DEOH$ zbVu0RkBRp-P?H;6)b7_!b##o?PvL#vR~L}NiGKz$WtdtAOTBA|1|JTWTmqoG!%?fG zBDvVqiZu>CsgiB&(>4FE(J4%)}&?&YHZ*0Up%dku|hi7G&`+m)j?F|5`esArG3Q< z-PX`S!t*`Ml(`9G=C5sNbamgbtjR_nYPP}&z*&fqG{O6p$VU2SHzdp^D^4W_Y?_POvrv9&Lj zyeT84@;p>CJ;FKzjBTaCAav(G-X(yxK<`Q0XO17mKl|3so3vL|I~Be;)I4j5)<@SJ zonB^w6TnMk)wgN0oy=OPMOfMr#m!rCAH5pxb=$3I@!e$%44VXefdd90DgdkkFkApA zo`-gXx|w3d@jwOQT3dyI+U;@^v(14kt-%aTMwx2Z6 z5)_rkE_^FXPCpV9L2p4H+1r#mp~hyCD+PLIx;`%YVbcAR^~b`t(>KN$frsdl2Z`q67! zKbb2t!!{Q>2~Hc4CNt*mO-uC0@ib8`$f4LQs1yp_p56&!_L}K=nI*N_a7sI${?a`$LsDi^ z)BcXl>@dXJZEqmcVkw6@aTlp0v6VfrHt6r5n+0D?q~iDi{zaopbM z=``35dOBi${lg;Ta#~qU1u1!GWJtH*FCFzJUsdlFzam|>`!B!zb*mnvr&m>J5|(HMl6;vHJ4iAZ+p~oW{BvU z`QA^z7UKc$Zr`zc?A?q(FY!XT1qA9+n@qb030T1R0#@p3x~V1As55~11q?s{fB|5= z01#vYg4hS($Qyp@j6mSLmmsCcj0X8?Yp%{DxNQE_on+EkHT323X2CK3GfG>>=6ZM&hl!`AuHgf z8JRl=W%rbQ6C`I<1k5jB00ICE0NVwCxiJvrbfH!$l_f`l1@&2sl{Kj(Y400_CbLsK z5wqx23%gnn7_asVngHr4%_RWG^gzAb9&9cpT*}~1!5nL!;=R*HenGo;u&ZWTtu5iL z00(lyK3<0w?}>HkUJ{JIUo0_vbs9)@gUTg$An-EP4A0tO%ezyPqr03^vcLbrP- zPpZ4ef}^C1h0biFI5c)-~cQ%F-Mx7VHryX zGZ@Qv^cTmKq{T}B#yZ&pxox@QeFQ~8w77oWZ+Q|w6oz07T|WB&zQ6$k5ETGc0XQ!J9It{P4_L`_^1z?2 zb46x0F^C-3-oM{X>anPdp6(U*Gb&ck0nA)H^})c9PyZ6Yg5HOLH*6#}wf@$=ygt$0 z1!POi--&~JDj^y_N2c~2-~{m5(7=--oh;62^QM5EPy&g76On^!soX2}CVt7ODLKT( zr~g6$fC1ow0Z29(0zs&@dY9NEygSRph^?@1OU_T!&~%@DIlv7ww;O9}6mtiYf?VB4 zSR8Pn0RFb0Oc8n8a8F8Y)nu@(ZN$g?ZnyW2kQ+4@>QC~$WfOXkKAZr)bwAFdTRhrY zFsUu+7h?4y@`)YtToYj|Rf(O9mvdx>4DuQ^y7g!B8A}fHl(Gv1kA`5|K1)RH!z=zF z#t>uo2GM>Jn8@ELfcp=CKkX-z>t~?59$j}Vce&Z~^7`DKwdv3b+B+5%{jpS<yX<}_%Ncj7JOB6$-->Z%% zI8w`fG2l3nJIgT|%@kl2@kbz}^3m5Nd`jyQyT@7(%T#$;HJ=%~M?Qho>epSyh?-k+ z0+3yCknEK(MYlYVFIF98VqS}`4wFi0^}G?H*!y}{i`VPtD1S-ngBagXPrE1ZZn8?| zHz^T0sMJyACyPuIP(SOLEbkBEUwe!GE!kZCW}YeFYyud7m~LRzh6h${Qm&$bAP*&^ z;!vvERr1t-aj(2GYOvW?R$SwMA}{NdPA^k0CIP-S^VK82QYY|oy5X}gJlFb?86QU0 zytI&h(9v* z60Ff9k)o`Y9J1qYEwcOSiTF# zQ*y;Vk89BOkAG6d@52e8|MqLXw}S0R&BC*V#_ATGH_5V$vGW?V7n6Dfk4{1o0P_nN zfB*mkzy|}6D#j0jd}k=;!n6~u+}F$z;ih$9-)Yq&?mQ4PxPwmY%mG<2&Kv4Yjg1<}g%iM=XHSLg_;NCF3Wt4K z792gWRM#w~?tjOk+Rh)_c=Z9%dJ5@Z7=Pbz@?QW*9)NCn;i&pZBZJhzTUa{1>-LGV zW=xt+YRTK=oUJW9TM9)CutT$j`NM4))=L02C_PEL*|)@2+Dki|Ptjexqom(4y(rpY zk+D^2xp_hgCji@T3gq|$;sJ}HwQ4`^O}TYp=$k#K0e6_jwidT_<$iYSK%w#f#)3%e^9Rw2V&h}`Q>Wp}lc!>E0+5Qj8k$%?*^;v^UgQ$LjI;D` zl_8lS;d$p6E`0#L&@^Cv0Rs>KU;qSR0MZPcKoEwY@+r)1ts~a;vhIhUY=^P4#{$Hb z@v`oIA(+xO@JR=IbcxLN-68#a34r4$diJvf@{_|MZj;##-Bp6B=>Vn%ny7zU3F&=jmkpcExskFI00V z-Uc^09|S=f@|TO~zCO~Otnv#<&3D@7(=DYcN~)J!eHD~K z<5SdNn~`BRZWr<2KL-A7KZz6ADWEmv<5EheW&t7eN#Mas3Z9#f&M)RbQtMiz9fPw1 zD20w~x0r}F^60Obqv7g^GSPaWJm<=o;f)=-A{LT52gyycD`@S%B@s^zNqkHsC>uB0 z7s{KI@x&)Wn<3M*&IN+~;gQj3y70nxk;xHhkKvYrbn1lHpWjkDWJ$7iBEOEl03e41 zJU`+p8hB$oeq$N%Nl?-r34Z zNdEZ>y|}pjPyC;_KQ}KMN&fTT@6MJW=*2%lmygL^Tw{P;`THhNBm@M#{ipq8`hzME z#J^nI;bbnX)z#{TC%)nw(R>TmfySA2y@kN`mc+MfR$y26RaGZ~T9)7KCvX2f$(y4K zdXl%eq7~9@DMN$I1%X@751Z_s(=LtFyI0t^k41&)$tdk zXb1@U4*&{IA4dm4avm8xT&E@ByUoQOEuY;8F02j^nVqB(a`_rkAS|RS0am;^?yl+2 z@XzU2nYsZoB4s7RKVF%S$#JkCeQTw|RjQ-fOgPG-lJ|>`gBQRzvYe;5FYX%EyWUEV zJtgd~wm7txZj;`RQ%LSDow*K}U%&ta0N9iy1_O{G<_m(nJgaUpZcXA;j+c4CFs572 z-coH*)>dK{l?bMk3<;y@*$Jf&GBt#=5@gQ0tO%ezyL^G0644#LD;J&wJm8VB?XKgVdqy=68#wZS+z)Y z^mVVc=SU<|su*m zfwu*9m2))t_2m(tmrIYQOtxLLKMqFZ(`MZ5_e#zs2w}4N447ZQ00aOSfa@>-&yAlz zx8j_;mR*_YbYr^ZK}XQo3tZHDNv#_a{n0l-X zJpQXMvWGDaZ|h4+j~0Jp=119AT6<+wjKbio0LOI{GttiXYE;`t(`R)veD#mw7n9xOR=s> z{FN1jtp_I4W^Ba}pk}!Q@KXs-ao~0F^x@{P-~HVBDkG=&TXr*3vK!!`aN^8k95?}- zD;Npn%Z-^+`%_Q1CEgi9v)OZd^7u|Z4an8eXqxmIV15Au5CC8Rq+kFtslA|WSf*nQ zu>_lTmR<7nMWRNwr!kVxJ+oJoPWdb(E&f0(xpwU zmHZ7RV15Au5CC8Rq%Q#Yr$Zaiy6dA0H$ExE+)J7YC;3#TzLcY|$sS@Qa_}&OJ5#a? z%$aVl+K@|yeOUph+G9NwaV6*Y?3(OI1i8FD1a&;gb=dmqPl(rgO^l}C1n@TSWTq-) z^9_N*VeI1qcS*($6_fcR15a(Rqv3tejwrzV0tO%ezyQcx0GRy@Z9@Ok!@ivf*;MarUEdU##^qHAiF&%fWPf0A-$%fdK{z$q#^I_jhu$c zn&dUp%6UFhq<0o4VsE*R4JQEYjEBaF##}G%OPrBuo^^fE)JIiaOg^uVeeZ?olZv?q z$uJ^6uWh-;+LGI5z?(R!QFV`9)eg7HQ!zG5l^C6E2+@8L32^*f2$KB+;7|L>ELk~d z3sMw8R!x*=nQV!IyCPf0A}L#nQ*secMXGNx2l0Jrm;+;RS_j0 z5>c`(^OWD{)>HcPWpj;|*zuscx}d}aByXLTcB^QVoMi=Z-bc7vYgg^V(2zX3x#dHu zOrK_?RRq}LdY8~7ve0}{G@rKe}cww>sSs^#-Iw?c5 zY-O{6t7DDKpyZdwEfRAxrE|Lylg~=Aey@ENC~)`kffukSHNTmwN>T=s3Z*8pKv?G6 zd88HZ`HhP}?p!|_(90Uhuv4`lIkA~gP{HSHR&qsQ`}Sf=;xJ{s?_%w9!<~zBZbn6E zLq+m%Rwui^%FDh_*y2^OaBB!<;U||+ILY7hIH%wrh?KOm4!GG@Srnq+G-&E`-?<}_7`MCo^53QLbDv+Bc8ELV`r0P_nNfB*mkAP)oZ0>uIZX~!bZ z#UKnd9er~JC&j!TX~4qTBL5&(acmU2DfrGv6_`2d8uLuAo82XVP$O^G@eQOdG=`+I zH`=;S8rnoeao&j@4opxAsS}Ho!dU@|PULaO$TJM}%LO-C)HHI`&hU^_-+%ML6TE5| zTb@A(m|wsE1OONSg$n?7RL~J^eyPncihnKFH&sBZcrbkl z>=%(PO|Gk0e+fYS%k#t4_BSkVM=VM4R_)*Rx`RGZtmR+tu)Oj-Y3S7>H~}y-Cq9p% zwVvqZqoWE+Uu5gOg5g+}=^PpDd6zv}LR<a1n+^rDRJQiu%eHl00%#|y4MXW#Lj6)7VM$ixB~Lyu zKR!dLQFi)?DE@%Ie*sPa^Ez?{zqH18;&>-Y?!Dp-l>AAp+5h$0i#*)SpEExV-2w9p z7=Qo(1E2&00Ab$*K_XAIr&yT=s=Tn4>+>r&-gqtZ=RV%rvUXLqyhVq7tq9CPax3lK z?B?nvfVwAw76J0X3kqm9NY3Kd!^s&WZm1XJtS>i)ISA``5yA=J>3bE;qYPW+5So{5 zPc+OGG(KRa=om@m zT?o34_E~@=oB%Mu`1%^(yFR77mlsu_>ZskIK04prKeqc;46a%rh9Hi~Li!iR-yeKc zE&yzbf*`dE6G%g)eTPD}6``7wSmWG0RVhw8Xt{|DGX}h`YNo+z-v}AYx^6LDR)B0$ zN15=?u8)(o(W?`7nH|^^Y|ssnnUhc?>ywhkIp94m`^}uY-I}^*-8(@G_nG>A$=gxS zneq)OA+!)<-GgE*bifxlU;v^5z$$<$3_!Lv7z8`HYbq7YeoXl7xiTitC4lPO#A4fzM@GIw$=HkGyN=u0O=Z=^`PZJvI6dQ| zoz;c20Mqa+>ewI!^)f3mAX^00W?Q0ifa# z1ks{-d6#6z@xZpA(lR^gjtm_G1JllfvYBpKcPT;fRuemV85O@QB{t#`u4MZ#*-WRqCr-%7!vORS$3 zSDMa#x1ZFzXg|r5zD?i}5jq!gMCneGz3-*#6e9Sy{bWV`@Yj8U+3#x4z7CkpM83Hl z6!|UwewU`QGXB+UzRFREL66;eQNp?8+8%cb1Jle6?07v{SHJTRy zCQd+*Pu%rLIPU!T%S)8%^;3q9l~$nfU23=eo4t&sDXb%Q;792`;(3KF&n^MjF^hZY z-?BBkoh;${m|hd=BWddh-hxkB)P zsu-z??VU?hFE5zYXiF7 z0Ru%B1@p5Tm2*;Z0qnSLlgeh*s;@Q0Qyr0OaRj(_!A7F_OT&=ag-ZZCq~?MOR6mNv z#pWC&xP+Wbu(qEg(b8jcu^-vQI+*jp2_XAHZS}87PYdv27M|N-`ieeyhVYR7-G+xG z7OOLVjRIhP0Rs>KU;wmX0P;}qL6Eo1U7063Q*UNW3!9GV$+;f{C#{8iqfF8CtZu`8 z!Hy25$+pS)%o^Z-3BWMX_bEkUu+)~6fdR?W#KUK7xA|ln2TQs0^(R`eq*&ktfU`01 zVFi4i&O5EhDP1X$(YCkjjN_VxzlJIQfjy8$8Zf_r0SEvv06G@{?%V`H)`UF*E!4sz zKyqAJx4GYF5tB7R!m`CS!d#PSfc#j|l+t z3mAX^00VII0zg*<2=cx#Q$R7fq6g2w1Dm47uexPqAk|CY%6*G2K1?$Gnn^H!C?-Cm z0`fo2U}UU@1BiARX_jJrIn2L&LBb5>UGm6KexT7MaCpNS+z%&!mj|Yac#^iSeVuoG z>Eun)y{@5!hEE@;GAdmoxw^@w513!T00aOSfLkyC`8>QJNGf{Jo4RK*+@T^(b2>|` z(mHB%R9Sn2HMc^pe280`qz0SZeF^UR)c@tO0vvtG_#zPBRuOa>FH?W_6|+ml(067$ zqs$N3%%>V`*UR7p(4jW)gltGC~xd=JqFA#U;qLD z48ZLR0I@yLZ4W{7TTU4u{X`Smts0P#Gt|*5F4|&67DlwsN2V z{n(OJo23kF1wD%yAxl`wr6SiZ~{OZTs=BmNVw}KJFslC z7X4OETPBD&_(e6*=y@=?G?5JCW0geX9Y=b{Vnu;NSw_Mg%MhWJA%8Acal7ZTSQ(tN zi1w36faC8vfbJgvf7(yx?}b1+LNTdVwiBTxZ|j!cjqDt@z$>yRfeaP;Dw9UgcQV`C zfn~=0_1z6I+kdy8)cSZ*)`>+j2d#cd#ZV{>S$^}A}>>OczW};m$vvAfu>Hi z_jTbFFy2|7p!R^%aUz`9>N^cl=|&Z=FhsJyev_Zt^G$0iwT#Ah@zeNvrgv&}Jzy~b z3_w&HShdlERht4sGwA+WQ#apdw@o!-Bv33plC4@oel3S1XimQwOyAP!S3^Jr#;C>* zi3^_vUrsk-@0U59RUX~8a(XGhC%Qi=SEO~#cli}CQF@>zK3mCFEC zoyW^MmUd-#kK~bDRiqcyrg>l^Y=zukp<>~e0P=(MP`euxM;3WOYc?KIPN?Ju)d}CK z!;lgthqr68PT{No$Uo$lc}N=l2l!ovwOe8Xr|&(U-Fww;w~2P;?$7FR8o>Ml1|R^y z02sgkyrj1WL9!+ozlerU9G5%oIxDSdn0k_~HWhtr+DocOk?I=KYaC>8Z2_g@tx>ctg>CQ zIqWsmLN9Xe4S(Ho&k4l_Fu#BS2mmkuh8F;WQ=y-6hdL7lB>8V5F@F^5w;z-T!U=O`Tni&1o?3}5<0z32NWJ$`%8|HO82JYg%@L=3Sc>8=1 zsFv8xC**ofcXZzrqpToiie;R=NnE_^&^JcDHCfmS_yPwEKvV!&1u(e)P_YPteDh=7 za*F(76M5QZ!0&~u);FiPm`r)~>dwYzjS@UJTClIH_m@=g>xN4JJRkO?Vh+UhGt};i zzLGg?sT(R@J$LPh$XF}6W9jn+-eqUh8cpTQ<`?{tlX9-?USoAPzm0eQRCXhkc3$+$ zmC!(Z?(i=Z02lyM7=R+O|Bt=9j*4mx8-`DZbV)Y|NQ!_6(v3(-BPHD+AW9BBbV=6` z0s;ckNJt7uw}f;{g8~MAqXV4h{hs$*bJiUH`PQ1fmds|)HJjtPeq8r>&)(M^0lvto z3FXO$bhhhqjht#rNaH{EnnWzRPafiFb9|)W9eOJQe4u30U=XQ4eFb1ivqc|6?z(v_ z$%%-o(q!x>Wvuw@-nqoe`tLtWn;T)h&dqg(0O{ASI31qGWcvev%lKrl|7!+1sT!(dF21~15qIF0Sp3vpXE>c$yf7201y>_ zRq9dli%jKkCSF1 z@8F&QE+EPEINx8FGn3PI4ZQlc9mjMgK>J2Sepq`BB|How8M0JqvIX_;vFl+3c|cvp z;N5fmXoO--Cc0~HR{7riNse90?cfMh+B(sC_~#&($o|VC1f*dg0DKZaK#{a40A!{_ zxK>5QC0kMXXEWE;ko2WBOjGv3GWJGo z#&ny+@yrL}z98J-XX6MT#H4*~IL=`N;GiQYB5M&;ByM-B3Vk>7NM@2Oj*wj-lmq3N z<8;hx3aBFv)ByO9bTK3uT>^Mz3;wsW+qiDpVXgVWuq|o ztyUFCw$C!*{q8&N6@XDJOwams{`Y>uKhwi;bZ)kS9K)4Jzvvuu?R(Vi$ri#0;Om;I zieY`-d$pf}uL_%buAOVwi@B|&ElM$5KD@;^(6mPI&#DOaBHE>*<_zER z#Pke=sp#&jIep@<9Dd^Ugw>Crapj&hi~w4Fr*Dn&Gn~c8TMQ+wx;^BncuQy%t7X4o zElF_0Y|9$zFF4cycm=qq04A3JT+RU?XDtOxk+fy;$4`Ts0x@D**qFof6l|Vm#9gl= z2xl@f1lmw%a4ulx+gw$ESRX9XN_qb~jk8W+pJKi7gnuhqWkYryBYJQ;xzyVwUczg+9$^+bfQh>Mx z;~mRvW!6Y+Hb%FdZeq?mcO?wuyL5;m8n4@Cfe#Xw)^4_pzq|qFamglq1cFK1Kh1qMA>J>aG?GW-s~-!mT9ayXpvaL zYQ_sSzfc3<04@NSUH~W&BL;v_&1-~*5^$P=MG5pYs8=(miGqf$ea*h5AiZm&Ys2dV zTKeHCN4xd=TmdL$w|Mv?p^rFY<>#6r>$GWTLdCoF690WvlK}!*P{|~W0M=dJSf1sD z0+NH=?&#&$4`T*l^J=Y_e@R1?V4S0)KZcrLr~z;Q7XZvI0p#@oK*Iqg+%JzzaycED z{66En$;O!D_h)>-UGLlRR)y@2pCS+=`Q~8v!9&U`0DVEyw&V!td>TK3ou7r*J2m$` z+?AQWYeB(#eY%4)bs0tgWrkF`cb7$aCqBE>sZNC7xF*3oz8E=&L$+OMLtczzK>4(h!u6-C{W>}S{r(d{Xx4pk>B0w&_Zn+8y=u;T>)vd zj=|~`0P%fd9yUsXBZL^=O~yB4B3frGmS0}I-?SSjP;tJ);{+psLu>B&TJGzKK0TYs z4rXXI%zg89pZ1C@4&&m?kMe==WhfB-!Up+QfW;*Mr$q2gF)hxI98)&|>!x(w%ecs-aw5Llf=TI(T zy#95w`(80>5+SSr{Lj7%_Lc>IC-2|$WW9!VJ2jX374vQu3Vl)_dT~A-JIHb=KqbUx zgkCi0DDH)Q(Oh_`g~X<(oRIBW#1tYv+A~mTz+v;-^$=F&xhLWlY~NH~p1K@^ihH*Y zr)<*RGhhwCE5Jnsu>1o6+B@!3KMpDPoPN>x$m%2g(7cR~ zn`jBp`NQiu5%JhDgbB+ZH@kr1b%8_~z8H1LWw>;LgWW#SAzE@X#TB()Is58P{;6Rg zxm?HdN+IcAA7q2RnHOh7IUq{=5jWJP1S}_lUfIZ)f*w2_&juYOTeX`{R2gMWSCLTO z^fh|6I()RYEy<0q~l40l@kaK<*9jpvM~g14k>qHdF7>+J<~aIw!|u#*TDb%#KC!xD3Jj zA|TJtd(6D1Ajc~JFE?+x$2Ox*PBco!ib|}aS2!U%`TF7nD~}_E9lx@JwHpLupM{z) zfy^r(MUJiXar6kDyuiXz1>$i26AqRL3ye;v`Gpz)2XFzv<^n(&W*m6t!{|E=kv8wrvJ<12fH?0os>6oY`mX?tu}?Jg^DQ|Iw^nrUjTVs<>Lo(ZBQb(-kJA!{pMU~0WE8s=}VObIoD+MoR z@1aM+6#%MRD>@~K?OB-l=Roe|uW=>1is2JKlRpkH8D-dS%X7jAptCKZsB4UDWRLh2 zhPtsx;nJvJYd(jPS(L>ff$l2hCe-{w4S)l<0AP0sV4?#6dewI`?ae_j%4}cpI!I&K zW=H?Uoe(h=sXG=Ygz_SO6hHxHp@ltNp4V3ZTEt|uJv9*#1W}mN%hU|q7vFRbd{eh2 zoxeZ&9`Q&3)-|ECwCpMb0_ob>~c)$14T^y)}2;UV4%V-z!hnqQ~^Z~zwo z>@NV6i-Z9{Z_rkk9)FKqKXI%oqt+&;)jZK-8nw(9?thfvHCV_~2IPO7!N^Q-bmIyD z&rRd`$VL$#4%KSDJu!CFj>lbDVMUgD6{j&Y-tRr6VXOcwM0vj494>=Cjvk05TE+H{ zUT;5Dag;M z^VNR3vsj`EbLU$?wz#?!$@cdoR{%D{9O~27cn`Pt>{H0@_# zr2z;=0J9`f*-VAQiLJfcexB%dI0pJam z6ZnFx&hq`4Pt9nDUjWv4a(ei`7qRhN8+436g_+g+Cg{eeT;ewvK zlm>!K4A2{2pJUROC=Lt&(ta|TLpd$#-F)5+mY*Dz>ncN$x|^Qyk`b#)X{euj7_5k3 z1VFnX_x&K}fS1V);2VmZ`Roz(_|QuZVG=txEEi>|hb^EDKVWQAO!^}N+-YVjb&nrD zPGL`k$Ryw4nWrHIip2K7+fPCl0s-Ls2f*+4lW(R503ajY)%*MMVHjxFNwrD<^w6h8AK=LGA5gS^C*9} zp9}*@w;yYxGj*AV&L9dT#~}-nt;z8>Z!G~{_Wm^e?qcQzGGRClr8K+A+W&}dCzV2f zr)yM4^&Vfsj|#5mrCy1GUYApjBb*p`!O;xqgF4vz3MO>)A4ItWMXssky|~NJk{XqC z2BWk9Y288k9Q&^;q8o`)8Et|ChdG(1N_?%)I}Y?RdP_*54kb_n;A73jSo7qf)Ko~^ z1Yc_tEj%7^!ZFoM6n$79M3oZeR+w$ESz39}=tFh*M9C=Ad z5VM}I__rH$v!X67)+aGl&eXa26< z)iXiK)^nmCJP0+vPy^rqE&#Y(0w~M_fCB9h99Q?#rrPE(X2^xzL|zz{G(AO|m_Uj2`u*j;#1@-^cMKojubzW&pXCL@mP%p2nCPjWnBLnSBnOK&UXm_ zU#-;K+_~^D&lTV^ZP4=(m+9lF?!mT?u9D=y_0KtF0W~vmj9(61|tBQ#DW#h6O58vLDy%iCe)@`r=b002CCXQXJGDa zZQ>!Q`Gpz)2XFzv?Gk|dApk@_HtpZu?90nfWEI;ZzJa0rw`?|>nBq_VF7?n>((lxni$Ae02~U!i`@lf>iW$MjgxF8%ACax zDjotr?3?l%|dhYTd73nghl;+c2 zKKg@$vAyCSnyvLxZ9;aH{Atxf8l*Yp~u3&fm4$kbPfTe@~}hZ(fqh6y4Nl zM#6hfq#=kW^a*!UBh>st4S)l<0N`;603ZnfVS5?2_dAbc|ET_GCFuThJ%N~jZp$oW z{)il{kT%KwCJ^DiD9gIkk7h6cNc%~7QKX!JgpVe)A9&sQ*Jq0#y@J2nPwM`g_LIj+`4d`MKMSIBWwH3A z4pB>T!T`15Z@q?a=rp=qL=iwJ)HI=G_BF1Zvd?hQ?He)Gm@72gwRq5nJ{o3mVqK59 zoOS#%tkFOhLQS!x1d`YfztflCXcz?YJ4l+Zvmup|7KgRhDHYKi%YfT^`-48NJcQSr z89&q_Ya~Csi~2RK%%iuN^aW}$ff@j>HW$^#>!RA!sPO?nQbM#FL=PYDl!@&XiA4@- ze45=EQ8Ykq&>Z3r(GJ`U0&;vatm=62YvyXWS+yy+-FT`spUd``$0_*p0}jlY^y<=4 zC0Q~YqII`duy#A}S1+4Z(L)V@1GoU-eF>m`8UPXqq4Hn@x%&z)0OGFi zunhX)V!v5Kf;@Xfu*vBb5&cvVc-CMm@!4?@v@%3P_K2dv3u9AZqs3;lRLR-D7eI>Pi;Q15PGc{xF zXEz5vX}2)ap042-sxSgjW0sg3Yx8IJ6@cDa^}SpJk8Qf^Oj(T|i-yDtj1=~5MrS;F zL>3-$G2p`pz!>BE3!<+~^l0U0QjcC0_G{=oYQ=tb$dz^9b~h#>^)uA`LJfcexBvjS z1aJ%naE;`knuqxyif(^JbN<>iXb|^{)6Bd`Ax;IhL<_Or8c_W6bR6RZsq__q8vIh$ z*u{_e9OH?|rdqpH`vpRjO9XV~(cGP!he%$q-sRtxC@jyl>3ra=mS)`gwwsdK{!?~E z1lP}&bZ_ZZVQ@DQ_QX%uOhDlS!wH~WLI5oUIBPMnXk1= zzuWuM?GBgD?HYt|n-5XBPjl3KVYjTOe&JTQ~qH$^AD^LjVL`0!RVRIGHP2 zeBkkJs;wOO%vM75^jHC#j<`3U#ZN+}D8=NM44{YB)i# z)ti~!&*GGzkcZ5-&O?=U>y#9jO-Rf~k`}(?rEl2pPNgwz7FC(t0F8Q%t@LkmiR=rn zs3ZrI&HFWh+)b;3zFec;MzQ~P>*VT9;P0l40Pr7hM@S^PKac<8i}=Mp;PM!xh2!O6 zNSDb!&w)EiUTgsHL}7b zf2oUObXU&-uJ#}Rf&zaZ`O|*#Ei!oKS;}yqFe)2kGB|rdEkfQ4yIRGK==wse;&u>s zC2`v|CLr^7I+xhf=Ahs0C-weT`$@v-Gpomx#CI%(b06!Sl&#$7ml>+KyFDCe5o^yn zRPhspz2A@CTDWwwrEQBRfAXM!KG%|ZYO;J+h_(??6YcKN<;>(wHB7_wniBKk=Nr#* z1w-=74E+R~Qm>7czmySg!bN6-aY)Ly^J|*{tl5M++-FbWljZ40i>G%DsKJxUBc}b4 zZwOzG`%2Y+*nxly4g`SD0SI_&2mT+g)=f_iA zO1j!mpxllzQW%0t>OVu$?WtJ1eY12I5H|!eOv-_3d%+!YF5m=Vyp#AWLIb z>fJ>Ru>{ttUZ87C{DGbAZCl{*tl(Oz{_!>Dk1zsQZ$%2*Ca0!hUXQEvQ+7xq`RL+7 zkzdHAdl;Iho#X?*`{pW(|6vCL02l}Wp92ukAP&A5rm4?C$CdigEeSVXWG)@ie$dSQ zehT&&P9b9h8j5_JYM^%H<0o5)4gYi>H2vP1?x;r7o3DB^kK|R~N@?Q*gWl4& zQL7b0D8I(k8?3|y2{r;t!{7iev-lq#AppVx0pN200vd_I7sP%85kD{eLZ4B}is*zo zOqG29P-L-#h+YvNRNrec%Ju+g^QswRCoApi6#$jn5~}?(6W8ReUZXb9HoD+M2#26d zbS+tB{J_1tNR|X6fK-(6=~Wa8CmvnooL*z6Us>ish~g9E2h`v@@x61H;2ntnL*B1m z3IPxv2ml`e1Mmf35}!Lyt5sa;UhF}9uY>1?>t^ozmoK`kdW5%#+mX{=mAeAj7*;=< z#Mqcz0Z724+V&%};A(2rz=%PAy;aSirW&FhZUguU~xVNYh_! z&$hu4MTyo;Iwmnc4#oMi&45+Z*FrjjA!%4zg+r#a51U3VLn^)R$O8Ujku z=HC{(RfTm0;MW3$TT=c)-QroL#=^{n zI}|fGf!TEw-`L2*GVqzhHLUZI_AS~HAjjFk7#<_cm-Y?#mtFlSvDaYXL^?ClTMV4XhLHlvq zpbUtL#l6kylR8h$tF&q|i?fA?M@|&{Bb4LOPi0Mmh&b}#?I)qbfB=a81K>~l$!0e2 zZTLj=KmjTnK%E<9X;vYdZc*YJ*Qr^;<@&|A;V664`UD{A(xBAsk6~lK+fVBMyY`cP z>pksp?6_)N$fvPnnpJ0~KTH`jw;w-lSKShDL4238HYbuJxhlvu`OB@ndE}dmBkqm& zUUKa8v6eTIlS(o8{U1y;F3Oq_0c`^h5s))HYl{`bA$Y?61v@mO1amaNBx05|Y>wr(zc50T)- zbARYrrsMd@5A>J{)VYP%VJ_5UXw)%4A^#O8fV#fq)7XvY+iK?s6n&R7A7vU(Dan1# z1-Z1|3GBA^@7y_E8kC(O*h=5#bIpwD1i(oC^g%7c&j(&Z)I2O*d9obCGhaz2-O9X= zKckaGY!C;p!)qRN(NH5G~0QVi)SM|ys?U6N0eckUEO?sl0A!IKSAJkUO zd>5VRd0j*`kZamw#}ts;cs1xrhk7Iv(BRMKxhzHtwXXmSNm=AX2%k@O);~Jb`Lgc= zBY*?hYQ?O3z>YM|J$Hsyo>#&Xu2DJJq)MpcRNo)26sf}jKus_700@BCO8~#Xorn5X z`~7CA-%s40ZFVJYZ=q=g2IFwb)L)CidzBRQ9T^44rEx8^-lIm^D~1OWp9orB z86lXUumHjgwA0IvYh^9wZs0wDepz&N=3ppVz+VfoZU zTn^ijuRv8C*`97DL#muDZ-DgkVh2XFE}&;r8;^9Q71#qe>BB;hDo?{N) zH=#CTV7@D7`Fix}fpKqA0gM22QbZ2J9+o)02?Cb8qmKrYYp_5|i4rZScxIgU2K z0YFVJ^Z*Ee7Z(6pB*6Vg?;3vzJ}R6SCTj}zAKXWZQyEpuLZ_IiY((L{LCI0F47`KO z`u$MLAomJ@;T!FtuB0J;zMtIeQ=55_l`Y~sJaq?NWfH}%U+6#DzzD$L9?60diKh6d zZ)I60gWBe9qi%GHv1JT@>n3BcCQcz70QCGqjer11xCBrF?m*o5kvfc>{CSev(c!VA zOyr{i<5d4=o$rgZXUmXp-B?!y;*BV9;5noH(+t3LVafhY_-8H!y$52QbpBwsW4Qh>Q~8#F z) zEe0QWgpp_-tR#lzy_5i23!}bR03`p@5{yl@R!=i}*xxmXW%E;rNTpI?%_tuM<3`Nu z96ceFlyDd;K)QR`_0xf4%}$bDZ)pT0BiHhubLDSPvB}W*0vMxrGvENArWbku1VHj7 zfIaZCE14oa_|9j^=fL5bKxW(Y%^F@WFTGO#&-aHe*m}wK-y0t z0JU!SwVPfCj94hU--{FrNoZHq}n6KZ))7lEj0d>HM= zd9}aWPd>VAKbemHP3HTJtbLUa6CP~!-)Nm5T#NtRelir~{ygnF@A}Cd+vkO|LPyo^ z8*41yl{p`91&i&_JiF!rAer-{HnYarURDKi(y-PTNm=RqmL-kQG83k$&D`a)?#n4h z>Zy#y`>TC65^4F0j`AEsbw+jp4{QYw1k_^C-@44#!YB=wsr+fgoEFnTy8#ZN*2k?d z5E)^29jLb=!0CMeJ%1Fu)If&>H3Cv`~hiUu^AJu=lmUPoomfT$VZ)til7nT6-iNV<{FQ2pOsZ$T>8u#fM}9uW#> zJ>x_*0s0`r2*3^hJt@-;(n1bJaT{X^@fe-Hw{(=7k>=aue6zR433PA(P}2)N00JQG z0zmt1@IsIDfze!RR@ywId*cMWS(NTILu^ipsYqIT!%%~#N;zXXB4a%sEV^oC^03nP0&AMmmy%P%tzyQL=kcT@* zr_^KY#c9?Fvc6*0YFVJ^Z*Eej0*rA*dE{u zu6HKLri(UGabDe#vtWNBQ6kC&Ky7|H*|XXpo>`C=S~wj1q> z*3Zv@GO7n;^gk%QuK?KH*ncI&)Z93I03@MMod%iA^z-hl=19hKmE1NTd%FiCfDsb+ z3L)F&ZgiA4s}ZS4peLI4b|~XpdZWa6yu1U~?BEpudVZlsKmcT20$2rsTToNg)JE4+ znL3Et*u*4qI$~^Z2Qx>zqxibyvd`GP#0Tn!7R@}?-H5*epmdVIrLW7&-hv!Dqfs*c zpjb#*RA@wsTCWPL_gvX%14aNL)KdG0#JKUjY@W=I{f8c=tyQbn-7J;LwZ~Wnv^hw_ z0YFVJ^Z*C|&;@`_bz=Ys@CngX@e$$kP@+?kp=!qhmeZu{Kd}yh zdWiHcKjTv_n*o~r!iq$@)Bph$kc~B=#!AB5cVYxT`%#{uVu;UJ-{p2mAZ&dY7>i@~ zloZ~6^4|i;{R7}n`^ony8UWDDSj^69#KEnfX>0GNe(>pj$JoqK@r|B!&FqS2oyKzj z;sXkQ9{|uaMnu#zF)7411^;{`ZG_(!IvQehsMzTt zg|cIO=1QGB|GJ2O`kE~&{d2ovUu!hW(HKZ%nDbNrU`J!la<9dfoatb@%A=1GYS(!A zXZKrXT3yL6XB`Je<5)jDaaJf#s9-e8BB{kE)i&qhBL5V(qHajX&dmX1wPDKDBQ$6h zL;j3sdmA8PJoqBZOh6$$?dxl84WAPmc?x*7fo=(E1f<&J1p>g4fPgNv2mt6HM4yq- z^tK$TMtp!ERb1Nc?K<1DTZh!S$5Y?$xKdaHZ?mKt5_A^4xO%^lfBl@4Li4rio~Umf zg|WTmS>-Y}XO_;L4$Oplq9~V47y+EU7V$(IxtX`x%-Y74+>>b*6w-yq6SJ)QBr8!- ztw;q90Gzb{x@86*v(MPf}`$3HE==E916b4oU*^Q` zk(WS1+39?Xhefmab<>DgRGatdy+P%cdhIi}cl$v0bi~Jqu{Hl(>Wtp|;@f)j*)c!W`mRgeWPUhK8M&@=X_1{ zIQOESUvL26r2W?o0-zue06q~Qpj&wZTmketETg+{a;Cm|u!p-pn-cX}z_s$P;vx3R z7@tOAy$ST;n@^0FE#kYX050F&QYwVaE^Mv@`JIu|vdmn60f-(lqZFGV0ESl(^}+~1 zhHDY!eHnUGiZF+?dCtS0$IMn)0(OD^mCfIqx{rov-~j$>_Q9`*04NLufcL=w8j}H_ zk^_6aW%uakiA8}Ly1Z=%UpacK$6qP2soD-oGHbb+12sAT%ID$$$}0dusCXq#CR;pD zBKM3xl+;rv4rZ4)CuhsEV1mBg?UwL{5x{$&q!Akb4;+V5XO>|DeLr>>{9h7Sv{rhPU;xSL z;457{^9VH30#L8*q+m@gtR(hTOLNIc5RhT%RrqV}f!+X>zK*5{$&;;I0k}23o|A7+ z%5V#LGh557Mf@3h`PZ-YD=SOYTPa7}!mwWG7-A(p+VKWmb|CK8{IXX6(gS=f3TA3E z(FVU3Q@WpvzVHeFPTGInAOMO30pJq>0zRNU0)UPWZK7;H0iSa!;@=0=+_N`RIS{sd zTHu{HH{XYiox=b$q#Hj8)I2!90>FV~Dje9eE`5iS^8U_&N$?tp!8auT;V9PlMJ4*u zU(7I8fGE${XOVo(f|?B5bB!Moys>O3zZ|B8i^Y3{kof?P@ZkXdYxcpfhX5!E1c3L! z09*qBAj9_hzO9)e!PR%wm@gY~0QQ~>?=3R2zO6pHgOa_KYXjt7sTnKlKvMz(fV7`H zs*#Qm7F8*-Y?25F7~mZM78D3fv$C=k1>T7A zKg^@#4<*4nx5CCd1)@Jt+b_L`Ui!QJq#@)cZ`N)ApiWTA7(v|_!I(~6|M!$5$?q>L zTKdLx#&p?wCM@`WCL%Gl5x_^(z;lz}IAd{R1iBcl-`7J5zDBZY{#=23I;lzj3KUqG zclZX8M(MjLXGRYNN-^Hd6I8A=8Im1;g&Z`&h4Mkm?DUHFq!hdKlnnE+HpBE zxtzO@JmeSVIG-;e6smKEnI|f$@g9A#!;~vlN`{|GYs!mIeaAX95KDs&N58`i-4a7&(} zuFt$QSE*#=ff0c7cYHdG6JWV~@5`pr&LR(-!j)>_FA_^#lS4-%3o)tiA?ZJ-|8htw zy9DsA8~_?DdaAP-mT_lZDZ!+=wf?$mXo_|Dpld_NSBo@B8(%WuEm!(q>xt|_R{$jG z{7gJmU0tzLhuPNh{0H1}nU>a97-;(vOS`KYsJmeV;E()5YkQxCzI5BR0g3in?a7Ot zpAH=jPqr0uf7msh#livnH2~!o0Q$I80iahQ8boN1akicZ-2eQD;w6!rJ#T=oUs?3^ zll=-Oi%u6H_R(19IWx;Y*FwnR?RwY7ak`ZECdF8Fs73FQZt1=%Zp_ecy1wATY9I?E z0JTHsQ^QUY+$_TWXLx)}lK0|rX}J}vlhV7=RAl|?;kRJ_h5TQna*rk{o37_%gcuu4+m?#t8Onan%hj|+l@Oi@q zNOALQcM*B)pC$~}b|3Aqp7Ds&MyoQM?j2%u;(qZ7)|2BLIJd(cjIY7$y@olqrPi9j&>i#ZAs!B#TXP+Z1 zt|!H4B6fZL%OI@nCtLLo38L8UAL6ca$lD?H$z-_E*7S{#;{ohg(0X3P!sjLaLjEs? zfT~LXn?C>`2@zf+X&Hmzi0cy>w7-&uXh`a2mR};(C8PeZIpA%c0pfdlZ5zJ7^G^k^ z6Dx>Z_|Z%M$uZ&QJ{#5<1jJ=A(SGn0h!<1#uDj1^$uJfTCIYKP~fTTgoEt++cm zF*^D%w;Jay_YdJNA%YR`3h);MK!$+o3jhPUyZ{i!<57z?*SAJkmEa{Leolz{D|5=W z>C;S{OKkpB_x#`o#2{%S%Cs7szp4N`{Mt6FIsI=cg{LJSeoOT}H(}qUcIIVJJ8{)Q zO16geayYE(pQ~yb8|j^QEnjsJY-V3`(n9)52+TRL4ob4nGm3))_-g=aE&+5013+I= z&%Y#;Y33*B(NH^VY>K>S$HKhV0jR@uiQ^T}E4&V*l$XRURGYa21^{V4`EWa{q4Mc7 z!;_e8%QuXgZq*`DZzvuLwFL^;A<=n}e}S|7g>a=v9$|Bw2+C+)4xV!qL4R;{wNZ3Je`jIFk1WSe?`w7&W!@t*U%o9)YAQ6UO*M|rRM(){^PCDZ{P$IvH+1gX zlIA3C8Xn^|-chy16KJb(h--2#&O7<0KhE4a0wU7#oxqoSG^s@b#&;rr{B8&96&2$(pO3S_#ZjFaT7^WS>L)M)Xe6y)ru1#`Dep@2 z(IPp0OV4v=B)_Fj@$vM|#p1n2H@=_fDj}As8o8?SmiZdc*5Y)rq@=IspTj2 z>T3T)GRhSuGkU(#4j@LueqScweEbT40&x%1={w8SDlX8oTn?)pJGS!!M0Olp_UVoE zX}RfC7yTP^Evi!&P|0bc1Dd0Z}YYn{6$4eZt7O z%rYo49S-2H0cgAcFl=!Q0FhN>`^jnzYPZcjO}Rsi(=g_dap2TJ`L+7ImNxcLI@vd-ev9X16107bQ07m2t z0U*+Vqn5>FHw`7d;M_>2FAKeDx`Dz>tBADvl=|UE#F#*{L_SNICwQ?}0Mb&mbvYuf ztB{o9P;7H5K2|bnDC6k9s{a<*s=?K_;sj#_c$0!k!Gplu%|z48ZbKAMZ0{pMGFi3R zH_UuXvF!9A8XUl11Muz=Ky3>EB#!p{h+%yM0p(D!Tw+d?y11<~DNIK-=Iiqjhg;R} znSr8NCy|sVL&sMDOy3G)x5Ur9qg1-nuAKOl(v3;a>Yc5rm8~9iG`-3jSldq)2{dJX z|9p;dumUY26);6C@V|ipK-y0xu4acUh-b!C#-N~LRJhj4 z8#`qf5{Xvg(}tp0_c`8!u>!2;-nvJDo<~3~uVSk==+e4wlf^NVElCgB7fqopHID?{ z$iiHE^>BlZaK3YnOhD_t^)+$qfIEr6{-rP;@&sH(c>77{LLd`Ct$zUgZa+DiJO=>H zw>zIM&|_cDFE!91L5+Y&Yx^S&5HN{YW`*0hrL4`2Yt1HNDUSAOPAg0eH9qKt;37ovM3Q zn1bojeRVvPyjTwgbFVLJ(fk;8B2{`nwFy*?$hdp=W6RtX0LNmU*6^E2pqPgrIEEJs zzveO2kQ3-<&J8N6kZmsH;ll_Zi@UU6!6BY{;^%W2b8XIUg$BhIf5Eqvwh9<*cm?CH z-~gcK7it6qK*uG3&vpQi#hZ5aU_Fup?Ov(Pf^!!4N zfB<-Z3823Q0IEfP^2$u&d*gcCiZ;gmpliL}qyazFgjTBiMq~JXwPpa#JbAEAiaS!S zD!_>1dR;VzB~_I54}`|X&*TQ?rUMq7&Mg*kHky^Q8I3RkVDJ1k)7e3M_ZvaAd#R{y z@2?tsD#fmP@@d=!R!12M_;T-1v->XsAON~908EHs06+srR2*KNGgVe{S@FoW!^P>Z zEO$446~txZc(8drR{aPhm%g@1hY-?bdo#0ctgg zLukk87>SwanhaW1+PYq|-N81(aTHar%LJcDTjUY|7w1e~Z=!I(A@?X|$mRS#g zz1;X7Y#(uCMv*od;X?q_^g<7S0O+{@Fv)-h06CiFCh!eVW+Kn7r^}?ZtV@(ObyZo) z{k(BcN}wfXx1ozHLw?4`ep zFu@4Gu6{PjQMq0rW)k-!&&`qAEDiA&IBl|@b?kQN?ta~P00#g)zfdC}06ts-h_3*E zp1djJD<+ZnY#q`&s!Y9-Xf77LSHG#)J(y)=hW&_l52){!cVmZQKnn~2(tc9s8d{#} zdLxIp4PvtWPiNaES*7D-ih5&DGX*=;^lVr!xOS{L)X6|BjHG@e=l{83>V)`JH%sYJ zo?Npy$%$2>R}M(Za!;_lfyG}tS6VsY8yX*{@te-H3eaO)xxRLE3MRiLz5%w@z9N&>tBIPMI#1A&@GF99m@#^6ecVB})%iw5+RRC( z^PcdFbE*={#sr9L01=oK8?%4O^P-qt&N^1TRA%cHm6@HRermUO{+dJ}^l9&2;DloH zM&I2O+blO2tIfND)}6aNxMb=vGA}!EPDBwS(G+F_NQ!jn-IjHq3B$V&LZ<{h0#a@I z{$K+Hd~`PhFM7jgd$3t6()l5>D-`jr-{RM`AHEgid%C$BR3{y#W~o5UG9mR@-iK~i z!woLu2PsLt^OAelk)?N5ENyXw1zrmuKmZI} z0GQH`0)SjtxKL|$A6b~w-W)`2m*9{|5Kws~V7`4=a5D!_Ag>5$;#`sEYSH!2b#47B8FqFL-0!UH5w>aNVvTI6iCVo_pmkE;lGS3}<$12(AhgI<~ z-5VGy0GC7tMsL6fwbAAb@5-mRLHc#>?jHe9#)=kebdem;>EHmMrWbku1i;V*fN60a z0BBsmfcAs(1CmZ)q5mP@cy+z(%jz0nbmxNvFZNMN?M0x#mxQ-1$EgPzU-JZddZ9-^01RIOs3-+bI&HHwkvaX~J@2&*9UfFkh!hmv;|i&|C;Ba! zk{D|x2#77f(jX#cx0wQ74!7^Y#$1khc5oz?~|DP^B#{;vR; zwYZj32YvYk$`rfTEr^e~tCvly=%EI{Z}GgCa~Qn@kc7u(W8(LnW``M|qxbW5%Pc-kNP;8$B-i^1kcs7_={`-UnJDm3zR z$T2|uzCo2V6^sA^1~%Ws(Gv#W?R>FXYw=w1%?r_^`z&)`Pj5*YykA3ef|_5b0dN2p z0LCr=%wC%XfGi0tkQHuNKb5-u>g)H!@*1M}GbJ6qECV_A_RkDRlYu}L&CUfZ_vkh- z07&~uW6Lr6=3NQiN5?G#zU>C;Q!E|$xBUh-&pYrq4~_N#FajtI8)C9|Y?1V;mF?%J zic_$9|10SKY46PAq3ZrPZVh7{OIgx0_GLlR5Aq=`? zYmu=MkKj!zE=lOHa>oxbBd+zt1*L}Ud@B2Mx?z!i4 z;ReE)(aP9Q)lT7;z$+G0N^R4QUC3`kl9KZ(sW0DGZ{PJq%b$Y>;FXPKY5;=~wsv1l z-O3g)59 zR{ghB|F;^F)+6vgm47*VT~LyIc)k5iVaoM7dKfAD%Ngqjfc5RxhKF>`G_c?z;SBZ|EBUjGAO2>S0_=yLIUNkN79?KCfllCuU7Vw&<6= z^5ZY%#WLhCtLAfQ_pZrLI{iEHlhI(HGg0n=95X8cjx0~pev1#METIF zkF{6Ny5G$fx{uAgC?3MAU(zd1C6MYfi-b&hK~|lkx@y&k9g)lG4yq-x9vr(PMSq0s zkfA-9Br)`l)5e&jGaMkb1Ymk+M@h@C8q-R{FBU16)E>z7YLZBiL%Vu{mC3WZic8Hl zUs_wSN3`@xO6HNATU}B>w1&rpZ`BZZwXmIH)T0MJjibr&GYzs%3EI9l&(XoD1wb*8 z&)ZPI2nbTz_WZ4 zs>qRD!CV+ghf-_TJcH`b2P2fv7Og-UaeF}hNvz=?k?3y2gCSc05OutY?WI|EyC(%# ztaRp92_fa8gtf%e_m=P~P7AjNQ3(JPAsrQh9!Id1@7bSks>&a8#G4IK2tI}^^96=_ z%3r29 zcSBUkq=7)$767@=h}$p79b=Z0VM%N{9^ToYs5d(kFhs8wT#UL~jtQp{fF?RAVMb9_ zRnJ)6+;>UkrGPJ3ISP?}Q{DF;Wvs#>H;VqHXg~vi3_v#-fPTYH0OVR}zwKL4l>hwd z4L<{uQk@5w;5HYB)}C!KVixWN$Gos~uGxJ-&AWa9P-&aQSjS%TA+Fc_PP#TUkXgVK z|4uryl3n6p3Zj1-wckc77$TIb4Ys*opi8M@W?|IZp<{d3?+6NC|6zZssHB@FMgLMX zpaDPzpl1_+Iwt^h?a34NuMi;wEAm-sKY24|QaNjVyau56(b8K^zVO`1OFm>0!355*I{Rt%TQxL&wr&;Is7Wwo`>IB*1oaH`TZMFJM((TSL#zru z4l_Q- zw$TNc0$I%y?8tzNxH+thqs3YD0}k0O0IXYAf8^KhYmKo1?};tznYA_CKL6&YA))fB z5i~GR`4yF2fWsdZUd4>VJj`6l^j5Pqv!$8UtKDg7^#V})dB~|qCW`*0Xg~vi3_$ND z0D137Yw!V)Z@2CxE4}43Zpp0dI)JI>G^M#npvSoUoT0Hcp# z@zA&uw>+Dr=G(ENin@{pEvYI7=y&G{{cQAZXet4?*I>r!@i4ZjXUZw{=-_TGTh@HRF8}jzKE~Kbt$m5#oag>;b zBK`0mt9x(Nh++4(?`6q3-OarPKtce@GZM&I!0 z@)New+wGoOg|qmB@$_6xWpkc4?8kmw8KG8$KJt-ua>~y^oDB0#gR!Vr$)7s5$;GK5 zoz$)K*uO%5YJzE1*h-nmMU6vkHMd`Uf+(`E9%BtIPXMALmi(e8Lp8zsn7O(~W0A6^ z{l14!%Y8S?TlAX;@4lRz>pqKX6lZUvMF4UH7+41YLw|e%GekcKfRY;GoNxqNl6#Y? z5u3`1mx9^#&1#(@o)WKx!o4lqpJN^KT0L5GDt4~PPdfj9@{{|RwIyx*M{Sv22X{rf zUcY>LFYL1JlxTOn$SRlnDYy>Ww#b>aN+3?CMPi~XV~zzMkodYkTG-h2B18O0sQQsU zyM-m%13k4Svlo!?Nibl{v0N1TO@1;e^&d`(!wG)Ax&py?)y(ES1@6i~6ISNA|>7UiVUk-@7 zfBSLs!XTH*0})p$W1jT>AkJq5!oiLgIH{Xegor_r`;|k7qzFNn3<<4~&OC~J8bt#d z@?_)($uVyz00w}}KBFj6?#wG$E|*MCES|>c&D)o@k1wR6uA&A!g8$=<)&J3AV|O!k ze5=#rI`+}u3zuRs{A7lq^w32Ow(F&Jz(R3t3Y|Evp18C~B>+ytRZpgX7vCfmbVT>~ z_=c)ew*+LJOV6#YxlfCc~=fMGHK z!w%m8a1Mj!jn{L#<1Q3U&~U*oIpMR?6X;qC8BVZ=c?v1t`l>lTR&kzG;T&{45of$c64^7{d&LLVX z&?VnJ-di8r#6tss?q5h7!`=^@0KEO3q(AEQ>~Ns?U}+YRq7l@l_S6iC;9qIh&rpcT z7i?K*`haEEaoVYQiT~YJ7XZz%)|zHgV8YFXYdUrSM&2b4buj@~{6z(?=9+8OP&@xQ z`O!ZX0TZ^3JAv`r)hCUAeGB*9LG5uw?$Cnev~D})H*RPVfHEN)0DL3^@Il`g0FA#A>xXVT%)`d7IaqO}^HynxQ-h7E)_aQuqeiT}f9>>_fSn3?Pf-;L z8y7t#tC;(KK-k+4F%~acXs7bKzCM)^VCq$y@a 0 { - _, missingTxs := compareReceivedTxs(recvHashes, txs) - if len(missingTxs) > 0 { - continue - } else { - t.Logf("successfully received all %d txs", len(txs)) - return nil + + // Check if all txs received. + allReceived := func() bool { + for _, tx := range txs { + if !got[tx.Hash()] { + return false + } } + return true } - } - _, missingTxs := compareReceivedTxs(recvHashes, txs) - if len(missingTxs) > 0 { - for _, missing := range missingTxs { - t.Logf("missing tx: %v", missing.Hash()) + if allReceived() { + return nil } - return fmt.Errorf("missing %d txs", len(missingTxs)) } - return nil -} -// checkMaliciousTxPropagation checks whether the given malicious transactions were -// propagated by the node. -func checkMaliciousTxPropagation(s *Suite, txs []*types.Transaction, conn *Conn) error { - switch msg := conn.readAndServe(s.chain, time.Second*8).(type) { - case *Transactions: - // check to see if any of the failing txs were in the announcement - recvTxs := make([]common.Hash, len(*msg)) - for i, recvTx := range *msg { - recvTxs[i] = recvTx.Hash() - } - badTxs, _ := compareReceivedTxs(recvTxs, txs) - if len(badTxs) > 0 { - return fmt.Errorf("received %d bad txs: \n%v", len(badTxs), badTxs) - } - case *NewPooledTransactionHashes66: - badTxs, _ := compareReceivedTxs(*msg, txs) - if len(badTxs) > 0 { - return fmt.Errorf("received %d bad txs: \n%v", len(badTxs), badTxs) - } - case *NewPooledTransactionHashes: - badTxs, _ := compareReceivedTxs(msg.Hashes, txs) - if len(badTxs) > 0 { - return fmt.Errorf("received %d bad txs: \n%v", len(badTxs), badTxs) - } - case *Error: - // Transaction should not be announced -> wait for timeout - return nil - default: - return fmt.Errorf("unexpected message in sendFailingTx: %s", pretty.Sdump(msg)) - } - return nil + return fmt.Errorf("timed out waiting for txs") } -// compareReceivedTxs compares the received set of txs against the given set of txs, -// returning both the set received txs that were present within the given txs, and -// the set of txs that were missing from the set of received txs -func compareReceivedTxs(recvTxs []common.Hash, txs []*types.Transaction) (present []*types.Transaction, missing []*types.Transaction) { - // create a map of the hashes received from node - recvHashes := make(map[common.Hash]common.Hash) - for _, hash := range recvTxs { - recvHashes[hash] = hash +func (s *Suite) sendInvalidTxs(txs []*types.Transaction) error { + // Open sending conn. + sendConn, err := s.dial() + if err != nil { + return err } - - // collect present txs and missing txs separately - present = make([]*types.Transaction, 0) - missing = make([]*types.Transaction, 0) - for _, tx := range txs { - if _, exists := recvHashes[tx.Hash()]; exists { - present = append(present, tx) - } else { - missing = append(missing, tx) - } + defer sendConn.Close() + if err = sendConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) } - return present, missing -} + sendConn.SetDeadline(time.Now().Add(timeout)) -func unknownTx(s *Suite) *types.Transaction { - tx := getNextTxFromChain(s) - if tx == nil { - return nil + // Open receiving conn. + recvConn, err := s.dial() + if err != nil { + return err } - var to common.Address - if tx.To() != nil { - to = *tx.To() + defer recvConn.Close() + if err = recvConn.peer(s.chain, nil); err != nil { + return fmt.Errorf("peering failed: %v", err) } - txNew := types.NewTransaction(tx.Nonce()+1, to, tx.Value(), tx.Gas(), tx.GasPrice(), tx.Data()) - return signWithFaucet(s.chain.chainConfig, txNew) -} + recvConn.SetDeadline(time.Now().Add(timeout)) -func getNextTxFromChain(s *Suite) *types.Transaction { - // Get a new transaction - for _, blocks := range s.fullChain.blocks[s.chain.Len():] { - txs := blocks.Transactions() - if txs.Len() != 0 { - return txs[0] - } + if err = sendConn.Write(ethProto, eth.TransactionsMsg, txs); err != nil { + return fmt.Errorf("failed to write message to connection: %w", err) } - return nil -} -func generateTxs(s *Suite, numTxs int) (map[common.Hash]common.Hash, []*types.Transaction, error) { - txHashMap := make(map[common.Hash]common.Hash, numTxs) - txs := make([]*types.Transaction, numTxs) - - nextTx := getNextTxFromChain(s) - if nextTx == nil { - return nil, nil, errors.New("failed to get the next transaction") - } - gas := nextTx.Gas() - - nonce = nonce + 1 - // generate txs - for i := 0; i < numTxs; i++ { - tx := generateTx(s.chain.chainConfig, nonce, gas) - if tx == nil { - return nil, nil, errors.New("failed to get the next transaction") - } - txHashMap[tx.Hash()] = tx.Hash() - txs[i] = tx - nonce = nonce + 1 + // Make map of invalid txs. + invalids := make(map[common.Hash]struct{}) + for _, tx := range txs { + invalids[tx.Hash()] = struct{}{} } - return txHashMap, txs, nil -} -func generateTx(chainConfig *params.ChainConfig, nonce uint64, gas uint64) *types.Transaction { - var to common.Address - tx := types.NewTransaction(nonce, to, big.NewInt(1), gas, big.NewInt(1), []byte{}) - return signWithFaucet(chainConfig, tx) -} - -func getOldTxFromChain(s *Suite) *types.Transaction { - for _, blocks := range s.fullChain.blocks[:s.chain.Len()-1] { - txs := blocks.Transactions() - if txs.Len() != 0 { - return txs[0] + // Get repsonses. + recvConn.SetReadDeadline(time.Now().Add(timeout)) + for { + msg, err := recvConn.ReadEth() + if errors.Is(err, os.ErrDeadlineExceeded) { + // Successful if no invalid txs are propagated before timeout. + return nil + } else if err != nil { + return fmt.Errorf("failed to read from connection: %w", err) + } + + switch msg := msg.(type) { + case *eth.TransactionsPacket: + for _, tx := range txs { + if _, ok := invalids[tx.Hash()]; ok { + return fmt.Errorf("received bad tx: %s", tx.Hash()) + } + } + case *eth.NewPooledTransactionHashesPacket68: + for _, hash := range msg.Hashes { + if _, ok := invalids[hash]; ok { + return fmt.Errorf("received bad tx: %s", hash) + } + } + default: + return fmt.Errorf("unexpected eth message: %v", pretty.Sdump(msg)) } } - return nil -} - -func invalidNonceTx(s *Suite) *types.Transaction { - tx := getNextTxFromChain(s) - if tx == nil { - return nil - } - var to common.Address - if tx.To() != nil { - to = *tx.To() - } - txNew := types.NewTransaction(tx.Nonce()-2, to, tx.Value(), tx.Gas(), tx.GasPrice(), tx.Data()) - return signWithFaucet(s.chain.chainConfig, txNew) -} - -func hugeAmount(s *Suite) *types.Transaction { - tx := getNextTxFromChain(s) - if tx == nil { - return nil - } - amount := largeNumber(2) - var to common.Address - if tx.To() != nil { - to = *tx.To() - } - txNew := types.NewTransaction(tx.Nonce(), to, amount, tx.Gas(), tx.GasPrice(), tx.Data()) - return signWithFaucet(s.chain.chainConfig, txNew) -} - -func hugeGasPrice(s *Suite) *types.Transaction { - tx := getNextTxFromChain(s) - if tx == nil { - return nil - } - gasPrice := largeNumber(2) - var to common.Address - if tx.To() != nil { - to = *tx.To() - } - txNew := types.NewTransaction(tx.Nonce(), to, tx.Value(), tx.Gas(), gasPrice, tx.Data()) - return signWithFaucet(s.chain.chainConfig, txNew) -} - -func hugeData(s *Suite) *types.Transaction { - tx := getNextTxFromChain(s) - if tx == nil { - return nil - } - var to common.Address - if tx.To() != nil { - to = *tx.To() - } - txNew := types.NewTransaction(tx.Nonce(), to, tx.Value(), tx.Gas(), tx.GasPrice(), largeBuffer(2)) - return signWithFaucet(s.chain.chainConfig, txNew) -} - -func signWithFaucet(chainConfig *params.ChainConfig, tx *types.Transaction) *types.Transaction { - signer := types.LatestSigner(chainConfig) - signedTx, err := types.SignTx(tx, signer, faucetKey) - if err != nil { - return nil - } - return signedTx } diff --git a/cmd/devp2p/internal/ethtest/types.go b/cmd/devp2p/internal/ethtest/types.go deleted file mode 100644 index 805d7a81b9..0000000000 --- a/cmd/devp2p/internal/ethtest/types.go +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package ethtest - -import ( - "crypto/ecdsa" - "errors" - "fmt" - "time" - - "github.com/ethereum/go-ethereum/eth/protocols/eth" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/rlpx" - "github.com/ethereum/go-ethereum/rlp" -) - -type Message interface { - Code() int - ReqID() uint64 -} - -type Error struct { - err error -} - -func (e *Error) Unwrap() error { return e.err } -func (e *Error) Error() string { return e.err.Error() } -func (e *Error) String() string { return e.Error() } - -func (e *Error) Code() int { return -1 } -func (e *Error) ReqID() uint64 { return 0 } - -func errorf(format string, args ...interface{}) *Error { - return &Error{fmt.Errorf(format, args...)} -} - -// Hello is the RLP structure of the protocol handshake. -type Hello struct { - Version uint64 - Name string - Caps []p2p.Cap - ListenPort uint64 - ID []byte // secp256k1 public key - - // Ignore additional fields (for forward compatibility). - Rest []rlp.RawValue `rlp:"tail"` -} - -func (msg Hello) Code() int { return 0x00 } -func (msg Hello) ReqID() uint64 { return 0 } - -// Disconnect is the RLP structure for a disconnect message. -type Disconnect struct { - Reason p2p.DiscReason -} - -func (msg Disconnect) Code() int { return 0x01 } -func (msg Disconnect) ReqID() uint64 { return 0 } - -type Ping struct{} - -func (msg Ping) Code() int { return 0x02 } -func (msg Ping) ReqID() uint64 { return 0 } - -type Pong struct{} - -func (msg Pong) Code() int { return 0x03 } -func (msg Pong) ReqID() uint64 { return 0 } - -// Status is the network packet for the status message for eth/64 and later. -type Status eth.StatusPacket - -func (msg Status) Code() int { return 16 } -func (msg Status) ReqID() uint64 { return 0 } - -// NewBlockHashes is the network packet for the block announcements. -type NewBlockHashes eth.NewBlockHashesPacket - -func (msg NewBlockHashes) Code() int { return 17 } -func (msg NewBlockHashes) ReqID() uint64 { return 0 } - -type Transactions eth.TransactionsPacket - -func (msg Transactions) Code() int { return 18 } -func (msg Transactions) ReqID() uint64 { return 18 } - -// GetBlockHeaders represents a block header query. -type GetBlockHeaders eth.GetBlockHeadersPacket - -func (msg GetBlockHeaders) Code() int { return 19 } -func (msg GetBlockHeaders) ReqID() uint64 { return msg.RequestId } - -type BlockHeaders eth.BlockHeadersPacket - -func (msg BlockHeaders) Code() int { return 20 } -func (msg BlockHeaders) ReqID() uint64 { return msg.RequestId } - -// GetBlockBodies represents a GetBlockBodies request -type GetBlockBodies eth.GetBlockBodiesPacket - -func (msg GetBlockBodies) Code() int { return 21 } -func (msg GetBlockBodies) ReqID() uint64 { return msg.RequestId } - -// BlockBodies is the network packet for block content distribution. -type BlockBodies eth.BlockBodiesPacket - -func (msg BlockBodies) Code() int { return 22 } -func (msg BlockBodies) ReqID() uint64 { return msg.RequestId } - -// NewBlock is the network packet for the block propagation message. -type NewBlock eth.NewBlockPacket - -func (msg NewBlock) Code() int { return 23 } -func (msg NewBlock) ReqID() uint64 { return 0 } - -// NewPooledTransactionHashes66 is the network packet for the tx hash propagation message. -type NewPooledTransactionHashes66 eth.NewPooledTransactionHashesPacket67 - -func (msg NewPooledTransactionHashes66) Code() int { return 24 } -func (msg NewPooledTransactionHashes66) ReqID() uint64 { return 0 } - -// NewPooledTransactionHashes is the network packet for the tx hash propagation message. -type NewPooledTransactionHashes eth.NewPooledTransactionHashesPacket68 - -func (msg NewPooledTransactionHashes) Code() int { return 24 } -func (msg NewPooledTransactionHashes) ReqID() uint64 { return 0 } - -type GetPooledTransactions eth.GetPooledTransactionsPacket - -func (msg GetPooledTransactions) Code() int { return 25 } -func (msg GetPooledTransactions) ReqID() uint64 { return msg.RequestId } - -type PooledTransactions eth.PooledTransactionsPacket - -func (msg PooledTransactions) Code() int { return 26 } -func (msg PooledTransactions) ReqID() uint64 { return msg.RequestId } - -// Conn represents an individual connection with a peer -type Conn struct { - *rlpx.Conn - ourKey *ecdsa.PrivateKey - negotiatedProtoVersion uint - negotiatedSnapProtoVersion uint - ourHighestProtoVersion uint - ourHighestSnapProtoVersion uint - caps []p2p.Cap -} - -// Read reads an eth66 packet from the connection. -func (c *Conn) Read() Message { - code, rawData, _, err := c.Conn.Read() - if err != nil { - return errorf("could not read from connection: %v", err) - } - - var msg Message - switch int(code) { - case (Hello{}).Code(): - msg = new(Hello) - case (Ping{}).Code(): - msg = new(Ping) - case (Pong{}).Code(): - msg = new(Pong) - case (Disconnect{}).Code(): - msg = new(Disconnect) - case (Status{}).Code(): - msg = new(Status) - case (GetBlockHeaders{}).Code(): - ethMsg := new(eth.GetBlockHeadersPacket) - if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { - return errorf("could not rlp decode message: %v", err) - } - return (*GetBlockHeaders)(ethMsg) - case (BlockHeaders{}).Code(): - ethMsg := new(eth.BlockHeadersPacket) - if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { - return errorf("could not rlp decode message: %v", err) - } - return (*BlockHeaders)(ethMsg) - case (GetBlockBodies{}).Code(): - ethMsg := new(eth.GetBlockBodiesPacket) - if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { - return errorf("could not rlp decode message: %v", err) - } - return (*GetBlockBodies)(ethMsg) - case (BlockBodies{}).Code(): - ethMsg := new(eth.BlockBodiesPacket) - if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { - return errorf("could not rlp decode message: %v", err) - } - return (*BlockBodies)(ethMsg) - case (NewBlock{}).Code(): - msg = new(NewBlock) - case (NewBlockHashes{}).Code(): - msg = new(NewBlockHashes) - case (Transactions{}).Code(): - msg = new(Transactions) - case (NewPooledTransactionHashes66{}).Code(): - // Try decoding to eth68 - ethMsg := new(NewPooledTransactionHashes) - if err := rlp.DecodeBytes(rawData, ethMsg); err == nil { - return ethMsg - } - msg = new(NewPooledTransactionHashes66) - case (GetPooledTransactions{}.Code()): - ethMsg := new(eth.GetPooledTransactionsPacket) - if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { - return errorf("could not rlp decode message: %v", err) - } - return (*GetPooledTransactions)(ethMsg) - case (PooledTransactions{}.Code()): - ethMsg := new(eth.PooledTransactionsPacket) - if err := rlp.DecodeBytes(rawData, ethMsg); err != nil { - return errorf("could not rlp decode message: %v", err) - } - return (*PooledTransactions)(ethMsg) - default: - msg = errorf("invalid message code: %d", code) - } - - if msg != nil { - if err := rlp.DecodeBytes(rawData, msg); err != nil { - return errorf("could not rlp decode message: %v", err) - } - return msg - } - return errorf("invalid message: %s", string(rawData)) -} - -// Write writes a eth packet to the connection. -func (c *Conn) Write(msg Message) error { - payload, err := rlp.EncodeToBytes(msg) - if err != nil { - return err - } - _, err = c.Conn.Write(uint64(msg.Code()), payload) - return err -} - -// ReadSnap reads a snap/1 response with the given id from the connection. -func (c *Conn) ReadSnap(id uint64) (Message, error) { - respId := id + 1 - start := time.Now() - for respId != id && time.Since(start) < timeout { - code, rawData, _, err := c.Conn.Read() - if err != nil { - return nil, fmt.Errorf("could not read from connection: %v", err) - } - var snpMsg interface{} - switch int(code) { - case (GetAccountRange{}).Code(): - snpMsg = new(GetAccountRange) - case (AccountRange{}).Code(): - snpMsg = new(AccountRange) - case (GetStorageRanges{}).Code(): - snpMsg = new(GetStorageRanges) - case (StorageRanges{}).Code(): - snpMsg = new(StorageRanges) - case (GetByteCodes{}).Code(): - snpMsg = new(GetByteCodes) - case (ByteCodes{}).Code(): - snpMsg = new(ByteCodes) - case (GetTrieNodes{}).Code(): - snpMsg = new(GetTrieNodes) - case (TrieNodes{}).Code(): - snpMsg = new(TrieNodes) - default: - //return nil, fmt.Errorf("invalid message code: %d", code) - continue - } - if err := rlp.DecodeBytes(rawData, snpMsg); err != nil { - return nil, fmt.Errorf("could not rlp decode message: %v", err) - } - return snpMsg.(Message), nil - } - return nil, errors.New("request timed out") -} diff --git a/cmd/devp2p/rlpxcmd.go b/cmd/devp2p/rlpxcmd.go index dccecf3c37..aa7d065818 100644 --- a/cmd/devp2p/rlpxcmd.go +++ b/cmd/devp2p/rlpxcmd.go @@ -24,6 +24,7 @@ import ( "github.com/ethereum/go-ethereum/cmd/devp2p/internal/ethtest" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/rlpx" "github.com/ethereum/go-ethereum/rlp" "github.com/urfave/cli/v2" @@ -46,22 +47,30 @@ var ( } rlpxEthTestCommand = &cli.Command{ Name: "eth-test", - Usage: "Runs tests against a node", - ArgsUsage: " ", + Usage: "Runs eth protocol tests against a node", + ArgsUsage: "", Action: rlpxEthTest, Flags: []cli.Flag{ testPatternFlag, testTAPFlag, + testChainDirFlag, + testNodeFlag, + testNodeJWTFlag, + testNodeEngineFlag, }, } rlpxSnapTestCommand = &cli.Command{ Name: "snap-test", - Usage: "Runs tests against a node", - ArgsUsage: " ", + Usage: "Runs snap protocol tests against a node", + ArgsUsage: "", Action: rlpxSnapTest, Flags: []cli.Flag{ testPatternFlag, testTAPFlag, + testChainDirFlag, + testNodeFlag, + testNodeJWTFlag, + testNodeEngineFlag, }, } ) @@ -103,10 +112,8 @@ func rlpxPing(ctx *cli.Context) error { // rlpxEthTest runs the eth protocol test suite. func rlpxEthTest(ctx *cli.Context) error { - if ctx.NArg() < 3 { - exit("missing path to chain.rlp as command-line argument") - } - suite, err := ethtest.NewSuite(getNodeArg(ctx), ctx.Args().Get(1), ctx.Args().Get(2)) + p := cliTestParams(ctx) + suite, err := ethtest.NewSuite(p.node, p.chainDir, p.engineAPI, p.jwt) if err != nil { exit(err) } @@ -115,12 +122,44 @@ func rlpxEthTest(ctx *cli.Context) error { // rlpxSnapTest runs the snap protocol test suite. func rlpxSnapTest(ctx *cli.Context) error { - if ctx.NArg() < 3 { - exit("missing path to chain.rlp as command-line argument") - } - suite, err := ethtest.NewSuite(getNodeArg(ctx), ctx.Args().Get(1), ctx.Args().Get(2)) + p := cliTestParams(ctx) + suite, err := ethtest.NewSuite(p.node, p.chainDir, p.engineAPI, p.jwt) if err != nil { exit(err) } return runTests(ctx, suite.SnapTests()) } + +type testParams struct { + node *enode.Node + engineAPI string + jwt string + chainDir string +} + +func cliTestParams(ctx *cli.Context) *testParams { + nodeStr := ctx.String(testNodeFlag.Name) + if nodeStr == "" { + exit(fmt.Errorf("missing -%s", testNodeFlag.Name)) + } + node, err := parseNode(nodeStr) + if err != nil { + exit(err) + } + p := testParams{ + node: node, + engineAPI: ctx.String(testNodeEngineFlag.Name), + jwt: ctx.String(testNodeJWTFlag.Name), + chainDir: ctx.String(testChainDirFlag.Name), + } + if p.engineAPI == "" { + exit(fmt.Errorf("missing -%s", testNodeEngineFlag.Name)) + } + if p.jwt == "" { + exit(fmt.Errorf("missing -%s", testNodeJWTFlag.Name)) + } + if p.chainDir == "" { + exit(fmt.Errorf("missing -%s", testChainDirFlag.Name)) + } + return &p +} diff --git a/cmd/devp2p/runtest.go b/cmd/devp2p/runtest.go index f72aa91119..7e3723c641 100644 --- a/cmd/devp2p/runtest.go +++ b/cmd/devp2p/runtest.go @@ -20,6 +20,7 @@ import ( "os" "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v4test" + "github.com/ethereum/go-ethereum/internal/flags" "github.com/ethereum/go-ethereum/internal/utesting" "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" @@ -27,23 +28,51 @@ import ( var ( testPatternFlag = &cli.StringFlag{ - Name: "run", - Usage: "Pattern of test suite(s) to run", + Name: "run", + Usage: "Pattern of test suite(s) to run", + Category: flags.TestingCategory, } testTAPFlag = &cli.BoolFlag{ - Name: "tap", - Usage: "Output TAP", + Name: "tap", + Usage: "Output test results in TAP format", + Category: flags.TestingCategory, } + + // for eth/snap tests + testChainDirFlag = &cli.StringFlag{ + Name: "chain", + Usage: "Test chain directory (required)", + Category: flags.TestingCategory, + } + testNodeFlag = &cli.StringFlag{ + Name: "node", + Usage: "Peer-to-Peer endpoint (ENR) of the test node (required)", + Category: flags.TestingCategory, + } + testNodeJWTFlag = &cli.StringFlag{ + Name: "jwtsecret", + Usage: "JWT secret for the engine API of the test node (required)", + Category: flags.TestingCategory, + Value: "0x7365637265747365637265747365637265747365637265747365637265747365", + } + testNodeEngineFlag = &cli.StringFlag{ + Name: "engineapi", + Usage: "Engine API endpoint of the test node (required)", + Category: flags.TestingCategory, + } + // These two are specific to the discovery tests. testListen1Flag = &cli.StringFlag{ - Name: "listen1", - Usage: "IP address of the first tester", - Value: v4test.Listen1, + Name: "listen1", + Usage: "IP address of the first tester", + Value: v4test.Listen1, + Category: flags.TestingCategory, } testListen2Flag = &cli.StringFlag{ - Name: "listen2", - Usage: "IP address of the second tester", - Value: v4test.Listen2, + Name: "listen2", + Usage: "IP address of the second tester", + Value: v4test.Listen2, + Category: flags.TestingCategory, } ) @@ -54,7 +83,7 @@ func runTests(ctx *cli.Context, tests []utesting.Test) error { } // Disable logging unless explicitly enabled. if !ctx.IsSet("verbosity") && !ctx.IsSet("vmodule") { - log.Root().SetHandler(log.DiscardHandler()) + log.SetDefault(log.NewLogger(log.DiscardHandler())) } // Run the tests. var run = utesting.RunTests diff --git a/cmd/ethkey/message_test.go b/cmd/ethkey/message_test.go index 544a494cfa..389bb8c8ea 100644 --- a/cmd/ethkey/message_test.go +++ b/cmd/ethkey/message_test.go @@ -22,6 +22,7 @@ import ( ) func TestMessageSignVerify(t *testing.T) { + t.Parallel() tmpdir := t.TempDir() keyfile := filepath.Join(tmpdir, "the-keyfile") diff --git a/cmd/ethkey/run_test.go b/cmd/ethkey/run_test.go index 6006f6b5bb..73506e5da1 100644 --- a/cmd/ethkey/run_test.go +++ b/cmd/ethkey/run_test.go @@ -21,8 +21,8 @@ import ( "os" "testing" - "github.com/docker/docker/pkg/reexec" "github.com/ethereum/go-ethereum/internal/cmdtest" + "github.com/ethereum/go-ethereum/internal/reexec" ) type testEthkey struct { diff --git a/cmd/evm/README.md b/cmd/evm/README.md index e6c6fe06ad..41d8ced278 100644 --- a/cmd/evm/README.md +++ b/cmd/evm/README.md @@ -88,7 +88,7 @@ type Env struct { CurrentTimestamp uint64 `json:"currentTimestamp"` Withdrawals []*Withdrawal `json:"withdrawals"` // optional - CurrentDifficulty *big.Int `json:"currentDifficuly"` + CurrentDifficulty *big.Int `json:"currentDifficulty"` CurrentRandom *big.Int `json:"currentRandom"` CurrentBaseFee *big.Int `json:"currentBaseFee"` ParentDifficulty *big.Int `json:"parentDifficulty"` diff --git a/cmd/evm/blockrunner.go b/cmd/evm/blockrunner.go index 42be6726b5..c5d836e0ea 100644 --- a/cmd/evm/blockrunner.go +++ b/cmd/evm/blockrunner.go @@ -21,8 +21,10 @@ import ( "errors" "fmt" "os" + "regexp" "sort" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/eth/tracers/logger" @@ -30,11 +32,18 @@ import ( "github.com/urfave/cli/v2" ) +var RunFlag = &cli.StringFlag{ + Name: "run", + Value: ".*", + Usage: "Run only those tests matching the regular expression.", +} + var blockTestCommand = &cli.Command{ Action: blockTestCmd, Name: "blocktest", - Usage: "executes the given blockchain tests", + Usage: "Executes the given blockchain tests", ArgsUsage: "", + Flags: []cli.Flag{RunFlag}, } func blockTestCmd(ctx *cli.Context) error { @@ -61,15 +70,29 @@ func blockTestCmd(ctx *cli.Context) error { if err = json.Unmarshal(src, &tests); err != nil { return err } - // run them in order + re, err := regexp.Compile(ctx.String(RunFlag.Name)) + if err != nil { + return fmt.Errorf("invalid regex -%s: %v", RunFlag.Name, err) + } + + // Run them in order var keys []string for key := range tests { keys = append(keys, key) } sort.Strings(keys) for _, name := range keys { + if !re.MatchString(name) { + continue + } test := tests[name] - if err := test.Run(false, rawdb.HashScheme, tracer); err != nil { + if err := test.Run(false, rawdb.HashScheme, tracer, func(res error, chain *core.BlockChain) { + if ctx.Bool(DumpFlag.Name) { + if state, _ := chain.State(); state != nil { + fmt.Println(string(state.Dump(nil))) + } + } + }); err != nil { return fmt.Errorf("test %v: %w", name, err) } } diff --git a/cmd/evm/compiler.go b/cmd/evm/compiler.go index 699d434bb0..c071834b59 100644 --- a/cmd/evm/compiler.go +++ b/cmd/evm/compiler.go @@ -29,7 +29,7 @@ import ( var compileCommand = &cli.Command{ Action: compileCmd, Name: "compile", - Usage: "compiles easm source to evm binary", + Usage: "Compiles easm source to evm binary", ArgsUsage: "", } diff --git a/cmd/evm/disasm.go b/cmd/evm/disasm.go index a6a16fd13b..b1f35cbaf5 100644 --- a/cmd/evm/disasm.go +++ b/cmd/evm/disasm.go @@ -29,7 +29,7 @@ import ( var disasmCommand = &cli.Command{ Action: disasmCmd, Name: "disasm", - Usage: "disassembles evm binary", + Usage: "Disassembles evm binary", ArgsUsage: "", } diff --git a/cmd/evm/internal/t8ntool/block.go b/cmd/evm/internal/t8ntool/block.go index 5c0e28e284..a2dc473437 100644 --- a/cmd/evm/internal/t8ntool/block.go +++ b/cmd/evm/internal/t8ntool/block.go @@ -30,7 +30,6 @@ import ( "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/urfave/cli/v2" ) @@ -215,11 +214,6 @@ func (i *bbInput) sealClique(block *types.Block) (*types.Block, error) { // BuildBlock constructs a block from the given inputs. func BuildBlock(ctx *cli.Context) error { - // Configure the go-ethereum logger - glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) - glogger.Verbosity(log.Lvl(ctx.Int(VerbosityFlag.Name))) - log.Root().SetHandler(glogger) - baseDir, err := createBasedir(ctx) if err != nil { return NewError(ErrorIO, fmt.Errorf("failed creating output basedir: %v", err)) diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go index d551ca9fe7..86e42211bb 100644 --- a/cmd/evm/internal/t8ntool/execution.go +++ b/cmd/evm/internal/t8ntool/execution.go @@ -116,8 +116,8 @@ type rejectedTx struct { // Apply applies a set of transactions to a pre-state func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, - txs types.Transactions, miningReward int64, - getTracerFn func(txIndex int, txHash common.Hash) (tracer vm.EVMLogger, err error)) (*state.StateDB, *ExecutionResult, error) { + txIt txIterator, miningReward int64, + getTracerFn func(txIndex int, txHash common.Hash) (vm.EVMLogger, error)) (*state.StateDB, *ExecutionResult, []byte, error) { // Capture errors for BLOCKHASH operation, if we haven't been supplied the // required blockhashes var hashError error @@ -193,25 +193,39 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, core.ProcessBeaconBlockRoot(*beaconRoot, evm, statedb) } var blobGasUsed uint64 - for i, tx := range txs { + + for i := 0; txIt.Next(); i++ { + tx, err := txIt.Tx() + if err != nil { + log.Warn("rejected tx", "index", i, "error", err) + rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()}) + continue + } if tx.Type() == types.BlobTxType && vmContext.BlobBaseFee == nil { errMsg := "blob tx used but field env.ExcessBlobGas missing" log.Warn("rejected tx", "index", i, "hash", tx.Hash(), "error", errMsg) rejectedTxs = append(rejectedTxs, &rejectedTx{i, errMsg}) continue } - if tx.Type() == types.BlobTxType { - blobGasUsed += uint64(params.BlobTxBlobGasPerBlob * len(tx.BlobHashes())) - } msg, err := core.TransactionToMessage(tx, signer, pre.Env.BaseFee) if err != nil { log.Warn("rejected tx", "index", i, "hash", tx.Hash(), "error", err) rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()}) continue } + if tx.Type() == types.BlobTxType { + txBlobGas := uint64(params.BlobTxBlobGasPerBlob * len(tx.BlobHashes())) + if used, max := blobGasUsed+txBlobGas, uint64(params.MaxBlobGasPerBlock); used > max { + err := fmt.Errorf("blob gas (%d) would exceed maximum allowance %d", used, max) + log.Warn("rejected tx", "index", i, "err", err) + rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()}) + continue + } + blobGasUsed += txBlobGas + } tracer, err := getTracerFn(txIndex, tx.Hash()) if err != nil { - return nil, nil, err + return nil, nil, nil, err } vmConfig.Tracer = tracer statedb.SetTxContext(tx.Hash(), txIndex) @@ -234,7 +248,7 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, } includedTxs = append(includedTxs, tx) if hashError != nil { - return nil, nil, NewError(ErrorMissingBlockhash, hashError) + return nil, nil, nil, NewError(ErrorMissingBlockhash, hashError) } gasUsed += msgResult.UsedGas @@ -309,7 +323,7 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, // Commit block root, err := statedb.Commit(vmContext.BlockNumber.Uint64(), chainConfig.IsEIP158(vmContext.BlockNumber)) if err != nil { - return nil, nil, NewError(ErrorEVM, fmt.Errorf("could not commit state: %v", err)) + return nil, nil, nil, NewError(ErrorEVM, fmt.Errorf("could not commit state: %v", err)) } execRs := &ExecutionResult{ StateRoot: root, @@ -335,9 +349,10 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, // for accessing latest states. statedb, err = state.New(root, statedb.Database(), nil) if err != nil { - return nil, nil, NewError(ErrorEVM, fmt.Errorf("could not reopen state: %v", err)) + return nil, nil, nil, NewError(ErrorEVM, fmt.Errorf("could not reopen state: %v", err)) } - return statedb, execRs, nil + body, _ := rlp.EncodeToBytes(includedTxs) + return statedb, execRs, body, nil } func MakePreState(db ethdb.Database, accounts core.GenesisAlloc) *state.StateDB { diff --git a/cmd/evm/internal/t8ntool/flags.go b/cmd/evm/internal/t8ntool/flags.go index de19dbc851..c2eca8cc21 100644 --- a/cmd/evm/internal/t8ntool/flags.go +++ b/cmd/evm/internal/t8ntool/flags.go @@ -28,12 +28,15 @@ import ( var ( TraceFlag = &cli.BoolFlag{ Name: "trace", - Usage: "Output full trace logs to files .jsonl", + Usage: "Configures the use of the JSON opcode tracer. This tracer emits traces to files as trace--.jsonl", } - TraceDisableMemoryFlag = &cli.BoolFlag{ - Name: "trace.nomemory", - Value: true, - Usage: "Disable full memory dump in traces (deprecated)", + TraceTracerFlag = &cli.StringFlag{ + Name: "trace.tracer", + Usage: "Configures the use of a custom tracer, e.g native or js tracers. Examples are callTracer and 4byteTracer. These tracers emit results into files as trace--.json", + } + TraceTracerConfigFlag = &cli.StringFlag{ + Name: "trace.jsonconfig", + Usage: "The configurations for the custom tracer specified by --trace.tracer. If provided, must be in JSON format", } TraceEnableMemoryFlag = &cli.BoolFlag{ Name: "trace.memory", @@ -43,11 +46,6 @@ var ( Name: "trace.nostack", Usage: "Disable stack output in traces", } - TraceDisableReturnDataFlag = &cli.BoolFlag{ - Name: "trace.noreturndata", - Value: true, - Usage: "Disable return data output in traces (deprecated)", - } TraceEnableReturnDataFlag = &cli.BoolFlag{ Name: "trace.returndata", Usage: "Enable return data output in traces", diff --git a/cmd/evm/internal/t8ntool/tracewriter.go b/cmd/evm/internal/t8ntool/tracewriter.go new file mode 100644 index 0000000000..e4efad112f --- /dev/null +++ b/cmd/evm/internal/t8ntool/tracewriter.go @@ -0,0 +1,81 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package t8ntool + +import ( + "encoding/json" + "io" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/tracers" + "github.com/ethereum/go-ethereum/log" +) + +// traceWriter is an vm.EVMLogger which also holds an inner logger/tracer. +// When the TxEnd event happens, the inner tracer result is written to the file, and +// the file is closed. +type traceWriter struct { + inner vm.EVMLogger + f io.WriteCloser +} + +// Compile-time interface check +var _ = vm.EVMLogger((*traceWriter)(nil)) + +func (t *traceWriter) CaptureTxEnd(restGas uint64) { + t.inner.CaptureTxEnd(restGas) + defer t.f.Close() + + if tracer, ok := t.inner.(tracers.Tracer); ok { + result, err := tracer.GetResult() + if err != nil { + log.Warn("Error in tracer", "err", err) + return + } + err = json.NewEncoder(t.f).Encode(result) + if err != nil { + log.Warn("Error writing tracer output", "err", err) + return + } + } +} + +func (t *traceWriter) CaptureTxStart(gasLimit uint64) { t.inner.CaptureTxStart(gasLimit) } +func (t *traceWriter) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { + t.inner.CaptureStart(env, from, to, create, input, gas, value) +} + +func (t *traceWriter) CaptureEnd(output []byte, gasUsed uint64, err error) { + t.inner.CaptureEnd(output, gasUsed, err) +} + +func (t *traceWriter) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { + t.inner.CaptureEnter(typ, from, to, input, gas, value) +} + +func (t *traceWriter) CaptureExit(output []byte, gasUsed uint64, err error) { + t.inner.CaptureExit(output, gasUsed, err) +} + +func (t *traceWriter) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { + t.inner.CaptureState(pc, op, gas, cost, scope, rData, depth, err) +} +func (t *traceWriter) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { + t.inner.CaptureFault(pc, op, gas, cost, scope, depth, err) +} diff --git a/cmd/evm/internal/t8ntool/transaction.go b/cmd/evm/internal/t8ntool/transaction.go index 03a2e2eb99..8533b78637 100644 --- a/cmd/evm/internal/t8ntool/transaction.go +++ b/cmd/evm/internal/t8ntool/transaction.go @@ -28,7 +28,6 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/tests" @@ -65,11 +64,6 @@ func (r *result) MarshalJSON() ([]byte, error) { } func Transaction(ctx *cli.Context) error { - // Configure the go-ethereum logger - glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) - glogger.Verbosity(log.Lvl(ctx.Int(VerbosityFlag.Name))) - log.Root().SetHandler(glogger) - var ( err error ) diff --git a/cmd/evm/internal/t8ntool/transition.go b/cmd/evm/internal/t8ntool/transition.go index 78e7928fc2..837e2938e7 100644 --- a/cmd/evm/internal/t8ntool/transition.go +++ b/cmd/evm/internal/t8ntool/transition.go @@ -17,14 +17,12 @@ package t8ntool import ( - "crypto/ecdsa" "encoding/json" "errors" "fmt" "math/big" "os" "path" - "strings" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -33,11 +31,10 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/tests" "github.com/urfave/cli/v2" ) @@ -84,62 +81,43 @@ type input struct { } func Transition(ctx *cli.Context) error { - // Configure the go-ethereum logger - glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) - glogger.Verbosity(log.Lvl(ctx.Int(VerbosityFlag.Name))) - log.Root().SetHandler(glogger) - - var ( - err error - tracer vm.EVMLogger - ) - var getTracer func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) + var getTracer = func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) { return nil, nil } baseDir, err := createBasedir(ctx) if err != nil { return NewError(ErrorIO, fmt.Errorf("failed creating output basedir: %v", err)) } - if ctx.Bool(TraceFlag.Name) { - if ctx.IsSet(TraceDisableMemoryFlag.Name) && ctx.IsSet(TraceEnableMemoryFlag.Name) { - return NewError(ErrorConfig, fmt.Errorf("can't use both flags --%s and --%s", TraceDisableMemoryFlag.Name, TraceEnableMemoryFlag.Name)) - } - if ctx.IsSet(TraceDisableReturnDataFlag.Name) && ctx.IsSet(TraceEnableReturnDataFlag.Name) { - return NewError(ErrorConfig, fmt.Errorf("can't use both flags --%s and --%s", TraceDisableReturnDataFlag.Name, TraceEnableReturnDataFlag.Name)) - } - if ctx.IsSet(TraceDisableMemoryFlag.Name) { - log.Warn(fmt.Sprintf("--%s has been deprecated in favour of --%s", TraceDisableMemoryFlag.Name, TraceEnableMemoryFlag.Name)) - } - if ctx.IsSet(TraceDisableReturnDataFlag.Name) { - log.Warn(fmt.Sprintf("--%s has been deprecated in favour of --%s", TraceDisableReturnDataFlag.Name, TraceEnableReturnDataFlag.Name)) - } + + if ctx.Bool(TraceFlag.Name) { // JSON opcode tracing // Configure the EVM logger logConfig := &logger.Config{ DisableStack: ctx.Bool(TraceDisableStackFlag.Name), - EnableMemory: !ctx.Bool(TraceDisableMemoryFlag.Name) || ctx.Bool(TraceEnableMemoryFlag.Name), - EnableReturnData: !ctx.Bool(TraceDisableReturnDataFlag.Name) || ctx.Bool(TraceEnableReturnDataFlag.Name), + EnableMemory: ctx.Bool(TraceEnableMemoryFlag.Name), + EnableReturnData: ctx.Bool(TraceEnableReturnDataFlag.Name), Debug: true, } - var prevFile *os.File - // This one closes the last file - defer func() { - if prevFile != nil { - prevFile.Close() - } - }() getTracer = func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) { - if prevFile != nil { - prevFile.Close() - } traceFile, err := os.Create(path.Join(baseDir, fmt.Sprintf("trace-%d-%v.jsonl", txIndex, txHash.String()))) if err != nil { return nil, NewError(ErrorIO, fmt.Errorf("failed creating trace-file: %v", err)) } - prevFile = traceFile - return logger.NewJSONLogger(logConfig, traceFile), nil + return &traceWriter{logger.NewJSONLogger(logConfig, traceFile), traceFile}, nil } - } else { - getTracer = func(txIndex int, txHash common.Hash) (tracer vm.EVMLogger, err error) { - return nil, nil + } else if ctx.IsSet(TraceTracerFlag.Name) { + var config json.RawMessage + if ctx.IsSet(TraceTracerConfigFlag.Name) { + config = []byte(ctx.String(TraceTracerConfigFlag.Name)) + } + getTracer = func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) { + traceFile, err := os.Create(path.Join(baseDir, fmt.Sprintf("trace-%d-%v.json", txIndex, txHash.String()))) + if err != nil { + return nil, NewError(ErrorIO, fmt.Errorf("failed creating trace-file: %v", err)) + } + tracer, err := tracers.DefaultDirectory.New(ctx.String(TraceTracerFlag.Name), nil, config) + if err != nil { + return nil, NewError(ErrorConfig, fmt.Errorf("failed instantiating tracer: %w", err)) + } + return &traceWriter{tracer, traceFile}, nil } } // We need to load three things: alloc, env and transactions. May be either in @@ -147,7 +125,7 @@ func Transition(ctx *cli.Context) error { // Check if anything needs to be read from stdin var ( prestate Prestate - txs types.Transactions // txs to apply + txIt txIterator // txs to apply allocStr = ctx.String(InputAllocFlag.Name) envStr = ctx.String(InputEnvFlag.Name) @@ -178,9 +156,7 @@ func Transition(ctx *cli.Context) error { } prestate.Env = *inputData.Env - vmConfig := vm.Config{ - Tracer: tracer, - } + vmConfig := vm.Config{} // Construct the chainconfig var chainConfig *params.ChainConfig if cConf, extraEips, err := tests.GetChainConfig(ctx.String(ForknameFlag.Name)); err != nil { @@ -192,7 +168,7 @@ func Transition(ctx *cli.Context) error { // Set the chain id chainConfig.ChainID = big.NewInt(ctx.Int64(ChainIDFlag.Name)) - if txs, err = loadTransactions(txStr, inputData, prestate.Env, chainConfig); err != nil { + if txIt, err = loadTransactions(txStr, inputData, prestate.Env, chainConfig); err != nil { return err } if err := applyLondonChecks(&prestate.Env, chainConfig); err != nil { @@ -208,136 +184,16 @@ func Transition(ctx *cli.Context) error { return err } // Run the test and aggregate the result - s, result, err := prestate.Apply(vmConfig, chainConfig, txs, ctx.Int64(RewardFlag.Name), getTracer) + s, result, body, err := prestate.Apply(vmConfig, chainConfig, txIt, ctx.Int64(RewardFlag.Name), getTracer) if err != nil { return err } - body, _ := rlp.EncodeToBytes(txs) // Dump the excution result collector := make(Alloc) s.DumpToCollector(collector, nil) return dispatchOutput(ctx, baseDir, result, collector, body) } -// txWithKey is a helper-struct, to allow us to use the types.Transaction along with -// a `secretKey`-field, for input -type txWithKey struct { - key *ecdsa.PrivateKey - tx *types.Transaction - protected bool -} - -func (t *txWithKey) UnmarshalJSON(input []byte) error { - // Read the metadata, if present - type txMetadata struct { - Key *common.Hash `json:"secretKey"` - Protected *bool `json:"protected"` - } - var data txMetadata - if err := json.Unmarshal(input, &data); err != nil { - return err - } - if data.Key != nil { - k := data.Key.Hex()[2:] - if ecdsaKey, err := crypto.HexToECDSA(k); err != nil { - return err - } else { - t.key = ecdsaKey - } - } - if data.Protected != nil { - t.protected = *data.Protected - } else { - t.protected = true - } - // Now, read the transaction itself - var tx types.Transaction - if err := json.Unmarshal(input, &tx); err != nil { - return err - } - t.tx = &tx - return nil -} - -// signUnsignedTransactions converts the input txs to canonical transactions. -// -// The transactions can have two forms, either -// 1. unsigned or -// 2. signed -// -// For (1), r, s, v, need so be zero, and the `secretKey` needs to be set. -// If so, we sign it here and now, with the given `secretKey` -// If the condition above is not met, then it's considered a signed transaction. -// -// To manage this, we read the transactions twice, first trying to read the secretKeys, -// and secondly to read them with the standard tx json format -func signUnsignedTransactions(txs []*txWithKey, signer types.Signer) (types.Transactions, error) { - var signedTxs []*types.Transaction - for i, tx := range txs { - var ( - v, r, s = tx.tx.RawSignatureValues() - signed *types.Transaction - err error - ) - if tx.key == nil || v.BitLen()+r.BitLen()+s.BitLen() != 0 { - // Already signed - signedTxs = append(signedTxs, tx.tx) - continue - } - // This transaction needs to be signed - if tx.protected { - signed, err = types.SignTx(tx.tx, signer, tx.key) - } else { - signed, err = types.SignTx(tx.tx, types.FrontierSigner{}, tx.key) - } - if err != nil { - return nil, NewError(ErrorJson, fmt.Errorf("tx %d: failed to sign tx: %v", i, err)) - } - signedTxs = append(signedTxs, signed) - } - return signedTxs, nil -} - -func loadTransactions(txStr string, inputData *input, env stEnv, chainConfig *params.ChainConfig) (types.Transactions, error) { - var txsWithKeys []*txWithKey - var signed types.Transactions - if txStr != stdinSelector { - data, err := os.ReadFile(txStr) - if err != nil { - return nil, NewError(ErrorIO, fmt.Errorf("failed reading txs file: %v", err)) - } - if strings.HasSuffix(txStr, ".rlp") { // A file containing an rlp list - var body hexutil.Bytes - if err := json.Unmarshal(data, &body); err != nil { - return nil, err - } - // Already signed transactions - if err := rlp.DecodeBytes(body, &signed); err != nil { - return nil, err - } - return signed, nil - } - if err := json.Unmarshal(data, &txsWithKeys); err != nil { - return nil, NewError(ErrorJson, fmt.Errorf("failed unmarshaling txs-file: %v", err)) - } - } else { - if len(inputData.TxRlp) > 0 { - // Decode the body of already signed transactions - body := common.FromHex(inputData.TxRlp) - // Already signed transactions - if err := rlp.DecodeBytes(body, &signed); err != nil { - return nil, err - } - return signed, nil - } - // JSON encoded transactions - txsWithKeys = inputData.Txs - } - // We may have to sign the transactions. - signer := types.LatestSignerForChainID(chainConfig.ChainID) - return signUnsignedTransactions(txsWithKeys, signer) -} - func applyLondonChecks(env *stEnv, chainConfig *params.ChainConfig) error { if !chainConfig.IsLondon(big.NewInt(int64(env.Number))) { return nil diff --git a/cmd/evm/internal/t8ntool/tx_iterator.go b/cmd/evm/internal/t8ntool/tx_iterator.go new file mode 100644 index 0000000000..8f28dc7022 --- /dev/null +++ b/cmd/evm/internal/t8ntool/tx_iterator.go @@ -0,0 +1,194 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package t8ntool + +import ( + "bytes" + "crypto/ecdsa" + "encoding/json" + "fmt" + "io" + "os" + "strings" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" +) + +// txWithKey is a helper-struct, to allow us to use the types.Transaction along with +// a `secretKey`-field, for input +type txWithKey struct { + key *ecdsa.PrivateKey + tx *types.Transaction + protected bool +} + +func (t *txWithKey) UnmarshalJSON(input []byte) error { + // Read the metadata, if present + type txMetadata struct { + Key *common.Hash `json:"secretKey"` + Protected *bool `json:"protected"` + } + var data txMetadata + if err := json.Unmarshal(input, &data); err != nil { + return err + } + if data.Key != nil { + k := data.Key.Hex()[2:] + if ecdsaKey, err := crypto.HexToECDSA(k); err != nil { + return err + } else { + t.key = ecdsaKey + } + } + if data.Protected != nil { + t.protected = *data.Protected + } else { + t.protected = true + } + // Now, read the transaction itself + var tx types.Transaction + if err := json.Unmarshal(input, &tx); err != nil { + return err + } + t.tx = &tx + return nil +} + +// signUnsignedTransactions converts the input txs to canonical transactions. +// +// The transactions can have two forms, either +// 1. unsigned or +// 2. signed +// +// For (1), r, s, v, need so be zero, and the `secretKey` needs to be set. +// If so, we sign it here and now, with the given `secretKey` +// If the condition above is not met, then it's considered a signed transaction. +// +// To manage this, we read the transactions twice, first trying to read the secretKeys, +// and secondly to read them with the standard tx json format +func signUnsignedTransactions(txs []*txWithKey, signer types.Signer) (types.Transactions, error) { + var signedTxs []*types.Transaction + for i, tx := range txs { + var ( + v, r, s = tx.tx.RawSignatureValues() + signed *types.Transaction + err error + ) + if tx.key == nil || v.BitLen()+r.BitLen()+s.BitLen() != 0 { + // Already signed + signedTxs = append(signedTxs, tx.tx) + continue + } + // This transaction needs to be signed + if tx.protected { + signed, err = types.SignTx(tx.tx, signer, tx.key) + } else { + signed, err = types.SignTx(tx.tx, types.FrontierSigner{}, tx.key) + } + if err != nil { + return nil, NewError(ErrorJson, fmt.Errorf("tx %d: failed to sign tx: %v", i, err)) + } + signedTxs = append(signedTxs, signed) + } + return signedTxs, nil +} + +func loadTransactions(txStr string, inputData *input, env stEnv, chainConfig *params.ChainConfig) (txIterator, error) { + var txsWithKeys []*txWithKey + if txStr != stdinSelector { + data, err := os.ReadFile(txStr) + if err != nil { + return nil, NewError(ErrorIO, fmt.Errorf("failed reading txs file: %v", err)) + } + if strings.HasSuffix(txStr, ".rlp") { // A file containing an rlp list + var body hexutil.Bytes + if err := json.Unmarshal(data, &body); err != nil { + return nil, err + } + return newRlpTxIterator(body), nil + } + if err := json.Unmarshal(data, &txsWithKeys); err != nil { + return nil, NewError(ErrorJson, fmt.Errorf("failed unmarshaling txs-file: %v", err)) + } + } else { + if len(inputData.TxRlp) > 0 { + // Decode the body of already signed transactions + return newRlpTxIterator(common.FromHex(inputData.TxRlp)), nil + } + // JSON encoded transactions + txsWithKeys = inputData.Txs + } + // We may have to sign the transactions. + signer := types.LatestSignerForChainID(chainConfig.ChainID) + txs, err := signUnsignedTransactions(txsWithKeys, signer) + return newSliceTxIterator(txs), err +} + +type txIterator interface { + // Next returns true until EOF + Next() bool + // Tx returns the next transaction, OR an error. + Tx() (*types.Transaction, error) +} + +type sliceTxIterator struct { + idx int + txs []*types.Transaction +} + +func newSliceTxIterator(transactions types.Transactions) txIterator { + return &sliceTxIterator{0, transactions} +} + +func (ait *sliceTxIterator) Next() bool { + return ait.idx < len(ait.txs) +} + +func (ait *sliceTxIterator) Tx() (*types.Transaction, error) { + if ait.idx < len(ait.txs) { + ait.idx++ + return ait.txs[ait.idx-1], nil + } + return nil, io.EOF +} + +type rlpTxIterator struct { + in *rlp.Stream +} + +func newRlpTxIterator(rlpData []byte) txIterator { + in := rlp.NewStream(bytes.NewBuffer(rlpData), 1024*1024) + in.List() + return &rlpTxIterator{in} +} + +func (it *rlpTxIterator) Next() bool { + return it.in.MoreDataInList() +} + +func (it *rlpTxIterator) Tx() (*types.Transaction, error) { + var a types.Transaction + if err := it.in.Decode(&a); err != nil { + return nil, err + } + return &a, nil +} diff --git a/cmd/evm/main.go b/cmd/evm/main.go index 1f6500b78c..1cc401f111 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -26,6 +26,10 @@ import ( "github.com/ethereum/go-ethereum/internal/debug" "github.com/ethereum/go-ethereum/internal/flags" "github.com/urfave/cli/v2" + + // Force-load the tracer engines to trigger registration + _ "github.com/ethereum/go-ethereum/eth/tracers/js" + _ "github.com/ethereum/go-ethereum/eth/tracers/native" ) var ( @@ -134,19 +138,23 @@ var ( Usage: "enable return data output", Category: flags.VMCategory, } + VMOpcodeOptimizeFlag = &cli.BoolFlag{ + Name: "vm.opcode.optimize", + Usage: "enable opcode optimization", + } ) var stateTransitionCommand = &cli.Command{ Name: "transition", Aliases: []string{"t8n"}, - Usage: "executes a full state transition", + Usage: "Executes a full state transition", Action: t8ntool.Transition, Flags: []cli.Flag{ t8ntool.TraceFlag, - t8ntool.TraceDisableMemoryFlag, + t8ntool.TraceTracerFlag, + t8ntool.TraceTracerConfigFlag, t8ntool.TraceEnableMemoryFlag, t8ntool.TraceDisableStackFlag, - t8ntool.TraceDisableReturnDataFlag, t8ntool.TraceEnableReturnDataFlag, t8ntool.OutputBasedir, t8ntool.OutputAllocFlag, @@ -158,27 +166,25 @@ var stateTransitionCommand = &cli.Command{ t8ntool.ForknameFlag, t8ntool.ChainIDFlag, t8ntool.RewardFlag, - t8ntool.VerbosityFlag, }, } var transactionCommand = &cli.Command{ Name: "transaction", Aliases: []string{"t9n"}, - Usage: "performs transaction validation", + Usage: "Performs transaction validation", Action: t8ntool.Transaction, Flags: []cli.Flag{ t8ntool.InputTxsFlag, t8ntool.ChainIDFlag, t8ntool.ForknameFlag, - t8ntool.VerbosityFlag, }, } var blockBuilderCommand = &cli.Command{ Name: "block-builder", Aliases: []string{"b11r"}, - Usage: "builds a block", + Usage: "Builds a block", Action: t8ntool.BuildBlock, Flags: []cli.Flag{ t8ntool.OutputBasedir, @@ -188,7 +194,6 @@ var blockBuilderCommand = &cli.Command{ t8ntool.InputWithdrawalsFlag, t8ntool.InputTxsRlpFlag, t8ntool.SealCliqueFlag, - t8ntool.VerbosityFlag, }, } diff --git a/cmd/evm/runner.go b/cmd/evm/runner.go index 45fc985351..c65fdc8077 100644 --- a/cmd/evm/runner.go +++ b/cmd/evm/runner.go @@ -46,7 +46,7 @@ import ( var runCommand = &cli.Command{ Action: runCmd, Name: "run", - Usage: "run arbitrary evm binary", + Usage: "Run arbitrary evm binary", ArgsUsage: "", Description: `The run command runs arbitrary EVM code.`, Flags: flags.Merge(vmFlags, traceFlags), @@ -144,7 +144,7 @@ func runCmd(ctx *cli.Context) error { initialGas = genesisConfig.GasLimit } } else { - genesisConfig.Config = params.AllEthashProtocolChanges + genesisConfig.Config = params.AllDevChainProtocolChanges } db := rawdb.NewMemoryDatabase() @@ -224,7 +224,8 @@ func runCmd(ctx *cli.Context) error { BlobHashes: blobHashes, BlobBaseFee: blobBaseFee, EVMConfig: vm.Config{ - Tracer: tracer, + Tracer: tracer, + EnableOpcodeOptimizations: ctx.Bool(VMOpcodeOptimizeFlag.Name), }, } diff --git a/cmd/evm/staterunner.go b/cmd/evm/staterunner.go index 8a07fccdf8..6e751b630f 100644 --- a/cmd/evm/staterunner.go +++ b/cmd/evm/staterunner.go @@ -100,21 +100,23 @@ func runStateTest(fname string, cfg vm.Config, jsonOut, dump bool) error { for _, st := range test.Subtests() { // Run the test and aggregate the result result := &StatetestResult{Name: key, Fork: st.Fork, Pass: true} - test.Run(st, cfg, false, rawdb.HashScheme, func(err error, snaps *snapshot.Tree, state *state.StateDB) { - if state != nil { - root := state.IntermediateRoot(false) + test.Run(st, cfg, false, rawdb.HashScheme, func(err error, snaps *snapshot.Tree, statedb *state.StateDB) { + var root common.Hash + if statedb != nil { + root = statedb.IntermediateRoot(false) result.Root = &root if jsonOut { fmt.Fprintf(os.Stderr, "{\"stateRoot\": \"%#x\"}\n", root) } + if dump { // Dump any state to aid debugging + cpy, _ := state.New(root, statedb.Database(), nil) + dump := cpy.RawDump(nil) + result.State = &dump + } } if err != nil { - // Test failed, mark as so and dump any state to aid debugging + // Test failed, mark as so result.Pass, result.Error = false, err.Error() - if dump { - dump := state.RawDump(nil) - result.State = &dump - } } }) results = append(results, *result) diff --git a/cmd/evm/t8n_test.go b/cmd/evm/t8n_test.go index ad09a6b4d6..ad36540de5 100644 --- a/cmd/evm/t8n_test.go +++ b/cmd/evm/t8n_test.go @@ -24,9 +24,9 @@ import ( "strings" "testing" - "github.com/docker/docker/pkg/reexec" "github.com/ethereum/go-ethereum/cmd/evm/internal/t8ntool" "github.com/ethereum/go-ethereum/internal/cmdtest" + "github.com/ethereum/go-ethereum/internal/reexec" ) func TestMain(m *testing.M) { @@ -106,6 +106,7 @@ func (args *t8nOutput) get() (out []string) { } func TestT8n(t *testing.T) { + t.Parallel() tt := new(testT8n) tt.TestCmd = cmdtest.NewTestCmd(t, tt) for i, tc := range []struct { @@ -275,6 +276,14 @@ func TestT8n(t *testing.T) { output: t8nOutput{alloc: true, result: true}, expOut: "exp.json", }, + { // More cancun test, plus example of rlp-transaction that cannot be decoded properly + base: "./testdata/30", + input: t8nInput{ + "alloc.json", "txs_more.rlp", "env.json", "Cancun", "", + }, + output: t8nOutput{alloc: true, result: true}, + expOut: "exp.json", + }, } { args := []string{"t8n"} args = append(args, tc.output.get()...) @@ -330,6 +339,7 @@ func (args *t9nInput) get(base string) []string { } func TestT9n(t *testing.T) { + t.Parallel() tt := new(testT8n) tt.TestCmd = cmdtest.NewTestCmd(t, tt) for i, tc := range []struct { @@ -465,6 +475,7 @@ func (args *b11rInput) get(base string) []string { } func TestB11r(t *testing.T) { + t.Parallel() tt := new(testT8n) tt.TestCmd = cmdtest.NewTestCmd(t, tt) for i, tc := range []struct { diff --git a/cmd/evm/testdata/30/README.txt b/cmd/evm/testdata/30/README.txt new file mode 100644 index 0000000000..84c92de853 --- /dev/null +++ b/cmd/evm/testdata/30/README.txt @@ -0,0 +1,77 @@ +This example comes from https://github.com/ethereum/go-ethereum/issues/27730. +The input transactions contain three transactions, number `0` and `2` are taken from +`testdata/13`, whereas number `1` is taken from #27730. + +The problematic second transaction cannot be RLP-decoded, and the expectation is +that that particular transaction should be rejected, but number `0` and `1` should +still be accepted. + +``` +$ go run . t8n --input.alloc=./testdata/30/alloc.json --input.txs=./testdata/30/txs_more.rlp --input.env=./testdata/30/env.json --output.result=stdout --output.alloc=stdout --state.fork=Cancun +WARN [10-22|15:38:03.283] rejected tx index=1 error="rlp: input string too short for common.Address, decoding into (types.Transaction)(types.BlobTx).To" +INFO [10-22|15:38:03.284] Trie dumping started root=348312..915c93 +INFO [10-22|15:38:03.284] Trie dumping complete accounts=3 elapsed="160.831µs" +{ + "alloc": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": { + "code": "0x60004960005500", + "balance": "0xde0b6b3a7640000" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0xde0b6b3a7640000" + }, + "0xd02d72e067e77158444ef2020ff2d325f929b363": { + "balance": "0xfffffffb8390", + "nonce": "0x3" + } + }, + "result": { + "stateRoot": "0x3483124b6710486c9fb3e07975669c66924697c88cccdcc166af5e1218915c93", + "txRoot": "0x013509c8563d41c0ae4bf38f2d6d19fc6512a1d0d6be045079c8c9f68bf45f9d", + "receiptsRoot": "0x75308898d571eafb5cd8cde8278bf5b3d13c5f6ec074926de3bb895b519264e1", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "type": "0x2", + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0x5208", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x5208", + "effectiveGasPrice": null, + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + }, + { + "type": "0x2", + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0xa410", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x5208", + "effectiveGasPrice": null, + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x1" + } + ], + "rejected": [ + { + "index": 1, + "error": "rlp: input string too short for common.Address, decoding into (types.Transaction)(types.BlobTx).To" + } + ], + "currentDifficulty": null, + "gasUsed": "0xa410", + "currentBaseFee": "0x7", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" + } +} + +``` \ No newline at end of file diff --git a/cmd/evm/testdata/30/alloc.json b/cmd/evm/testdata/30/alloc.json new file mode 100644 index 0000000000..6bc93d2552 --- /dev/null +++ b/cmd/evm/testdata/30/alloc.json @@ -0,0 +1,23 @@ +{ + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x60004960005500", + "nonce" : "0x00", + "storage" : { + } + }, + "0xd02d72e067e77158444ef2020ff2d325f929b363" : { + "balance": "0x01000000000000", + "code": "0x", + "nonce": "0x01", + "storage": { + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x0de0b6b3a7640000", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/30/env.json b/cmd/evm/testdata/30/env.json new file mode 100644 index 0000000000..4acd9794be --- /dev/null +++ b/cmd/evm/testdata/30/env.json @@ -0,0 +1,23 @@ +{ + "currentCoinbase" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentNumber" : "0x01", + "currentTimestamp" : "0x03e8", + "currentGasLimit" : "0x1000000000", + "previousHash" : "0xe4e2a30b340bec696242b67584264f878600dce98354ae0b6328740fd4ff18da", + "currentDataGasUsed" : "0x2000", + "parentTimestamp" : "0x00", + "parentDifficulty" : "0x00", + "parentUncleHash" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "parentBeaconBlockRoot" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "currentRandom" : "0x0000000000000000000000000000000000000000000000000000000000020000", + "withdrawals" : [ + ], + "parentBaseFee" : "0x08", + "parentGasUsed" : "0x00", + "parentGasLimit" : "0x1000000000", + "parentExcessBlobGas" : "0x1000", + "parentBlobGasUsed" : "0x2000", + "blockHashes" : { + "0" : "0xe4e2a30b340bec696242b67584264f878600dce98354ae0b6328740fd4ff18da" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/30/exp.json b/cmd/evm/testdata/30/exp.json new file mode 100644 index 0000000000..f0b19c6b3d --- /dev/null +++ b/cmd/evm/testdata/30/exp.json @@ -0,0 +1,64 @@ +{ + "alloc": { + "0x095e7baea6a6c7c4c2dfeb977efac326af552d87": { + "code": "0x60004960005500", + "balance": "0xde0b6b3a7640000" + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance": "0xde0b6b3a7640000" + }, + "0xd02d72e067e77158444ef2020ff2d325f929b363": { + "balance": "0xfffffffb8390", + "nonce": "0x3" + } + }, + "result": { + "stateRoot": "0x3483124b6710486c9fb3e07975669c66924697c88cccdcc166af5e1218915c93", + "txRoot": "0x013509c8563d41c0ae4bf38f2d6d19fc6512a1d0d6be045079c8c9f68bf45f9d", + "receiptsRoot": "0x75308898d571eafb5cd8cde8278bf5b3d13c5f6ec074926de3bb895b519264e1", + "logsHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "receipts": [ + { + "type": "0x2", + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0x5208", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x5208", + "effectiveGasPrice": null, + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x0" + }, + { + "type": "0x2", + "root": "0x", + "status": "0x1", + "cumulativeGasUsed": "0xa410", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logs": null, + "transactionHash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a", + "contractAddress": "0x0000000000000000000000000000000000000000", + "gasUsed": "0x5208", + "effectiveGasPrice": null, + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "transactionIndex": "0x1" + } + ], + "rejected": [ + { + "index": 1, + "error": "rlp: input string too short for common.Address, decoding into (types.Transaction)(types.BlobTx).To" + } + ], + "currentDifficulty": null, + "gasUsed": "0xa410", + "currentBaseFee": "0x7", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "currentExcessBlobGas": "0x0", + "blobGasUsed": "0x0" + } +} \ No newline at end of file diff --git a/cmd/evm/testdata/30/txs.rlp b/cmd/evm/testdata/30/txs.rlp new file mode 100644 index 0000000000..620c1a13ac --- /dev/null +++ b/cmd/evm/testdata/30/txs.rlp @@ -0,0 +1 @@ +"0xf8dbb8d903f8d601800285012a05f200833d090080830186a000f85bf85994095e7baea6a6c7c4c2dfeb977efac326af552d87f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010ae1a001a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d880a0fc12b67159a3567f8bdbc49e0be369a2e20e09d57a51c41310543a4128409464a02de0cfe5495c4f58ff60645ceda0afd67a4c90a70bc89fe207269435b35e5b67" \ No newline at end of file diff --git a/cmd/evm/testdata/30/txs_more.rlp b/cmd/evm/testdata/30/txs_more.rlp new file mode 100644 index 0000000000..35af8d1f23 --- /dev/null +++ b/cmd/evm/testdata/30/txs_more.rlp @@ -0,0 +1 @@ +"0xf901adb86702f864010180820fa08284d09411111111111111111111111111111111111111118080c001a0b7dfab36232379bb3d1497a4f91c1966b1f932eae3ade107bf5d723b9cb474e0a06261c359a10f2132f126d250485b90cf20f30340801244a08ef6142ab33d1904b8d903f8d601800285012a05f200833d090080830186a000f85bf85994095e7baea6a6c7c4c2dfeb977efac326af552d87f842a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010ae1a001a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d880a0fc12b67159a3567f8bdbc49e0be369a2e20e09d57a51c41310543a4128409464a02de0cfe5495c4f58ff60645ceda0afd67a4c90a70bc89fe207269435b35e5b67b86702f864010280820fa08284d09411111111111111111111111111111111111111118080c080a0d4ec563b6568cd42d998fc4134b36933c6568d01533b5adf08769270243c6c7fa072bf7c21eac6bbeae5143371eef26d5e279637f3bd73482b55979d76d935b1e9" \ No newline at end of file diff --git a/cmd/faucet/README.md b/cmd/faucet/README.md deleted file mode 100644 index 7e857fa0ee..0000000000 --- a/cmd/faucet/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Faucet - -The `faucet` is a simplistic web application with the goal of distributing small amounts of Ether in private and test networks. - -Users need to post their Ethereum addresses to fund in a Twitter status update or public Facebook post and share the link to the faucet. The faucet will in turn deduplicate user requests and send the Ether. After a funding round, the faucet prevents the same user from requesting again for a pre-configured amount of time, proportional to the amount of Ether requested. - -## Operation - -The `faucet` is a single binary app (everything included) with all configurations set via command line flags and a few files. - -First things first, the `faucet` needs to connect to an Ethereum network, for which it needs the necessary genesis and network infos. Each of the following flags must be set: - -- `-genesis` is a path to a file containing the network `genesis.json`. or using: - - `-goerli` with the faucet with Görli network config - - `-sepolia` with the faucet with Sepolia network config -- `-network` is the devp2p network id used during connection -- `-bootnodes` is a list of `enode://` ids to join the network through - -The `faucet` will use the `les` protocol to join the configured Ethereum network and will store its data in `$HOME/.faucet` (currently not configurable). - -## Funding - -To be able to distribute funds, the `faucet` needs access to an already funded Ethereum account. This can be configured via: - -- `-account.json` is a path to the Ethereum account's JSON key file -- `-account.pass` is a path to a text file with the decryption passphrase - -The faucet is able to distribute various amounts of Ether in exchange for various timeouts. These can be configured via: - -- `-faucet.amount` is the number of Ethers to send by default -- `-faucet.minutes` is the time to wait before allowing a rerequest -- `-faucet.tiers` is the funding tiers to support (x3 time, x2.5 funds) - -## Sybil protection - -To prevent the same user from exhausting funds in a loop, the `faucet` ties requests to social networks and captcha resolvers. - -Captcha protection uses Google's invisible ReCaptcha, thus the `faucet` needs to run on a live domain. The domain needs to be registered in Google's systems to retrieve the captcha API token and secrets. After doing so, captcha protection may be enabled via: - -- `-captcha.token` is the API token for ReCaptcha -- `-captcha.secret` is the API secret for ReCaptcha - -Sybil protection via Twitter requires an API key as of 15th December, 2020. To obtain it, a Twitter user must be upgraded to developer status and a new Twitter App deployed with it. The app's `Bearer` token is required by the faucet to retrieve tweet data: - -- `-twitter.token` is the Bearer token for `v2` API access -- `-twitter.token.v1` is the Bearer token for `v1` API access - -Sybil protection via Facebook uses the website to directly download post data thus does not currently require an API configuration. - -## Miscellaneous - -Beside the above - mostly essential - CLI flags, there are a number that can be used to fine-tune the `faucet`'s operation. Please see `faucet --help` for a full list. diff --git a/cmd/faucet/faucet.go b/cmd/faucet/faucet.go deleted file mode 100644 index e4d6ad6977..0000000000 --- a/cmd/faucet/faucet.go +++ /dev/null @@ -1,891 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -// faucet is an Ether faucet backed by a light client. -package main - -import ( - "bytes" - "context" - _ "embed" - "encoding/json" - "errors" - "flag" - "fmt" - "html/template" - "io" - "math" - "math/big" - "net/http" - "net/url" - "os" - "path/filepath" - "regexp" - "strconv" - "strings" - "sync" - "time" - - "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/accounts/keystore" - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/ethstats" - "github.com/ethereum/go-ethereum/internal/version" - "github.com/ethereum/go-ethereum/les" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/nat" - "github.com/ethereum/go-ethereum/params" - "github.com/gorilla/websocket" -) - -var ( - genesisFlag = flag.String("genesis", "", "Genesis json file to seed the chain with") - apiPortFlag = flag.Int("apiport", 8080, "Listener port for the HTTP API connection") - ethPortFlag = flag.Int("ethport", 30303, "Listener port for the devp2p connection") - bootFlag = flag.String("bootnodes", "", "Comma separated bootnode enode URLs to seed with") - netFlag = flag.Uint64("network", 0, "Network ID to use for the Ethereum protocol") - statsFlag = flag.String("ethstats", "", "Ethstats network monitoring auth string") - - netnameFlag = flag.String("faucet.name", "", "Network name to assign to the faucet") - payoutFlag = flag.Int("faucet.amount", 1, "Number of Ethers to pay out per user request") - minutesFlag = flag.Int("faucet.minutes", 1440, "Number of minutes to wait between funding rounds") - tiersFlag = flag.Int("faucet.tiers", 3, "Number of funding tiers to enable (x3 time, x2.5 funds)") - - accJSONFlag = flag.String("account.json", "", "Key json file to fund user requests with") - accPassFlag = flag.String("account.pass", "", "Decryption password to access faucet funds") - - captchaToken = flag.String("captcha.token", "", "Recaptcha site key to authenticate client side") - captchaSecret = flag.String("captcha.secret", "", "Recaptcha secret key to authenticate server side") - - noauthFlag = flag.Bool("noauth", false, "Enables funding requests without authentication") - logFlag = flag.Int("loglevel", 3, "Log level to use for Ethereum and the faucet") - - twitterTokenFlag = flag.String("twitter.token", "", "Bearer token to authenticate with the v2 Twitter API") - twitterTokenV1Flag = flag.String("twitter.token.v1", "", "Bearer token to authenticate with the v1.1 Twitter API") - - goerliFlag = flag.Bool("goerli", false, "Initializes the faucet with Görli network config") - sepoliaFlag = flag.Bool("sepolia", false, "Initializes the faucet with Sepolia network config") -) - -var ( - ether = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil) -) - -//go:embed faucet.html -var websiteTmpl string - -func main() { - // Parse the flags and set up the logger to print everything requested - flag.Parse() - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*logFlag), log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) - - // Construct the payout tiers - amounts := make([]string, *tiersFlag) - periods := make([]string, *tiersFlag) - for i := 0; i < *tiersFlag; i++ { - // Calculate the amount for the next tier and format it - amount := float64(*payoutFlag) * math.Pow(2.5, float64(i)) - amounts[i] = fmt.Sprintf("%s Ethers", strconv.FormatFloat(amount, 'f', -1, 64)) - if amount == 1 { - amounts[i] = strings.TrimSuffix(amounts[i], "s") - } - // Calculate the period for the next tier and format it - period := *minutesFlag * int(math.Pow(3, float64(i))) - periods[i] = fmt.Sprintf("%d mins", period) - if period%60 == 0 { - period /= 60 - periods[i] = fmt.Sprintf("%d hours", period) - - if period%24 == 0 { - period /= 24 - periods[i] = fmt.Sprintf("%d days", period) - } - } - if period == 1 { - periods[i] = strings.TrimSuffix(periods[i], "s") - } - } - website := new(bytes.Buffer) - err := template.Must(template.New("").Parse(websiteTmpl)).Execute(website, map[string]interface{}{ - "Network": *netnameFlag, - "Amounts": amounts, - "Periods": periods, - "Recaptcha": *captchaToken, - "NoAuth": *noauthFlag, - }) - if err != nil { - log.Crit("Failed to render the faucet template", "err", err) - } - // Load and parse the genesis block requested by the user - genesis, err := getGenesis(*genesisFlag, *goerliFlag, *sepoliaFlag) - if err != nil { - log.Crit("Failed to parse genesis config", "err", err) - } - // Convert the bootnodes to internal enode representations - var enodes []*enode.Node - for _, boot := range strings.Split(*bootFlag, ",") { - if url, err := enode.Parse(enode.ValidSchemes, boot); err == nil { - enodes = append(enodes, url) - } else { - log.Error("Failed to parse bootnode URL", "url", boot, "err", err) - } - } - // Load up the account key and decrypt its password - blob, err := os.ReadFile(*accPassFlag) - if err != nil { - log.Crit("Failed to read account password contents", "file", *accPassFlag, "err", err) - } - pass := strings.TrimSuffix(string(blob), "\n") - - ks := keystore.NewKeyStore(filepath.Join(os.Getenv("HOME"), ".faucet", "keys"), keystore.StandardScryptN, keystore.StandardScryptP) - if blob, err = os.ReadFile(*accJSONFlag); err != nil { - log.Crit("Failed to read account key contents", "file", *accJSONFlag, "err", err) - } - acc, err := ks.Import(blob, pass, pass) - if err != nil && err != keystore.ErrAccountAlreadyExists { - log.Crit("Failed to import faucet signer account", "err", err) - } - if err := ks.Unlock(acc, pass); err != nil { - log.Crit("Failed to unlock faucet signer account", "err", err) - } - // Assemble and start the faucet light service - faucet, err := newFaucet(genesis, *ethPortFlag, enodes, *netFlag, *statsFlag, ks, website.Bytes()) - if err != nil { - log.Crit("Failed to start faucet", "err", err) - } - defer faucet.close() - - if err := faucet.listenAndServe(*apiPortFlag); err != nil { - log.Crit("Failed to launch faucet API", "err", err) - } -} - -// request represents an accepted funding request. -type request struct { - Avatar string `json:"avatar"` // Avatar URL to make the UI nicer - Account common.Address `json:"account"` // Ethereum address being funded - Time time.Time `json:"time"` // Timestamp when the request was accepted - Tx *types.Transaction `json:"tx"` // Transaction funding the account -} - -// faucet represents a crypto faucet backed by an Ethereum light client. -type faucet struct { - config *params.ChainConfig // Chain configurations for signing - stack *node.Node // Ethereum protocol stack - client *ethclient.Client // Client connection to the Ethereum chain - index []byte // Index page to serve up on the web - - keystore *keystore.KeyStore // Keystore containing the single signer - account accounts.Account // Account funding user faucet requests - head *types.Header // Current head header of the faucet - balance *big.Int // Current balance of the faucet - nonce uint64 // Current pending nonce of the faucet - price *big.Int // Current gas price to issue funds with - - conns []*wsConn // Currently live websocket connections - timeouts map[string]time.Time // History of users and their funding timeouts - reqs []*request // Currently pending funding requests - update chan struct{} // Channel to signal request updates - - lock sync.RWMutex // Lock protecting the faucet's internals -} - -// wsConn wraps a websocket connection with a write mutex as the underlying -// websocket library does not synchronize access to the stream. -type wsConn struct { - conn *websocket.Conn - wlock sync.Mutex -} - -func newFaucet(genesis *core.Genesis, port int, enodes []*enode.Node, network uint64, stats string, ks *keystore.KeyStore, index []byte) (*faucet, error) { - // Assemble the raw devp2p protocol stack - git, _ := version.VCS() - stack, err := node.New(&node.Config{ - Name: "geth", - Version: params.VersionWithCommit(git.Commit, git.Date), - DataDir: filepath.Join(os.Getenv("HOME"), ".faucet"), - P2P: p2p.Config{ - NAT: nat.Any(), - NoDiscovery: true, - DiscoveryV5: true, - ListenAddr: fmt.Sprintf(":%d", port), - MaxPeers: 25, - BootstrapNodesV5: enodes, - }, - }) - if err != nil { - return nil, err - } - - // Assemble the Ethereum light client protocol - cfg := ethconfig.Defaults - cfg.SyncMode = downloader.LightSync - cfg.NetworkId = network - cfg.Genesis = genesis - utils.SetDNSDiscoveryDefaults(&cfg, genesis.ToBlock().Hash()) - - lesBackend, err := les.New(stack, &cfg) - if err != nil { - return nil, fmt.Errorf("Failed to register the Ethereum service: %w", err) - } - - // Assemble the ethstats monitoring and reporting service' - if stats != "" { - if err := ethstats.New(stack, lesBackend.ApiBackend, lesBackend.Engine(), stats); err != nil { - return nil, err - } - } - // Boot up the client and ensure it connects to bootnodes - if err := stack.Start(); err != nil { - return nil, err - } - for _, boot := range enodes { - old, err := enode.Parse(enode.ValidSchemes, boot.String()) - if err == nil { - stack.Server().AddPeer(old) - } - } - // Attach to the client and retrieve and interesting metadatas - api := stack.Attach() - client := ethclient.NewClient(api) - - return &faucet{ - config: genesis.Config, - stack: stack, - client: client, - index: index, - keystore: ks, - account: ks.Accounts()[0], - timeouts: make(map[string]time.Time), - update: make(chan struct{}, 1), - }, nil -} - -// close terminates the Ethereum connection and tears down the faucet. -func (f *faucet) close() error { - return f.stack.Close() -} - -// listenAndServe registers the HTTP handlers for the faucet and boots it up -// for service user funding requests. -func (f *faucet) listenAndServe(port int) error { - go f.loop() - - http.HandleFunc("/", f.webHandler) - http.HandleFunc("/api", f.apiHandler) - return http.ListenAndServe(fmt.Sprintf(":%d", port), nil) -} - -// webHandler handles all non-api requests, simply flattening and returning the -// faucet website. -func (f *faucet) webHandler(w http.ResponseWriter, r *http.Request) { - w.Write(f.index) -} - -// apiHandler handles requests for Ether grants and transaction statuses. -func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { - upgrader := websocket.Upgrader{} - conn, err := upgrader.Upgrade(w, r, nil) - if err != nil { - return - } - - // Start tracking the connection and drop at the end - defer conn.Close() - - f.lock.Lock() - wsconn := &wsConn{conn: conn} - f.conns = append(f.conns, wsconn) - f.lock.Unlock() - - defer func() { - f.lock.Lock() - for i, c := range f.conns { - if c.conn == conn { - f.conns = append(f.conns[:i], f.conns[i+1:]...) - break - } - } - f.lock.Unlock() - }() - // Gather the initial stats from the network to report - var ( - head *types.Header - balance *big.Int - nonce uint64 - ) - for head == nil || balance == nil { - // Retrieve the current stats cached by the faucet - f.lock.RLock() - if f.head != nil { - head = types.CopyHeader(f.head) - } - if f.balance != nil { - balance = new(big.Int).Set(f.balance) - } - nonce = f.nonce - f.lock.RUnlock() - - if head == nil || balance == nil { - // Report the faucet offline until initial stats are ready - //lint:ignore ST1005 This error is to be displayed in the browser - if err = sendError(wsconn, errors.New("Faucet offline")); err != nil { - log.Warn("Failed to send faucet error to client", "err", err) - return - } - time.Sleep(3 * time.Second) - } - } - // Send over the initial stats and the latest header - f.lock.RLock() - reqs := f.reqs - f.lock.RUnlock() - if err = send(wsconn, map[string]interface{}{ - "funds": new(big.Int).Div(balance, ether), - "funded": nonce, - "peers": f.stack.Server().PeerCount(), - "requests": reqs, - }, 3*time.Second); err != nil { - log.Warn("Failed to send initial stats to client", "err", err) - return - } - if err = send(wsconn, head, 3*time.Second); err != nil { - log.Warn("Failed to send initial header to client", "err", err) - return - } - // Keep reading requests from the websocket until the connection breaks - for { - // Fetch the next funding request and validate against github - var msg struct { - URL string `json:"url"` - Tier uint `json:"tier"` - Captcha string `json:"captcha"` - } - if err = conn.ReadJSON(&msg); err != nil { - return - } - if !*noauthFlag && !strings.HasPrefix(msg.URL, "https://twitter.com/") && !strings.HasPrefix(msg.URL, "https://www.facebook.com/") { - if err = sendError(wsconn, errors.New("URL doesn't link to supported services")); err != nil { - log.Warn("Failed to send URL error to client", "err", err) - return - } - continue - } - if msg.Tier >= uint(*tiersFlag) { - //lint:ignore ST1005 This error is to be displayed in the browser - if err = sendError(wsconn, errors.New("Invalid funding tier requested")); err != nil { - log.Warn("Failed to send tier error to client", "err", err) - return - } - continue - } - log.Info("Faucet funds requested", "url", msg.URL, "tier", msg.Tier) - - // If captcha verifications are enabled, make sure we're not dealing with a robot - if *captchaToken != "" { - form := url.Values{} - form.Add("secret", *captchaSecret) - form.Add("response", msg.Captcha) - - res, err := http.PostForm("https://www.google.com/recaptcha/api/siteverify", form) - if err != nil { - if err = sendError(wsconn, err); err != nil { - log.Warn("Failed to send captcha post error to client", "err", err) - return - } - continue - } - var result struct { - Success bool `json:"success"` - Errors json.RawMessage `json:"error-codes"` - } - err = json.NewDecoder(res.Body).Decode(&result) - res.Body.Close() - if err != nil { - if err = sendError(wsconn, err); err != nil { - log.Warn("Failed to send captcha decode error to client", "err", err) - return - } - continue - } - if !result.Success { - log.Warn("Captcha verification failed", "err", string(result.Errors)) - //lint:ignore ST1005 it's funny and the robot won't mind - if err = sendError(wsconn, errors.New("Beep-bop, you're a robot!")); err != nil { - log.Warn("Failed to send captcha failure to client", "err", err) - return - } - continue - } - } - // Retrieve the Ethereum address to fund, the requesting user and a profile picture - var ( - id string - username string - avatar string - address common.Address - ) - switch { - case strings.HasPrefix(msg.URL, "https://twitter.com/"): - id, username, avatar, address, err = authTwitter(msg.URL, *twitterTokenV1Flag, *twitterTokenFlag) - case strings.HasPrefix(msg.URL, "https://www.facebook.com/"): - username, avatar, address, err = authFacebook(msg.URL) - id = username - case *noauthFlag: - username, avatar, address, err = authNoAuth(msg.URL) - id = username - default: - //lint:ignore ST1005 This error is to be displayed in the browser - err = errors.New("Something funky happened, please open an issue at https://github.com/ethereum/go-ethereum/issues") - } - if err != nil { - if err = sendError(wsconn, err); err != nil { - log.Warn("Failed to send prefix error to client", "err", err) - return - } - continue - } - log.Info("Faucet request valid", "url", msg.URL, "tier", msg.Tier, "user", username, "address", address) - - // Ensure the user didn't request funds too recently - f.lock.Lock() - var ( - fund bool - timeout time.Time - ) - if timeout = f.timeouts[id]; time.Now().After(timeout) { - // User wasn't funded recently, create the funding transaction - amount := new(big.Int).Mul(big.NewInt(int64(*payoutFlag)), ether) - amount = new(big.Int).Mul(amount, new(big.Int).Exp(big.NewInt(5), big.NewInt(int64(msg.Tier)), nil)) - amount = new(big.Int).Div(amount, new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(msg.Tier)), nil)) - - tx := types.NewTransaction(f.nonce+uint64(len(f.reqs)), address, amount, 21000, f.price, nil) - signed, err := f.keystore.SignTx(f.account, tx, f.config.ChainID) - if err != nil { - f.lock.Unlock() - if err = sendError(wsconn, err); err != nil { - log.Warn("Failed to send transaction creation error to client", "err", err) - return - } - continue - } - // Submit the transaction and mark as funded if successful - if err := f.client.SendTransaction(context.Background(), signed); err != nil { - f.lock.Unlock() - if err = sendError(wsconn, err); err != nil { - log.Warn("Failed to send transaction transmission error to client", "err", err) - return - } - continue - } - f.reqs = append(f.reqs, &request{ - Avatar: avatar, - Account: address, - Time: time.Now(), - Tx: signed, - }) - timeout := time.Duration(*minutesFlag*int(math.Pow(3, float64(msg.Tier)))) * time.Minute - grace := timeout / 288 // 24h timeout => 5m grace - - f.timeouts[id] = time.Now().Add(timeout - grace) - fund = true - } - f.lock.Unlock() - - // Send an error if too frequent funding, othewise a success - if !fund { - if err = sendError(wsconn, fmt.Errorf("%s left until next allowance", common.PrettyDuration(time.Until(timeout)))); err != nil { // nolint: gosimple - log.Warn("Failed to send funding error to client", "err", err) - return - } - continue - } - if err = sendSuccess(wsconn, fmt.Sprintf("Funding request accepted for %s into %s", username, address.Hex())); err != nil { - log.Warn("Failed to send funding success to client", "err", err) - return - } - select { - case f.update <- struct{}{}: - default: - } - } -} - -// refresh attempts to retrieve the latest header from the chain and extract the -// associated faucet balance and nonce for connectivity caching. -func (f *faucet) refresh(head *types.Header) error { - // Ensure a state update does not run for too long - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - // If no header was specified, use the current chain head - var err error - if head == nil { - if head, err = f.client.HeaderByNumber(ctx, nil); err != nil { - return err - } - } - // Retrieve the balance, nonce and gas price from the current head - var ( - balance *big.Int - nonce uint64 - price *big.Int - ) - if balance, err = f.client.BalanceAt(ctx, f.account.Address, head.Number); err != nil { - return err - } - if nonce, err = f.client.NonceAt(ctx, f.account.Address, head.Number); err != nil { - return err - } - if price, err = f.client.SuggestGasPrice(ctx); err != nil { - return err - } - // Everything succeeded, update the cached stats and eject old requests - f.lock.Lock() - f.head, f.balance = head, balance - f.price, f.nonce = price, nonce - for len(f.reqs) > 0 && f.reqs[0].Tx.Nonce() < f.nonce { - f.reqs = f.reqs[1:] - } - f.lock.Unlock() - - return nil -} - -// loop keeps waiting for interesting events and pushes them out to connected -// websockets. -func (f *faucet) loop() { - // Wait for chain events and push them to clients - heads := make(chan *types.Header, 16) - sub, err := f.client.SubscribeNewHead(context.Background(), heads) - if err != nil { - log.Crit("Failed to subscribe to head events", "err", err) - } - defer sub.Unsubscribe() - - // Start a goroutine to update the state from head notifications in the background - update := make(chan *types.Header) - - go func() { - for head := range update { - // New chain head arrived, query the current stats and stream to clients - timestamp := time.Unix(int64(head.Time), 0) - if time.Since(timestamp) > time.Hour { - log.Warn("Skipping faucet refresh, head too old", "number", head.Number, "hash", head.Hash(), "age", common.PrettyAge(timestamp)) - continue - } - if err := f.refresh(head); err != nil { - log.Warn("Failed to update faucet state", "block", head.Number, "hash", head.Hash(), "err", err) - continue - } - // Faucet state retrieved, update locally and send to clients - f.lock.RLock() - log.Info("Updated faucet state", "number", head.Number, "hash", head.Hash(), "age", common.PrettyAge(timestamp), "balance", f.balance, "nonce", f.nonce, "price", f.price) - - balance := new(big.Int).Div(f.balance, ether) - peers := f.stack.Server().PeerCount() - - for _, conn := range f.conns { - if err := send(conn, map[string]interface{}{ - "funds": balance, - "funded": f.nonce, - "peers": peers, - "requests": f.reqs, - }, time.Second); err != nil { - log.Warn("Failed to send stats to client", "err", err) - conn.conn.Close() - continue - } - if err := send(conn, head, time.Second); err != nil { - log.Warn("Failed to send header to client", "err", err) - conn.conn.Close() - } - } - f.lock.RUnlock() - } - }() - // Wait for various events and assing to the appropriate background threads - for { - select { - case head := <-heads: - // New head arrived, send if for state update if there's none running - select { - case update <- head: - default: - } - - case <-f.update: - // Pending requests updated, stream to clients - f.lock.RLock() - for _, conn := range f.conns { - if err := send(conn, map[string]interface{}{"requests": f.reqs}, time.Second); err != nil { - log.Warn("Failed to send requests to client", "err", err) - conn.conn.Close() - } - } - f.lock.RUnlock() - } - } -} - -// sends transmits a data packet to the remote end of the websocket, but also -// setting a write deadline to prevent waiting forever on the node. -func send(conn *wsConn, value interface{}, timeout time.Duration) error { - if timeout == 0 { - timeout = 60 * time.Second - } - conn.wlock.Lock() - defer conn.wlock.Unlock() - conn.conn.SetWriteDeadline(time.Now().Add(timeout)) - return conn.conn.WriteJSON(value) -} - -// sendError transmits an error to the remote end of the websocket, also setting -// the write deadline to 1 second to prevent waiting forever. -func sendError(conn *wsConn, err error) error { - return send(conn, map[string]string{"error": err.Error()}, time.Second) -} - -// sendSuccess transmits a success message to the remote end of the websocket, also -// setting the write deadline to 1 second to prevent waiting forever. -func sendSuccess(conn *wsConn, msg string) error { - return send(conn, map[string]string{"success": msg}, time.Second) -} - -// authTwitter tries to authenticate a faucet request using Twitter posts, returning -// the uniqueness identifier (user id/username), username, avatar URL and Ethereum address to fund on success. -func authTwitter(url string, tokenV1, tokenV2 string) (string, string, string, common.Address, error) { - // Ensure the user specified a meaningful URL, no fancy nonsense - parts := strings.Split(url, "/") - if len(parts) < 4 || parts[len(parts)-2] != "status" { - //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", "", common.Address{}, errors.New("Invalid Twitter status URL") - } - // Strip any query parameters from the tweet id and ensure it's numeric - tweetID := strings.Split(parts[len(parts)-1], "?")[0] - if !regexp.MustCompile("^[0-9]+$").MatchString(tweetID) { - return "", "", "", common.Address{}, errors.New("Invalid Tweet URL") - } - // Twitter's API isn't really friendly with direct links. - // It is restricted to 300 queries / 15 minute with an app api key. - // Anything more will require read only authorization from the users and that we want to avoid. - - // If Twitter bearer token is provided, use the API, selecting the version - // the user would prefer (currently there's a limit of 1 v2 app / developer - // but unlimited v1.1 apps). - switch { - case tokenV1 != "": - return authTwitterWithTokenV1(tweetID, tokenV1) - case tokenV2 != "": - return authTwitterWithTokenV2(tweetID, tokenV2) - } - // Twitter API token isn't provided so we just load the public posts - // and scrape it for the Ethereum address and profile URL. We need to load - // the mobile page though since the main page loads tweet contents via JS. - url = strings.Replace(url, "https://twitter.com/", "https://mobile.twitter.com/", 1) - - res, err := http.Get(url) - if err != nil { - return "", "", "", common.Address{}, err - } - defer res.Body.Close() - - // Resolve the username from the final redirect, no intermediate junk - parts = strings.Split(res.Request.URL.String(), "/") - if len(parts) < 4 || parts[len(parts)-2] != "status" { - //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", "", common.Address{}, errors.New("Invalid Twitter status URL") - } - username := parts[len(parts)-3] - - body, err := io.ReadAll(res.Body) - if err != nil { - return "", "", "", common.Address{}, err - } - address := common.HexToAddress(string(regexp.MustCompile("0x[0-9a-fA-F]{40}").Find(body))) - if address == (common.Address{}) { - //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", "", common.Address{}, errors.New("No Ethereum address found to fund") - } - var avatar string - if parts = regexp.MustCompile(`src="([^"]+twimg\.com/profile_images[^"]+)"`).FindStringSubmatch(string(body)); len(parts) == 2 { - avatar = parts[1] - } - return username + "@twitter", username, avatar, address, nil -} - -// authTwitterWithTokenV1 tries to authenticate a faucet request using Twitter's v1 -// API, returning the user id, username, avatar URL and Ethereum address to fund on -// success. -func authTwitterWithTokenV1(tweetID string, token string) (string, string, string, common.Address, error) { - // Query the tweet details from Twitter - url := fmt.Sprintf("https://api.twitter.com/1.1/statuses/show.json?id=%s", tweetID) - req, err := http.NewRequest(http.MethodGet, url, nil) - if err != nil { - return "", "", "", common.Address{}, err - } - req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) - res, err := http.DefaultClient.Do(req) - if err != nil { - return "", "", "", common.Address{}, err - } - defer res.Body.Close() - - var result struct { - Text string `json:"text"` - User struct { - ID string `json:"id_str"` - Username string `json:"screen_name"` - Avatar string `json:"profile_image_url"` - } `json:"user"` - } - err = json.NewDecoder(res.Body).Decode(&result) - if err != nil { - return "", "", "", common.Address{}, err - } - address := common.HexToAddress(regexp.MustCompile("0x[0-9a-fA-F]{40}").FindString(result.Text)) - if address == (common.Address{}) { - //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", "", common.Address{}, errors.New("No Ethereum address found to fund") - } - return result.User.ID + "@twitter", result.User.Username, result.User.Avatar, address, nil -} - -// authTwitterWithTokenV2 tries to authenticate a faucet request using Twitter's v2 -// API, returning the user id, username, avatar URL and Ethereum address to fund on -// success. -func authTwitterWithTokenV2(tweetID string, token string) (string, string, string, common.Address, error) { - // Query the tweet details from Twitter - url := fmt.Sprintf("https://api.twitter.com/2/tweets/%s?expansions=author_id&user.fields=profile_image_url", tweetID) - req, err := http.NewRequest(http.MethodGet, url, nil) - if err != nil { - return "", "", "", common.Address{}, err - } - req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) - res, err := http.DefaultClient.Do(req) - if err != nil { - return "", "", "", common.Address{}, err - } - defer res.Body.Close() - - var result struct { - Data struct { - AuthorID string `json:"author_id"` - Text string `json:"text"` - } `json:"data"` - Includes struct { - Users []struct { - ID string `json:"id"` - Username string `json:"username"` - Avatar string `json:"profile_image_url"` - } `json:"users"` - } `json:"includes"` - } - - err = json.NewDecoder(res.Body).Decode(&result) - if err != nil { - return "", "", "", common.Address{}, err - } - - address := common.HexToAddress(regexp.MustCompile("0x[0-9a-fA-F]{40}").FindString(result.Data.Text)) - if address == (common.Address{}) { - //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", "", common.Address{}, errors.New("No Ethereum address found to fund") - } - return result.Data.AuthorID + "@twitter", result.Includes.Users[0].Username, result.Includes.Users[0].Avatar, address, nil -} - -// authFacebook tries to authenticate a faucet request using Facebook posts, -// returning the username, avatar URL and Ethereum address to fund on success. -func authFacebook(url string) (string, string, common.Address, error) { - // Ensure the user specified a meaningful URL, no fancy nonsense - parts := strings.Split(strings.Split(url, "?")[0], "/") - if parts[len(parts)-1] == "" { - parts = parts[0 : len(parts)-1] - } - if len(parts) < 4 || parts[len(parts)-2] != "posts" { - //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", common.Address{}, errors.New("Invalid Facebook post URL") - } - username := parts[len(parts)-3] - - // Facebook's Graph API isn't really friendly with direct links. Still, we don't - // want to do ask read permissions from users, so just load the public posts and - // scrape it for the Ethereum address and profile URL. - // - // Facebook recently changed their desktop webpage to use AJAX for loading post - // content, so switch over to the mobile site for now. Will probably end up having - // to use the API eventually. - crawl := strings.Replace(url, "www.facebook.com", "m.facebook.com", 1) - - res, err := http.Get(crawl) - if err != nil { - return "", "", common.Address{}, err - } - defer res.Body.Close() - - body, err := io.ReadAll(res.Body) - if err != nil { - return "", "", common.Address{}, err - } - address := common.HexToAddress(string(regexp.MustCompile("0x[0-9a-fA-F]{40}").Find(body))) - if address == (common.Address{}) { - //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", common.Address{}, errors.New("No Ethereum address found to fund. Please check the post URL and verify that it can be viewed publicly.") - } - var avatar string - if parts = regexp.MustCompile(`src="([^"]+fbcdn\.net[^"]+)"`).FindStringSubmatch(string(body)); len(parts) == 2 { - avatar = parts[1] - } - return username + "@facebook", avatar, address, nil -} - -// authNoAuth tries to interpret a faucet request as a plain Ethereum address, -// without actually performing any remote authentication. This mode is prone to -// Byzantine attack, so only ever use for truly private networks. -func authNoAuth(url string) (string, string, common.Address, error) { - address := common.HexToAddress(regexp.MustCompile("0x[0-9a-fA-F]{40}").FindString(url)) - if address == (common.Address{}) { - //lint:ignore ST1005 This error is to be displayed in the browser - return "", "", common.Address{}, errors.New("No Ethereum address found to fund") - } - return address.Hex() + "@noauth", "", address, nil -} - -// getGenesis returns a genesis based on input args -func getGenesis(genesisFlag string, goerliFlag bool, sepoliaFlag bool) (*core.Genesis, error) { - switch { - case genesisFlag != "": - var genesis core.Genesis - err := common.LoadJSON(genesisFlag, &genesis) - return &genesis, err - case goerliFlag: - return core.DefaultGoerliGenesisBlock(), nil - case sepoliaFlag: - return core.DefaultSepoliaGenesisBlock(), nil - default: - return nil, errors.New("no genesis flag provided") - } -} diff --git a/cmd/faucet/faucet.html b/cmd/faucet/faucet.html deleted file mode 100644 index dad5ad84f2..0000000000 --- a/cmd/faucet/faucet.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - - {{.Network}}: Authenticated Faucet - - - - - - - - - - - - - -

-
-
-
-

{{.Network}} Authenticated Faucet

-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-

How does this work?

-

This Ether faucet is running on the {{.Network}} network. To prevent malicious actors from exhausting all available funds or accumulating enough Ether to mount long running spam attacks, requests are tied to common 3rd party social network accounts. Anyone having a Twitter or Facebook account may request funds within the permitted limits.

-
-
-
To request funds via Twitter, make a tweet with your Ethereum address pasted into the contents (surrounding text doesn't matter).
Copy-paste the tweets URL into the above input box and fire away!
- -
-
To request funds via Facebook, publish a new public post with your Ethereum address embedded into the content (surrounding text doesn't matter).
Copy-paste the posts URL into the above input box and fire away!
- - {{if .NoAuth}} -
-
To request funds without authentication, simply copy-paste your Ethereum address into the above input box (surrounding text doesn't matter) and fire away.
This mode is susceptible to Byzantine attacks. Only use for debugging or private networks!
- {{end}} -
-

You can track the current pending requests below the input field to see how much you have to wait until your turn comes.

- {{if .Recaptcha}}The faucet is running invisible reCaptcha protection against bots.{{end}} -
-
-
-
- - {{if .Recaptcha}} - {{end}} - - diff --git a/cmd/faucet/faucet_test.go b/cmd/faucet/faucet_test.go deleted file mode 100644 index 58a1f22b54..0000000000 --- a/cmd/faucet/faucet_test.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "testing" - - "github.com/ethereum/go-ethereum/common" -) - -func TestFacebook(t *testing.T) { - // TODO: Remove facebook auth or implement facebook api, which seems to require an API key - t.Skipf("The facebook access is flaky, needs to be reimplemented or removed") - for _, tt := range []struct { - url string - want common.Address - }{ - { - "https://www.facebook.com/fooz.gazonk/posts/2837228539847129", - common.HexToAddress("0xDeadDeaDDeaDbEefbEeFbEEfBeeFBeefBeeFbEEF"), - }, - } { - _, _, gotAddress, err := authFacebook(tt.url) - if err != nil { - t.Fatal(err) - } - if gotAddress != tt.want { - t.Fatalf("address wrong, have %v want %v", gotAddress, tt.want) - } - } -} diff --git a/cmd/geth/accountcmd_test.go b/cmd/geth/accountcmd_test.go index 84b9c33c24..ea3a7c3b64 100644 --- a/cmd/geth/accountcmd_test.go +++ b/cmd/geth/accountcmd_test.go @@ -43,11 +43,13 @@ func tmpDatadirWithKeystore(t *testing.T) string { } func TestAccountListEmpty(t *testing.T) { + t.Parallel() geth := runGeth(t, "account", "list") geth.ExpectExit() } func TestAccountList(t *testing.T) { + t.Parallel() datadir := tmpDatadirWithKeystore(t) var want = ` Account #0: {7ef5a6135f1fd6a02593eedc869c6d41d934aef8} keystore://{{.Datadir}}/keystore/UTC--2016-03-22T12-57-55.920751759Z--7ef5a6135f1fd6a02593eedc869c6d41d934aef8 @@ -74,6 +76,7 @@ Account #2: {289d485d9771714cce91d3393d764e1311907acc} keystore://{{.Datadir}}\k } func TestAccountNew(t *testing.T) { + t.Parallel() geth := runGeth(t, "account", "new", "--lightkdf") defer geth.ExpectExit() geth.Expect(` @@ -96,6 +99,7 @@ Path of the secret key file: .*UTC--.+--[0-9a-f]{40} } func TestAccountImport(t *testing.T) { + t.Parallel() tests := []struct{ name, key, output string }{ { name: "correct account", @@ -118,6 +122,7 @@ func TestAccountImport(t *testing.T) { } func TestAccountHelp(t *testing.T) { + t.Parallel() geth := runGeth(t, "account", "-h") geth.WaitExit() if have, want := geth.ExitStatus(), 0; have != want { @@ -147,6 +152,7 @@ func importAccountWithExpect(t *testing.T, key string, expected string) { } func TestAccountNewBadRepeat(t *testing.T) { + t.Parallel() geth := runGeth(t, "account", "new", "--lightkdf") defer geth.ExpectExit() geth.Expect(` @@ -159,6 +165,7 @@ Fatal: Passwords do not match } func TestAccountUpdate(t *testing.T) { + t.Parallel() datadir := tmpDatadirWithKeystore(t) geth := runGeth(t, "account", "update", "--datadir", datadir, "--lightkdf", @@ -175,6 +182,7 @@ Repeat password: {{.InputLine "foobar2"}} } func TestWalletImport(t *testing.T) { + t.Parallel() geth := runGeth(t, "wallet", "import", "--lightkdf", "testdata/guswallet.json") defer geth.ExpectExit() geth.Expect(` @@ -190,6 +198,7 @@ Address: {d4584b5f6229b7be90727b0fc8c6b91bb427821f} } func TestWalletImportBadPassword(t *testing.T) { + t.Parallel() geth := runGeth(t, "wallet", "import", "--lightkdf", "testdata/guswallet.json") defer geth.ExpectExit() geth.Expect(` @@ -200,6 +209,7 @@ Fatal: could not decrypt key with given password } func TestUnlockFlag(t *testing.T) { + t.Parallel() geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t), "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "console", "--exec", "loadScript('testdata/empty.js')") geth.Expect(` @@ -222,6 +232,7 @@ undefined } func TestUnlockFlagWrongPassword(t *testing.T) { + t.Parallel() geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t), "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "console", "--exec", "loadScript('testdata/empty.js')") @@ -240,6 +251,7 @@ Fatal: Failed to unlock account f466859ead1932d743d622cb74fc058882e8648a (could // https://github.com/ethereum/go-ethereum/issues/1785 func TestUnlockFlagMultiIndex(t *testing.T) { + t.Parallel() geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t), "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--unlock", "0,2", "console", "--exec", "loadScript('testdata/empty.js')") @@ -266,6 +278,7 @@ undefined } func TestUnlockFlagPasswordFile(t *testing.T) { + t.Parallel() geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t), "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--password", "testdata/passwords.txt", "--unlock", "0,2", "console", "--exec", "loadScript('testdata/empty.js')") @@ -287,6 +300,7 @@ undefined } func TestUnlockFlagPasswordFileWrongPassword(t *testing.T) { + t.Parallel() geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t), "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--password", "testdata/wrong-passwords.txt", "--unlock", "0,2") @@ -297,6 +311,7 @@ Fatal: Failed to unlock account 0 (could not decrypt key with given password) } func TestUnlockFlagAmbiguous(t *testing.T) { + t.Parallel() store := filepath.Join("..", "..", "accounts", "keystore", "testdata", "dupes") geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t), "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--keystore", @@ -336,6 +351,7 @@ undefined } func TestUnlockFlagAmbiguousWrongPassword(t *testing.T) { + t.Parallel() store := filepath.Join("..", "..", "accounts", "keystore", "testdata", "dupes") geth := runMinimalGeth(t, "--port", "0", "--ipcdisable", "--datadir", tmpDatadirWithKeystore(t), "--unlock", "f466859ead1932d743d622cb74fc058882e8648a", "--keystore", diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index a6bb2c2d2c..0733a29392 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -50,6 +50,8 @@ var ( ArgsUsage: "", Flags: flags.Merge([]cli.Flag{ utils.CachePreimagesFlag, + utils.OverrideCancun, + utils.OverrideVerkle, }, utils.DatabaseFlags), Description: ` The init command initializes a new genesis block and definition for the network. @@ -135,20 +137,7 @@ The import-preimages command imports hash preimages from an RLP encoded stream. It's deprecated, please use "geth db import" instead. `, } - exportPreimagesCommand = &cli.Command{ - Action: exportPreimages, - Name: "export-preimages", - Usage: "Export the preimage database into an RLP stream", - ArgsUsage: "", - Flags: flags.Merge([]cli.Flag{ - utils.CacheFlag, - utils.SyncModeFlag, - }, utils.DatabaseFlags), - Description: ` -The export-preimages command exports hash preimages to an RLP encoded stream. -It's deprecated, please use "geth db export" instead. -`, - } + dumpCommand = &cli.Command{ Action: dump, Name: "dump", @@ -193,6 +182,15 @@ func initGenesis(ctx *cli.Context) error { stack, _ := makeConfigNode(ctx) defer stack.Close() + var overrides core.ChainOverrides + if ctx.IsSet(utils.OverrideCancun.Name) { + v := ctx.Uint64(utils.OverrideCancun.Name) + overrides.OverrideCancun = &v + } + if ctx.IsSet(utils.OverrideVerkle.Name) { + v := ctx.Uint64(utils.OverrideVerkle.Name) + overrides.OverrideVerkle = &v + } for _, name := range []string{"chaindata", "lightchaindata"} { chaindb, err := stack.OpenDatabaseWithFreezer(name, 0, 0, ctx.String(utils.AncientFlag.Name), "", false) if err != nil { @@ -200,10 +198,10 @@ func initGenesis(ctx *cli.Context) error { } defer chaindb.Close() - triedb := utils.MakeTrieDatabase(ctx, chaindb, ctx.Bool(utils.CachePreimagesFlag.Name), false) + triedb := utils.MakeTrieDatabase(ctx, stack, chaindb, ctx.Bool(utils.CachePreimagesFlag.Name), false, genesis.IsVerkle()) defer triedb.Close() - _, hash, err := core.SetupGenesisBlock(chaindb, triedb, genesis) + _, hash, err := core.SetupGenesisBlockWithOverride(chaindb, triedb, genesis, &overrides) if err != nil { utils.Fatalf("Failed to write genesis block: %v", err) } @@ -213,14 +211,21 @@ func initGenesis(ctx *cli.Context) error { } func dumpGenesis(ctx *cli.Context) error { - // if there is a testnet preset enabled, dump that + // check if there is a testnet preset enabled + var genesis *core.Genesis if utils.IsNetworkPreset(ctx) { - genesis := utils.MakeGenesis(ctx) + genesis = utils.MakeGenesis(ctx) + } else if ctx.IsSet(utils.DeveloperFlag.Name) && !ctx.IsSet(utils.DataDirFlag.Name) { + genesis = core.DeveloperGenesisBlock(11_500_000, nil) + } + + if genesis != nil { if err := json.NewEncoder(os.Stdout).Encode(genesis); err != nil { utils.Fatalf("could not encode genesis: %s", err) } return nil } + // dump whatever already exists in the datadir stack, _ := makeConfigNode(ctx) for _, name := range []string{"chaindata", "lightchaindata"} { @@ -245,7 +250,7 @@ func dumpGenesis(ctx *cli.Context) error { if ctx.IsSet(utils.DataDirFlag.Name) { utils.Fatalf("no existing datadir at %s", stack.Config().DataDir) } - utils.Fatalf("no network preset provided, no existing genesis in the default datadir") + utils.Fatalf("no network preset provided, and no genesis exists in the default datadir") return nil } @@ -368,6 +373,9 @@ func exportChain(ctx *cli.Context) error { } // importPreimages imports preimage data from the specified file. +// it is deprecated, and the export function has been removed, but +// the import function is kept around for the time being so that +// older file formats can still be imported. func importPreimages(ctx *cli.Context) error { if ctx.Args().Len() < 1 { utils.Fatalf("This command requires an argument.") @@ -387,25 +395,6 @@ func importPreimages(ctx *cli.Context) error { return nil } -// exportPreimages dumps the preimage data to specified json file in streaming way. -func exportPreimages(ctx *cli.Context) error { - if ctx.Args().Len() < 1 { - utils.Fatalf("This command requires an argument.") - } - stack, _ := makeConfigNode(ctx) - defer stack.Close() - - db := utils.MakeChainDatabase(ctx, stack, true) - defer db.Close() - start := time.Now() - - if err := utils.ExportPreimages(db, ctx.Args().First()); err != nil { - utils.Fatalf("Export error: %v\n", err) - } - fmt.Printf("Export done in %v\n", time.Since(start)) - return nil -} - func parseDumpConfig(ctx *cli.Context, stack *node.Node) (*state.DumpConfig, ethdb.Database, common.Hash, error) { db := utils.MakeChainDatabase(ctx, stack, true) defer db.Close() @@ -474,7 +463,7 @@ func dump(ctx *cli.Context) error { if err != nil { return err } - triedb := utils.MakeTrieDatabase(ctx, db, true, true) // always enable preimage lookup + triedb := utils.MakeTrieDatabase(ctx, stack, db, true, true, false) // always enable preimage lookup defer triedb.Close() state, err := state.New(root, state.NewDatabaseWithNodeDB(db, triedb), nil) @@ -484,11 +473,6 @@ func dump(ctx *cli.Context) error { if ctx.Bool(utils.IterativeOutputFlag.Name) { state.IterativeDump(conf, json.NewEncoder(os.Stdout)) } else { - if conf.OnlyWithAddresses { - fmt.Fprintf(os.Stderr, "If you want to include accounts with missing preimages, you need iterative output, since"+ - " otherwise the accounts will overwrite each other in the resulting mapping.") - return errors.New("incompatible options") - } fmt.Println(string(state.Dump(conf))) } return nil diff --git a/cmd/geth/config.go b/cmd/geth/config.go index 81128ab007..34987c7d5f 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -35,7 +35,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/eth/catalyst" - "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/eth/ethconfig" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/internal/flags" @@ -124,6 +123,17 @@ func defaultNodeConfig() node.Config { return cfg } +func defaultOpBNBNodeConfig() node.Config { + git, _ := version.VCS() + cfg := node.DefaultOpBNBConfig + cfg.Name = clientIdentifier + cfg.Version = params.VersionWithCommit(git.Commit, git.Date) + cfg.HTTPModules = append(cfg.HTTPModules, "eth") + cfg.WSModules = append(cfg.WSModules, "eth") + cfg.IPCPath = "geth.ipc" + return cfg +} + // loadBaseConfig loads the gethConfig based on the given command line // parameters and config file. func loadBaseConfig(ctx *cli.Context) gethConfig { @@ -134,6 +144,15 @@ func loadBaseConfig(ctx *cli.Context) gethConfig { Metrics: metrics.DefaultConfig, } + if ctx.Bool(utils.OpBNBMainnetFlag.Name) || ctx.Bool(utils.OpBNBTestnetFlag.Name) { + cfg.Eth = ethconfig.OpBNBDefaults + cfg.Node = defaultOpBNBNodeConfig() + if ctx.Bool(utils.OpBNBTestnetFlag.Name) { + cfg.Eth.NetworkId = 5611 + cfg.Eth.TrieCommitInterval = 240 + } + } + // Load config file. if file := ctx.String(configFileFlag.Name); file != "" { if err := loadConfig(file, &cfg); err != nil { @@ -180,6 +199,16 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) { cfg.Eth.OverrideOptimismCanyon = &v } + if ctx.IsSet(utils.OverrideOptimismEcotone.Name) { + v := ctx.Uint64(utils.OverrideOptimismEcotone.Name) + cfg.Eth.OverrideOptimismEcotone = &v + } + + if ctx.IsSet(utils.OverrideOptimismInterop.Name) { + v := ctx.Uint64(utils.OverrideOptimismInterop.Name) + cfg.Eth.OverrideOptimismInterop = &v + } + if ctx.IsSet(utils.OverrideVerkle.Name) { v := ctx.Uint64(utils.OverrideVerkle.Name) cfg.Eth.OverrideVerkle = &v @@ -229,7 +258,7 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) { } catalyst.RegisterSimulatedBeaconAPIs(stack, simBeacon) stack.RegisterLifecycle(simBeacon) - } else if cfg.Eth.SyncMode != downloader.LightSync { + } else { err := catalyst.Register(stack, eth) if err != nil { utils.Fatalf("failed to register catalyst service: %v", err) diff --git a/cmd/geth/consolecmd_test.go b/cmd/geth/consolecmd_test.go index 5046906c0a..ef6ef5f288 100644 --- a/cmd/geth/consolecmd_test.go +++ b/cmd/geth/consolecmd_test.go @@ -50,6 +50,7 @@ func runMinimalGeth(t *testing.T, args ...string) *testgeth { // Tests that a node embedded within a console can be started up properly and // then terminated by closing the input stream. func TestConsoleWelcome(t *testing.T) { + t.Parallel() coinbase := "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182" // Start a geth console, make sure it's cleaned up and terminate the console diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go index 6f802716c5..7835cc5048 100644 --- a/cmd/geth/dbcmd.go +++ b/cmd/geth/dbcmd.go @@ -19,6 +19,7 @@ package main import ( "bytes" "fmt" + "math" "os" "os/signal" "path/filepath" @@ -38,6 +39,7 @@ import ( "github.com/ethereum/go-ethereum/internal/flags" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/trie" + "github.com/ethereum/go-ethereum/trie/triedb/pathdb" "github.com/olekukonko/tablewriter" "github.com/urfave/cli/v2" ) @@ -62,6 +64,7 @@ Remove blockchain and state databases`, dbCompactCmd, dbGetCmd, dbDeleteCmd, + dbInspectTrieCmd, dbPutCmd, dbGetSlotsCmd, dbDumpFreezerIndex, @@ -69,6 +72,10 @@ Remove blockchain and state databases`, dbExportCmd, dbMetadataCmd, dbCheckStateContentCmd, + dbHbss2PbssCmd, + dbPruneHashTrieCmd, + dbTrieGetCmd, + dbTrieDeleteCmd, }, } dbInspectCmd = &cli.Command{ @@ -81,6 +88,17 @@ Remove blockchain and state databases`, Usage: "Inspect the storage size for each type of data in the database", Description: `This commands iterates the entire database. If the optional 'prefix' and 'start' arguments are provided, then the iteration is limited to the given subset of data.`, } + dbInspectTrieCmd = &cli.Command{ + Action: inspectTrie, + Name: "inspect-trie", + ArgsUsage: " ", + Flags: []cli.Flag{ + utils.DataDirFlag, + utils.SyncModeFlag, + }, + Usage: "Inspect the MPT tree of the account and contract.", + Description: `This commands iterates the entrie WorldState.`, + } dbCheckStateContentCmd = &cli.Command{ Action: checkStateContent, Name: "check-state-content", @@ -91,6 +109,54 @@ Remove blockchain and state databases`, For each trie node encountered, it checks that the key corresponds to the keccak256(value). If this is not true, this indicates a data corruption.`, } + dbHbss2PbssCmd = &cli.Command{ + Action: hbss2pbss, + Name: "hbss-to-pbss", + ArgsUsage: "", + Flags: []cli.Flag{ + utils.DataDirFlag, + utils.SyncModeFlag, + }, + Usage: "Convert Hash-Base to Path-Base trie node.", + Description: `This command iterates the entire trie node database and convert the hash-base node to path-base node.`, + } + dbTrieGetCmd = &cli.Command{ + Action: dbTrieGet, + Name: "trie-get", + Usage: "Show the value of a trie node path key", + ArgsUsage: "[trie owner] ", + Flags: []cli.Flag{ + utils.DataDirFlag, + utils.SyncModeFlag, + utils.MainnetFlag, + utils.StateSchemeFlag, + }, + Description: "This command looks up the specified trie node key from the database.", + } + dbTrieDeleteCmd = &cli.Command{ + Action: dbTrieDelete, + Name: "trie-delete", + Usage: "delete the specify trie node", + ArgsUsage: "[trie owner] | ", + Flags: []cli.Flag{ + utils.DataDirFlag, + utils.SyncModeFlag, + utils.MainnetFlag, + utils.StateSchemeFlag, + }, + Description: "This command delete the specify trie node from the database.", + } + dbPruneHashTrieCmd = &cli.Command{ + Action: pruneHashTrie, + Name: "prune-hash-trie", + ArgsUsage: "", + Flags: []cli.Flag{ + utils.DataDirFlag, + utils.SyncModeFlag, + }, + Usage: "[Caution]Prune all the hash trie node in diskdb", + Description: `This command iterates the entrie kv in leveldb and delete all the hash trie node.`, + } dbStatCmd = &cli.Command{ Action: dbStats, Name: "stats", @@ -108,7 +174,7 @@ a data corruption.`, utils.CacheFlag, utils.CacheDatabaseFlag, }, utils.NetworkFlags, utils.DatabaseFlags), - Description: `This command performs a database compaction. + Description: `This command performs a database compaction. WARNING: This operation may take a very long time to finish, and may cause database corruption if it is aborted during execution'!`, } @@ -130,7 +196,7 @@ corruption if it is aborted during execution'!`, Flags: flags.Merge([]cli.Flag{ utils.SyncModeFlag, }, utils.NetworkFlags, utils.DatabaseFlags), - Description: `This command deletes the specified database key from the database. + Description: `This command deletes the specified database key from the database. WARNING: This is a low-level operation which may cause database corruption!`, } dbPutCmd = &cli.Command{ @@ -141,7 +207,7 @@ WARNING: This is a low-level operation which may cause database corruption!`, Flags: flags.Merge([]cli.Flag{ utils.SyncModeFlag, }, utils.NetworkFlags, utils.DatabaseFlags), - Description: `This command sets a given database key to the given value. + Description: `This command sets a given database key to the given value. WARNING: This is a low-level operation which may cause database corruption!`, } dbGetSlotsCmd = &cli.Command{ @@ -198,61 +264,160 @@ WARNING: This is a low-level operation which may cause database corruption!`, func removeDB(ctx *cli.Context) error { stack, config := makeConfigNode(ctx) - // Remove the full node state database - path := stack.ResolvePath("chaindata") - if common.FileExist(path) { - confirmAndRemoveDB(path, "full node state database") - } else { - log.Info("Full node state database missing", "path", path) - } - // Remove the full node ancient database - path = config.Eth.DatabaseFreezer + // Resolve folder paths. + var ( + rootDir = stack.ResolvePath("chaindata") + ancientDir = config.Eth.DatabaseFreezer + ) switch { - case path == "": - path = filepath.Join(stack.ResolvePath("chaindata"), "ancient") - case !filepath.IsAbs(path): - path = config.Node.ResolvePath(path) - } - if common.FileExist(path) { - confirmAndRemoveDB(path, "full node ancient database") - } else { - log.Info("Full node ancient database missing", "path", path) - } - // Remove the light node database - path = stack.ResolvePath("lightchaindata") - if common.FileExist(path) { - confirmAndRemoveDB(path, "light node database") - } else { - log.Info("Light node database missing", "path", path) + case ancientDir == "": + ancientDir = filepath.Join(stack.ResolvePath("chaindata"), "ancient") + case !filepath.IsAbs(ancientDir): + ancientDir = config.Node.ResolvePath(ancientDir) } + // Delete state data + statePaths := []string{rootDir, filepath.Join(ancientDir, rawdb.StateFreezerName)} + confirmAndRemoveDB(statePaths, "state data") + + // Delete ancient chain + chainPaths := []string{filepath.Join(ancientDir, rawdb.ChainFreezerName)} + confirmAndRemoveDB(chainPaths, "ancient chain") return nil } +// removeFolder deletes all files (not folders) inside the directory 'dir' (but +// not files in subfolders). +func removeFolder(dir string) { + filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + // If we're at the top level folder, recurse into + if path == dir { + return nil + } + // Delete all the files, but not subfolders + if !info.IsDir() { + os.Remove(path) + return nil + } + return filepath.SkipDir + }) +} + // confirmAndRemoveDB prompts the user for a last confirmation and removes the -// folder if accepted. -func confirmAndRemoveDB(database string, kind string) { - confirm, err := prompt.Stdin.PromptConfirm(fmt.Sprintf("Remove %s (%s)?", kind, database)) +// list of folders if accepted. +func confirmAndRemoveDB(paths []string, kind string) { + msg := fmt.Sprintf("Location(s) of '%s': \n", kind) + for _, path := range paths { + msg += fmt.Sprintf("\t- %s\n", path) + } + fmt.Println(msg) + + confirm, err := prompt.Stdin.PromptConfirm(fmt.Sprintf("Remove '%s'?", kind)) switch { case err != nil: utils.Fatalf("%v", err) case !confirm: - log.Info("Database deletion skipped", "path", database) + log.Info("Database deletion skipped", "kind", kind, "paths", paths) default: - start := time.Now() - filepath.Walk(database, func(path string, info os.FileInfo, err error) error { - // If we're at the top level folder, recurse into - if path == database { - return nil + var ( + deleted []string + start = time.Now() + ) + for _, path := range paths { + if common.FileExist(path) { + removeFolder(path) + deleted = append(deleted, path) + } else { + log.Info("Folder is not existent", "path", path) + } + } + log.Info("Database successfully deleted", "kind", kind, "paths", deleted, "elapsed", common.PrettyDuration(time.Since(start))) + } +} + +func inspectTrie(ctx *cli.Context) error { + if ctx.NArg() < 1 { + return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage) + } + + if ctx.NArg() > 3 { + return fmt.Errorf("Max 3 arguments: %v", ctx.Command.ArgsUsage) + } + + var ( + blockNumber uint64 + trieRootHash common.Hash + jobNum uint64 + ) + + stack, _ := makeConfigNode(ctx) + defer stack.Close() + + db := utils.MakeChainDatabase(ctx, stack, true) + defer db.Close() + + var headerBlockHash common.Hash + if ctx.NArg() >= 1 { + if ctx.Args().Get(0) == "latest" { + headerHash := rawdb.ReadHeadHeaderHash(db) + blockNumber = *(rawdb.ReadHeaderNumber(db, headerHash)) + } else if ctx.Args().Get(0) == "snapshot" { + trieRootHash = rawdb.ReadSnapshotRoot(db) + blockNumber = math.MaxUint64 + } else { + var err error + blockNumber, err = strconv.ParseUint(ctx.Args().Get(0), 10, 64) + if err != nil { + return fmt.Errorf("Failed to parse block number, Args[0]: %v, err: %v", ctx.Args().Get(0), err) } - // Delete all the files, but not subfolders - if !info.IsDir() { - os.Remove(path) - return nil + } + + if ctx.NArg() == 1 { + jobNum = 1000 + } else { + var err error + jobNum, err = strconv.ParseUint(ctx.Args().Get(1), 10, 64) + if err != nil { + return fmt.Errorf("Failed to parse job number, Args[1]: %v, err: %v", ctx.Args().Get(1), err) + } + } + + if blockNumber != math.MaxUint64 { + headerBlockHash = rawdb.ReadCanonicalHash(db, blockNumber) + if headerBlockHash == (common.Hash{}) { + return fmt.Errorf("ReadHeadBlockHash empty hash") + } + blockHeader := rawdb.ReadHeader(db, headerBlockHash, blockNumber) + trieRootHash = blockHeader.Root + } + if (trieRootHash == common.Hash{}) { + log.Error("Empty root hash") + } + fmt.Printf("ReadBlockHeader, root: %v, block number: %v\n", trieRootHash, blockNumber) + + dbScheme := rawdb.ReadStateScheme(db) + var config *trie.Config + if dbScheme == rawdb.PathScheme { + config = &trie.Config{ + PathDB: utils.PathDBConfigAddJournalFilePath(stack, pathdb.ReadOnly), } - return filepath.SkipDir - }) - log.Info("Database successfully deleted", "path", database, "elapsed", common.PrettyDuration(time.Since(start))) + } else if dbScheme == rawdb.HashScheme { + config = trie.HashDefaults + } + + triedb := trie.NewDatabase(db, config) + theTrie, err := trie.New(trie.TrieID(trieRootHash), triedb) + if err != nil { + fmt.Printf("Failed to new trie tree, err: %v, root hash: %v\n", err, trieRootHash.String()) + return err + } + theInspect, err := trie.NewInspector(theTrie, triedb, trieRootHash, blockNumber, jobNum) + if err != nil { + return err + } + theInspect.Run() + theInspect.DisplayResult() } + return nil } func inspect(ctx *cli.Context) error { @@ -410,6 +575,134 @@ func dbGet(ctx *cli.Context) error { return nil } +// dbTrieGet shows the value of a given database key +func dbTrieGet(ctx *cli.Context) error { + if ctx.NArg() < 1 || ctx.NArg() > 2 { + return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage) + } + stack, _ := makeConfigNode(ctx) + defer stack.Close() + + db := utils.MakeChainDatabase(ctx, stack, false) + defer db.Close() + + scheme := ctx.String(utils.StateSchemeFlag.Name) + if scheme == "" { + scheme = rawdb.HashScheme + } + + if scheme == rawdb.PathScheme { + var ( + pathKey []byte + owner []byte + err error + ) + if ctx.NArg() == 1 { + pathKey, err = hexutil.Decode(ctx.Args().Get(0)) + if err != nil { + log.Error("Could not decode the value", "error", err) + return err + } + nodeVal, hash := rawdb.ReadAccountTrieNode(db, pathKey) + log.Info("TrieGet result", "path key", common.Bytes2Hex(pathKey), "hash", hash, "node", trie.NodeString(hash.Bytes(), nodeVal)) + } else if ctx.NArg() == 2 { + owner, err = hexutil.Decode(ctx.Args().Get(0)) + if err != nil { + log.Error("Could not decode the value", "error", err) + return err + } + pathKey, err = hexutil.Decode(ctx.Args().Get(1)) + if err != nil { + log.Error("Could not decode the value", "error", err) + return err + } + + nodeVal, hash := rawdb.ReadStorageTrieNode(db, common.BytesToHash(owner), pathKey) + log.Info("TrieGet result", "path key", common.Bytes2Hex(pathKey), "owner", common.BytesToHash(owner), + "hash", hash, "node", trie.NodeString(hash.Bytes(), nodeVal)) + } + } else if scheme == rawdb.HashScheme { + if ctx.NArg() == 1 { + hashKey, err := hexutil.Decode(ctx.Args().Get(0)) + if err != nil { + log.Error("Could not decode the value", "error", err) + return err + } + val, err := db.Get(hashKey) + if err != nil { + log.Error("Failed to get value from db, ", "error", err) + return err + } + log.Info("TrieGet result", "hash key", common.BytesToHash(hashKey), "node", trie.NodeString(hashKey, val)) + } else { + log.Error("Too many args") + } + } + + return nil +} + +// dbTrieDelete delete the trienode of a given database key +func dbTrieDelete(ctx *cli.Context) error { + if ctx.NArg() < 1 || ctx.NArg() > 2 { + return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage) + } + stack, _ := makeConfigNode(ctx) + defer stack.Close() + + db := utils.MakeChainDatabase(ctx, stack, false) + defer db.Close() + + scheme := ctx.String(utils.StateSchemeFlag.Name) + if scheme == "" { + scheme = rawdb.HashScheme + } + + if scheme == rawdb.PathScheme { + var ( + pathKey []byte + owner []byte + err error + ) + if ctx.NArg() == 1 { + pathKey, err = hexutil.Decode(ctx.Args().Get(0)) + if err != nil { + log.Error("Could not decode the value", "error", err) + return err + } + rawdb.DeleteAccountTrieNode(db, pathKey) + } else if ctx.NArg() == 2 { + owner, err = hexutil.Decode(ctx.Args().Get(0)) + if err != nil { + log.Error("Could not decode the value", "error", err) + return err + } + pathKey, err = hexutil.Decode(ctx.Args().Get(1)) + if err != nil { + log.Error("Could not decode the value", "error", err) + return err + } + rawdb.DeleteStorageTrieNode(db, common.BytesToHash(owner), pathKey) + } + } else if scheme == rawdb.HashScheme { + if ctx.NArg() == 1 { + hashKey, err := hexutil.Decode(ctx.Args().Get(0)) + if err != nil { + log.Error("Could not decode the value", "error", err) + return err + } + err = db.Delete(hashKey) + if err != nil { + log.Error("Failed to delete data in db", "err", err) + return err + } + } else { + log.Error("Too many args") + } + } + return nil +} + // dbDelete deletes a key from the database func dbDelete(ctx *cli.Context) error { if ctx.NArg() != 1 { @@ -423,7 +716,7 @@ func dbDelete(ctx *cli.Context) error { key, err := common.ParseHexOrString(ctx.Args().Get(0)) if err != nil { - log.Info("Could not decode the key", "error", err) + log.Error("Could not decode the key", "error", err) return err } data, err := db.Get(key) @@ -431,7 +724,7 @@ func dbDelete(ctx *cli.Context) error { fmt.Printf("Previous value: %#x\n", data) } if err = db.Delete(key); err != nil { - log.Info("Delete operation returned an error", "key", fmt.Sprintf("%#x", key), "error", err) + log.Error("Failed to delete value in db", "key", fmt.Sprintf("%#x", key), "error", err) return err } return nil @@ -456,12 +749,12 @@ func dbPut(ctx *cli.Context) error { ) key, err = common.ParseHexOrString(ctx.Args().Get(0)) if err != nil { - log.Info("Could not decode the key", "error", err) + log.Error("Could not decode the key", "error", err) return err } value, err = hexutil.Decode(ctx.Args().Get(1)) if err != nil { - log.Info("Could not decode the value", "error", err) + log.Error("Could not decode the value", "error", err) return err } data, err = db.Get(key) @@ -481,8 +774,7 @@ func dbDumpTrie(ctx *cli.Context) error { db := utils.MakeChainDatabase(ctx, stack, true) defer db.Close() - - triedb := utils.MakeTrieDatabase(ctx, db, false, true) + triedb := utils.MakeTrieDatabase(ctx, stack, db, false, true, false) defer triedb.Close() var ( @@ -490,30 +782,30 @@ func dbDumpTrie(ctx *cli.Context) error { storage []byte account []byte start []byte - max = int64(-1) + maxVal = int64(-1) err error ) if state, err = hexutil.Decode(ctx.Args().Get(0)); err != nil { - log.Info("Could not decode the state root", "error", err) + log.Error("Could not decode the state root", "error", err) return err } if account, err = hexutil.Decode(ctx.Args().Get(1)); err != nil { - log.Info("Could not decode the account hash", "error", err) + log.Error("Could not decode the account hash", "error", err) return err } if storage, err = hexutil.Decode(ctx.Args().Get(2)); err != nil { - log.Info("Could not decode the storage trie root", "error", err) + log.Error("Could not decode the storage trie root", "error", err) return err } if ctx.NArg() > 3 { if start, err = hexutil.Decode(ctx.Args().Get(3)); err != nil { - log.Info("Could not decode the seek position", "error", err) + log.Error("Could not decode the seek position", "error", err) return err } } if ctx.NArg() > 4 { - if max, err = strconv.ParseInt(ctx.Args().Get(4), 10, 64); err != nil { - log.Info("Could not decode the max count", "error", err) + if maxVal, err = strconv.ParseInt(ctx.Args().Get(4), 10, 64); err != nil { + log.Error("Could not decode the max count", "error", err) return err } } @@ -529,7 +821,7 @@ func dbDumpTrie(ctx *cli.Context) error { var count int64 it := trie.NewIterator(trieIt) for it.Next() { - if max > 0 && count == max { + if maxVal > 0 && count == maxVal { fmt.Printf("Exiting after %d values\n", count) break } @@ -724,3 +1016,90 @@ func showMetaData(ctx *cli.Context) error { table.Render() return nil } + +func hbss2pbss(ctx *cli.Context) error { + if ctx.NArg() > 1 { + return fmt.Errorf("required arguments: %v", ctx.Command.ArgsUsage) + } + + var jobNum uint64 + var err error + if ctx.NArg() == 1 { + jobNum, err = strconv.ParseUint(ctx.Args().Get(0), 10, 64) + if err != nil { + return fmt.Errorf("failed to parse job num, Args[1]: %v, err: %v", ctx.Args().Get(1), err) + } + } else { + // by default + jobNum = 1000 + } + + stack, _ := makeConfigNode(ctx) + defer stack.Close() + + db := utils.MakeChainDatabase(ctx, stack, false) + db.Sync() + defer db.Close() + + config := trie.HashDefaults + triedb := trie.NewDatabase(db, config) + triedb.Cap(0) + log.Info("hbss2pbss triedb", "scheme", triedb.Scheme()) + defer triedb.Close() + + headerHash := rawdb.ReadHeadHeaderHash(db) + blockNumber := rawdb.ReadHeaderNumber(db, headerHash) + if blockNumber == nil { + log.Error("Failed to read header number") + return fmt.Errorf("failed to read header number") + } + + log.Info("hbss2pbss converting", "HeaderHash", headerHash.String(), "blockNumber", *blockNumber) + + var headerBlockHash common.Hash + var trieRootHash common.Hash + + if *blockNumber != math.MaxUint64 { + headerBlockHash = rawdb.ReadCanonicalHash(db, *blockNumber) + if headerBlockHash == (common.Hash{}) { + return fmt.Errorf("ReadHeadBlockHash empty hash") + } + blockHeader := rawdb.ReadHeader(db, headerBlockHash, *blockNumber) + trieRootHash = blockHeader.Root + fmt.Println("Canonical Hash: ", headerBlockHash.String(), ", TrieRootHash: ", trieRootHash.String()) + } + if (trieRootHash == common.Hash{}) { + log.Error("Empty root hash") + return fmt.Errorf("empty root hash") + } + + id := trie.StateTrieID(trieRootHash) + theTrie, err := trie.New(id, triedb) + if err != nil { + log.Error("Failed to new trie tree", "err", err, "root hash", trieRootHash.String()) + return err + } + + h2p, err := trie.NewHbss2Pbss(theTrie, triedb, trieRootHash, *blockNumber, jobNum) + if err != nil { + log.Error("Failed to new hash2pbss", "err", err, "root hash", trieRootHash.String()) + return err + } + h2p.Run() + + return nil +} + +func pruneHashTrie(ctx *cli.Context) error { + if ctx.NArg() != 0 { + return fmt.Errorf("required none argument") + } + + stack, _ := makeConfigNode(ctx) + defer stack.Close() + + db := utils.MakeChainDatabase(ctx, stack, false) + defer db.Close() + + return rawdb.PruneHashTrieNodeInDatabase(db) +} diff --git a/cmd/geth/exportcmd_test.go b/cmd/geth/exportcmd_test.go index bbf08d820e..9570b1ffd2 100644 --- a/cmd/geth/exportcmd_test.go +++ b/cmd/geth/exportcmd_test.go @@ -27,6 +27,7 @@ import ( // TestExport does a basic test of "geth export", exporting the test-genesis. func TestExport(t *testing.T) { + t.Parallel() outfile := fmt.Sprintf("%v/testExport.out", os.TempDir()) defer os.Remove(outfile) geth := runGeth(t, "--datadir", initGeth(t), "export", outfile) diff --git a/cmd/geth/les_test.go b/cmd/geth/les_test.go deleted file mode 100644 index b36c3265a3..0000000000 --- a/cmd/geth/les_test.go +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "context" - "fmt" - "os" - "path/filepath" - "runtime" - "strings" - "sync/atomic" - "testing" - "time" - - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/rpc" -) - -type gethrpc struct { - name string - rpc *rpc.Client - geth *testgeth - nodeInfo *p2p.NodeInfo -} - -func (g *gethrpc) killAndWait() { - g.geth.Kill() - g.geth.WaitExit() -} - -func (g *gethrpc) callRPC(result interface{}, method string, args ...interface{}) { - if err := g.rpc.Call(&result, method, args...); err != nil { - g.geth.Fatalf("callRPC %v: %v", method, err) - } -} - -func (g *gethrpc) addPeer(peer *gethrpc) { - g.geth.Logf("%v.addPeer(%v)", g.name, peer.name) - enode := peer.getNodeInfo().Enode - peerCh := make(chan *p2p.PeerEvent) - sub, err := g.rpc.Subscribe(context.Background(), "admin", peerCh, "peerEvents") - if err != nil { - g.geth.Fatalf("subscribe %v: %v", g.name, err) - } - defer sub.Unsubscribe() - g.callRPC(nil, "admin_addPeer", enode) - dur := 14 * time.Second - timeout := time.After(dur) - select { - case ev := <-peerCh: - g.geth.Logf("%v received event: type=%v, peer=%v", g.name, ev.Type, ev.Peer) - case err := <-sub.Err(): - g.geth.Fatalf("%v sub error: %v", g.name, err) - case <-timeout: - g.geth.Error("timeout adding peer after", dur) - } -} - -// Use this function instead of `g.nodeInfo` directly -func (g *gethrpc) getNodeInfo() *p2p.NodeInfo { - if g.nodeInfo != nil { - return g.nodeInfo - } - g.nodeInfo = &p2p.NodeInfo{} - g.callRPC(&g.nodeInfo, "admin_nodeInfo") - return g.nodeInfo -} - -// ipcEndpoint resolves an IPC endpoint based on a configured value, taking into -// account the set data folders as well as the designated platform we're currently -// running on. -func ipcEndpoint(ipcPath, datadir string) string { - // On windows we can only use plain top-level pipes - if runtime.GOOS == "windows" { - if strings.HasPrefix(ipcPath, `\\.\pipe\`) { - return ipcPath - } - return `\\.\pipe\` + ipcPath - } - // Resolve names into the data directory full paths otherwise - if filepath.Base(ipcPath) == ipcPath { - if datadir == "" { - return filepath.Join(os.TempDir(), ipcPath) - } - return filepath.Join(datadir, ipcPath) - } - return ipcPath -} - -// nextIPC ensures that each ipc pipe gets a unique name. -// On linux, it works well to use ipc pipes all over the filesystem (in datadirs), -// but windows require pipes to sit in "\\.\pipe\". Therefore, to run several -// nodes simultaneously, we need to distinguish between them, which we do by -// the pipe filename instead of folder. -var nextIPC atomic.Uint32 - -func startGethWithIpc(t *testing.T, name string, args ...string) *gethrpc { - ipcName := fmt.Sprintf("geth-%d.ipc", nextIPC.Add(1)) - args = append([]string{"--networkid=42", "--port=0", "--authrpc.port", "0", "--ipcpath", ipcName}, args...) - t.Logf("Starting %v with rpc: %v", name, args) - - g := &gethrpc{ - name: name, - geth: runGeth(t, args...), - } - ipcpath := ipcEndpoint(ipcName, g.geth.Datadir) - // We can't know exactly how long geth will take to start, so we try 10 - // times over a 5 second period. - var err error - for i := 0; i < 10; i++ { - time.Sleep(500 * time.Millisecond) - if g.rpc, err = rpc.Dial(ipcpath); err == nil { - return g - } - } - t.Fatalf("%v rpc connect to %v: %v", name, ipcpath, err) - return nil -} - -func initGeth(t *testing.T) string { - args := []string{"--networkid=42", "init", "./testdata/clique.json"} - t.Logf("Initializing geth: %v ", args) - g := runGeth(t, args...) - datadir := g.Datadir - g.WaitExit() - return datadir -} - -func startLightServer(t *testing.T) *gethrpc { - datadir := initGeth(t) - t.Logf("Importing keys to geth") - runGeth(t, "account", "import", "--datadir", datadir, "--password", "./testdata/password.txt", "--lightkdf", "./testdata/key.prv").WaitExit() - account := "0x02f0d131f1f97aef08aec6e3291b957d9efe7105" - server := startGethWithIpc(t, "lightserver", "--allow-insecure-unlock", "--datadir", datadir, "--password", "./testdata/password.txt", "--unlock", account, "--miner.etherbase=0x02f0d131f1f97aef08aec6e3291b957d9efe7105", "--mine", "--light.serve=100", "--light.maxpeers=1", "--discv4=false", "--nat=extip:127.0.0.1", "--verbosity=4") - return server -} - -func startClient(t *testing.T, name string) *gethrpc { - datadir := initGeth(t) - return startGethWithIpc(t, name, "--datadir", datadir, "--discv4=false", "--syncmode=light", "--nat=extip:127.0.0.1", "--verbosity=4") -} - -func TestPriorityClient(t *testing.T) { - lightServer := startLightServer(t) - defer lightServer.killAndWait() - - // Start client and add lightServer as peer - freeCli := startClient(t, "freeCli") - defer freeCli.killAndWait() - freeCli.addPeer(lightServer) - - var peers []*p2p.PeerInfo - freeCli.callRPC(&peers, "admin_peers") - if len(peers) != 1 { - t.Errorf("Expected: # of client peers == 1, actual: %v", len(peers)) - return - } - - // Set up priority client, get its nodeID, increase its balance on the lightServer - prioCli := startClient(t, "prioCli") - defer prioCli.killAndWait() - // 3_000_000_000 once we move to Go 1.13 - tokens := uint64(3000000000) - lightServer.callRPC(nil, "les_addBalance", prioCli.getNodeInfo().ID, tokens) - prioCli.addPeer(lightServer) - - // Check if priority client is actually syncing and the regular client got kicked out - prioCli.callRPC(&peers, "admin_peers") - if len(peers) != 1 { - t.Errorf("Expected: # of prio peers == 1, actual: %v", len(peers)) - } - - nodes := map[string]*gethrpc{ - lightServer.getNodeInfo().ID: lightServer, - freeCli.getNodeInfo().ID: freeCli, - prioCli.getNodeInfo().ID: prioCli, - } - time.Sleep(1 * time.Second) - lightServer.callRPC(&peers, "admin_peers") - peersWithNames := make(map[string]string) - for _, p := range peers { - peersWithNames[nodes[p.ID].name] = p.ID - } - if _, freeClientFound := peersWithNames[freeCli.name]; freeClientFound { - t.Error("client is still a peer of lightServer", peersWithNames) - } - if _, prioClientFound := peersWithNames[prioCli.name]; !prioClientFound { - t.Error("prio client is not among lightServer peers", peersWithNames) - } -} diff --git a/cmd/geth/logging_test.go b/cmd/geth/logging_test.go new file mode 100644 index 0000000000..b5ce03f4b8 --- /dev/null +++ b/cmd/geth/logging_test.go @@ -0,0 +1,237 @@ +//go:build integrationtests + +// Copyright 2023 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "bufio" + "bytes" + "encoding/json" + "fmt" + "io" + "math/rand" + "os" + "os/exec" + "strings" + "testing" + + "github.com/ethereum/go-ethereum/internal/reexec" +) + +func runSelf(args ...string) ([]byte, error) { + cmd := &exec.Cmd{ + Path: reexec.Self(), + Args: append([]string{"geth-test"}, args...), + } + return cmd.CombinedOutput() +} + +func split(input io.Reader) []string { + var output []string + scanner := bufio.NewScanner(input) + scanner.Split(bufio.ScanLines) + for scanner.Scan() { + output = append(output, strings.TrimSpace(scanner.Text())) + } + return output +} + +func censor(input string, start, end int) string { + if len(input) < end { + return input + } + return input[:start] + strings.Repeat("X", end-start) + input[end:] +} + +func TestLogging(t *testing.T) { + t.Parallel() + testConsoleLogging(t, "terminal", 6, 24) + testConsoleLogging(t, "logfmt", 2, 26) +} + +func testConsoleLogging(t *testing.T, format string, tStart, tEnd int) { + haveB, err := runSelf("--log.format", format, "logtest") + if err != nil { + t.Fatal(err) + } + readFile, err := os.Open(fmt.Sprintf("testdata/logging/logtest-%v.txt", format)) + if err != nil { + t.Fatal(err) + } + wantLines := split(readFile) + haveLines := split(bytes.NewBuffer(haveB)) + for i, want := range wantLines { + if i > len(haveLines)-1 { + t.Fatalf("format %v, line %d missing, want:%v", format, i, want) + } + have := haveLines[i] + for strings.Contains(have, "Unknown config environment variable") { + // This can happen on CI runs. Drop it. + haveLines = append(haveLines[:i], haveLines[i+1:]...) + have = haveLines[i] + } + + // Black out the timestamp + have = censor(have, tStart, tEnd) + want = censor(want, tStart, tEnd) + if have != want { + t.Logf(nicediff([]byte(have), []byte(want))) + t.Fatalf("format %v, line %d\nhave %v\nwant %v", format, i, have, want) + } + } + if len(haveLines) != len(wantLines) { + t.Errorf("format %v, want %d lines, have %d", format, len(haveLines), len(wantLines)) + } +} + +func TestJsonLogging(t *testing.T) { + t.Parallel() + haveB, err := runSelf("--log.format", "json", "logtest") + if err != nil { + t.Fatal(err) + } + readFile, err := os.Open("testdata/logging/logtest-json.txt") + if err != nil { + t.Fatal(err) + } + wantLines := split(readFile) + haveLines := split(bytes.NewBuffer(haveB)) + for i, wantLine := range wantLines { + if i > len(haveLines)-1 { + t.Fatalf("format %v, line %d missing, want:%v", "json", i, wantLine) + } + haveLine := haveLines[i] + for strings.Contains(haveLine, "Unknown config environment variable") { + // This can happen on CI runs. Drop it. + haveLines = append(haveLines[:i], haveLines[i+1:]...) + haveLine = haveLines[i] + } + var have, want []byte + { + var h map[string]any + if err := json.Unmarshal([]byte(haveLine), &h); err != nil { + t.Fatal(err) + } + h["t"] = "xxx" + have, _ = json.Marshal(h) + } + { + var w map[string]any + if err := json.Unmarshal([]byte(wantLine), &w); err != nil { + t.Fatal(err) + } + w["t"] = "xxx" + want, _ = json.Marshal(w) + } + if !bytes.Equal(have, want) { + // show an intelligent diff + t.Logf(nicediff(have, want)) + t.Errorf("file content wrong") + } + } +} + +func TestVmodule(t *testing.T) { + t.Parallel() + checkOutput := func(level int, want, wantNot string) { + t.Helper() + output, err := runSelf("--log.format", "terminal", "--verbosity=0", "--log.vmodule", fmt.Sprintf("logtestcmd_active.go=%d", level), "logtest") + if err != nil { + t.Fatal(err) + } + if len(want) > 0 && !strings.Contains(string(output), want) { // trace should be present at 5 + t.Errorf("failed to find expected string ('%s') in output", want) + } + if len(wantNot) > 0 && strings.Contains(string(output), wantNot) { // trace should be present at 5 + t.Errorf("string ('%s') should not be present in output", wantNot) + } + } + checkOutput(5, "log at level trace", "") // trace should be present at 5 + checkOutput(4, "log at level debug", "log at level trace") // debug should be present at 4, but trace should be missing + checkOutput(3, "log at level info", "log at level debug") // info should be present at 3, but debug should be missing + checkOutput(2, "log at level warn", "log at level info") // warn should be present at 2, but info should be missing + checkOutput(1, "log at level error", "log at level warn") // error should be present at 1, but warn should be missing +} + +func nicediff(have, want []byte) string { + var i = 0 + for ; i < len(have) && i < len(want); i++ { + if want[i] != have[i] { + break + } + } + var end = i + 40 + var start = i - 50 + if start < 0 { + start = 0 + } + var h, w string + if end < len(have) { + h = string(have[start:end]) + } else { + h = string(have[start:]) + } + if end < len(want) { + w = string(want[start:end]) + } else { + w = string(want[start:]) + } + return fmt.Sprintf("have vs want:\n%q\n%q\n", h, w) +} + +func TestFileOut(t *testing.T) { + t.Parallel() + var ( + have, want []byte + err error + path = fmt.Sprintf("%s/test_file_out-%d", os.TempDir(), rand.Int63()) + ) + t.Cleanup(func() { os.Remove(path) }) + if want, err = runSelf(fmt.Sprintf("--log.file=%s", path), "logtest"); err != nil { + t.Fatal(err) + } + if have, err = os.ReadFile(path); err != nil { + t.Fatal(err) + } + if !bytes.Equal(have, want) { + // show an intelligent diff + t.Logf(nicediff(have, want)) + t.Errorf("file content wrong") + } +} + +func TestRotatingFileOut(t *testing.T) { + t.Parallel() + var ( + have, want []byte + err error + path = fmt.Sprintf("%s/test_file_out-%d", os.TempDir(), rand.Int63()) + ) + t.Cleanup(func() { os.Remove(path) }) + if want, err = runSelf(fmt.Sprintf("--log.file=%s", path), "--log.rotate", "logtest"); err != nil { + t.Fatal(err) + } + if have, err = os.ReadFile(path); err != nil { + t.Fatal(err) + } + if !bytes.Equal(have, want) { + // show an intelligent diff + t.Logf(nicediff(have, want)) + t.Errorf("file content wrong") + } +} diff --git a/cmd/geth/logtestcmd_active.go b/cmd/geth/logtestcmd_active.go new file mode 100644 index 0000000000..5cce1ec6ab --- /dev/null +++ b/cmd/geth/logtestcmd_active.go @@ -0,0 +1,175 @@ +//go:build integrationtests + +// Copyright 2023 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "errors" + "fmt" + "math" + "math/big" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/internal/debug" + "github.com/ethereum/go-ethereum/log" + "github.com/holiman/uint256" + "github.com/urfave/cli/v2" +) + +var logTestCommand = &cli.Command{ + Action: logTest, + Name: "logtest", + Usage: "Print some log messages", + ArgsUsage: " ", + Description: ` +This command is only meant for testing. +`} + +type customQuotedStringer struct { +} + +func (c customQuotedStringer) String() string { + return "output with 'quotes'" +} + +// logTest is an entry point which spits out some logs. This is used by testing +// to verify expected outputs +func logTest(ctx *cli.Context) error { + // clear field padding map + debug.ResetLogging() + + { // big.Int + ba, _ := new(big.Int).SetString("111222333444555678999", 10) // "111,222,333,444,555,678,999" + bb, _ := new(big.Int).SetString("-111222333444555678999", 10) // "-111,222,333,444,555,678,999" + bc, _ := new(big.Int).SetString("11122233344455567899900", 10) // "11,122,233,344,455,567,899,900" + bd, _ := new(big.Int).SetString("-11122233344455567899900", 10) // "-11,122,233,344,455,567,899,900" + log.Info("big.Int", "111,222,333,444,555,678,999", ba) + log.Info("-big.Int", "-111,222,333,444,555,678,999", bb) + log.Info("big.Int", "11,122,233,344,455,567,899,900", bc) + log.Info("-big.Int", "-11,122,233,344,455,567,899,900", bd) + } + { //uint256 + ua, _ := uint256.FromDecimal("111222333444555678999") + ub, _ := uint256.FromDecimal("11122233344455567899900") + log.Info("uint256", "111,222,333,444,555,678,999", ua) + log.Info("uint256", "11,122,233,344,455,567,899,900", ub) + } + { // int64 + log.Info("int64", "1,000,000", int64(1000000)) + log.Info("int64", "-1,000,000", int64(-1000000)) + log.Info("int64", "9,223,372,036,854,775,807", int64(math.MaxInt64)) + log.Info("int64", "-9,223,372,036,854,775,808", int64(math.MinInt64)) + } + { // uint64 + log.Info("uint64", "1,000,000", uint64(1000000)) + log.Info("uint64", "18,446,744,073,709,551,615", uint64(math.MaxUint64)) + } + { // Special characters + log.Info("Special chars in value", "key", "special \r\n\t chars") + log.Info("Special chars in key", "special \n\t chars", "value") + + log.Info("nospace", "nospace", "nospace") + log.Info("with space", "with nospace", "with nospace") + + log.Info("Bash escapes in value", "key", "\u001b[1G\u001b[K\u001b[1A") + log.Info("Bash escapes in key", "\u001b[1G\u001b[K\u001b[1A", "value") + + log.Info("Bash escapes in message \u001b[1G\u001b[K\u001b[1A end", "key", "value") + + colored := fmt.Sprintf("\u001B[%dmColored\u001B[0m[", 35) + log.Info(colored, colored, colored) + err := errors.New("this is an 'error'") + log.Info("an error message with quotes", "error", err) + } + { // Custom Stringer() - type + log.Info("Custom Stringer value", "2562047h47m16.854s", common.PrettyDuration(time.Duration(9223372036854775807))) + var c customQuotedStringer + log.Info("a custom stringer that emits quoted text", "output", c) + } + { // Multi-line message + log.Info("A message with wonky \U0001F4A9 characters") + log.Info("A multiline message \nINFO [10-18|14:11:31.106] with wonky characters \U0001F4A9") + log.Info("A multiline message \nLALA [ZZZZZZZZZZZZZZZZZZ] Actually part of message above") + } + { // Miscellaneous json-quirks + // This will check if the json output uses strings or json-booleans to represent bool values + log.Info("boolean", "true", true, "false", false) + // Handling of duplicate keys. + // This is actually ill-handled by the current handler: the format.go + // uses a global 'fieldPadding' map and mixes up the two keys. If 'alpha' + // is shorter than beta, it sometimes causes erroneous padding -- and what's more + // it causes _different_ padding in multi-handler context, e.g. both file- + // and console output, making the two mismatch. + log.Info("repeated-key 1", "foo", "alpha", "foo", "beta") + log.Info("repeated-key 2", "xx", "short", "xx", "longer") + } + { // loglevels + log.Debug("log at level debug") + log.Trace("log at level trace") + log.Info("log at level info") + log.Warn("log at level warn") + log.Error("log at level error") + } + { + // The current log formatter has a global map of paddings, storing the + // longest seen padding per key in a map. This results in a statefulness + // which has some odd side-effects. Demonstrated here: + log.Info("test", "bar", "short", "a", "aligned left") + log.Info("test", "bar", "a long message", "a", 1) + log.Info("test", "bar", "short", "a", "aligned right") + } + { + // This sequence of logs should be output with alignment, so each field becoems a column. + log.Info("The following logs should align so that the key-fields make 5 columns") + log.Info("Inserted known block", "number", 1_012, "hash", common.HexToHash("0x1234"), "txs", 200, "gas", 1_123_123, "other", "first") + log.Info("Inserted new block", "number", 1, "hash", common.HexToHash("0x1235"), "txs", 2, "gas", 1_123, "other", "second") + log.Info("Inserted known block", "number", 99, "hash", common.HexToHash("0x12322"), "txs", 10, "gas", 1, "other", "third") + log.Warn("Inserted known block", "number", 1_012, "hash", common.HexToHash("0x1234"), "txs", 200, "gas", 99, "other", "fourth") + } + { // Various types of nil + type customStruct struct { + A string + B *uint64 + } + log.Info("(*big.Int)(nil)", "", (*big.Int)(nil)) + log.Info("(*uint256.Int)(nil)", "", (*uint256.Int)(nil)) + log.Info("(fmt.Stringer)(nil)", "res", (fmt.Stringer)(nil)) + log.Info("nil-concrete-stringer", "res", (*time.Time)(nil)) + + log.Info("error(nil) ", "res", error(nil)) + log.Info("nil-concrete-error", "res", (*customError)(nil)) + + log.Info("nil-custom-struct", "res", (*customStruct)(nil)) + log.Info("raw nil", "res", nil) + log.Info("(*uint64)(nil)", "res", (*uint64)(nil)) + } + { // Logging with 'reserved' keys + log.Info("Using keys 't', 'lvl', 'time', 'level' and 'msg'", "t", "t", "time", "time", "lvl", "lvl", "level", "level", "msg", "msg") + } + { // Logging with wrong attr-value pairs + log.Info("Odd pair (1 attr)", "key") + log.Info("Odd pair (3 attr)", "key", "value", "key2") + } + return nil +} + +// customError is a type which implements error +type customError struct{} + +func (c *customError) Error() string { return "" } diff --git a/cmd/geth/logtestcmd_inactive.go b/cmd/geth/logtestcmd_inactive.go new file mode 100644 index 0000000000..691ab5bcd8 --- /dev/null +++ b/cmd/geth/logtestcmd_inactive.go @@ -0,0 +1,23 @@ +//go:build !integrationtests + +// Copyright 2023 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import "github.com/urfave/cli/v2" + +var logTestCommand *cli.Command diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 0573588b45..1dbaba1cee 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -62,12 +62,14 @@ var ( utils.MinFreeDiskSpaceFlag, utils.KeyStoreDirFlag, utils.ExternalSignerFlag, - utils.NoUSBFlag, + utils.NoUSBFlag, // deprecated utils.USBFlag, utils.SmartCardDaemonPathFlag, utils.OverrideCancun, utils.OverrideVerkle, utils.OverrideOptimismCanyon, + utils.OverrideOptimismEcotone, + utils.OverrideOptimismInterop, utils.EnablePersonal, utils.TxPoolLocalsFlag, utils.TxPoolNoLocalsFlag, @@ -91,28 +93,34 @@ var ( utils.ExitWhenSyncedFlag, utils.GCModeFlag, utils.SnapshotFlag, - utils.TxLookupLimitFlag, + utils.TxLookupLimitFlag, // deprecated utils.TransactionHistoryFlag, utils.StateHistoryFlag, - utils.LightServeFlag, - utils.LightIngressFlag, - utils.LightEgressFlag, - utils.LightMaxPeersFlag, - utils.LightNoPruneFlag, + utils.ProposeBlockIntervalFlag, + utils.PathDBNodeBufferTypeFlag, + utils.EnableProofKeeperFlag, + utils.KeepProofBlockSpanFlag, + utils.JournalFileFlag, + utils.LightServeFlag, // deprecated + utils.LightIngressFlag, // deprecated + utils.LightEgressFlag, // deprecated + utils.LightMaxPeersFlag, // deprecated + utils.LightNoPruneFlag, // deprecated utils.LightKDFFlag, - utils.LightNoSyncServeFlag, + utils.LightNoSyncServeFlag, // deprecated utils.EthRequiredBlocksFlag, - utils.LegacyWhitelistFlag, + utils.LegacyWhitelistFlag, // deprecated utils.BloomFilterSizeFlag, utils.CacheFlag, utils.CacheDatabaseFlag, utils.CacheTrieFlag, - utils.CacheTrieJournalFlag, - utils.CacheTrieRejournalFlag, + utils.CacheTrieJournalFlag, // deprecated + utils.CacheTrieRejournalFlag, // deprecated utils.CacheGCFlag, utils.CacheSnapshotFlag, utils.CacheNoPrefetchFlag, utils.CachePreimagesFlag, + utils.AllowInsecureNoTriesFlag, utils.CacheLogSizeFlag, utils.FDLimitFlag, utils.CryptoKZGFlag, @@ -131,7 +139,7 @@ var ( utils.NoDiscoverFlag, utils.DiscoveryV4Flag, utils.DiscoveryV5Flag, - utils.LegacyDiscoveryV5Flag, + utils.LegacyDiscoveryV5Flag, // deprecated utils.NetrestrictFlag, utils.NodeKeyFileFlag, utils.NodeKeyHexFlag, @@ -158,6 +166,9 @@ var ( utils.ParallelTxFlag, utils.ParallelTxNumFlag, configFileFlag, + utils.LogDebugFlag, + utils.LogBacktraceAtFlag, + utils.VMOpcodeOptimizeFlag, }, utils.NetworkFlags, utils.DatabaseFlags) rpcFlags = []cli.Flag{ @@ -222,7 +233,6 @@ func init() { importCommand, exportCommand, importPreimagesCommand, - exportPreimagesCommand, removedbCommand, dumpCommand, dumpGenesisCommand, @@ -248,6 +258,9 @@ func init() { // See verkle.go verkleCommand, } + if logTestCommand != nil { + app.Commands = append(app.Commands, logTestCommand) + } sort.Sort(cli.CommandsByName(app.Commands)) app.Flags = flags.Merge( @@ -330,7 +343,7 @@ func prepare(ctx *cli.Context) { log.Info("Starting Geth on Ethereum mainnet...") } // If we're a full node on mainnet without --cache specified, bump default cache allowance - if ctx.String(utils.SyncModeFlag.Name) != "light" && !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) { + if !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) { // Make sure we're not on any supported preconfigured testnet either if !ctx.IsSet(utils.HoleskyFlag.Name) && !ctx.IsSet(utils.SepoliaFlag.Name) && @@ -347,15 +360,11 @@ func prepare(ctx *cli.Context) { log.Info("Bumping default cache on mainnet", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 4096, "network", ctx.String(utils.OPNetworkFlag.Name)) ctx.Set(utils.CacheFlag.Name, strconv.Itoa(4096)) } - } else if ctx.String(utils.SyncModeFlag.Name) != "light" && !ctx.IsSet(utils.CacheFlag.Name) && ctx.IsSet(utils.OpBNBMainnetFlag.Name) { - // we're really on opBNB mainnet. Bump that cache up - log.Info("Bumping default cache on mainnet", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 4096, "network", ctx.String(utils.OpBNBMainnetFlag.Name)) - ctx.Set(utils.CacheFlag.Name, strconv.Itoa(4096)) - } - // If we're running a light client on any network, drop the cache to some meaningfully low amount - if ctx.String(utils.SyncModeFlag.Name) == "light" && !ctx.IsSet(utils.CacheFlag.Name) { - log.Info("Dropping default light client cache", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 128) - ctx.Set(utils.CacheFlag.Name, strconv.Itoa(128)) + } else if ctx.String(utils.SyncModeFlag.Name) != "light" && !ctx.IsSet(utils.CacheFlag.Name) && + (ctx.IsSet(utils.OpBNBMainnetFlag.Name) || ctx.IsSet(utils.OpBNBTestnetFlag.Name)) { + // we're really on opBNB network. Bump that cache up + log.Info("Bumping default cache on opBNB", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 22000) + ctx.Set(utils.CacheFlag.Name, strconv.Itoa(22000)) } // Start metrics export if enabled diff --git a/cmd/geth/run_test.go b/cmd/geth/run_test.go index 0588623acb..1d32880325 100644 --- a/cmd/geth/run_test.go +++ b/cmd/geth/run_test.go @@ -23,8 +23,8 @@ import ( "testing" "time" - "github.com/docker/docker/pkg/reexec" "github.com/ethereum/go-ethereum/internal/cmdtest" + "github.com/ethereum/go-ethereum/internal/reexec" "github.com/ethereum/go-ethereum/rpc" ) @@ -55,6 +55,15 @@ func TestMain(m *testing.M) { os.Exit(m.Run()) } +func initGeth(t *testing.T) string { + args := []string{"--networkid=42", "init", "./testdata/clique.json"} + t.Logf("Initializing geth: %v ", args) + g := runGeth(t, args...) + datadir := g.Datadir + g.WaitExit() + return datadir +} + // spawns geth with the given command line args. If the args don't set --datadir, the // child g gets a temporary data directory. func runGeth(t *testing.T, args ...string) *testgeth { diff --git a/cmd/geth/snapshot.go b/cmd/geth/snapshot.go index 6413482511..daacdf7721 100644 --- a/cmd/geth/snapshot.go +++ b/cmd/geth/snapshot.go @@ -20,22 +20,27 @@ import ( "bytes" "encoding/json" "errors" + "fmt" "os" "time" + "github.com/urfave/cli/v2" + "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/state/pruner" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/ethconfig" "github.com/ethereum/go-ethereum/internal/flags" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" - cli "github.com/urfave/cli/v2" ) var ( @@ -84,8 +89,8 @@ In other words, this command does the snapshot to trie conversion. Action: checkDanglingStorage, Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags), Description: ` -geth snapshot check-dangling-storage traverses the snap storage -data, and verifies that all snapshot storage data has a corresponding account. +geth snapshot check-dangling-storage traverses the snap storage +data, and verifies that all snapshot storage data has a corresponding account. `, }, { @@ -96,7 +101,7 @@ data, and verifies that all snapshot storage data has a corresponding account. Flags: flags.Merge(utils.NetworkFlags, utils.DatabaseFlags), Description: ` geth snapshot inspect-account
checks all snapshot layers and prints out -information about the specified address. +information about the specified address. `, }, { @@ -125,7 +130,7 @@ geth snapshot traverse-rawstate will traverse the whole state from the given root and will abort if any referenced trie node or contract code is missing. This command can be used for state integrity verification. The default checking target is the HEAD state. It's basically identical -to traverse-state, but the check granularity is smaller. +to traverse-state, but the check granularity is smaller. It's also usable without snapshot enabled. `, @@ -143,10 +148,44 @@ It's also usable without snapshot enabled. }, utils.NetworkFlags, utils.DatabaseFlags), Description: ` This command is semantically equivalent to 'geth dump', but uses the snapshots -as the backend data source, making this command a lot faster. +as the backend data source, making this command a lot faster. The argument is interpreted as block number or hash. If none is provided, the latest block is used. +`, + }, + { + Action: snapshotExportPreimages, + Name: "export-preimages", + Usage: "Export the preimage in snapshot enumeration order", + ArgsUsage: " []", + Flags: utils.DatabaseFlags, + Description: ` +The export-preimages command exports hash preimages to a flat file, in exactly +the expected order for the overlay tree migration. +`, + }, + { + Name: "insecure-prune-all", + Usage: "Prune all trie state data except genesis block, it will break storage for fullnode, only suitable for fast node " + + "who do not need trie storage at all", + ArgsUsage: "", + Action: pruneAllState, + Category: "MISCELLANEOUS COMMANDS", + Flags: []cli.Flag{ + utils.DataDirFlag, + utils.AncientFlag, + }, + Description: ` +will prune all historical trie state data except genesis block. +All trie nodes will be deleted from the database. + +It expects the genesis file as argument. + +WARNING: It's necessary to delete the trie clean cache after the pruning. +If you specify another directory for the trie clean cache via "--cache.trie.journal" +during the use of Geth, please also specify it here for correct deletion. Otherwise +the trie clean cache with default directory will be deleted. `, }, }, @@ -205,7 +244,7 @@ func verifyState(ctx *cli.Context) error { log.Error("Failed to load head block") return errors.New("no head block") } - triedb := utils.MakeTrieDatabase(ctx, chaindb, false, true) + triedb := utils.MakeTrieDatabase(ctx, stack, chaindb, false, true, false) defer triedb.Close() snapConfig := snapshot.Config{ @@ -260,7 +299,7 @@ func traverseState(ctx *cli.Context) error { chaindb := utils.MakeChainDatabase(ctx, stack, true) defer chaindb.Close() - triedb := utils.MakeTrieDatabase(ctx, chaindb, false, true) + triedb := utils.MakeTrieDatabase(ctx, stack, chaindb, false, true, false) defer triedb.Close() headBlock := rawdb.ReadHeadBlock(chaindb) @@ -369,7 +408,7 @@ func traverseRawState(ctx *cli.Context) error { chaindb := utils.MakeChainDatabase(ctx, stack, true) defer chaindb.Close() - triedb := utils.MakeTrieDatabase(ctx, chaindb, false, true) + triedb := utils.MakeTrieDatabase(ctx, stack, chaindb, false, true, false) defer triedb.Close() headBlock := rawdb.ReadHeadBlock(chaindb) @@ -533,7 +572,8 @@ func dumpState(ctx *cli.Context) error { if err != nil { return err } - triedb := utils.MakeTrieDatabase(ctx, db, false, true) + defer db.Close() + triedb := utils.MakeTrieDatabase(ctx, stack, db, false, true, false) defer triedb.Close() snapConfig := snapshot.Config{ @@ -568,11 +608,11 @@ func dumpState(ctx *cli.Context) error { return err } da := &state.DumpAccount{ - Balance: account.Balance.String(), - Nonce: account.Nonce, - Root: account.Root.Bytes(), - CodeHash: account.CodeHash, - SecureKey: accIt.Hash().Bytes(), + Balance: account.Balance.String(), + Nonce: account.Nonce, + Root: account.Root.Bytes(), + CodeHash: account.CodeHash, + AddressHash: accIt.Hash().Bytes(), } if !conf.SkipCode && !bytes.Equal(account.CodeHash, types.EmptyCodeHash.Bytes()) { da.Code = rawdb.ReadCode(db, common.BytesToHash(account.CodeHash)) @@ -604,6 +644,48 @@ func dumpState(ctx *cli.Context) error { return nil } +// snapshotExportPreimages dumps the preimage data to a flat file. +func snapshotExportPreimages(ctx *cli.Context) error { + if ctx.NArg() < 1 { + utils.Fatalf("This command requires an argument.") + } + stack, _ := makeConfigNode(ctx) + defer stack.Close() + + chaindb := utils.MakeChainDatabase(ctx, stack, true) + defer chaindb.Close() + + triedb := utils.MakeTrieDatabase(ctx, stack, chaindb, false, true, false) + defer triedb.Close() + + var root common.Hash + if ctx.NArg() > 1 { + rootBytes := common.FromHex(ctx.Args().Get(1)) + if len(rootBytes) != common.HashLength { + return fmt.Errorf("invalid hash: %s", ctx.Args().Get(1)) + } + root = common.BytesToHash(rootBytes) + } else { + headBlock := rawdb.ReadHeadBlock(chaindb) + if headBlock == nil { + log.Error("Failed to load head block") + return errors.New("no head block") + } + root = headBlock.Root() + } + snapConfig := snapshot.Config{ + CacheSize: 256, + Recovery: false, + NoBuild: true, + AsyncBuild: false, + } + snaptree, err := snapshot.New(snapConfig, chaindb, triedb, root) + if err != nil { + return err + } + return utils.ExportSnapshotPreimages(chaindb, snaptree, ctx.Args().First(), root) +} + // checkAccount iterates the snap data layers, and looks up the given account // across all layers. func checkAccount(ctx *cli.Context) error { @@ -635,3 +717,46 @@ func checkAccount(ctx *cli.Context) error { log.Info("Checked the snapshot journalled storage", "time", common.PrettyDuration(time.Since(start))) return nil } + +func pruneAllState(ctx *cli.Context) error { + stack, _ := makeConfigNode(ctx) + defer stack.Close() + + genesisPath := ctx.Args().First() + if len(genesisPath) == 0 { + utils.Fatalf("Must supply path to genesis JSON file") + } + file, err := os.Open(genesisPath) + if err != nil { + utils.Fatalf("Failed to read genesis file: %v", err) + } + defer file.Close() + + g := new(core.Genesis) + if err := json.NewDecoder(file).Decode(g); err != nil { + cfg := gethConfig{ + Eth: ethconfig.Defaults, + Node: defaultNodeConfig(), + Metrics: metrics.DefaultConfig, + } + + // Load config file. + if err := loadConfig(genesisPath, &cfg); err != nil { + utils.Fatalf("%v", err) + } + g = cfg.Eth.Genesis + } + + chaindb := utils.MakeChainDatabase(ctx, stack, false) + defer chaindb.Close() + pruner, err := pruner.NewAllPruner(chaindb) + if err != nil { + log.Error("Failed to open snapshot tree", "err", err) + return err + } + if err = pruner.PruneAll(g); err != nil { + log.Error("Failed to prune state", "err", err) + return err + } + return nil +} diff --git a/cmd/geth/testdata/logging/logtest-json.txt b/cmd/geth/testdata/logging/logtest-json.txt new file mode 100644 index 0000000000..3bfe718660 --- /dev/null +++ b/cmd/geth/testdata/logging/logtest-json.txt @@ -0,0 +1,52 @@ +{"t":"2023-11-22T15:42:00.407963+08:00","lvl":"info","msg":"big.Int","111,222,333,444,555,678,999":"111222333444555678999"} +{"t":"2023-11-22T15:42:00.408084+08:00","lvl":"info","msg":"-big.Int","-111,222,333,444,555,678,999":"-111222333444555678999"} +{"t":"2023-11-22T15:42:00.408092+08:00","lvl":"info","msg":"big.Int","11,122,233,344,455,567,899,900":"11122233344455567899900"} +{"t":"2023-11-22T15:42:00.408097+08:00","lvl":"info","msg":"-big.Int","-11,122,233,344,455,567,899,900":"-11122233344455567899900"} +{"t":"2023-11-22T15:42:00.408127+08:00","lvl":"info","msg":"uint256","111,222,333,444,555,678,999":"111222333444555678999"} +{"t":"2023-11-22T15:42:00.408133+08:00","lvl":"info","msg":"uint256","11,122,233,344,455,567,899,900":"11122233344455567899900"} +{"t":"2023-11-22T15:42:00.408137+08:00","lvl":"info","msg":"int64","1,000,000":1000000} +{"t":"2023-11-22T15:42:00.408145+08:00","lvl":"info","msg":"int64","-1,000,000":-1000000} +{"t":"2023-11-22T15:42:00.408149+08:00","lvl":"info","msg":"int64","9,223,372,036,854,775,807":9223372036854775807} +{"t":"2023-11-22T15:42:00.408153+08:00","lvl":"info","msg":"int64","-9,223,372,036,854,775,808":-9223372036854775808} +{"t":"2023-11-22T15:42:00.408156+08:00","lvl":"info","msg":"uint64","1,000,000":1000000} +{"t":"2023-11-22T15:42:00.40816+08:00","lvl":"info","msg":"uint64","18,446,744,073,709,551,615":18446744073709551615} +{"t":"2023-11-22T15:42:00.408164+08:00","lvl":"info","msg":"Special chars in value","key":"special \r\n\t chars"} +{"t":"2023-11-22T15:42:00.408167+08:00","lvl":"info","msg":"Special chars in key","special \n\t chars":"value"} +{"t":"2023-11-22T15:42:00.408171+08:00","lvl":"info","msg":"nospace","nospace":"nospace"} +{"t":"2023-11-22T15:42:00.408174+08:00","lvl":"info","msg":"with space","with nospace":"with nospace"} +{"t":"2023-11-22T15:42:00.408178+08:00","lvl":"info","msg":"Bash escapes in value","key":"\u001b[1G\u001b[K\u001b[1A"} +{"t":"2023-11-22T15:42:00.408182+08:00","lvl":"info","msg":"Bash escapes in key","\u001b[1G\u001b[K\u001b[1A":"value"} +{"t":"2023-11-22T15:42:00.408186+08:00","lvl":"info","msg":"Bash escapes in message \u001b[1G\u001b[K\u001b[1A end","key":"value"} +{"t":"2023-11-22T15:42:00.408194+08:00","lvl":"info","msg":"\u001b[35mColored\u001b[0m[","\u001b[35mColored\u001b[0m[":"\u001b[35mColored\u001b[0m["} +{"t":"2023-11-22T15:42:00.408197+08:00","lvl":"info","msg":"an error message with quotes","error":"this is an 'error'"} +{"t":"2023-11-22T15:42:00.408202+08:00","lvl":"info","msg":"Custom Stringer value","2562047h47m16.854s":"2562047h47m16.854s"} +{"t":"2023-11-22T15:42:00.408208+08:00","lvl":"info","msg":"a custom stringer that emits quoted text","output":"output with 'quotes'"} +{"t":"2023-11-22T15:42:00.408219+08:00","lvl":"info","msg":"A message with wonky 💩 characters"} +{"t":"2023-11-22T15:42:00.408222+08:00","lvl":"info","msg":"A multiline message \nINFO [10-18|14:11:31.106] with wonky characters 💩"} +{"t":"2023-11-22T15:42:00.408226+08:00","lvl":"info","msg":"A multiline message \nLALA [ZZZZZZZZZZZZZZZZZZ] Actually part of message above"} +{"t":"2023-11-22T15:42:00.408229+08:00","lvl":"info","msg":"boolean","true":true,"false":false} +{"t":"2023-11-22T15:42:00.408234+08:00","lvl":"info","msg":"repeated-key 1","foo":"alpha","foo":"beta"} +{"t":"2023-11-22T15:42:00.408237+08:00","lvl":"info","msg":"repeated-key 2","xx":"short","xx":"longer"} +{"t":"2023-11-22T15:42:00.408241+08:00","lvl":"info","msg":"log at level info"} +{"t":"2023-11-22T15:42:00.408244+08:00","lvl":"warn","msg":"log at level warn"} +{"t":"2023-11-22T15:42:00.408247+08:00","lvl":"eror","msg":"log at level error"} +{"t":"2023-11-22T15:42:00.408251+08:00","lvl":"info","msg":"test","bar":"short","a":"aligned left"} +{"t":"2023-11-22T15:42:00.408254+08:00","lvl":"info","msg":"test","bar":"a long message","a":1} +{"t":"2023-11-22T15:42:00.408258+08:00","lvl":"info","msg":"test","bar":"short","a":"aligned right"} +{"t":"2023-11-22T15:42:00.408261+08:00","lvl":"info","msg":"The following logs should align so that the key-fields make 5 columns"} +{"t":"2023-11-22T15:42:00.408275+08:00","lvl":"info","msg":"Inserted known block","number":1012,"hash":"0x0000000000000000000000000000000000000000000000000000000000001234","txs":200,"gas":1123123,"other":"first"} +{"t":"2023-11-22T15:42:00.408281+08:00","lvl":"info","msg":"Inserted new block","number":1,"hash":"0x0000000000000000000000000000000000000000000000000000000000001235","txs":2,"gas":1123,"other":"second"} +{"t":"2023-11-22T15:42:00.408287+08:00","lvl":"info","msg":"Inserted known block","number":99,"hash":"0x0000000000000000000000000000000000000000000000000000000000012322","txs":10,"gas":1,"other":"third"} +{"t":"2023-11-22T15:42:00.408296+08:00","lvl":"warn","msg":"Inserted known block","number":1012,"hash":"0x0000000000000000000000000000000000000000000000000000000000001234","txs":200,"gas":99,"other":"fourth"} +{"t":"2023-11-22T15:42:00.4083+08:00","lvl":"info","msg":"(*big.Int)(nil)","":""} +{"t":"2023-11-22T15:42:00.408303+08:00","lvl":"info","msg":"(*uint256.Int)(nil)","":""} +{"t":"2023-11-22T15:42:00.408311+08:00","lvl":"info","msg":"(fmt.Stringer)(nil)","res":null} +{"t":"2023-11-22T15:42:00.408318+08:00","lvl":"info","msg":"nil-concrete-stringer","res":""} +{"t":"2023-11-22T15:42:00.408322+08:00","lvl":"info","msg":"error(nil) ","res":null} +{"t":"2023-11-22T15:42:00.408326+08:00","lvl":"info","msg":"nil-concrete-error","res":""} +{"t":"2023-11-22T15:42:00.408334+08:00","lvl":"info","msg":"nil-custom-struct","res":null} +{"t":"2023-11-22T15:42:00.40835+08:00","lvl":"info","msg":"raw nil","res":null} +{"t":"2023-11-22T15:42:00.408354+08:00","lvl":"info","msg":"(*uint64)(nil)","res":null} +{"t":"2023-11-22T15:42:00.408361+08:00","lvl":"info","msg":"Using keys 't', 'lvl', 'time', 'level' and 'msg'","t":"t","time":"time","lvl":"lvl","level":"level","msg":"msg"} +{"t":"2023-11-29T15:13:00.195655931+01:00","lvl":"info","msg":"Odd pair (1 attr)","key":null,"LOG_ERROR":"Normalized odd number of arguments by adding nil"} +{"t":"2023-11-29T15:13:00.195681832+01:00","lvl":"info","msg":"Odd pair (3 attr)","key":"value","key2":null,"LOG_ERROR":"Normalized odd number of arguments by adding nil"} diff --git a/cmd/geth/testdata/logging/logtest-logfmt.txt b/cmd/geth/testdata/logging/logtest-logfmt.txt new file mode 100644 index 0000000000..f20d66635d --- /dev/null +++ b/cmd/geth/testdata/logging/logtest-logfmt.txt @@ -0,0 +1,52 @@ +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=big.Int 111,222,333,444,555,678,999=111222333444555678999 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=-big.Int -111,222,333,444,555,678,999=-111222333444555678999 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=big.Int 11,122,233,344,455,567,899,900=11122233344455567899900 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=-big.Int -11,122,233,344,455,567,899,900=-11122233344455567899900 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=uint256 111,222,333,444,555,678,999=111222333444555678999 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=uint256 11,122,233,344,455,567,899,900=11122233344455567899900 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=int64 1,000,000=1000000 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=int64 -1,000,000=-1000000 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=int64 9,223,372,036,854,775,807=9223372036854775807 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=int64 -9,223,372,036,854,775,808=-9223372036854775808 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=uint64 1,000,000=1000000 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=uint64 18,446,744,073,709,551,615=18446744073709551615 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Special chars in value" key="special \r\n\t chars" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Special chars in key" "special \n\t chars"=value +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=nospace nospace=nospace +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="with space" "with nospace"="with nospace" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Bash escapes in value" key="\x1b[1G\x1b[K\x1b[1A" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Bash escapes in key" "\x1b[1G\x1b[K\x1b[1A"=value +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Bash escapes in message \x1b[1G\x1b[K\x1b[1A end" key=value +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="\x1b[35mColored\x1b[0m[" "\x1b[35mColored\x1b[0m["="\x1b[35mColored\x1b[0m[" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="an error message with quotes" error="this is an 'error'" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Custom Stringer value" 2562047h47m16.854s=2562047h47m16.854s +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="a custom stringer that emits quoted text" output="output with 'quotes'" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="A message with wonky 💩 characters" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="A multiline message \nINFO [10-18|14:11:31.106] with wonky characters 💩" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="A multiline message \nLALA [ZZZZZZZZZZZZZZZZZZ] Actually part of message above" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=boolean true=true false=false +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="repeated-key 1" foo=alpha foo=beta +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="repeated-key 2" xx=short xx=longer +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="log at level info" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=warn msg="log at level warn" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=eror msg="log at level error" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=test bar=short a="aligned left" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=test bar="a long message" a=1 +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=test bar=short a="aligned right" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="The following logs should align so that the key-fields make 5 columns" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Inserted known block" number=1012 hash=0x0000000000000000000000000000000000000000000000000000000000001234 txs=200 gas=1123123 other=first +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Inserted new block" number=1 hash=0x0000000000000000000000000000000000000000000000000000000000001235 txs=2 gas=1123 other=second +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Inserted known block" number=99 hash=0x0000000000000000000000000000000000000000000000000000000000012322 txs=10 gas=1 other=third +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=warn msg="Inserted known block" number=1012 hash=0x0000000000000000000000000000000000000000000000000000000000001234 txs=200 gas=99 other=fourth +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=(*big.Int)(nil) = +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=(*uint256.Int)(nil) = +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=(fmt.Stringer)(nil) res= +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=nil-concrete-stringer res= +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="error(nil) " res= +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=nil-concrete-error res="" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=nil-custom-struct res= +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="raw nil" res= +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg=(*uint64)(nil) res= +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Using keys 't', 'lvl', 'time', 'level' and 'msg'" t=t time=time lvl=lvl level=level msg=msg +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Odd pair (1 attr)" key= LOG_ERROR="Normalized odd number of arguments by adding nil" +t=xxxx-xx-xxTxx:xx:xx+xxxx lvl=info msg="Odd pair (3 attr)" key=value key2= LOG_ERROR="Normalized odd number of arguments by adding nil" diff --git a/cmd/geth/testdata/logging/logtest-terminal.txt b/cmd/geth/testdata/logging/logtest-terminal.txt new file mode 100644 index 0000000000..e3b562117c --- /dev/null +++ b/cmd/geth/testdata/logging/logtest-terminal.txt @@ -0,0 +1,53 @@ +INFO [xx-xx|xx:xx:xx.xxx] big.Int 111,222,333,444,555,678,999=111,222,333,444,555,678,999 +INFO [xx-xx|xx:xx:xx.xxx] -big.Int -111,222,333,444,555,678,999=-111,222,333,444,555,678,999 +INFO [xx-xx|xx:xx:xx.xxx] big.Int 11,122,233,344,455,567,899,900=11,122,233,344,455,567,899,900 +INFO [xx-xx|xx:xx:xx.xxx] -big.Int -11,122,233,344,455,567,899,900=-11,122,233,344,455,567,899,900 +INFO [xx-xx|xx:xx:xx.xxx] uint256 111,222,333,444,555,678,999=111,222,333,444,555,678,999 +INFO [xx-xx|xx:xx:xx.xxx] uint256 11,122,233,344,455,567,899,900=11,122,233,344,455,567,899,900 +INFO [xx-xx|xx:xx:xx.xxx] int64 1,000,000=1,000,000 +INFO [xx-xx|xx:xx:xx.xxx] int64 -1,000,000=-1,000,000 +INFO [xx-xx|xx:xx:xx.xxx] int64 9,223,372,036,854,775,807=9,223,372,036,854,775,807 +INFO [xx-xx|xx:xx:xx.xxx] int64 -9,223,372,036,854,775,808=-9,223,372,036,854,775,808 +INFO [xx-xx|xx:xx:xx.xxx] uint64 1,000,000=1,000,000 +INFO [xx-xx|xx:xx:xx.xxx] uint64 18,446,744,073,709,551,615=18,446,744,073,709,551,615 +INFO [xx-xx|xx:xx:xx.xxx] Special chars in value key="special \r\n\t chars" +INFO [xx-xx|xx:xx:xx.xxx] Special chars in key "special \n\t chars"=value +INFO [xx-xx|xx:xx:xx.xxx] nospace nospace=nospace +INFO [xx-xx|xx:xx:xx.xxx] with space "with nospace"="with nospace" +INFO [xx-xx|xx:xx:xx.xxx] Bash escapes in value key="\x1b[1G\x1b[K\x1b[1A" +INFO [xx-xx|xx:xx:xx.xxx] Bash escapes in key "\x1b[1G\x1b[K\x1b[1A"=value +INFO [xx-xx|xx:xx:xx.xxx] "Bash escapes in message \x1b[1G\x1b[K\x1b[1A end" key=value +INFO [xx-xx|xx:xx:xx.xxx] "\x1b[35mColored\x1b[0m[" "\x1b[35mColored\x1b[0m["="\x1b[35mColored\x1b[0m[" +INFO [xx-xx|xx:xx:xx.xxx] an error message with quotes error="this is an 'error'" +INFO [xx-xx|xx:xx:xx.xxx] Custom Stringer value 2562047h47m16.854s=2562047h47m16.854s +INFO [xx-xx|xx:xx:xx.xxx] a custom stringer that emits quoted text output="output with 'quotes'" +INFO [xx-xx|xx:xx:xx.xxx] "A message with wonky 💩 characters" +INFO [xx-xx|xx:xx:xx.xxx] "A multiline message \nINFO [10-18|14:11:31.106] with wonky characters 💩" +INFO [xx-xx|xx:xx:xx.xxx] A multiline message +LALA [ZZZZZZZZZZZZZZZZZZ] Actually part of message above +INFO [xx-xx|xx:xx:xx.xxx] boolean true=true false=false +INFO [xx-xx|xx:xx:xx.xxx] repeated-key 1 foo=alpha foo=beta +INFO [xx-xx|xx:xx:xx.xxx] repeated-key 2 xx=short xx=longer +INFO [xx-xx|xx:xx:xx.xxx] log at level info +WARN [xx-xx|xx:xx:xx.xxx] log at level warn +ERROR[xx-xx|xx:xx:xx.xxx] log at level error +INFO [xx-xx|xx:xx:xx.xxx] test bar=short a="aligned left" +INFO [xx-xx|xx:xx:xx.xxx] test bar="a long message" a=1 +INFO [xx-xx|xx:xx:xx.xxx] test bar=short a="aligned right" +INFO [xx-xx|xx:xx:xx.xxx] The following logs should align so that the key-fields make 5 columns +INFO [xx-xx|xx:xx:xx.xxx] Inserted known block number=1012 hash=000000..001234 txs=200 gas=1,123,123 other=first +INFO [xx-xx|xx:xx:xx.xxx] Inserted new block number=1 hash=000000..001235 txs=2 gas=1123 other=second +INFO [xx-xx|xx:xx:xx.xxx] Inserted known block number=99 hash=000000..012322 txs=10 gas=1 other=third +WARN [xx-xx|xx:xx:xx.xxx] Inserted known block number=1012 hash=000000..001234 txs=200 gas=99 other=fourth +INFO [xx-xx|xx:xx:xx.xxx] (*big.Int)(nil) = +INFO [xx-xx|xx:xx:xx.xxx] (*uint256.Int)(nil) = +INFO [xx-xx|xx:xx:xx.xxx] (fmt.Stringer)(nil) res= +INFO [xx-xx|xx:xx:xx.xxx] nil-concrete-stringer res= +INFO [xx-xx|xx:xx:xx.xxx] error(nil) res= +INFO [xx-xx|xx:xx:xx.xxx] nil-concrete-error res= +INFO [xx-xx|xx:xx:xx.xxx] nil-custom-struct res= +INFO [xx-xx|xx:xx:xx.xxx] raw nil res= +INFO [xx-xx|xx:xx:xx.xxx] (*uint64)(nil) res= +INFO [xx-xx|xx:xx:xx.xxx] Using keys 't', 'lvl', 'time', 'level' and 'msg' t=t time=time lvl=lvl level=level msg=msg +INFO [xx-xx|xx:xx:xx.xxx] Odd pair (1 attr) key= LOG_ERROR="Normalized odd number of arguments by adding nil" +INFO [xx-xx|xx:xx:xx.xxx] Odd pair (3 attr) key=value key2= LOG_ERROR="Normalized odd number of arguments by adding nil" diff --git a/cmd/geth/verkle.go b/cmd/geth/verkle.go index aa79889e8c..420b063d8b 100644 --- a/cmd/geth/verkle.go +++ b/cmd/geth/verkle.go @@ -84,7 +84,7 @@ func checkChildren(root verkle.VerkleNode, resolver verkle.NodeResolverFn) error return fmt.Errorf("could not find child %x in db: %w", childC, err) } // depth is set to 0, the tree isn't rebuilt so it's not a problem - childN, err := verkle.ParseNode(childS, 0, childC[:]) + childN, err := verkle.ParseNode(childS, 0) if err != nil { return fmt.Errorf("decode error child %x in db: %w", child.Commitment().Bytes(), err) } @@ -145,7 +145,7 @@ func verifyVerkle(ctx *cli.Context) error { if err != nil { return err } - root, err := verkle.ParseNode(serializedRoot, 0, rootC[:]) + root, err := verkle.ParseNode(serializedRoot, 0) if err != nil { return err } @@ -195,7 +195,7 @@ func expandVerkle(ctx *cli.Context) error { if err != nil { return err } - root, err := verkle.ParseNode(serializedRoot, 0, rootC[:]) + root, err := verkle.ParseNode(serializedRoot, 0) if err != nil { return err } diff --git a/cmd/geth/version_check_test.go b/cmd/geth/version_check_test.go index 4458ab5c06..3676d25d00 100644 --- a/cmd/geth/version_check_test.go +++ b/cmd/geth/version_check_test.go @@ -30,14 +30,17 @@ import ( ) func TestVerification(t *testing.T) { + t.Parallel() // Signatures generated with `minisign`. Legacy format, not pre-hashed file. t.Run("minisig-legacy", func(t *testing.T) { + t.Parallel() // For this test, the pubkey is in testdata/vcheck/minisign.pub // (the privkey is `minisign.sec`, if we want to expand this test. Password 'test' ) pub := "RWQkliYstQBOKOdtClfgC3IypIPX6TAmoEi7beZ4gyR3wsaezvqOMWsp" testVerification(t, pub, "./testdata/vcheck/minisig-sigs/") }) t.Run("minisig-new", func(t *testing.T) { + t.Parallel() // For this test, the pubkey is in testdata/vcheck/minisign.pub // (the privkey is `minisign.sec`, if we want to expand this test. Password 'test' ) // `minisign -S -s ./minisign.sec -m data.json -x ./minisig-sigs-new/data.json.minisig` @@ -46,6 +49,7 @@ func TestVerification(t *testing.T) { }) // Signatures generated with `signify-openbsd` t.Run("signify-openbsd", func(t *testing.T) { + t.Parallel() t.Skip("This currently fails, minisign expects 4 lines of data, signify provides only 2") // For this test, the pubkey is in testdata/vcheck/signifykey.pub // (the privkey is `signifykey.sec`, if we want to expand this test. Password 'test' ) @@ -97,6 +101,7 @@ func versionUint(v string) int { // TestMatching can be used to check that the regexps are correct func TestMatching(t *testing.T) { + t.Parallel() data, _ := os.ReadFile("./testdata/vcheck/vulnerabilities.json") var vulns []vulnJson if err := json.Unmarshal(data, &vulns); err != nil { @@ -141,6 +146,7 @@ func TestMatching(t *testing.T) { } func TestGethPubKeysParseable(t *testing.T) { + t.Parallel() for _, pubkey := range gethPubKeys { _, err := minisign.NewPublicKey(pubkey) if err != nil { @@ -150,6 +156,7 @@ func TestGethPubKeysParseable(t *testing.T) { } func TestKeyID(t *testing.T) { + t.Parallel() type args struct { id [8]byte } @@ -163,7 +170,9 @@ func TestKeyID(t *testing.T) { {"third key", args{id: extractKeyId(gethPubKeys[2])}, "FD9813B2D2098484"}, } for _, tt := range tests { + tt := tt t.Run(tt.name, func(t *testing.T) { + t.Parallel() if got := keyID(tt.args.id); got != tt.want { t.Errorf("keyID() = %v, want %v", got, tt.want) } diff --git a/cmd/p2psim/main.go b/cmd/p2psim/main.go index a3546d405b..a0f5f0d288 100644 --- a/cmd/p2psim/main.go +++ b/cmd/p2psim/main.go @@ -417,9 +417,7 @@ func rpcNode(ctx *cli.Context) error { } func rpcSubscribe(client *rpc.Client, out io.Writer, method string, args ...string) error { - parts := strings.SplitN(method, "_", 2) - namespace := parts[0] - method = parts[1] + namespace, method, _ := strings.Cut(method, "_") ch := make(chan interface{}) subArgs := make([]interface{}, len(args)+1) subArgs[0] = method diff --git a/cmd/rlpdump/rlpdump_test.go b/cmd/rlpdump/rlpdump_test.go index a9ab57fdb8..8d55f4200a 100644 --- a/cmd/rlpdump/rlpdump_test.go +++ b/cmd/rlpdump/rlpdump_test.go @@ -27,6 +27,7 @@ import ( ) func TestRoundtrip(t *testing.T) { + t.Parallel() for i, want := range []string{ "0xf880806482520894d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0a1010000000000000000000000000000000000000000000000000000000000000001801ba0c16787a8e25e941d67691954642876c08f00996163ae7dfadbbfd6cd436f549da06180e5626cae31590f40641fe8f63734316c4bfeb4cdfab6714198c1044d2e28", "0xd5c0d3cb84746573742a2a808213378667617a6f6e6b", @@ -51,6 +52,7 @@ func TestRoundtrip(t *testing.T) { } func TestTextToRlp(t *testing.T) { + t.Parallel() type tc struct { text string want string diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index 16b1260572..8b571be1ef 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -33,6 +33,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/ethconfig" @@ -374,6 +375,101 @@ func ExportPreimages(db ethdb.Database, fn string) error { return nil } +// ExportSnapshotPreimages exports the preimages corresponding to the enumeration of +// the snapshot for a given root. +func ExportSnapshotPreimages(chaindb ethdb.Database, snaptree *snapshot.Tree, fn string, root common.Hash) error { + log.Info("Exporting preimages", "file", fn) + + fh, err := os.OpenFile(fn, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm) + if err != nil { + return err + } + defer fh.Close() + + // Enable gzip compressing if file name has gz suffix. + var writer io.Writer = fh + if strings.HasSuffix(fn, ".gz") { + gz := gzip.NewWriter(writer) + defer gz.Close() + writer = gz + } + buf := bufio.NewWriter(writer) + defer buf.Flush() + writer = buf + + type hashAndPreimageSize struct { + Hash common.Hash + Size int + } + hashCh := make(chan hashAndPreimageSize) + + var ( + start = time.Now() + logged = time.Now() + preimages int + ) + go func() { + defer close(hashCh) + accIt, err := snaptree.AccountIterator(root, common.Hash{}) + if err != nil { + log.Error("Failed to create account iterator", "error", err) + return + } + defer accIt.Release() + + for accIt.Next() { + acc, err := types.FullAccount(accIt.Account()) + if err != nil { + log.Error("Failed to get full account", "error", err) + return + } + preimages += 1 + hashCh <- hashAndPreimageSize{Hash: accIt.Hash(), Size: common.AddressLength} + + if acc.Root != (common.Hash{}) && acc.Root != types.EmptyRootHash { + stIt, err := snaptree.StorageIterator(root, accIt.Hash(), common.Hash{}) + if err != nil { + log.Error("Failed to create storage iterator", "error", err) + return + } + for stIt.Next() { + preimages += 1 + hashCh <- hashAndPreimageSize{Hash: stIt.Hash(), Size: common.HashLength} + + if time.Since(logged) > time.Second*8 { + logged = time.Now() + log.Info("Exporting preimages", "count", preimages, "elapsed", common.PrettyDuration(time.Since(start))) + } + } + stIt.Release() + } + if time.Since(logged) > time.Second*8 { + logged = time.Now() + log.Info("Exporting preimages", "count", preimages, "elapsed", common.PrettyDuration(time.Since(start))) + } + } + }() + + for item := range hashCh { + preimage := rawdb.ReadPreimage(chaindb, item.Hash) + if len(preimage) == 0 { + return fmt.Errorf("missing preimage for %v", item.Hash) + } + if len(preimage) != item.Size { + return fmt.Errorf("invalid preimage size, have %d", len(preimage)) + } + rlpenc, err := rlp.EncodeToBytes(preimage) + if err != nil { + return fmt.Errorf("error encoding preimage: %w", err) + } + if _, err := writer.Write(rlpenc); err != nil { + return fmt.Errorf("failed to write preimage: %w", err) + } + } + log.Info("Exported preimages", "count", preimages, "elapsed", common.PrettyDuration(time.Since(start)), "file", fn) + return nil +} + // exportHeader is used in the export/import flow. When we do an export, // the first element we output is the exportHeader. // Whenever a backwards-incompatible change is made, the Version header @@ -460,7 +556,7 @@ func ImportLDBData(db ethdb.Database, f string, startIndex int64, interrupt chan case OpBatchAdd: batch.Put(key, val) default: - return fmt.Errorf("unknown op %d\n", op) + return fmt.Errorf("unknown op %d", op) } if batch.ValueSize() > ethdb.IdealBatchSize { if err := batch.Write(); err != nil { diff --git a/cmd/utils/export_test.go b/cmd/utils/export_test.go index 445e3fac37..84ba8d0c31 100644 --- a/cmd/utils/export_test.go +++ b/cmd/utils/export_test.go @@ -170,6 +170,7 @@ func testDeletion(t *testing.T, f string) { // TestImportFutureFormat tests that we reject unsupported future versions. func TestImportFutureFormat(t *testing.T) { + t.Parallel() f := fmt.Sprintf("%v/tempdump-future", os.TempDir()) defer func() { os.Remove(f) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index c1a21c94e4..1730e132ea 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -35,11 +35,16 @@ import ( "strings" "time" + pcsclite "github.com/gballet/go-libpcsclite" + gopsutil "github.com/shirou/gopsutil/mem" + "github.com/urfave/cli/v2" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/fdlimit" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/opcodeCompiler/compiler" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/txpool/legacypool" "github.com/ethereum/go-ethereum/core/vm" @@ -58,7 +63,6 @@ import ( "github.com/ethereum/go-ethereum/graphql" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/internal/flags" - "github.com/ethereum/go-ethereum/les" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/metrics/exp" @@ -74,9 +78,6 @@ import ( "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie/triedb/hashdb" "github.com/ethereum/go-ethereum/trie/triedb/pathdb" - pcsclite "github.com/gballet/go-libpcsclite" - gopsutil "github.com/shirou/gopsutil/mem" - "github.com/urfave/cli/v2" ) // These are all the command line flags we support. @@ -269,6 +270,11 @@ var ( Value: 2048, Category: flags.EthCategory, } + AllowInsecureNoTriesFlag = &cli.BoolFlag{ + Name: "allow-insecure-no-tries", + Usage: `Disable the tries state root verification, the state consistency is no longer 100% guaranteed. Do not enable it unless you know exactly what the consequence it will cause.`, + Category: flags.EthCategory, + } OverrideCancun = &cli.Uint64Flag{ Name: "override.cancun", Usage: "Manually specify the Cancun fork timestamp, overriding the bundled setting", @@ -279,14 +285,24 @@ var ( Usage: "Manually specify the Verkle fork timestamp, overriding the bundled setting", Category: flags.EthCategory, } - OverrideOptimismCanyon = &flags.BigFlag{ + OverrideOptimismCanyon = &cli.Uint64Flag{ Name: "override.canyon", - Usage: "Manually specify the Optimsim Canyon fork timestamp, overriding the bundled setting", + Usage: "Manually specify the Optimism Canyon fork timestamp, overriding the bundled setting", + Category: flags.EthCategory, + } + OverrideOptimismEcotone = &cli.Uint64Flag{ + Name: "override.ecotone", + Usage: "Manually specify the Optimism Ecotone fork timestamp, overriding the bundled setting", + Category: flags.EthCategory, + } + OverrideOptimismInterop = &cli.Uint64Flag{ + Name: "override.interop", + Usage: "Manually specify the Optimsim Interop feature-set fork timestamp, overriding the bundled setting", Category: flags.EthCategory, } SyncModeFlag = &flags.TextMarshalerFlag{ Name: "syncmode", - Usage: `Blockchain sync mode ("snap", "full" or "light")`, + Usage: `Blockchain sync mode ("snap" or "full")`, Value: &defaultSyncMode, Category: flags.StateCategory, } @@ -301,9 +317,33 @@ var ( Usage: "Scheme to use for storing ethereum state ('hash' or 'path')", Category: flags.StateCategory, } - PathDBSyncFlag = &cli.BoolFlag{ - Name: "pathdb.sync", - Usage: "sync flush nodes cache to disk in path schema", + PathDBNodeBufferTypeFlag = &cli.StringFlag{ + Name: "pathdb.nodebuffer", + Usage: "Type of trienodebuffer to cache trie nodes in disklayer('list', 'sync', or 'async')", + Value: "async", + Category: flags.StateCategory, + } + ProposeBlockIntervalFlag = &cli.Uint64Flag{ + Name: "pathdb.proposeblock", + Usage: "keep the same with op-proposer propose block interval", + Value: pathdb.DefaultProposeBlockInterval, + Category: flags.StateCategory, + } + EnableProofKeeperFlag = &cli.BoolFlag{ + Name: "pathdb.enableproofkeeper", + Usage: "Enable path db proof keeper to store proposed proof", + Value: false, + Category: flags.StateCategory, + } + KeepProofBlockSpanFlag = &cli.Uint64Flag{ + Name: "pathdb.keepproofblockspan", + Usage: "Block span of keep proof (default = 90,000 blocks)", + Value: params.FullImmutabilityThreshold, + Category: flags.StateCategory, + } + JournalFileFlag = &cli.BoolFlag{ + Name: "journalfile", + Usage: "Enable using journal file to store the TrieJournal instead of KVDB in pbss (default = false)", Value: false, Category: flags.StateCategory, } @@ -319,41 +359,6 @@ var ( Value: ethconfig.Defaults.TransactionHistory, Category: flags.StateCategory, } - // Light server and client settings - LightServeFlag = &cli.IntFlag{ - Name: "light.serve", - Usage: "Maximum percentage of time allowed for serving LES requests (multi-threaded processing allows values over 100)", - Value: ethconfig.Defaults.LightServ, - Category: flags.LightCategory, - } - LightIngressFlag = &cli.IntFlag{ - Name: "light.ingress", - Usage: "Incoming bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited)", - Value: ethconfig.Defaults.LightIngress, - Category: flags.LightCategory, - } - LightEgressFlag = &cli.IntFlag{ - Name: "light.egress", - Usage: "Outgoing bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited)", - Value: ethconfig.Defaults.LightEgress, - Category: flags.LightCategory, - } - LightMaxPeersFlag = &cli.IntFlag{ - Name: "light.maxpeers", - Usage: "Maximum number of light clients to serve, or light servers to attach to", - Value: ethconfig.Defaults.LightPeers, - Category: flags.LightCategory, - } - LightNoPruneFlag = &cli.BoolFlag{ - Name: "light.nopruning", - Usage: "Disable ancient light chain data pruning", - Category: flags.LightCategory, - } - LightNoSyncServeFlag = &cli.BoolFlag{ - Name: "light.nosyncserve", - Usage: "Enables serving light clients before syncing", - Category: flags.LightCategory, - } // Transaction pool settings TxPoolLocalsFlag = &cli.StringFlag{ Name: "txpool.locals", @@ -839,13 +844,14 @@ var ( Aliases: []string{"discv4"}, Usage: "Enables the V4 discovery mechanism", Category: flags.NetworkingCategory, - Value: true, + Value: false, } DiscoveryV5Flag = &cli.BoolFlag{ Name: "discovery.v5", Aliases: []string{"discv5"}, Usage: "Enables the experimental RLPx V5 (Topic Discovery) mechanism", Category: flags.NetworkingCategory, + Value: true, } NetrestrictFlag = &cli.StringFlag{ Name: "netrestrict", @@ -955,6 +961,7 @@ var ( Aliases: []string{"beta.rollup.superchain-upgrades"}, Usage: "Apply superchain-registry config changes to the local chain-configuration", Category: flags.RollupCategory, + Value: false, } // Metrics flags @@ -1063,6 +1070,12 @@ Please note that --` + MetricsHTTPFlag.Name + ` must be set to start the server. Usage: "Number of slot for transaction execution, only valid in parallel mode (runtime calculated, no fixed default value)", Category: flags.VMCategory, } + + VMOpcodeOptimizeFlag = &cli.BoolFlag{ + Name: "vm.opcode.optimize", + Usage: "enable opcode optimization", + Category: flags.VMCategory, + } ) var ( @@ -1167,10 +1180,19 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { urls = params.SepoliaBootnodes case ctx.Bool(GoerliFlag.Name): urls = params.GoerliBootnodes + case ctx.Bool(OpBNBTestnetFlag.Name): + urls = params.OpBNBTestnetBootnodes case ctx.Bool(NetworkIdFlag.Name): if ctx.Uint64(NetworkIdFlag.Name) == params.OpBNBTestnet { urls = params.OpBNBTestnetBootnodes } + case ctx.IsSet(OPNetworkFlag.Name): + network := ctx.String(OPNetworkFlag.Name) + if strings.Contains(strings.ToLower(network), "mainnet") { + urls = params.OPMainnetBootnodes + } else { + urls = params.OPSepoliaBootnodes + } } } cfg.BootstrapNodes = mustParseBootnodes(urls) @@ -1194,12 +1216,25 @@ func mustParseBootnodes(urls []string) []*enode.Node { // setBootstrapNodesV5 creates a list of bootstrap nodes from the command line // flags, reverting to pre-configured ones if none have been specified. func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) { - urls := params.V5Bootnodes + urls := params.OpBNBMainnetBootnodes switch { case ctx.IsSet(BootnodesFlag.Name): urls = SplitAndTrim(ctx.String(BootnodesFlag.Name)) case cfg.BootstrapNodesV5 != nil: return // already set, don't apply defaults. + case ctx.IsSet(OPNetworkFlag.Name): + network := ctx.String(OPNetworkFlag.Name) + if strings.Contains(strings.ToLower(network), "mainnet") { + urls = append(urls, params.OPMainnetBootnodes...) + } else { + urls = append(urls, params.OPSepoliaBootnodes...) + } + case ctx.Bool(OpBNBTestnetFlag.Name): + urls = params.OpBNBTestnetBootnodes + case ctx.Bool(NetworkIdFlag.Name): + if ctx.Uint64(NetworkIdFlag.Name) == params.OpBNBTestnet { + urls = params.OpBNBTestnetBootnodes + } } cfg.BootstrapNodesV5 = make([]*enode.Node, 0, len(urls)) @@ -1252,8 +1287,10 @@ func SplitAndTrim(input string) (ret []string) { // setHTTP creates the HTTP RPC listener interface string from the set // command line flags, returning empty if the HTTP endpoint is disabled. func setHTTP(ctx *cli.Context, cfg *node.Config) { - if ctx.Bool(HTTPEnabledFlag.Name) && cfg.HTTPHost == "" { - cfg.HTTPHost = "127.0.0.1" + if ctx.Bool(HTTPEnabledFlag.Name) { + if cfg.HTTPHost == "" { + cfg.HTTPHost = "127.0.0.1" + } if ctx.IsSet(HTTPListenAddrFlag.Name) { cfg.HTTPHost = ctx.String(HTTPListenAddrFlag.Name) } @@ -1317,8 +1354,10 @@ func setGraphQL(ctx *cli.Context, cfg *node.Config) { // setWS creates the WebSocket RPC listener interface string from the set // command line flags, returning empty if the HTTP endpoint is disabled. func setWS(ctx *cli.Context, cfg *node.Config) { - if ctx.Bool(WSEnabledFlag.Name) && cfg.WSHost == "" { - cfg.WSHost = "127.0.0.1" + if ctx.Bool(WSEnabledFlag.Name) { + if cfg.WSHost == "" { + cfg.WSHost = "127.0.0.1" + } if ctx.IsSet(WSListenAddrFlag.Name) { cfg.WSHost = ctx.String(WSListenAddrFlag.Name) } @@ -1352,25 +1391,25 @@ func setIPC(ctx *cli.Context, cfg *node.Config) { } } -// setLes configures the les server and ultra light client settings from the command line flags. +// setLes shows the deprecation warnings for LES flags. func setLes(ctx *cli.Context, cfg *ethconfig.Config) { if ctx.IsSet(LightServeFlag.Name) { - cfg.LightServ = ctx.Int(LightServeFlag.Name) + log.Warn("The light server has been deprecated, please remove this flag", "flag", LightServeFlag.Name) } if ctx.IsSet(LightIngressFlag.Name) { - cfg.LightIngress = ctx.Int(LightIngressFlag.Name) + log.Warn("The light server has been deprecated, please remove this flag", "flag", LightIngressFlag.Name) } if ctx.IsSet(LightEgressFlag.Name) { - cfg.LightEgress = ctx.Int(LightEgressFlag.Name) + log.Warn("The light server has been deprecated, please remove this flag", "flag", LightEgressFlag.Name) } if ctx.IsSet(LightMaxPeersFlag.Name) { - cfg.LightPeers = ctx.Int(LightMaxPeersFlag.Name) + log.Warn("The light server has been deprecated, please remove this flag", "flag", LightMaxPeersFlag.Name) } if ctx.IsSet(LightNoPruneFlag.Name) { - cfg.LightNoPrune = ctx.Bool(LightNoPruneFlag.Name) + log.Warn("The light server has been deprecated, please remove this flag", "flag", LightNoPruneFlag.Name) } if ctx.IsSet(LightNoSyncServeFlag.Name) { - cfg.LightNoSyncServe = ctx.Bool(LightNoSyncServeFlag.Name) + log.Warn("The light server has been deprecated, please remove this flag", "flag", LightNoSyncServeFlag.Name) } } @@ -1468,58 +1507,24 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config) { setBootstrapNodes(ctx, cfg) setBootstrapNodesV5(ctx, cfg) - lightClient := ctx.String(SyncModeFlag.Name) == "light" - lightServer := (ctx.Int(LightServeFlag.Name) != 0) - - lightPeers := ctx.Int(LightMaxPeersFlag.Name) - if lightClient && !ctx.IsSet(LightMaxPeersFlag.Name) { - // dynamic default - for clients we use 1/10th of the default for servers - lightPeers /= 10 - } - if ctx.IsSet(MaxPeersFlag.Name) { cfg.MaxPeers = ctx.Int(MaxPeersFlag.Name) - if lightServer && !ctx.IsSet(LightMaxPeersFlag.Name) { - cfg.MaxPeers += lightPeers - } - } else { - if lightServer { - cfg.MaxPeers += lightPeers - } - if lightClient && ctx.IsSet(LightMaxPeersFlag.Name) && cfg.MaxPeers < lightPeers { - cfg.MaxPeers = lightPeers - } - } - if !(lightClient || lightServer) { - lightPeers = 0 - } - ethPeers := cfg.MaxPeers - lightPeers - if lightClient { - ethPeers = 0 } - log.Info("Maximum peer count", "ETH", ethPeers, "LES", lightPeers, "total", cfg.MaxPeers) + ethPeers := cfg.MaxPeers + log.Info("Maximum peer count", "ETH", ethPeers, "total", cfg.MaxPeers) if ctx.IsSet(MaxPendingPeersFlag.Name) { cfg.MaxPendingPeers = ctx.Int(MaxPendingPeersFlag.Name) } - if ctx.IsSet(NoDiscoverFlag.Name) || lightClient { + if ctx.IsSet(NoDiscoverFlag.Name) { cfg.NoDiscovery = true } - // Disallow --nodiscover when used in conjunction with light mode. - if (lightClient || lightServer) && ctx.Bool(NoDiscoverFlag.Name) { - Fatalf("Cannot use --" + NoDiscoverFlag.Name + " in light client or light server mode") - } CheckExclusive(ctx, DiscoveryV4Flag, NoDiscoverFlag) CheckExclusive(ctx, DiscoveryV5Flag, NoDiscoverFlag) cfg.DiscoveryV4 = ctx.Bool(DiscoveryV4Flag.Name) cfg.DiscoveryV5 = ctx.Bool(DiscoveryV5Flag.Name) - // If we're running a light client or server, force enable the v5 peer discovery. - if lightClient || lightServer { - cfg.DiscoveryV5 = true - } - if netrestrict := ctx.String(NetrestrictFlag.Name); netrestrict != "" { list, err := netutil.ParseNetlist(netrestrict) if err != nil { @@ -1587,6 +1592,13 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) { log.Info(fmt.Sprintf("Using %s as db engine", dbEngine)) cfg.DBEngine = dbEngine } + // deprecation notice for log debug flags (TODO: find a more appropriate place to put these?) + if ctx.IsSet(LogBacktraceAtFlag.Name) { + log.Warn("log.backtrace flag is deprecated") + } + if ctx.IsSet(LogDebugFlag.Name) { + log.Warn("log.debug flag is deprecated") + } } func setSmartCard(ctx *cli.Context, cfg *node.Config) { @@ -1623,15 +1635,14 @@ func SetDataDir(ctx *cli.Context, cfg *node.Config) { cfg.DataDir = filepath.Join(node.DefaultDataDir(), "holesky") case ctx.IsSet(OPNetworkFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), ctx.String(OPNetworkFlag.Name)) + case ctx.IsSet(OpBNBMainnetFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "opBNBMainnet") + case ctx.IsSet(OpBNBTestnetFlag.Name) && cfg.DataDir == node.DefaultDataDir(): + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "opBNBTestnet") } } -func setGPO(ctx *cli.Context, cfg *gasprice.Config, light bool) { - // If we are running the light client, apply another group - // settings for gas oracle. - if light { - *cfg = ethconfig.LightClientGPO - } +func setGPO(ctx *cli.Context, cfg *gasprice.Config) { if ctx.IsSet(GpoBlocksFlag.Name) { cfg.Blocks = ctx.Int(GpoBlocksFlag.Name) } @@ -1795,12 +1806,11 @@ func CheckExclusive(ctx *cli.Context, args ...interface{}) { func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // Avoid conflicting network flags CheckExclusive(ctx, MainnetFlag, DeveloperFlag, GoerliFlag, SepoliaFlag, HoleskyFlag, OPNetworkFlag, OpBNBMainnetFlag, OpBNBTestnetFlag, OpBNBQANetFlag) - CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light") CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer // Set configurations from CLI flags setEtherbase(ctx, cfg) - setGPO(ctx, &cfg.GPO, ctx.String(SyncModeFlag.Name) == "light") + setGPO(ctx, &cfg.GPO) setTxPool(ctx, &cfg.TxPool) setMiner(ctx, &cfg.Miner) setRequiredBlocks(ctx, cfg) @@ -1875,16 +1885,26 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { log.Warn("The flag --txlookuplimit is deprecated and will be removed, please use --history.transactions") cfg.TransactionHistory = ctx.Uint64(TxLookupLimitFlag.Name) } - if ctx.IsSet(PathDBSyncFlag.Name) { - cfg.PathSyncFlush = true + if ctx.IsSet(PathDBNodeBufferTypeFlag.Name) { + cfg.PathNodeBuffer = pathdb.GetNodeBufferType(ctx.String(PathDBNodeBufferTypeFlag.Name)) + } + if ctx.IsSet(ProposeBlockIntervalFlag.Name) { + cfg.ProposeBlockInterval = ctx.Uint64(ProposeBlockIntervalFlag.Name) + } + if ctx.IsSet(EnableProofKeeperFlag.Name) { + cfg.EnableProofKeeper = ctx.Bool(EnableProofKeeperFlag.Name) + } + if ctx.IsSet(KeepProofBlockSpanFlag.Name) { + cfg.KeepProofBlockSpan = ctx.Uint64(KeepProofBlockSpanFlag.Name) } + if ctx.IsSet(JournalFileFlag.Name) { + cfg.JournalFileEnabled = true + } + if ctx.String(GCModeFlag.Name) == "archive" && cfg.TransactionHistory != 0 { cfg.TransactionHistory = 0 log.Warn("Disabled transaction unindexing for archive node") } - if ctx.IsSet(LightServeFlag.Name) && cfg.TransactionHistory != 0 { - log.Warn("LES server cannot serve old transaction status and cannot connect below les/4 protocol version if transaction lookup index is limited") - } if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheTrieFlag.Name) { cfg.TrieCleanCache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheTrieFlag.Name) / 100 } @@ -1897,10 +1917,19 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { if ctx.IsSet(CacheLogSizeFlag.Name) { cfg.FilterLogCacheSize = ctx.Int(CacheLogSizeFlag.Name) } - if !ctx.Bool(SnapshotFlag.Name) { + if ctx.IsSet(AllowInsecureNoTriesFlag.Name) { + cfg.NoTries = ctx.Bool(AllowInsecureNoTriesFlag.Name) + } + if !ctx.Bool(SnapshotFlag.Name) || cfg.SnapshotCache == 0 { // If snap-sync is requested, this flag is also required if cfg.SyncMode == downloader.SnapSync { - log.Info("Snap sync requested, enabling --snapshot") + if !ctx.Bool(SnapshotFlag.Name) { + log.Warn("Snap sync requested, enabling --snapshot") + } + if cfg.SnapshotCache == 0 { + log.Warn("Snap sync requested, resetting --cache.snapshot") + cfg.SnapshotCache = ctx.Int(CacheFlag.Name) * CacheSnapshotFlag.Value / 100 + } } else { cfg.TrieCleanCache += cfg.SnapshotCache cfg.SnapshotCache = 0 // Disabled @@ -1935,6 +1964,13 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { cfg.ParallelTxNum = parallelNum } + if ctx.IsSet(VMOpcodeOptimizeFlag.Name) { + cfg.EnableOpcodeOptimizing = ctx.Bool(VMOpcodeOptimizeFlag.Name) + if cfg.EnableOpcodeOptimizing { + compiler.EnableOptimization() + } + } + if ctx.IsSet(RPCGlobalGasCapFlag.Name) { cfg.RPCGasCap = ctx.Uint64(RPCGlobalGasCapFlag.Name) } @@ -2048,11 +2084,26 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { log.Info("Using developer account", "address", developer.Address) // Create a new developer genesis block or reuse existing one - cfg.Genesis = core.DeveloperGenesisBlock(ctx.Uint64(DeveloperGasLimitFlag.Name), developer.Address) + cfg.Genesis = core.DeveloperGenesisBlock(ctx.Uint64(DeveloperGasLimitFlag.Name), &developer.Address) if ctx.IsSet(DataDirFlag.Name) { chaindb := tryMakeReadOnlyDatabase(ctx, stack) if rawdb.ReadCanonicalHash(chaindb, 0) != (common.Hash{}) { cfg.Genesis = nil // fallback to db content + + // validate genesis has PoS enabled in block 0 + genesis, err := core.ReadGenesis(chaindb) + if err != nil { + Fatalf("Could not read genesis from database: %v", err) + } + if !genesis.Config.TerminalTotalDifficultyPassed { + Fatalf("Bad developer-mode genesis configuration: terminalTotalDifficultyPassed must be true in developer mode") + } + if genesis.Config.TerminalTotalDifficulty == nil { + Fatalf("Bad developer-mode genesis configuration: terminalTotalDifficulty must be specified.") + } + if genesis.Difficulty.Cmp(genesis.Config.TerminalTotalDifficulty) != 1 { + Fatalf("Bad developer-mode genesis configuration: genesis block difficulty must be > terminalTotalDifficulty") + } } chaindb.Close() } @@ -2102,9 +2153,6 @@ func SetDNSDiscoveryDefaults(cfg *ethconfig.Config, genesis common.Hash) { return // already set through flags/config } protocol := "all" - if cfg.SyncMode == downloader.LightSync { - protocol = "les" - } if url := params.KnownDNSNetwork(genesis, protocol); url != "" { cfg.EthDiscoveryURLs = []string{url} cfg.SnapDiscoveryURLs = cfg.EthDiscoveryURLs @@ -2112,27 +2160,12 @@ func SetDNSDiscoveryDefaults(cfg *ethconfig.Config, genesis common.Hash) { } // RegisterEthService adds an Ethereum client to the stack. -// The second return value is the full node instance, which may be nil if the -// node is running as a light client. +// The second return value is the full node instance. func RegisterEthService(stack *node.Node, cfg *ethconfig.Config) (ethapi.Backend, *eth.Ethereum) { - if cfg.SyncMode == downloader.LightSync { - backend, err := les.New(stack, cfg) - if err != nil { - Fatalf("Failed to register the Ethereum service: %v", err) - } - stack.RegisterAPIs(tracers.APIs(backend.ApiBackend)) - return backend.ApiBackend, nil - } backend, err := eth.New(stack, cfg) if err != nil { Fatalf("Failed to register the Ethereum service: %v", err) } - if cfg.LightServ > 0 { - _, err := les.NewLesServer(stack, backend, cfg) - if err != nil { - Fatalf("Failed to create the LES server: %v", err) - } - } stack.RegisterAPIs(tracers.APIs(backend.APIBackend)) return backend.APIBackend, backend } @@ -2154,13 +2187,12 @@ func RegisterGraphQLService(stack *node.Node, backend ethapi.Backend, filterSyst // RegisterFilterAPI adds the eth log filtering RPC API to the node. func RegisterFilterAPI(stack *node.Node, backend ethapi.Backend, ethcfg *ethconfig.Config) *filters.FilterSystem { - isLightClient := ethcfg.SyncMode == downloader.LightSync filterSystem := filters.NewFilterSystem(backend, filters.Config{ LogCacheSize: ethcfg.FilterLogCacheSize, }) stack.RegisterAPIs([]rpc.API{{ Namespace: "eth", - Service: filters.NewFilterAPI(filterSystem, isLightClient), + Service: filters.NewFilterAPI(filterSystem, false), }}) return filterSystem } @@ -2249,12 +2281,11 @@ func SplitTagsFlag(tagsFlag string) map[string]string { return tagsMap } -// MakeChainDatabase open an LevelDB using the flags passed to the client and will hard crash if it fails. +// MakeChainDatabase opens a database using the flags passed to the client and will hard crash if it fails. func MakeChainDatabase(ctx *cli.Context, stack *node.Node, readonly bool) ethdb.Database { var ( cache = ctx.Int(CacheFlag.Name) * ctx.Int(CacheDatabaseFlag.Name) / 100 handles = MakeDatabaseHandles(ctx.Int(FDLimitFlag.Name)) - err error chainDb ethdb.Database ) @@ -2277,6 +2308,12 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node, readonly bool) ethdb. return chainDb } +func PathDBConfigAddJournalFilePath(stack *node.Node, config *pathdb.Config) *pathdb.Config { + path := fmt.Sprintf("%s/%s", stack.ResolvePath("chaindata"), eth.JournalFileName) + config.JournalFilePath = path + return config +} + // tryMakeReadOnlyDatabase try to open the chain database in read-only mode, // or fallback to write mode if the database is not initialized. func tryMakeReadOnlyDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database { @@ -2421,8 +2458,12 @@ func MakeChain(ctx *cli.Context, stack *node.Node, readonly bool) (*core.BlockCh if ctx.IsSet(CacheFlag.Name) || ctx.IsSet(CacheGCFlag.Name) { cache.TrieDirtyLimit = ctx.Int(CacheFlag.Name) * ctx.Int(CacheGCFlag.Name) / 100 } - vmcfg := vm.Config{EnablePreimageRecording: ctx.Bool(VMEnableDebugFlag.Name)} + vmcfg := vm.Config{EnablePreimageRecording: ctx.Bool(VMEnableDebugFlag.Name), + EnableOpcodeOptimizations: ctx.Bool(VMOpcodeOptimizeFlag.Name)} + if vmcfg.EnableOpcodeOptimizations { + compiler.EnableOptimization() + } // Disable transaction indexing/unindexing by default. chain, err := core.NewBlockChain(chainDb, cache, gspec, nil, engine, vmcfg, nil, nil) if err != nil { @@ -2448,9 +2489,10 @@ func MakeConsolePreloads(ctx *cli.Context) []string { } // MakeTrieDatabase constructs a trie database based on the configured scheme. -func MakeTrieDatabase(ctx *cli.Context, disk ethdb.Database, preimage bool, readOnly bool) *trie.Database { +func MakeTrieDatabase(ctx *cli.Context, stack *node.Node, disk ethdb.Database, preimage bool, readOnly bool, isVerkle bool) *trie.Database { config := &trie.Config{ Preimages: preimage, + IsVerkle: isVerkle, } scheme, err := rawdb.ParseStateScheme(ctx.String(StateSchemeFlag.Name), disk) if err != nil { @@ -2468,5 +2510,6 @@ func MakeTrieDatabase(ctx *cli.Context, disk ethdb.Database, preimage bool, read } else { config.PathDB = pathdb.Defaults } + config.PathDB.JournalFilePath = fmt.Sprintf("%s/%s", stack.ResolvePath("chaindata"), eth.JournalFileName) return trie.NewDatabase(disk, config) } diff --git a/cmd/utils/flags_legacy.go b/cmd/utils/flags_legacy.go index 6669ff176f..243abd8311 100644 --- a/cmd/utils/flags_legacy.go +++ b/cmd/utils/flags_legacy.go @@ -39,6 +39,14 @@ var DeprecatedFlags = []cli.Flag{ CacheTrieRejournalFlag, LegacyDiscoveryV5Flag, TxLookupLimitFlag, + LightServeFlag, + LightIngressFlag, + LightEgressFlag, + LightMaxPeersFlag, + LightNoPruneFlag, + LightNoSyncServeFlag, + LogBacktraceAtFlag, + LogDebugFlag, } var ( @@ -77,6 +85,53 @@ var ( Value: ethconfig.Defaults.TransactionHistory, Category: flags.DeprecatedCategory, } + // Light server and client settings, Deprecated November 2023 + LightServeFlag = &cli.IntFlag{ + Name: "light.serve", + Usage: "Maximum percentage of time allowed for serving LES requests (deprecated)", + Value: ethconfig.Defaults.LightServ, + Category: flags.LightCategory, + } + LightIngressFlag = &cli.IntFlag{ + Name: "light.ingress", + Usage: "Incoming bandwidth limit for serving light clients (deprecated)", + Value: ethconfig.Defaults.LightIngress, + Category: flags.LightCategory, + } + LightEgressFlag = &cli.IntFlag{ + Name: "light.egress", + Usage: "Outgoing bandwidth limit for serving light clients (deprecated)", + Value: ethconfig.Defaults.LightEgress, + Category: flags.LightCategory, + } + LightMaxPeersFlag = &cli.IntFlag{ + Name: "light.maxpeers", + Usage: "Maximum number of light clients to serve, or light servers to attach to (deprecated)", + Value: ethconfig.Defaults.LightPeers, + Category: flags.LightCategory, + } + LightNoPruneFlag = &cli.BoolFlag{ + Name: "light.nopruning", + Usage: "Disable ancient light chain data pruning (deprecated)", + Category: flags.LightCategory, + } + LightNoSyncServeFlag = &cli.BoolFlag{ + Name: "light.nosyncserve", + Usage: "Enables serving light clients before syncing (deprecated)", + Category: flags.LightCategory, + } + // Deprecated November 2023 + LogBacktraceAtFlag = &cli.StringFlag{ + Name: "log.backtrace", + Usage: "Request a stack trace at a specific logging statement (deprecated)", + Value: "", + Category: flags.DeprecatedCategory, + } + LogDebugFlag = &cli.BoolFlag{ + Name: "log.debug", + Usage: "Prepends log messages with call-site location (deprecated)", + Category: flags.DeprecatedCategory, + } ) // showDeprecated displays deprecated flags that will be soon removed from the codebase. diff --git a/cmd/utils/flags_test.go b/cmd/utils/flags_test.go index adfdd0903e..00c73a5264 100644 --- a/cmd/utils/flags_test.go +++ b/cmd/utils/flags_test.go @@ -23,6 +23,7 @@ import ( ) func Test_SplitTagsFlag(t *testing.T) { + t.Parallel() tests := []struct { name string args string @@ -55,7 +56,9 @@ func Test_SplitTagsFlag(t *testing.T) { }, } for _, tt := range tests { + tt := tt t.Run(tt.name, func(t *testing.T) { + t.Parallel() if got := SplitTagsFlag(tt.args); !reflect.DeepEqual(got, tt.want) { t.Errorf("splitTagsFlag() = %v, want %v", got, tt.want) } diff --git a/cmd/utils/prompt_test.go b/cmd/utils/prompt_test.go index 86ee8b6525..889bf71de3 100644 --- a/cmd/utils/prompt_test.go +++ b/cmd/utils/prompt_test.go @@ -22,6 +22,7 @@ import ( ) func TestGetPassPhraseWithList(t *testing.T) { + t.Parallel() type args struct { text string confirmation bool @@ -65,7 +66,9 @@ func TestGetPassPhraseWithList(t *testing.T) { }, } for _, tt := range tests { + tt := tt t.Run(tt.name, func(t *testing.T) { + t.Parallel() if got := GetPassPhraseWithList(tt.args.text, tt.args.confirmation, tt.args.index, tt.args.passwords); got != tt.want { t.Errorf("GetPassPhraseWithList() = %v, want %v", got, tt.want) } diff --git a/common/bitutil/compress_test.go b/common/bitutil/compress_test.go index 13a13011dc..c6f6fe8bcf 100644 --- a/common/bitutil/compress_test.go +++ b/common/bitutil/compress_test.go @@ -18,6 +18,7 @@ package bitutil import ( "bytes" + "fmt" "math/rand" "testing" @@ -48,19 +49,23 @@ func TestEncodingCycle(t *testing.T) { "0xdf7070533534333636313639343638373532313536346c1bc333393438373130707063363430353639343638373532313536346c1bc333393438336336346c65fe", } for i, tt := range tests { - data := hexutil.MustDecode(tt) - - proc, err := bitsetDecodeBytes(bitsetEncodeBytes(data), len(data)) - if err != nil { - t.Errorf("test %d: failed to decompress compressed data: %v", i, err) - continue - } - if !bytes.Equal(data, proc) { - t.Errorf("test %d: compress/decompress mismatch: have %x, want %x", i, proc, data) + if err := testEncodingCycle(hexutil.MustDecode(tt)); err != nil { + t.Errorf("test %d: %v", i, err) } } } +func testEncodingCycle(data []byte) error { + proc, err := bitsetDecodeBytes(bitsetEncodeBytes(data), len(data)) + if err != nil { + return fmt.Errorf("failed to decompress compressed data: %v", err) + } + if !bytes.Equal(data, proc) { + return fmt.Errorf("compress/decompress mismatch: have %x, want %x", proc, data) + } + return nil +} + // Tests that data bitset decoding and rencoding works and is bijective. func TestDecodingCycle(t *testing.T) { tests := []struct { @@ -179,3 +184,40 @@ func benchmarkEncoding(b *testing.B, bytes int, fill float64) { bitsetDecodeBytes(bitsetEncodeBytes(data), len(data)) } } + +func FuzzEncoder(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + if err := testEncodingCycle(data); err != nil { + t.Fatal(err) + } + }) +} +func FuzzDecoder(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzDecode(data) + }) +} + +// fuzzDecode implements a go-fuzz fuzzer method to test the bit decoding and +// reencoding algorithm. +func fuzzDecode(data []byte) { + blob, err := DecompressBytes(data, 1024) + if err != nil { + return + } + // re-compress it (it's OK if the re-compressed differs from the + // original - the first input may not have been compressed at all) + comp := CompressBytes(blob) + if len(comp) > len(blob) { + // After compression, it must be smaller or equal + panic("bad compression") + } + // But decompressing it once again should work + decomp, err := DecompressBytes(data, 1024) + if err != nil { + panic(err) + } + if !bytes.Equal(decomp, blob) { + panic("content mismatch") + } +} diff --git a/common/gopool/pool.go b/common/gopool/pool.go new file mode 100644 index 0000000000..ad5c80e36a --- /dev/null +++ b/common/gopool/pool.go @@ -0,0 +1,54 @@ +package gopool + +import ( + "runtime" + "time" + + "github.com/panjf2000/ants/v2" +) + +var ( + // Init a instance pool when importing ants. + defaultPool, _ = ants.NewPool(ants.DefaultAntsPoolSize, ants.WithExpiryDuration(10*time.Second)) + minNumberPerTask = 5 +) + +// Submit submits a task to pool. +func Submit(task func()) error { + return defaultPool.Submit(task) +} + +// Running returns the number of the currently running goroutines. +func Running() int { + return defaultPool.Running() +} + +// Cap returns the capacity of this default pool. +func Cap() int { + return defaultPool.Cap() +} + +// Free returns the available goroutines to work. +func Free() int { + return defaultPool.Free() +} + +// Release Closes the default pool. +func Release() { + defaultPool.Release() +} + +// Reboot reboots the default pool. +func Reboot() { + defaultPool.Reboot() +} + +func Threads(tasks int) int { + threads := tasks / minNumberPerTask + if threads > runtime.NumCPU() { + threads = runtime.NumCPU() + } else if threads == 0 { + threads = 1 + } + return threads +} diff --git a/common/hexutil/json.go b/common/hexutil/json.go index 50db208118..e0ac98f52d 100644 --- a/common/hexutil/json.go +++ b/common/hexutil/json.go @@ -23,6 +23,8 @@ import ( "math/big" "reflect" "strconv" + + "github.com/holiman/uint256" ) var ( @@ -30,6 +32,7 @@ var ( bigT = reflect.TypeOf((*Big)(nil)) uintT = reflect.TypeOf(Uint(0)) uint64T = reflect.TypeOf(Uint64(0)) + u256T = reflect.TypeOf((*uint256.Int)(nil)) ) // Bytes marshals/unmarshals as a JSON string with 0x prefix. @@ -225,6 +228,48 @@ func (b *Big) UnmarshalGraphQL(input interface{}) error { return err } +// U256 marshals/unmarshals as a JSON string with 0x prefix. +// The zero value marshals as "0x0". +type U256 uint256.Int + +// MarshalText implements encoding.TextMarshaler +func (b U256) MarshalText() ([]byte, error) { + u256 := (*uint256.Int)(&b) + return []byte(u256.Hex()), nil +} + +// UnmarshalJSON implements json.Unmarshaler. +func (b *U256) UnmarshalJSON(input []byte) error { + // The uint256.Int.UnmarshalJSON method accepts "dec", "0xhex"; we must be + // more strict, hence we check string and invoke SetFromHex directly. + if !isString(input) { + return errNonString(u256T) + } + // The hex decoder needs to accept empty string ("") as '0', which uint256.Int + // would reject. + if len(input) == 2 { + (*uint256.Int)(b).Clear() + return nil + } + err := (*uint256.Int)(b).SetFromHex(string(input[1 : len(input)-1])) + if err != nil { + return &json.UnmarshalTypeError{Value: err.Error(), Type: u256T} + } + return nil +} + +// UnmarshalText implements encoding.TextUnmarshaler +func (b *U256) UnmarshalText(input []byte) error { + // The uint256.Int.UnmarshalText method accepts "dec", "0xhex"; we must be + // more strict, hence we check string and invoke SetFromHex directly. + return (*uint256.Int)(b).SetFromHex(string(input)) +} + +// String returns the hex encoding of b. +func (b *U256) String() string { + return (*uint256.Int)(b).Hex() +} + // Uint64 marshals/unmarshals as a JSON string with 0x prefix. // The zero value marshals as "0x0". type Uint64 uint64 diff --git a/common/hexutil/json_test.go b/common/hexutil/json_test.go index ed7d6fad1a..7cca300951 100644 --- a/common/hexutil/json_test.go +++ b/common/hexutil/json_test.go @@ -23,6 +23,8 @@ import ( "errors" "math/big" "testing" + + "github.com/holiman/uint256" ) func checkError(t *testing.T, input string, got, want error) bool { @@ -176,6 +178,64 @@ func TestUnmarshalBig(t *testing.T) { } } +var unmarshalU256Tests = []unmarshalTest{ + // invalid encoding + {input: "", wantErr: errJSONEOF}, + {input: "null", wantErr: errNonString(u256T)}, + {input: "10", wantErr: errNonString(u256T)}, + {input: `"0"`, wantErr: wrapTypeError(ErrMissingPrefix, u256T)}, + {input: `"0x"`, wantErr: wrapTypeError(ErrEmptyNumber, u256T)}, + {input: `"0x01"`, wantErr: wrapTypeError(ErrLeadingZero, u256T)}, + {input: `"0xx"`, wantErr: wrapTypeError(ErrSyntax, u256T)}, + {input: `"0x1zz01"`, wantErr: wrapTypeError(ErrSyntax, u256T)}, + { + input: `"0x10000000000000000000000000000000000000000000000000000000000000000"`, + wantErr: wrapTypeError(ErrBig256Range, u256T), + }, + + // valid encoding + {input: `""`, want: big.NewInt(0)}, + {input: `"0x0"`, want: big.NewInt(0)}, + {input: `"0x2"`, want: big.NewInt(0x2)}, + {input: `"0x2F2"`, want: big.NewInt(0x2f2)}, + {input: `"0X2F2"`, want: big.NewInt(0x2f2)}, + {input: `"0x1122aaff"`, want: big.NewInt(0x1122aaff)}, + {input: `"0xbBb"`, want: big.NewInt(0xbbb)}, + {input: `"0xfffffffff"`, want: big.NewInt(0xfffffffff)}, + { + input: `"0x112233445566778899aabbccddeeff"`, + want: referenceBig("112233445566778899aabbccddeeff"), + }, + { + input: `"0xffffffffffffffffffffffffffffffffffff"`, + want: referenceBig("ffffffffffffffffffffffffffffffffffff"), + }, + { + input: `"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"`, + want: referenceBig("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + }, +} + +func TestUnmarshalU256(t *testing.T) { + for _, test := range unmarshalU256Tests { + var v U256 + err := json.Unmarshal([]byte(test.input), &v) + if !checkError(t, test.input, err, test.wantErr) { + continue + } + if test.want == nil { + continue + } + want := new(uint256.Int) + want.SetFromBig(test.want.(*big.Int)) + have := (*uint256.Int)(&v) + if want.Cmp(have) != 0 { + t.Errorf("input %s: value mismatch: have %x, want %x", test.input, have, want) + continue + } + } +} + func BenchmarkUnmarshalBig(b *testing.B) { input := []byte(`"0x123456789abcdef123456789abcdef"`) for i := 0; i < b.N; i++ { diff --git a/common/types.go b/common/types.go index aadca87f82..37a21f276b 100644 --- a/common/types.go +++ b/common/types.go @@ -475,3 +475,36 @@ func (d *Decimal) UnmarshalJSON(input []byte) error { return err } } + +// ProofList implements ethdb.KeyValueWriter and collects the proofs as +// hex-strings for delivery to rpc-caller. +type ProofList []string + +// Put implements ethdb.KeyValueWriter put interface. +func (n *ProofList) Put(key []byte, value []byte) error { + *n = append(*n, hexutil.Encode(value)) + return nil +} + +// Delete implements ethdb.KeyValueWriter delete interface. +func (n *ProofList) Delete(key []byte) error { + panic("not supported") +} + +// AccountResult is the result of a GetProof operation. +type AccountResult struct { + Address Address `json:"address"` + AccountProof []string `json:"accountProof"` + Balance *big.Int `json:"balance"` + CodeHash Hash `json:"codeHash"` + Nonce uint64 `json:"nonce"` + StorageHash Hash `json:"storageHash"` + StorageProof []StorageResult `json:"storageProof"` +} + +// StorageResult provides a proof for a key-value pair. +type StorageResult struct { + Key string `json:"key"` + Value *big.Int `json:"value"` + Proof []string `json:"proof"` +} diff --git a/consensus/beacon/consensus.go b/consensus/beacon/consensus.go index a7d0e58161..1db9d81a1d 100644 --- a/consensus/beacon/consensus.go +++ b/consensus/beacon/consensus.go @@ -58,6 +58,7 @@ var ( // is only used for necessary consensus checks. The legacy consensus engine can be any // engine implements the consensus interface (except the beacon itself). type Beacon struct { + // For migrated OP chains (OP mainnet, OP Goerli), ethone is a dummy legacy pre-Bedrock consensus ethone consensus.Engine // Original consensus engine used in eth1, e.g. ethash or clique } @@ -105,12 +106,27 @@ func errOut(n int, err error) chan error { return errs } +// OP-Stack Bedrock variant of splitHeaders: the total-terminal difficulty is terminated at bedrock transition, but also reset to 0. +// So just use the bedrock fork check to split the headers, to simplify the splitting. +// The returned slices are slices over the input. The input must be sorted. +func (beacon *Beacon) splitBedrockHeaders(chain consensus.ChainHeaderReader, headers []*types.Header) ([]*types.Header, []*types.Header, error) { + for i, h := range headers { + if chain.Config().IsBedrock(h.Number) { + return headers[:i], headers[i:], nil + } + } + return headers, nil, nil +} + // splitHeaders splits the provided header batch into two parts according to // the configured ttd. It requires the parent of header batch along with its // td are stored correctly in chain. If ttd is not configured yet, all headers // will be treated legacy PoW headers. // Note, this function will not verify the header validity but just split them. func (beacon *Beacon) splitHeaders(chain consensus.ChainHeaderReader, headers []*types.Header) ([]*types.Header, []*types.Header, error) { + if chain.Config().Optimism != nil { + return beacon.splitBedrockHeaders(chain, headers) + } // TTD is not defined yet, all headers should be in legacy format. ttd := chain.Config().TerminalTotalDifficulty if ttd == nil { @@ -446,6 +462,10 @@ func (beacon *Beacon) InnerEngine() consensus.Engine { return beacon.ethone } +func (beacon *Beacon) SwapInner(inner consensus.Engine) { + beacon.ethone = inner +} + // SetThreads updates the mining threads. Delegate the call // to the eth1 engine if it's threaded. func (beacon *Beacon) SetThreads(threads int) { @@ -461,6 +481,11 @@ func (beacon *Beacon) SetThreads(threads int) { // It depends on the parentHash already being stored in the database. // If the parentHash is not stored in the database a UnknownAncestor error is returned. func IsTTDReached(chain consensus.ChainHeaderReader, parentHash common.Hash, parentNumber uint64) (bool, error) { + if cfg := chain.Config(); cfg.Optimism != nil { + // If OP-Stack then bedrock activation number determines when TTD (eth Merge) has been reached. + // Note: some tests/utils will set parentNumber == max_uint64 as "parent" of the genesis block, this is fine. + return cfg.IsBedrock(new(big.Int).SetUint64(parentNumber + 1)), nil + } if chain.Config().TerminalTotalDifficulty == nil { return false, nil } diff --git a/consensus/beacon/oplegacy.go b/consensus/beacon/oplegacy.go new file mode 100644 index 0000000000..62810cb03f --- /dev/null +++ b/consensus/beacon/oplegacy.go @@ -0,0 +1,91 @@ +package beacon + +import ( + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rpc" +) + +type OpLegacy struct{} + +func (o *OpLegacy) Author(header *types.Header) (common.Address, error) { + return header.Coinbase, nil +} + +func (o *OpLegacy) VerifyHeader(chain consensus.ChainHeaderReader, header *types.Header) error { + // Short circuit if the header is known, or its parent not + number := header.Number.Uint64() + if chain.GetHeader(header.Hash(), number) != nil { + return nil + } + parent := chain.GetHeader(header.ParentHash, number-1) + if parent == nil { + return consensus.ErrUnknownAncestor + } + // legacy chain is verified by block-hash reverse sync otherwise + return nil +} + +func (o *OpLegacy) VerifyHeaders(chain consensus.ChainHeaderReader, headers []*types.Header) (chan<- struct{}, <-chan error) { + abort := make(chan struct{}) + results := make(chan error, len(headers)) + + for i := range headers { + // legacy chain is verified by block-hash reverse sync + var parent *types.Header + if i == 0 { + parent = chain.GetHeader(headers[0].ParentHash, headers[0].Number.Uint64()-1) + } else if headers[i-1].Hash() == headers[i].ParentHash { + parent = headers[i-1] + } + var err error + if parent == nil { + err = consensus.ErrUnknownAncestor + } + results <- err + } + return abort, results +} + +func (o *OpLegacy) VerifyUncles(chain consensus.ChainReader, block *types.Block) error { + return nil +} + +func (o *OpLegacy) Prepare(chain consensus.ChainHeaderReader, header *types.Header) error { + return fmt.Errorf("cannot prepare for legacy block header: %s (num %d)", header.Hash(), header.Number) +} + +func (o *OpLegacy) Finalize(chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, withdrawals []*types.Withdrawal) { + panic(fmt.Errorf("cannot finalize legacy block header: %s (num %d)", header.Hash(), header.Number)) +} + +func (o *OpLegacy) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt, withdrawals []*types.Withdrawal) (*types.Block, error) { + return nil, fmt.Errorf("cannot finalize and assemble for legacy block header: %s (num %d)", header.Hash(), header.Number) +} + +func (o *OpLegacy) Seal(chain consensus.ChainHeaderReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { + return fmt.Errorf("cannot seal legacy block header: %s (num %d)", block.Hash(), block.Number()) +} + +func (o *OpLegacy) SealHash(header *types.Header) common.Hash { + panic(fmt.Errorf("cannot compute pow/poa seal-hash for legacy block header: %s (num %d)", header.Hash(), header.Number)) +} + +func (o *OpLegacy) CalcDifficulty(chain consensus.ChainHeaderReader, time uint64, parent *types.Header) *big.Int { + return big.NewInt(0) +} + +func (o *OpLegacy) APIs(chain consensus.ChainHeaderReader) []rpc.API { + return nil +} + +func (o *OpLegacy) Close() error { + return nil +} + +var _ consensus.Engine = (*OpLegacy)(nil) diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index f708050abd..c693189ea5 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -302,9 +302,22 @@ func (c *Clique) verifyHeader(chain consensus.ChainHeaderReader, header *types.H if chain.Config().IsShanghai(header.Number, header.Time) { return errors.New("clique does not support shanghai fork") } + // Verify the non-existence of withdrawalsHash. + if header.WithdrawalsHash != nil { + return fmt.Errorf("invalid withdrawalsHash: have %x, expected nil", header.WithdrawalsHash) + } if chain.Config().IsCancun(header.Number, header.Time) { return errors.New("clique does not support cancun fork") } + // Verify the non-existence of cancun-specific header fields + switch { + case header.ExcessBlobGas != nil: + return fmt.Errorf("invalid excessBlobGas: have %d, expected nil", header.ExcessBlobGas) + case header.BlobGasUsed != nil: + return fmt.Errorf("invalid blobGasUsed: have %d, expected nil", header.BlobGasUsed) + case header.ParentBeaconRoot != nil: + return fmt.Errorf("invalid parentBeaconRoot, have %#x, expected nil", header.ParentBeaconRoot) + } // All basic checks passed, verify cascading fields return c.verifyCascadingFields(chain, header, parents) } @@ -753,6 +766,15 @@ func encodeSigHeader(w io.Writer, header *types.Header) { if header.WithdrawalsHash != nil { panic("unexpected withdrawal hash value in clique") } + if header.ExcessBlobGas != nil { + panic("unexpected excess blob gas value in clique") + } + if header.BlobGasUsed != nil { + panic("unexpected blob gas used value in clique") + } + if header.ParentBeaconRoot != nil { + panic("unexpected parent beacon root value in clique") + } if err := rlp.Encode(w, enc); err != nil { panic("can't encode: " + err.Error()) } diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index 6d9fa5dba4..039b712288 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -266,9 +266,22 @@ func (ethash *Ethash) verifyHeader(chain consensus.ChainHeaderReader, header, pa if chain.Config().IsShanghai(header.Number, header.Time) { return errors.New("ethash does not support shanghai fork") } + // Verify the non-existence of withdrawalsHash. + if header.WithdrawalsHash != nil { + return fmt.Errorf("invalid withdrawalsHash: have %x, expected nil", header.WithdrawalsHash) + } if chain.Config().IsCancun(header.Number, header.Time) { return errors.New("ethash does not support cancun fork") } + // Verify the non-existence of cancun-specific header fields + switch { + case header.ExcessBlobGas != nil: + return fmt.Errorf("invalid excessBlobGas: have %d, expected nil", header.ExcessBlobGas) + case header.BlobGasUsed != nil: + return fmt.Errorf("invalid blobGasUsed: have %d, expected nil", header.BlobGasUsed) + case header.ParentBeaconRoot != nil: + return fmt.Errorf("invalid parentBeaconRoot, have %#x, expected nil", header.ParentBeaconRoot) + } // Add some fake checks for tests if ethash.fakeDelay != nil { time.Sleep(*ethash.fakeDelay) @@ -539,6 +552,15 @@ func (ethash *Ethash) SealHash(header *types.Header) (hash common.Hash) { if header.WithdrawalsHash != nil { panic("withdrawal hash set on ethash") } + if header.ExcessBlobGas != nil { + panic("excess blob gas set on ethash") + } + if header.BlobGasUsed != nil { + panic("blob gas used set on ethash") + } + if header.ParentBeaconRoot != nil { + panic("parent beacon root set on ethash") + } rlp.Encode(hasher, enc) hasher.Sum(hash[:0]) return hash diff --git a/console/bridge.go b/console/bridge.go index c67686d6c3..37578041ca 100644 --- a/console/bridge.go +++ b/console/bridge.go @@ -78,7 +78,7 @@ func (b *bridge) NewAccount(call jsre.Call) (goja.Value, error) { return nil, err } if password != confirm { - return nil, errors.New("passwords don't match!") + return nil, errors.New("passwords don't match") } // A single string password was specified, use that case len(call.Arguments) == 1 && call.Argument(0).ToString() != nil: diff --git a/console/console_test.go b/console/console_test.go index ee5c36be4a..a13be6a99d 100644 --- a/console/console_test.go +++ b/console/console_test.go @@ -94,7 +94,7 @@ func newTester(t *testing.T, confOverride func(*ethconfig.Config)) *tester { t.Fatalf("failed to create node: %v", err) } ethConf := ðconfig.Config{ - Genesis: core.DeveloperGenesisBlock(11_500_000, common.Address{}), + Genesis: core.DeveloperGenesisBlock(11_500_000, nil), Miner: miner.Config{ Etherbase: common.HexToAddress(testAddress), }, diff --git a/core/asm/asm_test.go b/core/asm/asm_test.go index 92b26b67a5..cd7520ec63 100644 --- a/core/asm/asm_test.go +++ b/core/asm/asm_test.go @@ -22,53 +22,37 @@ import ( "encoding/hex" ) -// Tests disassembling the instructions for valid evm code -func TestInstructionIteratorValid(t *testing.T) { - cnt := 0 - script, _ := hex.DecodeString("61000000") - - it := NewInstructionIterator(script) - for it.Next() { - cnt++ - } - - if err := it.Error(); err != nil { - t.Errorf("Expected 2, but encountered error %v instead.", err) - } - if cnt != 2 { - t.Errorf("Expected 2, but got %v instead.", cnt) - } -} - -// Tests disassembling the instructions for invalid evm code -func TestInstructionIteratorInvalid(t *testing.T) { - cnt := 0 - script, _ := hex.DecodeString("6100") - - it := NewInstructionIterator(script) - for it.Next() { - cnt++ - } - - if it.Error() == nil { - t.Errorf("Expected an error, but got %v instead.", cnt) - } -} - -// Tests disassembling the instructions for empty evm code -func TestInstructionIteratorEmpty(t *testing.T) { - cnt := 0 - script, _ := hex.DecodeString("") - - it := NewInstructionIterator(script) - for it.Next() { - cnt++ - } - - if err := it.Error(); err != nil { - t.Errorf("Expected 0, but encountered error %v instead.", err) - } - if cnt != 0 { - t.Errorf("Expected 0, but got %v instead.", cnt) +// Tests disassembling instructions +func TestInstructionIterator(t *testing.T) { + for i, tc := range []struct { + want int + code string + wantErr string + }{ + {2, "61000000", ""}, // valid code + {0, "6100", "incomplete push instruction at 0"}, // invalid code + {2, "5900", ""}, // push0 + {0, "", ""}, // empty + + } { + var ( + have int + code, _ = hex.DecodeString(tc.code) + it = NewInstructionIterator(code) + ) + for it.Next() { + have++ + } + var haveErr = "" + if it.Error() != nil { + haveErr = it.Error().Error() + } + if haveErr != tc.wantErr { + t.Errorf("test %d: encountered error: %q want %q", i, haveErr, tc.wantErr) + continue + } + if have != tc.want { + t.Errorf("wrong instruction count, have %d want %d", have, tc.want) + } } } diff --git a/core/assets/qanet/genesis.json b/core/assets/qanet/genesis.json index 8ef672c205..e1a336f165 100644 --- a/core/assets/qanet/genesis.json +++ b/core/assets/qanet/genesis.json @@ -1,6 +1,6 @@ { "config": { - "chainId": 1322, + "chainId": 2484, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, @@ -25,7 +25,7 @@ } }, "nonce": "0x0", - "timestamp": "0x659e0a56", + "timestamp": "0x662e0406", "extraData": "0x424544524f434b", "gasLimit": "0x5f5e100", "difficulty": "0x0", @@ -964,11 +964,11 @@ "4200000000000000000000000000000000000015": { "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000659e0a5600000000000b5296", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000000000000b2d05e00", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x3db93722c9951fe1da25dd652c6e2367674a97161df2acea322e915cab0d58ba", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000662e0406000000000005b2ae", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000000000004a817c800", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x604a9f6a8572851437efbf9cf7e3c842875d05cefdb707d3b76396b595eb5d22", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000e309831c77d5fb5f189dd97c598e26e5c014f2d6", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000bd6353a2e43a0d8eaa370b2eceb80481bc5c4094", "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000834", "0x0000000000000000000000000000000000000000000000000000000000000006": "0x00000000000000000000000000000000000000000000000000000000000f4240", "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30015", @@ -996,7 +996,7 @@ "4200000000000000000000000000000000000018": { "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f100", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b268829", "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30018", "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x0000000000000000000000004200000000000000000000000000000000000018" }, @@ -1296,7 +1296,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x4f50424e4200000000000000000000000000000000000000000000000000000a", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x4f50424e4200000000000000000000000000000000000000000000000000000a", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f100" + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b268829" }, "balance": "0x0" }, @@ -15183,7 +15183,7 @@ "balance": "0x0" }, "c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30007": { - "code": "0x6080604052600436106101445760003560e01c80638129fc1c116100c0578063a711986911610074578063b28ade2511610059578063b28ade251461036e578063d764ad0b1461038e578063ecc70428146103a157600080fd5b8063a71198691461030b578063b1b1b2091461033e57600080fd5b80638cbeeef2116100a55780638cbeeef2146101e35780639fce812c14610297578063a4e7f8bd146102cb57600080fd5b80638129fc1c1461026b57806383a740741461028057600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146101f95780635644cfdf1461021b5780636e296e451461023157600080fd5b80633f827a5a146101bb5780634c1d6a69146101e357600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633dbb202b146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b6101b96101b4366004611886565b610406565b005b3480156101c757600080fd5b506101d0600181565b60405161ffff9091168152602001610173565b3480156101ef57600080fd5b5061015e619c4081565b34801561020557600080fd5b5061020e61066a565b6040516101739190611965565b34801561022757600080fd5b5061015e61138881565b34801561023d57600080fd5b5061024661070d565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561027757600080fd5b506101b96107f9565b34801561028c57600080fd5b5061015e62030d4081565b3480156102a357600080fd5b506102467f00000000000000000000000047c267d71e643db1e177371821e30fed4c0ba16a81565b3480156102d757600080fd5b506102fb6102e636600461197f565b60ce6020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561031757600080fd5b507f00000000000000000000000047c267d71e643db1e177371821e30fed4c0ba16a610246565b34801561034a57600080fd5b506102fb61035936600461197f565b60cb6020526000908152604090205460ff1681565b34801561037a57600080fd5b5061015e610389366004611998565b6109f6565b6101b961039c3660046119ec565b610a64565b3480156103ad57600080fd5b506103f860cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610173565b61053f7f00000000000000000000000047c267d71e643db1e177371821e30fed4c0ba16a6104358585856109f6565b347fd764ad0b000000000000000000000000000000000000000000000000000000006104a160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016104bd9796959493929190611ab7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261135d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856105c460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516105d6959493929190611b16565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606106957f00000000000000000000000000000000000000000000000000000000000000016113eb565b6106be7f00000000000000000000000000000000000000000000000000000000000000046113eb565b6106e77f00000000000000000000000000000000000000000000000000000000000000006113eb565b6040516020016106f993929190611b64565b604051602081830303815290604052905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016107dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000547501000000000000000000000000000000000000000000900460ff1615808015610844575060005460017401000000000000000000000000000000000000000090910460ff16105b806108765750303b158015610876575060005474010000000000000000000000000000000000000000900460ff166001145b610902576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561098857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610990611520565b80156109f357600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f610a12604063ffffffff8816611c09565b610a1c9190611c68565b610a27601088611c09565b610a349062030d40611c8f565b610a3e9190611c8f565b610a489190611c8f565b610a529190611c8f565b610a5c9190611c8f565b949350505050565b60f087901c60028110610b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016107d3565b8061ffff16600003610c14576000610b70878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506115f9915050565b600081815260cb602052604090205490915060ff1615610c12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016107d3565b505b6000610c5a898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061161892505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f00000000000000000000000047c267d71e643db1e177371821e30fed4c0ba16a90911603610cf257853414610cce57610cce611cbb565b600081815260ce602052604090205460ff1615610ced57610ced611cbb565b610e44565b3415610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016107d3565b600081815260ce602052604090205460ff16610e44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016107d3565b610e4d8761163b565b15610f00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b600081815260cb602052604090205460ff1615610f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016107d3565b610fc085610fb1611388619c40611c8f565b67ffffffffffffffff16611690565b1580610fe6575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156110ff57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016110f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016107d3565b5050611338565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061119088619c405a6111539190611cea565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116ae92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561122757600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611334565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016107d3565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac9084906113b390889088908790600401611d01565b6000604051808303818588803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b505050505050505050565b60608160000361142e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611458578061144281611d49565b91506114519050600a83611d81565b9150611432565b60008167ffffffffffffffff81111561147357611473611d95565b6040519080825280601f01601f19166020018201604052801561149d576020820181803683370190505b5090505b8415610a5c576114b2600183611cea565b91506114bf600a86611dc4565b6114ca906030611dd8565b60f81b8183815181106114df576114df611df0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611519600a86611d81565b94506114a1565b6000547501000000000000000000000000000000000000000000900460ff166115cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6000611607858585856116c8565b805190602001209050949350505050565b6000611628878787878787611761565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff821630148061168a575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016116e19493929190611e1f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161177e96959493929190611e69565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461182457600080fd5b919050565b60008083601f84011261183b57600080fd5b50813567ffffffffffffffff81111561185357600080fd5b60208301915083602082850101111561186b57600080fd5b9250929050565b803563ffffffff8116811461182457600080fd5b6000806000806060858703121561189c57600080fd5b6118a585611800565b9350602085013567ffffffffffffffff8111156118c157600080fd5b6118cd87828801611829565b90945092506118e0905060408601611872565b905092959194509250565b60005b838110156119065781810151838201526020016118ee565b83811115611915576000848401525b50505050565b600081518084526119338160208601602086016118eb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611978602083018461191b565b9392505050565b60006020828403121561199157600080fd5b5035919050565b6000806000604084860312156119ad57600080fd5b833567ffffffffffffffff8111156119c457600080fd5b6119d086828701611829565b90945092506119e3905060208501611872565b90509250925092565b600080600080600080600060c0888a031215611a0757600080fd5b87359650611a1760208901611800565b9550611a2560408901611800565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611a4f57600080fd5b611a5b8a828b01611829565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611b0960c083018486611a6e565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611b46608083018688611a6e565b905083604083015263ffffffff831660608301529695505050505050565b60008451611b768184602089016118eb565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611bb2816001850160208a016118eb565b60019201918201528351611bcd8160028401602088016118eb565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611c3057611c30611bda565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680611c8357611c83611c39565b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611cb257611cb2611bda565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611cfc57611cfc611bda565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611d40606083018461191b565b95945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d7a57611d7a611bda565b5060010190565b600082611d9057611d90611c39565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082611dd357611dd3611c39565b500690565b60008219821115611deb57611deb611bda565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611e58608083018561191b565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611eb460c083018461191b565b9897505050505050505056fea164736f6c634300080f000a", + "code": "0x6080604052600436106101445760003560e01c80638129fc1c116100c0578063a711986911610074578063b28ade2511610059578063b28ade251461036e578063d764ad0b1461038e578063ecc70428146103a157600080fd5b8063a71198691461030b578063b1b1b2091461033e57600080fd5b80638cbeeef2116100a55780638cbeeef2146101e35780639fce812c14610297578063a4e7f8bd146102cb57600080fd5b80638129fc1c1461026b57806383a740741461028057600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146101f95780635644cfdf1461021b5780636e296e451461023157600080fd5b80633f827a5a146101bb5780634c1d6a69146101e357600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633dbb202b146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b6101b96101b4366004611886565b610406565b005b3480156101c757600080fd5b506101d0600181565b60405161ffff9091168152602001610173565b3480156101ef57600080fd5b5061015e619c4081565b34801561020557600080fd5b5061020e61066a565b6040516101739190611965565b34801561022757600080fd5b5061015e61138881565b34801561023d57600080fd5b5061024661070d565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561027757600080fd5b506101b96107f9565b34801561028c57600080fd5b5061015e62030d4081565b3480156102a357600080fd5b506102467f00000000000000000000000011fd17e6fd1b5ec805edd78ea03bc9433f7c987a81565b3480156102d757600080fd5b506102fb6102e636600461197f565b60ce6020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561031757600080fd5b507f00000000000000000000000011fd17e6fd1b5ec805edd78ea03bc9433f7c987a610246565b34801561034a57600080fd5b506102fb61035936600461197f565b60cb6020526000908152604090205460ff1681565b34801561037a57600080fd5b5061015e610389366004611998565b6109f6565b6101b961039c3660046119ec565b610a64565b3480156103ad57600080fd5b506103f860cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610173565b61053f7f00000000000000000000000011fd17e6fd1b5ec805edd78ea03bc9433f7c987a6104358585856109f6565b347fd764ad0b000000000000000000000000000000000000000000000000000000006104a160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016104bd9796959493929190611ab7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261135d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856105c460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516105d6959493929190611b16565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606106957f00000000000000000000000000000000000000000000000000000000000000016113eb565b6106be7f00000000000000000000000000000000000000000000000000000000000000046113eb565b6106e77f00000000000000000000000000000000000000000000000000000000000000006113eb565b6040516020016106f993929190611b64565b604051602081830303815290604052905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016107dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000547501000000000000000000000000000000000000000000900460ff1615808015610844575060005460017401000000000000000000000000000000000000000090910460ff16105b806108765750303b158015610876575060005474010000000000000000000000000000000000000000900460ff166001145b610902576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561098857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610990611520565b80156109f357600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f610a12604063ffffffff8816611c09565b610a1c9190611c68565b610a27601088611c09565b610a349062030d40611c8f565b610a3e9190611c8f565b610a489190611c8f565b610a529190611c8f565b610a5c9190611c8f565b949350505050565b60f087901c60028110610b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016107d3565b8061ffff16600003610c14576000610b70878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506115f9915050565b600081815260cb602052604090205490915060ff1615610c12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016107d3565b505b6000610c5a898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061161892505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f00000000000000000000000011fd17e6fd1b5ec805edd78ea03bc9433f7c987a90911603610cf257853414610cce57610cce611cbb565b600081815260ce602052604090205460ff1615610ced57610ced611cbb565b610e44565b3415610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016107d3565b600081815260ce602052604090205460ff16610e44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016107d3565b610e4d8761163b565b15610f00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b600081815260cb602052604090205460ff1615610f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016107d3565b610fc085610fb1611388619c40611c8f565b67ffffffffffffffff16611690565b1580610fe6575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156110ff57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016110f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016107d3565b5050611338565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061119088619c405a6111539190611cea565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116ae92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561122757600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611334565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016107d3565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac9084906113b390889088908790600401611d01565b6000604051808303818588803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b505050505050505050565b60608160000361142e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611458578061144281611d49565b91506114519050600a83611d81565b9150611432565b60008167ffffffffffffffff81111561147357611473611d95565b6040519080825280601f01601f19166020018201604052801561149d576020820181803683370190505b5090505b8415610a5c576114b2600183611cea565b91506114bf600a86611dc4565b6114ca906030611dd8565b60f81b8183815181106114df576114df611df0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611519600a86611d81565b94506114a1565b6000547501000000000000000000000000000000000000000000900460ff166115cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6000611607858585856116c8565b805190602001209050949350505050565b6000611628878787878787611761565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff821630148061168a575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016116e19493929190611e1f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161177e96959493929190611e69565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461182457600080fd5b919050565b60008083601f84011261183b57600080fd5b50813567ffffffffffffffff81111561185357600080fd5b60208301915083602082850101111561186b57600080fd5b9250929050565b803563ffffffff8116811461182457600080fd5b6000806000806060858703121561189c57600080fd5b6118a585611800565b9350602085013567ffffffffffffffff8111156118c157600080fd5b6118cd87828801611829565b90945092506118e0905060408601611872565b905092959194509250565b60005b838110156119065781810151838201526020016118ee565b83811115611915576000848401525b50505050565b600081518084526119338160208601602086016118eb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611978602083018461191b565b9392505050565b60006020828403121561199157600080fd5b5035919050565b6000806000604084860312156119ad57600080fd5b833567ffffffffffffffff8111156119c457600080fd5b6119d086828701611829565b90945092506119e3905060208501611872565b90509250925092565b600080600080600080600060c0888a031215611a0757600080fd5b87359650611a1760208901611800565b9550611a2560408901611800565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611a4f57600080fd5b611a5b8a828b01611829565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611b0960c083018486611a6e565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611b46608083018688611a6e565b905083604083015263ffffffff831660608301529695505050505050565b60008451611b768184602089016118eb565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611bb2816001850160208a016118eb565b60019201918201528351611bcd8160028401602088016118eb565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611c3057611c30611bda565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680611c8357611c83611c39565b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611cb257611cb2611bda565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611cfc57611cfc611bda565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611d40606083018461191b565b95945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d7a57611d7a611bda565b5060010190565b600082611d9057611d90611c39565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082611dd357611dd3611c39565b500690565b60008219821115611deb57611deb611bda565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611e58608083018561191b565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611eb460c083018461191b565b9897505050505050505056fea164736f6c634300080f000a", "balance": "0x0" }, "c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3000f": { @@ -15191,11 +15191,11 @@ "balance": "0x0" }, "c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30010": { - "code": "0x6080604052600436106100ec5760003560e01c806354fd4d501161008a5780638f601f66116100595780638f601f661461034e578063927ede2d14610394578063a3a79548146103c8578063e11013dd146103db57600080fd5b806354fd4d50146102c5578063662a633a146102e75780637f46ddb2146102fa578063870876231461032e57600080fd5b806332b7006d116100c657806332b7006d1461020657806336c717c1146102195780633cb747bf14610272578063540abf73146102a557600080fd5b80630166a07a146101c057806309fc8843146101e05780631635f5fd146101f357600080fd5b366101bb57333b15610185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101b973deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d40604051806020016040528060008152506103ee565b005b600080fd5b3480156101cc57600080fd5b506101b96101db366004612372565b6104c9565b6101b96101ee366004612423565b6108b6565b6101b9610201366004612476565b61098d565b6101b96102143660046124e9565b610e5a565b34801561022557600080fd5b507f000000000000000000000000708538e43e86bfb9bec801c07d9df8fdc689f9785b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561027e57600080fd5b507f0000000000000000000000004200000000000000000000000000000000000007610248565b3480156102b157600080fd5b506101b96102c036600461253d565b610f34565b3480156102d157600080fd5b506102da610f79565b604051610269919061262a565b6101b96102f5366004612372565b61101c565b34801561030657600080fd5b506102487f000000000000000000000000708538e43e86bfb9bec801c07d9df8fdc689f97881565b34801561033a57600080fd5b506101b961034936600461263d565b61108f565b34801561035a57600080fd5b506103866103693660046126c0565b600260209081526000928352604080842090915290825290205481565b604051908152602001610269565b3480156103a057600080fd5b506102487f000000000000000000000000420000000000000000000000000000000000000781565b6101b96103d636600461263d565b611163565b6101b96103e93660046126f9565b6111a7565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff87160161043d5761043885858585856111f0565b6104c1565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ae919061275c565b90506104bf878288888888886113d4565b505b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004200000000000000000000000000000000000007161480156105e757507f000000000000000000000000708538e43e86bfb9bec801c07d9df8fdc689f97873ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cf919061275c565b73ffffffffffffffffffffffffffffffffffffffff16145b610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161017c565b6106a28761171b565b156107f0576106b1878761177d565b610763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161017c565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b50505050610872565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461082e9084906127a8565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561087290858561189d565b6104bf878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197192505050565b333b15610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161017c565b6109883333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111f092505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000420000000000000000000000000000000000000716148015610aab57507f000000000000000000000000708538e43e86bfb9bec801c07d9df8fdc689f97873ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a93919061275c565b73ffffffffffffffffffffffffffffffffffffffff16145b610b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161017c565b823414610bec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161017c565b3073ffffffffffffffffffffffffffffffffffffffff851603610c91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161017c565b7f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161017c565b610dae85858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119ff92505050565b6000610dcb855a8660405180602001604052806000815250611aa0565b9050806104c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161017c565b333b15610ee9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161017c565b610f2d853333878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103ee92505050565b5050505050565b6104bf87873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113d492505050565b6060610fa47f0000000000000000000000000000000000000000000000000000000000000001611aba565b610fcd7f0000000000000000000000000000000000000000000000000000000000000001611aba565b610ff67f0000000000000000000000000000000000000000000000000000000000000000611aba565b604051602001611008939291906127bf565b604051602081830303815290604052905090565b73ffffffffffffffffffffffffffffffffffffffff8716158015611069575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b156110805761107b858585858561098d565b6104bf565b6104bf868887878787876104c9565b333b1561111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161017c565b6104c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113d492505050565b6104c1863387878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103ee92505050565b6111ea3385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111f092505050565b50505050565b82341461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161017c565b61128b85858584611bf7565b7f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f000000000000000000000000708538e43e86bfb9bec801c07d9df8fdc689f978631635f5fd60e01b898989886040516024016113089493929190612835565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261139b9291889060040161287e565b6000604051808303818588803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b50505050505050505050565b6113dd8761171b565b1561152b576113ec878761177d565b61149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161017c565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561150e57600080fd5b505af1158015611522573d6000803e3d6000fd5b505050506115bf565b61154d73ffffffffffffffffffffffffffffffffffffffff8816863086611c98565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461158b9084906128c3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6115cd878787878786611cf6565b7f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f000000000000000000000000708538e43e86bfb9bec801c07d9df8fdc689f978630166a07a60e01b898b8a8a8a8960405160240161164d969594939291906128db565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526116e09291879060040161287e565b600060405180830381600087803b1580156116fa57600080fd5b505af115801561170e573d6000803e3d6000fd5b5050505050505050505050565b6000611747827f1d1d8b6300000000000000000000000000000000000000000000000000000000611d84565b806117775750611777827fec4fc8e300000000000000000000000000000000000000000000000000000000611d84565b92915050565b60006117a9837f1d1d8b6300000000000000000000000000000000000000000000000000000000611d84565b15611852578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181d919061275c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611777565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f9573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109889084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611da7565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898686866040516119e993929190612936565b60405180910390a46104c1868686868686611eb3565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611a8c93929190612936565b60405180910390a46111ea84848484611f3b565b600080600080845160208601878a8af19695505050505050565b606081600003611afd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611b275780611b1181612974565b9150611b209050600a836129db565b9150611b01565b60008167ffffffffffffffff811115611b4257611b426129ef565b6040519080825280601f01601f191660200182016040528015611b6c576020820181803683370190505b5090505b8415611bef57611b816001836127a8565b9150611b8e600a86612a1e565b611b999060306128c3565b60f81b818381518110611bae57611bae612a32565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611be8600a866129db565b9450611b70565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611c8493929190612936565b60405180910390a46111ea84848484611fa8565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526111ea9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016118ef565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611d6e93929190612936565b60405180910390a46104c1868686868686612007565b6000611d8f8361207f565b8015611da05750611da083836120e3565b9392505050565b6000611e09826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121b29092919063ffffffff16565b8051909150156109885780806020019051810190611e279190612a61565b610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161017c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611f2b93929190612936565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051611f9a929190612a83565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051611f9a929190612a83565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611f2b93929190612936565b60006120ab827f01ffc9a7000000000000000000000000000000000000000000000000000000006120e3565b801561177757506120dc827fffffffff000000000000000000000000000000000000000000000000000000006120e3565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561219b575060208210155b80156121a75750600081115b979650505050505050565b6060611bef84846000858573ffffffffffffffffffffffffffffffffffffffff85163b61223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161017c565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122649190612a9c565b60006040518083038185875af1925050503d80600081146122a1576040519150601f19603f3d011682016040523d82523d6000602084013e6122a6565b606091505b50915091506121a7828286606083156122c0575081611da0565b8251156122d05782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017c919061262a565b73ffffffffffffffffffffffffffffffffffffffff8116811461232657600080fd5b50565b60008083601f84011261233b57600080fd5b50813567ffffffffffffffff81111561235357600080fd5b60208301915083602082850101111561236b57600080fd5b9250929050565b600080600080600080600060c0888a03121561238d57600080fd5b873561239881612304565b965060208801356123a881612304565b955060408801356123b881612304565b945060608801356123c881612304565b93506080880135925060a088013567ffffffffffffffff8111156123eb57600080fd5b6123f78a828b01612329565b989b979a50959850939692959293505050565b803563ffffffff8116811461241e57600080fd5b919050565b60008060006040848603121561243857600080fd5b6124418461240a565b9250602084013567ffffffffffffffff81111561245d57600080fd5b61246986828701612329565b9497909650939450505050565b60008060008060006080868803121561248e57600080fd5b853561249981612304565b945060208601356124a981612304565b935060408601359250606086013567ffffffffffffffff8111156124cc57600080fd5b6124d888828901612329565b969995985093965092949392505050565b60008060008060006080868803121561250157600080fd5b853561250c81612304565b9450602086013593506125216040870161240a565b9250606086013567ffffffffffffffff8111156124cc57600080fd5b600080600080600080600060c0888a03121561255857600080fd5b873561256381612304565b9650602088013561257381612304565b9550604088013561258381612304565b9450606088013593506125986080890161240a565b925060a088013567ffffffffffffffff8111156123eb57600080fd5b60005b838110156125cf5781810151838201526020016125b7565b838111156111ea5750506000910152565b600081518084526125f88160208601602086016125b4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da060208301846125e0565b60008060008060008060a0878903121561265657600080fd5b863561266181612304565b9550602087013561267181612304565b9450604087013593506126866060880161240a565b9250608087013567ffffffffffffffff8111156126a257600080fd5b6126ae89828a01612329565b979a9699509497509295939492505050565b600080604083850312156126d357600080fd5b82356126de81612304565b915060208301356126ee81612304565b809150509250929050565b6000806000806060858703121561270f57600080fd5b843561271a81612304565b93506127286020860161240a565b9250604085013567ffffffffffffffff81111561274457600080fd5b61275087828801612329565b95989497509550505050565b60006020828403121561276e57600080fd5b8151611da081612304565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156127ba576127ba612779565b500390565b600084516127d18184602089016125b4565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161280d816001850160208a016125b4565b600192019182015283516128288160028401602088016125b4565b0160020195945050505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261287460808301846125e0565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006128ad60608301856125e0565b905063ffffffff83166040830152949350505050565b600082198211156128d6576128d6612779565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261292a60c08301846125e0565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815282602082015260606040820152600061296b60608301846125e0565b95945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129a5576129a5612779565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826129ea576129ea6129ac565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082612a2d57612a2d6129ac565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612a7357600080fd5b81518015158114611da057600080fd5b828152604060208201526000611bef60408301846125e0565b60008251612aae8184602087016125b4565b919091019291505056fea164736f6c634300080f000a", + "code": "0x6080604052600436106100ec5760003560e01c806354fd4d501161008a5780638f601f66116100595780638f601f661461034e578063927ede2d14610394578063a3a79548146103c8578063e11013dd146103db57600080fd5b806354fd4d50146102c5578063662a633a146102e75780637f46ddb2146102fa578063870876231461032e57600080fd5b806332b7006d116100c657806332b7006d1461020657806336c717c1146102195780633cb747bf14610272578063540abf73146102a557600080fd5b80630166a07a146101c057806309fc8843146101e05780631635f5fd146101f357600080fd5b366101bb57333b15610185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101b973deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d40604051806020016040528060008152506103ee565b005b600080fd5b3480156101cc57600080fd5b506101b96101db366004612372565b6104c9565b6101b96101ee366004612423565b6108b6565b6101b9610201366004612476565b61098d565b6101b96102143660046124e9565b610e5a565b34801561022557600080fd5b507f00000000000000000000000063996c6ca9c92e4add5ee8e9644dbaccbe0c09a15b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561027e57600080fd5b507f0000000000000000000000004200000000000000000000000000000000000007610248565b3480156102b157600080fd5b506101b96102c036600461253d565b610f34565b3480156102d157600080fd5b506102da610f79565b604051610269919061262a565b6101b96102f5366004612372565b61101c565b34801561030657600080fd5b506102487f00000000000000000000000063996c6ca9c92e4add5ee8e9644dbaccbe0c09a181565b34801561033a57600080fd5b506101b961034936600461263d565b61108f565b34801561035a57600080fd5b506103866103693660046126c0565b600260209081526000928352604080842090915290825290205481565b604051908152602001610269565b3480156103a057600080fd5b506102487f000000000000000000000000420000000000000000000000000000000000000781565b6101b96103d636600461263d565b611163565b6101b96103e93660046126f9565b6111a7565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff87160161043d5761043885858585856111f0565b6104c1565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ae919061275c565b90506104bf878288888888886113d4565b505b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004200000000000000000000000000000000000007161480156105e757507f00000000000000000000000063996c6ca9c92e4add5ee8e9644dbaccbe0c09a173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cf919061275c565b73ffffffffffffffffffffffffffffffffffffffff16145b610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161017c565b6106a28761171b565b156107f0576106b1878761177d565b610763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161017c565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b50505050610872565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461082e9084906127a8565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561087290858561189d565b6104bf878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197192505050565b333b15610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161017c565b6109883333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111f092505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000420000000000000000000000000000000000000716148015610aab57507f00000000000000000000000063996c6ca9c92e4add5ee8e9644dbaccbe0c09a173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a93919061275c565b73ffffffffffffffffffffffffffffffffffffffff16145b610b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161017c565b823414610bec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161017c565b3073ffffffffffffffffffffffffffffffffffffffff851603610c91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161017c565b7f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161017c565b610dae85858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119ff92505050565b6000610dcb855a8660405180602001604052806000815250611aa0565b9050806104c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161017c565b333b15610ee9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161017c565b610f2d853333878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103ee92505050565b5050505050565b6104bf87873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113d492505050565b6060610fa47f0000000000000000000000000000000000000000000000000000000000000001611aba565b610fcd7f0000000000000000000000000000000000000000000000000000000000000001611aba565b610ff67f0000000000000000000000000000000000000000000000000000000000000000611aba565b604051602001611008939291906127bf565b604051602081830303815290604052905090565b73ffffffffffffffffffffffffffffffffffffffff8716158015611069575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b156110805761107b858585858561098d565b6104bf565b6104bf868887878787876104c9565b333b1561111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161017c565b6104c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113d492505050565b6104c1863387878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103ee92505050565b6111ea3385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111f092505050565b50505050565b82341461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161017c565b61128b85858584611bf7565b7f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f00000000000000000000000063996c6ca9c92e4add5ee8e9644dbaccbe0c09a1631635f5fd60e01b898989886040516024016113089493929190612835565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261139b9291889060040161287e565b6000604051808303818588803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b50505050505050505050565b6113dd8761171b565b1561152b576113ec878761177d565b61149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161017c565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561150e57600080fd5b505af1158015611522573d6000803e3d6000fd5b505050506115bf565b61154d73ffffffffffffffffffffffffffffffffffffffff8816863086611c98565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461158b9084906128c3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6115cd878787878786611cf6565b7f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f00000000000000000000000063996c6ca9c92e4add5ee8e9644dbaccbe0c09a1630166a07a60e01b898b8a8a8a8960405160240161164d969594939291906128db565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526116e09291879060040161287e565b600060405180830381600087803b1580156116fa57600080fd5b505af115801561170e573d6000803e3d6000fd5b5050505050505050505050565b6000611747827f1d1d8b6300000000000000000000000000000000000000000000000000000000611d84565b806117775750611777827fec4fc8e300000000000000000000000000000000000000000000000000000000611d84565b92915050565b60006117a9837f1d1d8b6300000000000000000000000000000000000000000000000000000000611d84565b15611852578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181d919061275c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611777565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f9573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109889084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611da7565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898686866040516119e993929190612936565b60405180910390a46104c1868686868686611eb3565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611a8c93929190612936565b60405180910390a46111ea84848484611f3b565b600080600080845160208601878a8af19695505050505050565b606081600003611afd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611b275780611b1181612974565b9150611b209050600a836129db565b9150611b01565b60008167ffffffffffffffff811115611b4257611b426129ef565b6040519080825280601f01601f191660200182016040528015611b6c576020820181803683370190505b5090505b8415611bef57611b816001836127a8565b9150611b8e600a86612a1e565b611b999060306128c3565b60f81b818381518110611bae57611bae612a32565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611be8600a866129db565b9450611b70565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611c8493929190612936565b60405180910390a46111ea84848484611fa8565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526111ea9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016118ef565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611d6e93929190612936565b60405180910390a46104c1868686868686612007565b6000611d8f8361207f565b8015611da05750611da083836120e3565b9392505050565b6000611e09826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121b29092919063ffffffff16565b8051909150156109885780806020019051810190611e279190612a61565b610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161017c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611f2b93929190612936565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051611f9a929190612a83565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051611f9a929190612a83565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611f2b93929190612936565b60006120ab827f01ffc9a7000000000000000000000000000000000000000000000000000000006120e3565b801561177757506120dc827fffffffff000000000000000000000000000000000000000000000000000000006120e3565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561219b575060208210155b80156121a75750600081115b979650505050505050565b6060611bef84846000858573ffffffffffffffffffffffffffffffffffffffff85163b61223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161017c565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122649190612a9c565b60006040518083038185875af1925050503d80600081146122a1576040519150601f19603f3d011682016040523d82523d6000602084013e6122a6565b606091505b50915091506121a7828286606083156122c0575081611da0565b8251156122d05782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017c919061262a565b73ffffffffffffffffffffffffffffffffffffffff8116811461232657600080fd5b50565b60008083601f84011261233b57600080fd5b50813567ffffffffffffffff81111561235357600080fd5b60208301915083602082850101111561236b57600080fd5b9250929050565b600080600080600080600060c0888a03121561238d57600080fd5b873561239881612304565b965060208801356123a881612304565b955060408801356123b881612304565b945060608801356123c881612304565b93506080880135925060a088013567ffffffffffffffff8111156123eb57600080fd5b6123f78a828b01612329565b989b979a50959850939692959293505050565b803563ffffffff8116811461241e57600080fd5b919050565b60008060006040848603121561243857600080fd5b6124418461240a565b9250602084013567ffffffffffffffff81111561245d57600080fd5b61246986828701612329565b9497909650939450505050565b60008060008060006080868803121561248e57600080fd5b853561249981612304565b945060208601356124a981612304565b935060408601359250606086013567ffffffffffffffff8111156124cc57600080fd5b6124d888828901612329565b969995985093965092949392505050565b60008060008060006080868803121561250157600080fd5b853561250c81612304565b9450602086013593506125216040870161240a565b9250606086013567ffffffffffffffff8111156124cc57600080fd5b600080600080600080600060c0888a03121561255857600080fd5b873561256381612304565b9650602088013561257381612304565b9550604088013561258381612304565b9450606088013593506125986080890161240a565b925060a088013567ffffffffffffffff8111156123eb57600080fd5b60005b838110156125cf5781810151838201526020016125b7565b838111156111ea5750506000910152565b600081518084526125f88160208601602086016125b4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611da060208301846125e0565b60008060008060008060a0878903121561265657600080fd5b863561266181612304565b9550602087013561267181612304565b9450604087013593506126866060880161240a565b9250608087013567ffffffffffffffff8111156126a257600080fd5b6126ae89828a01612329565b979a9699509497509295939492505050565b600080604083850312156126d357600080fd5b82356126de81612304565b915060208301356126ee81612304565b809150509250929050565b6000806000806060858703121561270f57600080fd5b843561271a81612304565b93506127286020860161240a565b9250604085013567ffffffffffffffff81111561274457600080fd5b61275087828801612329565b95989497509550505050565b60006020828403121561276e57600080fd5b8151611da081612304565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156127ba576127ba612779565b500390565b600084516127d18184602089016125b4565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161280d816001850160208a016125b4565b600192019182015283516128288160028401602088016125b4565b0160020195945050505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261287460808301846125e0565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006128ad60608301856125e0565b905063ffffffff83166040830152949350505050565b600082198211156128d6576128d6612779565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261292a60c08301846125e0565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815282602082015260606040820152600061296b60608301846125e0565b95945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129a5576129a5612779565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826129ea576129ea6129ac565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082612a2d57612a2d6129ac565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612a7357600080fd5b81518015158114611da057600080fd5b828152604060208201526000611bef60408301846125e0565b60008251612aae8184602087016125b4565b919091019291505056fea164736f6c634300080f000a", "balance": "0x0" }, "c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30011": { - "code": "0x6080604052600436106100695760003560e01c806384411d651161004357806384411d651461010c578063d3e5792b14610130578063d4ff92181461016457600080fd5b80630d9019e1146100755780633ccfd60b146100d357806354fd4d50146100ea57600080fd5b3661007057005b600080fd5b34801561008157600080fd5b506100a97f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f10081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100df57600080fd5b506100e8610197565b005b3480156100f657600080fd5b506100ff6103b8565b6040516100ca9190610612565b34801561011857600080fd5b5061012260005481565b6040519081526020016100ca565b34801561013c57600080fd5b506101227f0000000000000000000000000000000000000000000000008ac7230489e8000081565b34801561017057600080fd5b507f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f1006100a9565b7f0000000000000000000000000000000000000000000000008ac7230489e80000471015610271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a40160405180910390fd5b600047905080600080828254610287919061065b565b9091555050604080518281527f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f10073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd918491610383917f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f100916188b891600401610673565b6000604051808303818588803b15801561039c57600080fd5b505af11580156103b0573d6000803e3d6000fd5b505050505050565b60606103e37f000000000000000000000000000000000000000000000000000000000000000161045b565b61040c7f000000000000000000000000000000000000000000000000000000000000000161045b565b6104357f000000000000000000000000000000000000000000000000000000000000000061045b565b604051602001610447939291906106b7565b604051602081830303815290604052905090565b60608160000361049e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156104c857806104b28161072d565b91506104c19050600a83610794565b91506104a2565b60008167ffffffffffffffff8111156104e3576104e36107a8565b6040519080825280601f01601f19166020018201604052801561050d576020820181803683370190505b5090505b8415610590576105226001836107d7565b915061052f600a866107ee565b61053a90603061065b565b60f81b81838151811061054f5761054f610802565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610589600a86610794565b9450610511565b949350505050565b60005b838110156105b357818101518382015260200161059b565b838111156105c2576000848401525b50505050565b600081518084526105e0816020860160208601610598565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061062560208301846105c8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561066e5761066e61062c565b500190565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006106ae60608301846105c8565b95945050505050565b600084516106c9818460208901610598565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610705816001850160208a01610598565b60019201918201528351610720816002840160208801610598565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361075e5761075e61062c565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826107a3576107a3610765565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156107e9576107e961062c565b500390565b6000826107fd576107fd610765565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", + "code": "0x6080604052600436106100695760003560e01c806384411d651161004357806384411d651461010c578063d3e5792b14610130578063d4ff92181461016457600080fd5b80630d9019e1146100755780633ccfd60b146100d357806354fd4d50146100ea57600080fd5b3661007057005b600080fd5b34801561008157600080fd5b506100a97f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b26882981565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100df57600080fd5b506100e8610197565b005b3480156100f657600080fd5b506100ff6103b8565b6040516100ca9190610612565b34801561011857600080fd5b5061012260005481565b6040519081526020016100ca565b34801561013c57600080fd5b506101227f0000000000000000000000000000000000000000000000008ac7230489e8000081565b34801561017057600080fd5b507f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b2688296100a9565b7f0000000000000000000000000000000000000000000000008ac7230489e80000471015610271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a40160405180910390fd5b600047905080600080828254610287919061065b565b9091555050604080518281527f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b26882973ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd918491610383917f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b268829916188b891600401610673565b6000604051808303818588803b15801561039c57600080fd5b505af11580156103b0573d6000803e3d6000fd5b505050505050565b60606103e37f000000000000000000000000000000000000000000000000000000000000000161045b565b61040c7f000000000000000000000000000000000000000000000000000000000000000161045b565b6104357f000000000000000000000000000000000000000000000000000000000000000061045b565b604051602001610447939291906106b7565b604051602081830303815290604052905090565b60608160000361049e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156104c857806104b28161072d565b91506104c19050600a83610794565b91506104a2565b60008167ffffffffffffffff8111156104e3576104e36107a8565b6040519080825280601f01601f19166020018201604052801561050d576020820181803683370190505b5090505b8415610590576105226001836107d7565b915061052f600a866107ee565b61053a90603061065b565b60f81b81838151811061054f5761054f610802565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610589600a86610794565b9450610511565b949350505050565b60005b838110156105b357818101518382015260200161059b565b838111156105c2576000848401525b50505050565b600081518084526105e0816020860160208601610598565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061062560208301846105c8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561066e5761066e61062c565b500190565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006106ae60608301846105c8565b95945050505050565b600084516106c9818460208901610598565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610705816001850160208a01610598565b60019201918201528351610720816002840160208801610598565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361075e5761075e61062c565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826107a3576107a3610765565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156107e9576107e961062c565b500390565b6000826107fd576107fd610765565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", "balance": "0x0" }, "c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30012": { @@ -15207,7 +15207,7 @@ "balance": "0x0" }, "c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30014": { - "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80637f46ddb21161005b5780637f46ddb214610116578063927ede2d1461013d578063aa55745214610164578063c89701a21461017757600080fd5b80633687011a1461008d5780633cb747bf146100a257806354fd4d50146100ee578063761f449314610103575b600080fd5b6100a061009b3660046111c8565b61019d565b005b7f00000000000000000000000042000000000000000000000000000000000000075b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100f6610249565b6040516100e591906112c5565b6100a06101113660046112d8565b6102ec565b6100c47f0000000000000000000000002f159629a3cbc10d12f2196bae9d7e1ef38850fa81565b6100c47f000000000000000000000000420000000000000000000000000000000000000781565b6100a0610172366004611370565b610853565b7f0000000000000000000000002f159629a3cbc10d12f2196bae9d7e1ef38850fa6100c4565b333b15610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b610241868633338888888861090f565b505050505050565b60606102747f0000000000000000000000000000000000000000000000000000000000000001610ead565b61029d7f0000000000000000000000000000000000000000000000000000000000000001610ead565b6102c67f0000000000000000000000000000000000000000000000000000000000000000610ead565b6040516020016102d8939291906113e7565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000071614801561040a57507f0000000000000000000000002f159629a3cbc10d12f2196bae9d7e1ef38850fa73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061145d565b73ffffffffffffffffffffffffffffffffffffffff16145b610496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f7468657220627269646765006064820152608401610228565b3073ffffffffffffffffffffffffffffffffffffffff88160361053b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c66000000000000000000000000000000000000000000006064820152608401610228565b610565877f74259ebf00000000000000000000000000000000000000000000000000000000610fea565b6105f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e74000000000000000000006064820152608401610228565b8673ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610660919061145d565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433732312060648201527f6c6f63616c20746f6b656e000000000000000000000000000000000000000000608482015260a401610228565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac8787878760405161084294939291906114c3565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff85166108f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f742062652061646472657373283029000000000000000000000000000000006064820152608401610228565b610906878733888888888861090f565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff87166109b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f7420626520616464726573732830290000000000000000000000000000006064820152608401610228565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a41919061145d565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e657200006064820152608401610228565b60008873ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c919061145d565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c75650000000000000000006064820152608401610228565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610cd89796959493929190611503565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000071690633dbb202b90610ded907f0000000000000000000000002f159629a3cbc10d12f2196bae9d7e1ef38850fa9085908a90600401611560565b600060405180830381600087803b158015610e0757600080fd5b505af1158015610e1b573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610e9994939291906114c3565b60405180910390a450505050505050505050565b606081600003610ef057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610f1a5780610f04816115d4565b9150610f139050600a8361163b565b9150610ef4565b60008167ffffffffffffffff811115610f3557610f3561164f565b6040519080825280601f01601f191660200182016040528015610f5f576020820181803683370190505b5090505b8415610fe257610f7460018361167e565b9150610f81600a86611695565b610f8c9060306116a9565b60f81b818381518110610fa157610fa16116c1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610fdb600a8661163b565b9450610f63565b949350505050565b6000610ff58361100d565b801561100657506110068383611072565b9392505050565b6000611039827f01ffc9a700000000000000000000000000000000000000000000000000000000611072565b801561106c575061106a827fffffffff00000000000000000000000000000000000000000000000000000000611072565b155b92915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561112a575060208210155b80156111365750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461116357600080fd5b50565b803563ffffffff8116811461117a57600080fd5b919050565b60008083601f84011261119157600080fd5b50813567ffffffffffffffff8111156111a957600080fd5b6020830191508360208285010111156111c157600080fd5b9250929050565b60008060008060008060a087890312156111e157600080fd5b86356111ec81611141565b955060208701356111fc81611141565b94506040870135935061121160608801611166565b9250608087013567ffffffffffffffff81111561122d57600080fd5b61123989828a0161117f565b979a9699509497509295939492505050565b60005b8381101561126657818101518382015260200161124e565b83811115611275576000848401525b50505050565b6000815180845261129381602086016020860161124b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611006602083018461127b565b600080600080600080600060c0888a0312156112f357600080fd5b87356112fe81611141565b9650602088013561130e81611141565b9550604088013561131e81611141565b9450606088013561132e81611141565b93506080880135925060a088013567ffffffffffffffff81111561135157600080fd5b61135d8a828b0161117f565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561138b57600080fd5b873561139681611141565b965060208801356113a681611141565b955060408801356113b681611141565b9450606088013593506113cb60808901611166565b925060a088013567ffffffffffffffff81111561135157600080fd5b600084516113f981846020890161124b565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611435816001850160208a0161124b565b6001920191820152835161145081600284016020880161124b565b0160020195945050505050565b60006020828403121561146f57600080fd5b815161100681611141565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006114f960608301848661147a565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261155360c08301848661147a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061158f606083018561127b565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611605576116056115a5565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261164a5761164a61160c565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015611690576116906115a5565b500390565b6000826116a4576116a461160c565b500690565b600082198211156116bc576116bc6115a5565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", + "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80637f46ddb21161005b5780637f46ddb214610116578063927ede2d1461013d578063aa55745214610164578063c89701a21461017757600080fd5b80633687011a1461008d5780633cb747bf146100a257806354fd4d50146100ee578063761f449314610103575b600080fd5b6100a061009b3660046111c8565b61019d565b005b7f00000000000000000000000042000000000000000000000000000000000000075b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100f6610249565b6040516100e591906112c5565b6100a06101113660046112d8565b6102ec565b6100c47f000000000000000000000000bdaebb453f06c5dd1f9fab5dcb29153032c6e83d81565b6100c47f000000000000000000000000420000000000000000000000000000000000000781565b6100a0610172366004611370565b610853565b7f000000000000000000000000bdaebb453f06c5dd1f9fab5dcb29153032c6e83d6100c4565b333b15610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b610241868633338888888861090f565b505050505050565b60606102747f0000000000000000000000000000000000000000000000000000000000000001610ead565b61029d7f0000000000000000000000000000000000000000000000000000000000000001610ead565b6102c67f0000000000000000000000000000000000000000000000000000000000000000610ead565b6040516020016102d8939291906113e7565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000071614801561040a57507f000000000000000000000000bdaebb453f06c5dd1f9fab5dcb29153032c6e83d73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000420000000000000000000000000000000000000773ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061145d565b73ffffffffffffffffffffffffffffffffffffffff16145b610496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f7468657220627269646765006064820152608401610228565b3073ffffffffffffffffffffffffffffffffffffffff88160361053b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c66000000000000000000000000000000000000000000006064820152608401610228565b610565877f74259ebf00000000000000000000000000000000000000000000000000000000610fea565b6105f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e74000000000000000000006064820152608401610228565b8673ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610660919061145d565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433732312060648201527f6c6f63616c20746f6b656e000000000000000000000000000000000000000000608482015260a401610228565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac8787878760405161084294939291906114c3565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff85166108f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f742062652061646472657373283029000000000000000000000000000000006064820152608401610228565b610906878733888888888861090f565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff87166109b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f7420626520616464726573732830290000000000000000000000000000006064820152608401610228565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa158015610a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a41919061145d565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e657200006064820152608401610228565b60008873ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c919061145d565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c75650000000000000000006064820152608401610228565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610cd89796959493929190611503565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000071690633dbb202b90610ded907f000000000000000000000000bdaebb453f06c5dd1f9fab5dcb29153032c6e83d9085908a90600401611560565b600060405180830381600087803b158015610e0757600080fd5b505af1158015610e1b573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610e9994939291906114c3565b60405180910390a450505050505050505050565b606081600003610ef057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610f1a5780610f04816115d4565b9150610f139050600a8361163b565b9150610ef4565b60008167ffffffffffffffff811115610f3557610f3561164f565b6040519080825280601f01601f191660200182016040528015610f5f576020820181803683370190505b5090505b8415610fe257610f7460018361167e565b9150610f81600a86611695565b610f8c9060306116a9565b60f81b818381518110610fa157610fa16116c1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610fdb600a8661163b565b9450610f63565b949350505050565b6000610ff58361100d565b801561100657506110068383611072565b9392505050565b6000611039827f01ffc9a700000000000000000000000000000000000000000000000000000000611072565b801561106c575061106a827fffffffff00000000000000000000000000000000000000000000000000000000611072565b155b92915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561112a575060208210155b80156111365750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461116357600080fd5b50565b803563ffffffff8116811461117a57600080fd5b919050565b60008083601f84011261119157600080fd5b50813567ffffffffffffffff8111156111a957600080fd5b6020830191508360208285010111156111c157600080fd5b9250929050565b60008060008060008060a087890312156111e157600080fd5b86356111ec81611141565b955060208701356111fc81611141565b94506040870135935061121160608801611166565b9250608087013567ffffffffffffffff81111561122d57600080fd5b61123989828a0161117f565b979a9699509497509295939492505050565b60005b8381101561126657818101518382015260200161124e565b83811115611275576000848401525b50505050565b6000815180845261129381602086016020860161124b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611006602083018461127b565b600080600080600080600060c0888a0312156112f357600080fd5b87356112fe81611141565b9650602088013561130e81611141565b9550604088013561131e81611141565b9450606088013561132e81611141565b93506080880135925060a088013567ffffffffffffffff81111561135157600080fd5b61135d8a828b0161117f565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561138b57600080fd5b873561139681611141565b965060208801356113a681611141565b955060408801356113b681611141565b9450606088013593506113cb60808901611166565b925060a088013567ffffffffffffffff81111561135157600080fd5b600084516113f981846020890161124b565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611435816001850160208a0161124b565b6001920191820152835161145081600284016020880161124b565b0160020195945050505050565b60006020828403121561146f57600080fd5b815161100681611141565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006114f960608301848661147a565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261155360c08301848661147a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061158f606083018561127b565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611605576116056115a5565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261164a5761164a61160c565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015611690576116906115a5565b500390565b6000826116a4576116a461160c565b500690565b600082198211156116bc576116bc6115a5565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", "balance": "0x0" }, "c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30015": { @@ -15227,11 +15227,11 @@ "balance": "0x0" }, "c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30019": { - "code": "0x60806040526004361061005e5760003560e01c806354fd4d501161004357806354fd4d50146100df57806384411d6514610101578063d3e5792b1461012557600080fd5b80630d9019e11461006a5780633ccfd60b146100c857600080fd5b3661006557005b600080fd5b34801561007657600080fd5b5061009e7f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f10081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100d457600080fd5b506100dd610159565b005b3480156100eb57600080fd5b506100f461037a565b6040516100bf91906105d4565b34801561010d57600080fd5b5061011760005481565b6040519081526020016100bf565b34801561013157600080fd5b506101177f0000000000000000000000000000000000000000000000008ac7230489e8000081565b7f0000000000000000000000000000000000000000000000008ac7230489e80000471015610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a40160405180910390fd5b600047905080600080828254610249919061061d565b9091555050604080518281527f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f10073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd918491610345917f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f100916188b891600401610635565b6000604051808303818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b505050505050565b60606103a57f000000000000000000000000000000000000000000000000000000000000000161041d565b6103ce7f000000000000000000000000000000000000000000000000000000000000000161041d565b6103f77f000000000000000000000000000000000000000000000000000000000000000061041d565b60405160200161040993929190610679565b604051602081830303815290604052905090565b60608160000361046057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561048a5780610474816106ef565b91506104839050600a83610756565b9150610464565b60008167ffffffffffffffff8111156104a5576104a561076a565b6040519080825280601f01601f1916602001820160405280156104cf576020820181803683370190505b5090505b8415610552576104e4600183610799565b91506104f1600a866107b0565b6104fc90603061061d565b60f81b818381518110610511576105116107c4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061054b600a86610756565b94506104d3565b949350505050565b60005b8381101561057557818101518382015260200161055d565b83811115610584576000848401525b50505050565b600081518084526105a281602086016020860161055a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105e7602083018461058a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610630576106306105ee565b500190565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201526000610670606083018461058a565b95945050505050565b6000845161068b81846020890161055a565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516106c7816001850160208a0161055a565b600192019182015283516106e281600284016020880161055a565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610720576107206105ee565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261076557610765610727565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156107ab576107ab6105ee565b500390565b6000826107bf576107bf610727565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", + "code": "0x60806040526004361061005e5760003560e01c806354fd4d501161004357806354fd4d50146100df57806384411d6514610101578063d3e5792b1461012557600080fd5b80630d9019e11461006a5780633ccfd60b146100c857600080fd5b3661006557005b600080fd5b34801561007657600080fd5b5061009e7f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b26882981565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100d457600080fd5b506100dd610159565b005b3480156100eb57600080fd5b506100f461037a565b6040516100bf91906105d4565b34801561010d57600080fd5b5061011760005481565b6040519081526020016100bf565b34801561013157600080fd5b506101177f0000000000000000000000000000000000000000000000008ac7230489e8000081565b7f0000000000000000000000000000000000000000000000008ac7230489e80000471015610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a40160405180910390fd5b600047905080600080828254610249919061061d565b9091555050604080518281527f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b26882973ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd918491610345917f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b268829916188b891600401610635565b6000604051808303818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b505050505050565b60606103a57f000000000000000000000000000000000000000000000000000000000000000161041d565b6103ce7f000000000000000000000000000000000000000000000000000000000000000161041d565b6103f77f000000000000000000000000000000000000000000000000000000000000000061041d565b60405160200161040993929190610679565b604051602081830303815290604052905090565b60608160000361046057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561048a5780610474816106ef565b91506104839050600a83610756565b9150610464565b60008167ffffffffffffffff8111156104a5576104a561076a565b6040519080825280601f01601f1916602001820160405280156104cf576020820181803683370190505b5090505b8415610552576104e4600183610799565b91506104f1600a866107b0565b6104fc90603061061d565b60f81b818381518110610511576105116107c4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061054b600a86610756565b94506104d3565b949350505050565b60005b8381101561057557818101518382015260200161055d565b83811115610584576000848401525b50505050565b600081518084526105a281602086016020860161055a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105e7602083018461058a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610630576106306105ee565b500190565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201526000610670606083018461058a565b95945050505050565b6000845161068b81846020890161055a565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516106c7816001850160208a0161055a565b600192019182015283516106e281600284016020880161055a565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610720576107206105ee565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261076557610765610727565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156107ab576107ab6105ee565b500390565b6000826107bf576107bf610727565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", "balance": "0x0" }, "c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3001a": { - "code": "0x60806040526004361061005e5760003560e01c806354fd4d501161004357806354fd4d50146100df57806384411d6514610101578063d3e5792b1461012557600080fd5b80630d9019e11461006a5780633ccfd60b146100c857600080fd5b3661006557005b600080fd5b34801561007657600080fd5b5061009e7f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f10081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100d457600080fd5b506100dd610159565b005b3480156100eb57600080fd5b506100f461037a565b6040516100bf91906105d4565b34801561010d57600080fd5b5061011760005481565b6040519081526020016100bf565b34801561013157600080fd5b506101177f0000000000000000000000000000000000000000000000008ac7230489e8000081565b7f0000000000000000000000000000000000000000000000008ac7230489e80000471015610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a40160405180910390fd5b600047905080600080828254610249919061061d565b9091555050604080518281527f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f10073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd918491610345917f000000000000000000000000ae6c8365a5cf851d099392af192f6fb208a0f100916188b891600401610635565b6000604051808303818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b505050505050565b60606103a57f000000000000000000000000000000000000000000000000000000000000000161041d565b6103ce7f000000000000000000000000000000000000000000000000000000000000000161041d565b6103f77f000000000000000000000000000000000000000000000000000000000000000061041d565b60405160200161040993929190610679565b604051602081830303815290604052905090565b60608160000361046057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561048a5780610474816106ef565b91506104839050600a83610756565b9150610464565b60008167ffffffffffffffff8111156104a5576104a561076a565b6040519080825280601f01601f1916602001820160405280156104cf576020820181803683370190505b5090505b8415610552576104e4600183610799565b91506104f1600a866107b0565b6104fc90603061061d565b60f81b818381518110610511576105116107c4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061054b600a86610756565b94506104d3565b949350505050565b60005b8381101561057557818101518382015260200161055d565b83811115610584576000848401525b50505050565b600081518084526105a281602086016020860161055a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105e7602083018461058a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610630576106306105ee565b500190565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201526000610670606083018461058a565b95945050505050565b6000845161068b81846020890161055a565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516106c7816001850160208a0161055a565b600192019182015283516106e281600284016020880161055a565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610720576107206105ee565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261076557610765610727565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156107ab576107ab6105ee565b500390565b6000826107bf576107bf610727565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", + "code": "0x60806040526004361061005e5760003560e01c806354fd4d501161004357806354fd4d50146100df57806384411d6514610101578063d3e5792b1461012557600080fd5b80630d9019e11461006a5780633ccfd60b146100c857600080fd5b3661006557005b600080fd5b34801561007657600080fd5b5061009e7f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b26882981565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100d457600080fd5b506100dd610159565b005b3480156100eb57600080fd5b506100f461037a565b6040516100bf91906105d4565b34801561010d57600080fd5b5061011760005481565b6040519081526020016100bf565b34801561013157600080fd5b506101177f0000000000000000000000000000000000000000000000008ac7230489e8000081565b7f0000000000000000000000000000000000000000000000008ac7230489e80000471015610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a40160405180910390fd5b600047905080600080828254610249919061061d565b9091555050604080518281527f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b26882973ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd918491610345917f0000000000000000000000009b994b75f0b70d4e6b27fa358c12fdfc7b268829916188b891600401610635565b6000604051808303818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b505050505050565b60606103a57f000000000000000000000000000000000000000000000000000000000000000161041d565b6103ce7f000000000000000000000000000000000000000000000000000000000000000161041d565b6103f77f000000000000000000000000000000000000000000000000000000000000000061041d565b60405160200161040993929190610679565b604051602081830303815290604052905090565b60608160000361046057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561048a5780610474816106ef565b91506104839050600a83610756565b9150610464565b60008167ffffffffffffffff8111156104a5576104a561076a565b6040519080825280601f01601f1916602001820160405280156104cf576020820181803683370190505b5090505b8415610552576104e4600183610799565b91506104f1600a866107b0565b6104fc90603061061d565b60f81b818381518110610511576105116107c4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061054b600a86610756565b94506104d3565b949350505050565b60005b8381101561057557818101518382015260200161055d565b83811115610584576000848401525b50505050565b600081518084526105a281602086016020860161055a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105e7602083018461058a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610630576106306105ee565b500190565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201526000610670606083018461058a565b95945050505050565b6000845161068b81846020890161055a565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516106c7816001850160208a0161055a565b600192019182015283516106e281600284016020880161055a565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610720576107206105ee565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261076557610765610727565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156107ab576107ab6105ee565b500390565b6000826107bf576107bf610727565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", "balance": "0x0" }, "deaddeaddeaddeaddeaddeaddeaddeaddead0000": { diff --git a/core/bench_test.go b/core/bench_test.go index b4fbbf22df..314769be79 100644 --- a/core/bench_test.go +++ b/core/bench_test.go @@ -84,7 +84,7 @@ func genValueTx(nbytes int) func(int, *BlockGen) { toaddr := common.Address{} data := make([]byte, nbytes) gas, _ := IntrinsicGas(data, nil, false, false, false, false) - signer := types.MakeSigner(gen.config, big.NewInt(int64(i)), gen.header.Time) + signer := gen.Signer() gasPrice := big.NewInt(0) if gen.header.BaseFee != nil { gasPrice = gen.header.BaseFee @@ -128,7 +128,7 @@ func genTxRing(naccounts int) func(int, *BlockGen) { if gen.header.BaseFee != nil { gasPrice = gen.header.BaseFee } - signer := types.MakeSigner(gen.config, big.NewInt(int64(i)), gen.header.Time) + signer := gen.Signer() for { gas -= params.TxGas if gas < params.TxGas { diff --git a/core/block_validator.go b/core/block_validator.go index 8bc4d8fa3c..061e69b8d2 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -19,6 +19,8 @@ package core import ( "errors" "fmt" + + "github.com/ethereum/go-ethereum/common/gopool" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" @@ -64,57 +66,97 @@ func (v *BlockValidator) ValidateBody(block *types.Block) error { if hash := types.CalcUncleHash(block.Uncles()); hash != header.UncleHash { return fmt.Errorf("uncle root hash mismatch (header value %x, calculated %x)", header.UncleHash, hash) } - if hash := types.DeriveSha(block.Transactions(), trie.NewStackTrie(nil)); hash != header.TxHash { - return fmt.Errorf("transaction root hash mismatch (header value %x, calculated %x)", header.TxHash, hash) - } - - // Withdrawals are present after the Shanghai fork. - if header.WithdrawalsHash != nil { - // Withdrawals list must be present in body after Shanghai. - if block.Withdrawals() == nil { - return errors.New("missing withdrawals in block body") - } - if hash := types.DeriveSha(block.Withdrawals(), trie.NewStackTrie(nil)); hash != *header.WithdrawalsHash { - return fmt.Errorf("withdrawals root hash mismatch (header value %x, calculated %x)", *header.WithdrawalsHash, hash) - } - } else if block.Withdrawals() != nil { - // Withdrawals are not allowed prior to Shanghai fork - return errors.New("withdrawals present in block body") - } - // Blob transactions may be present after the Cancun fork. - var blobs int - for i, tx := range block.Transactions() { - // Count the number of blobs to validate against the header's blobGasUsed - blobs += len(tx.BlobHashes()) + validateFuns := []func() error{ + func() error { + if hash := types.DeriveSha(block.Transactions(), trie.NewStackTrie(nil)); hash != header.TxHash { + return fmt.Errorf("transaction root hash mismatch (header value %x, calculated %x)", header.TxHash, hash) + } + return nil + }, + func() error { + // Withdrawals are present after the Shanghai fork. + if header.WithdrawalsHash != nil { + // Withdrawals list must be present in body after Shanghai. + if block.Withdrawals() == nil { + return errors.New("missing withdrawals in block body") + } + if hash := types.DeriveSha(block.Withdrawals(), trie.NewStackTrie(nil)); hash != *header.WithdrawalsHash { + return fmt.Errorf("withdrawals root hash mismatch (header value %x, calculated %x)", *header.WithdrawalsHash, hash) + } + } else if block.Withdrawals() != nil { + // Withdrawals are not allowed prior to Shanghai fork + return errors.New("withdrawals present in block body") + } + return nil + }, + func() error { + // Blob transactions may be present after the Cancun fork. + var blobs int + for i, tx := range block.Transactions() { + // Count the number of blobs to validate against the header's blobGasUsed + blobs += len(tx.BlobHashes()) - // If the tx is a blob tx, it must NOT have a sidecar attached to be valid in a block. - if tx.BlobTxSidecar() != nil { - return fmt.Errorf("unexpected blob sidecar in transaction at index %d", i) - } + // If the tx is a blob tx, it must NOT have a sidecar attached to be valid in a block. + if tx.BlobTxSidecar() != nil { + return fmt.Errorf("unexpected blob sidecar in transaction at index %d", i) + } - // The individual checks for blob validity (version-check + not empty) - // happens in StateTransition. - } + // The individual checks for blob validity (version-check + not empty) + // happens in StateTransition. + } - // Check blob gas usage. - if header.BlobGasUsed != nil { - if want := *header.BlobGasUsed / params.BlobTxBlobGasPerBlob; uint64(blobs) != want { // div because the header is surely good vs the body might be bloated - return fmt.Errorf("blob gas used mismatch (header %v, calculated %v)", *header.BlobGasUsed, blobs*params.BlobTxBlobGasPerBlob) - } - } else { - if blobs > 0 { - return errors.New("data blobs present in block body") + // Check blob gas usage. + if header.BlobGasUsed != nil { + if want := *header.BlobGasUsed / params.BlobTxBlobGasPerBlob; uint64(blobs) != want { // div because the header is surely good vs the body might be bloated + return fmt.Errorf("blob gas used mismatch (header %v, calculated %v)", *header.BlobGasUsed, blobs*params.BlobTxBlobGasPerBlob) + } + } else { + if blobs > 0 { + return errors.New("data blobs present in block body") + } + } + return nil + }, + func() error { + // Ancestor block must be known. + if !v.bc.HasBlockAndState(block.ParentHash(), block.NumberU64()-1) { + if !v.bc.HasBlock(block.ParentHash(), block.NumberU64()-1) { + return consensus.ErrUnknownAncestor + } + return consensus.ErrPrunedAncestor + } + return nil + }, + } + validateRes := make(chan error, len(validateFuns)) + for _, f := range validateFuns { + tmpFunc := f + gopool.Submit(func() { + validateRes <- tmpFunc() + }) + } + errs := make([]error, 0, len(validateFuns)) + for i := 0; i < len(validateFuns); i++ { + err := <-validateRes + errs = append(errs, err) + } + var ancestorErr error + for _, err := range errs { + if err != nil { + if !errors.Is(err, consensus.ErrUnknownAncestor) && !errors.Is(err, consensus.ErrPrunedAncestor) { + // Other errors are returned first. + return err + } else { + ancestorErr = err + } } } - - // Ancestor block must be known. - if !v.bc.HasBlockAndState(block.ParentHash(), block.NumberU64()-1) { - if !v.bc.HasBlock(block.ParentHash(), block.NumberU64()-1) { - return consensus.ErrUnknownAncestor - } - return consensus.ErrPrunedAncestor + // If there are no other errors, but an ancestorErr, return it. + if ancestorErr != nil { + return ancestorErr } + return nil } @@ -125,24 +167,51 @@ func (v *BlockValidator) ValidateState(block *types.Block, statedb *state.StateD if block.GasUsed() != usedGas { return fmt.Errorf("invalid gas used (remote: %d local: %d)", block.GasUsed(), usedGas) } - // Validate the received block's bloom with the one derived from the generated receipts. - // For valid blocks this should always validate to true. - rbloom := types.CreateBloom(receipts) - if rbloom != header.Bloom { - return fmt.Errorf("invalid bloom (remote: %x local: %x)", header.Bloom, rbloom) + validateFuns := []func() error{ + func() error { + // Validate the received block's bloom with the one derived from the generated receipts. + // For valid blocks this should always validate to true. + rbloom := types.CreateBloom(receipts) + if rbloom != header.Bloom { + return fmt.Errorf("invalid bloom (remote: %x local: %x)", header.Bloom, rbloom) + } + return nil + }, + func() error { + // Tre receipt Trie's root (R = (Tr [[H1, R1], ... [Hn, Rn]])) + receiptSha := types.DeriveSha(receipts, trie.NewStackTrie(nil)) + if receiptSha != header.ReceiptHash { + return fmt.Errorf("invalid receipt root hash (remote: %x local: %x)", header.ReceiptHash, receiptSha) + } + return nil + }, + func() error { + // Validate the state root against the received state root and throw + // an error if they don't match. + // @TODO shall we disable it? + //if root := statedb.IntermediateRoot(v.config.IsEIP158(header.Number)); header.Root != root { + // return fmt.Errorf("invalid merkle root (remote: %x local: %x) dberr: %w", header.Root, root, statedb.Error()) + //} + return nil + }, + } + validateRes := make(chan error, len(validateFuns)) + for _, f := range validateFuns { + tmpFunc := f + gopool.Submit(func() { + validateRes <- tmpFunc() + }) } - // Tre receipt Trie's root (R = (Tr [[H1, R1], ... [Hn, Rn]])) - receiptSha := types.DeriveSha(receipts, trie.NewStackTrie(nil)) - if receiptSha != header.ReceiptHash { - return fmt.Errorf("invalid receipt root hash (remote: %x local: %x)", header.ReceiptHash, receiptSha) - } - // Validate the state root against the received state root and throw - // an error if they don't match. - if root := statedb.IntermediateRoot(v.config.IsEIP158(header.Number)); header.Root != root { - return fmt.Errorf("invalid merkle root (remote: %x local: %x) dberr: %w", header.Root, root, statedb.Error()) + + var err error + for i := 0; i < len(validateFuns); i++ { + r := <-validateRes + if r != nil && err == nil { + err = r + } } - return nil + return err } // CalcGasLimit computes the gas limit of the next block after parent. It aims diff --git a/core/blockchain.go b/core/blockchain.go index e60a8f7d25..a7591058ef 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -28,6 +28,8 @@ import ( "sync/atomic" "time" + "golang.org/x/exp/slices" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/common/mclock" @@ -50,7 +52,6 @@ import ( "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie/triedb/hashdb" "github.com/ethereum/go-ethereum/trie/triedb/pathdb" - "golang.org/x/exp/slices" ) var ( @@ -75,6 +76,9 @@ var ( snapshotAccountReadTimer = metrics.NewRegisteredTimer("chain/snapshot/account/reads", nil) snapshotStorageReadTimer = metrics.NewRegisteredTimer("chain/snapshot/storage/reads", nil) snapshotCommitTimer = metrics.NewRegisteredTimer("chain/snapshot/commits", nil) + trieCommitTimer = metrics.NewRegisteredTimer("chain/trie/commits", nil) + codeCommitTimer = metrics.NewRegisteredTimer("chain/code/commits", nil) + blockCommitTimer = metrics.NewRegisteredTimer("chain/block/commits", nil) triedbCommitTimer = metrics.NewRegisteredTimer("chain/triedb/commits", nil) @@ -83,6 +87,14 @@ var ( blockExecutionTimer = metrics.NewRegisteredTimer("chain/execution", nil) blockWriteTimer = metrics.NewRegisteredTimer("chain/write", nil) + blockWriteExternalTimer = metrics.NewRegisteredTimer("chain/block/write/external", nil) + stateCommitExternalTimer = metrics.NewRegisteredTimer("chain/state/commit/external", nil) + triedbCommitExternalTimer = metrics.NewRegisteredTimer("chain/triedb/commit/external", nil) + innerExecutionTimer = metrics.NewRegisteredTimer("chain/inner/execution", nil) + + blockGasUsedGauge = metrics.NewRegisteredGauge("chain/block/gas/used", nil) + mgaspsGauge = metrics.NewRegisteredGauge("chain/mgas/ps", nil) + blockReorgMeter = metrics.NewRegisteredMeter("chain/reorg/executes", nil) blockReorgAddMeter = metrics.NewRegisteredMeter("chain/reorg/add", nil) blockReorgDropMeter = metrics.NewRegisteredMeter("chain/reorg/drop", nil) @@ -139,26 +151,34 @@ const ( // CacheConfig contains the configuration values for the trie database // and state snapshot these are resident in a blockchain. type CacheConfig struct { - TrieCleanLimit int // Memory allowance (MB) to use for caching trie nodes in memory - TrieCleanNoPrefetch bool // Whether to disable heuristic state prefetching for followup blocks - TrieDirtyLimit int // Memory limit (MB) at which to start flushing dirty trie nodes to disk - TrieDirtyDisabled bool // Whether to disable trie write caching and GC altogether (archive node) - TrieTimeLimit time.Duration // Time limit after which to flush the current in-memory trie to disk - SnapshotLimit int // Memory allowance (MB) to use for caching snapshot entries in memory - Preimages bool // Whether to store preimage of trie key to the disk - StateHistory uint64 // Number of blocks from head whose state histories are reserved. - StateScheme string // Scheme used to store ethereum states and merkle tree nodes on top - PathSyncFlush bool // Whether sync flush the trienodebuffer of pathdb to disk. - - SnapshotNoBuild bool // Whether the background generation is allowed - SnapshotWait bool // Wait for snapshot construction on startup. TODO(karalabe): This is a dirty hack for testing, nuke it + TrieCleanLimit int // Memory allowance (MB) to use for caching trie nodes in memory + TrieCleanNoPrefetch bool // Whether to disable heuristic state prefetching for followup blocks + TrieDirtyLimit int // Memory limit (MB) at which to start flushing dirty trie nodes to disk + TrieDirtyDisabled bool // Whether to disable trie write caching and GC altogether (archive node) + TrieTimeLimit time.Duration // Time limit after which to flush the current in-memory trie to disk + SnapshotLimit int // Memory allowance (MB) to use for caching snapshot entries in memory + Preimages bool // Whether to store preimage of trie key to the disk + NoTries bool // Insecure settings. Do not have any tries in databases if enabled. + StateHistory uint64 // Number of blocks from head whose state histories are reserved. + StateScheme string // Scheme used to store ethereum states and merkle tree nodes on top + PathNodeBuffer pathdb.NodeBufferType // Type of trienodebuffer to cache trie nodes in disklayer + ProposeBlockInterval uint64 // Propose block to L1 block interval. + EnableProofKeeper bool // Whether to enable proof keeper + KeepProofBlockSpan uint64 // Block span of keep proof + SnapshotNoBuild bool // Whether the background generation is allowed + SnapshotWait bool // Wait for snapshot construction on startup. TODO(karalabe): This is a dirty hack for testing, nuke it + JournalFilePath string + JournalFile bool TrieCommitInterval uint64 // Define a block height interval, commit trie every TrieCommitInterval block height. } // triedbConfig derives the configures for trie database. -func (c *CacheConfig) triedbConfig() *trie.Config { - config := &trie.Config{Preimages: c.Preimages} +func (c *CacheConfig) triedbConfig(keepFunc pathdb.NotifyKeepFunc) *trie.Config { + config := &trie.Config{ + Preimages: c.Preimages, + NoTries: c.NoTries, + } if c.StateScheme == rawdb.HashScheme { config.HashDB = &hashdb.Config{ CleanCacheSize: c.TrieCleanLimit * 1024 * 1024, @@ -166,10 +186,14 @@ func (c *CacheConfig) triedbConfig() *trie.Config { } if c.StateScheme == rawdb.PathScheme { config.PathDB = &pathdb.Config{ - SyncFlush: c.PathSyncFlush, - StateHistory: c.StateHistory, - CleanCacheSize: c.TrieCleanLimit * 1024 * 1024, - DirtyCacheSize: c.TrieDirtyLimit * 1024 * 1024, + TrieNodeBufferType: c.PathNodeBuffer, + StateHistory: c.StateHistory, + CleanCacheSize: c.TrieCleanLimit * 1024 * 1024, + DirtyCacheSize: c.TrieDirtyLimit * 1024 * 1024, + ProposeBlockInterval: c.ProposeBlockInterval, + NotifyKeep: keepFunc, + JournalFilePath: c.JournalFilePath, + JournalFile: c.JournalFile, } } return config @@ -220,6 +244,7 @@ type BlockChain struct { flushInterval atomic.Int64 // Time interval (processing time) after which to flush a state triedb *trie.Database // The database handler for maintaining trie nodes. stateCache state.Database // State database to reuse between imports (contains state cache) + proofKeeper *ProofKeeper // Store/Query op-proposal proof to ensure consistent. // txLookupLimit is the maximum number of blocks from head whose tx indices // are reserved: @@ -281,8 +306,16 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis if cacheConfig == nil { cacheConfig = defaultCacheConfig } + opts := &proofKeeperOptions{ + enable: cacheConfig.EnableProofKeeper, + keepProofBlockSpan: cacheConfig.KeepProofBlockSpan, + watchStartKeepCh: make(chan *pathdb.KeepRecord), + notifyFinishKeepCh: make(chan error), + } + proofKeeper := newProofKeeper(opts) // Open trie database with provided config - triedb := trie.NewDatabase(db, cacheConfig.triedbConfig()) + trieConfig := cacheConfig.triedbConfig(proofKeeper.GetNotifyKeepRecordFunc()) + triedb := trie.NewDatabase(db, trieConfig) // Setup the genesis block, commit the provided genesis specification // to database if the genesis block is not present yet, or load the @@ -329,7 +362,12 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis bc.validator = NewBlockValidator(chainConfig, bc, engine) bc.prefetcher = newStatePrefetcher(chainConfig, bc, engine) - var err error + err := proofKeeper.Start(bc, db) + if err != nil { + return nil, err + } + bc.proofKeeper = proofKeeper + bc.hc, err = NewHeaderChain(db, chainConfig, engine, bc.insertStopped) if err != nil { return nil, err @@ -360,11 +398,11 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis // Make sure the state associated with the block is available, or log out // if there is no available state, waiting for state sync. head := bc.CurrentBlock() - if !bc.HasState(head.Root) { + if !bc.NoTries() && !bc.HasState(head.Root) { if head.Number.Uint64() == 0 { // The genesis state is missing, which is only possible in the path-based // scheme. This situation occurs when the initial state sync is not finished - // yet, or the chain head is rewound below the pivot point. In both scenario, + // yet, or the chain head is rewound below the pivot point. In both scenarios, // there is no possible recovery approach except for rerunning a snap sync. // Do nothing here until the state syncer picks it up. log.Info("Genesis state is missing, wait state sync") @@ -471,6 +509,7 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis Recovery: recover, NoBuild: bc.cacheConfig.SnapshotNoBuild, AsyncBuild: !bc.cacheConfig.SnapshotWait, + NoTries: bc.stateCache.NoTries(), } bc.snaps, _ = snapshot.New(snapconfig, bc.db, bc.triedb, head.Root) } @@ -698,9 +737,8 @@ func (bc *BlockChain) setHeadBeyondRoot(head uint64, time uint64, root common.Ha log.Error("Gap in the chain, rewinding to genesis", "number", header.Number, "hash", header.Hash()) newHeadBlock = bc.genesisBlock } else { - // Block exists, keep rewinding until we find one with state, - // keeping rewinding until we exceed the optional threshold - // root hash + // Block exists. Keep rewinding until either we find one with state + // or until we exceed the optional threshold root hash beyondRoot := (root == common.Hash{}) // Flag whether we're beyond the requested root (no root, always true) for { @@ -861,7 +899,7 @@ func (bc *BlockChain) SnapSyncCommitHead(hash common.Hash) error { return err } } - if !bc.HasState(root) { + if !bc.NoTries() && !bc.HasState(root) { return fmt.Errorf("non existent state [%x..]", root[:4]) } // If all checks out, manually set the head block. @@ -1024,12 +1062,16 @@ func (bc *BlockChain) Stop() { if snapBase, err = bc.snaps.Journal(bc.CurrentBlock().Root); err != nil { log.Error("Failed to journal state snapshot", "err", err) } + bc.snaps.Release() } if bc.triedb.Scheme() == rawdb.PathScheme { // Ensure that the in-memory trie nodes are journaled to disk properly. if err := bc.triedb.Journal(bc.CurrentBlock().Root); err != nil { log.Info("Failed to journal in-memory trie nodes", "err", err) } + if err := bc.proofKeeper.Stop(); err != nil { + log.Info("Failed to stop proof keeper", "err", err) + } } else { // Ensure the state of a recent block is also stored to disk before exiting. // We're writing three different states to catch different restart scenarios: @@ -1039,10 +1081,17 @@ func (bc *BlockChain) Stop() { if !bc.cacheConfig.TrieDirtyDisabled { triedb := bc.triedb - for _, offset := range []uint64{0, 1, TriesInMemory - 1} { + blockOffsets := []uint64{0, 1, TriesInMemory - 1} + if bc.cacheConfig.TrieCommitInterval != 0 { + current := bc.CurrentBlock().Number.Uint64() + blockShouldCommitOffset := current - current/bc.cacheConfig.TrieCommitInterval*bc.cacheConfig.TrieCommitInterval + if blockShouldCommitOffset > 1 && blockShouldCommitOffset < TriesInMemory-1 { + blockOffsets = append(blockOffsets, blockShouldCommitOffset) + } + } + for _, offset := range blockOffsets { if number := bc.CurrentBlock().Number.Uint64(); number > offset { recent := bc.GetBlockByNumber(number - offset) - log.Info("Writing cached state to disk", "block", recent.Number(), "hash", recent.Hash(), "root", recent.Root()) if err := triedb.Commit(recent.Root(), true); err != nil { log.Error("Failed to commit recent state trie", "err", err) @@ -1448,25 +1497,48 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. // // Note all the components of block(td, hash->number map, header, body, receipts) // should be written atomically. BlockBatch is used for containing all components. - blockBatch := bc.db.NewBatch() - rawdb.WriteTd(blockBatch, block.Hash(), block.NumberU64(), externTd) - rawdb.WriteBlock(blockBatch, block) - rawdb.WriteReceipts(blockBatch, block.Hash(), block.NumberU64(), receipts) - rawdb.WritePreimages(blockBatch, state.Preimages()) - if err := blockBatch.Write(); err != nil { - log.Crit("Failed to write block into disk", "err", err) - } + wg := sync.WaitGroup{} + wg.Add(1) + defer wg.Wait() + go func() { + if metrics.EnabledExpensive { + defer func(start time.Time) { blockCommitTimer.Update(time.Since(start)) }(time.Now()) + } + defer wg.Done() + start := time.Now() + blockBatch := bc.db.NewBatch() + rawdb.WriteTd(blockBatch, block.Hash(), block.NumberU64(), externTd) + rawdb.WriteBlock(blockBatch, block) + rawdb.WriteReceipts(blockBatch, block.Hash(), block.NumberU64(), receipts) + rawdb.WritePreimages(blockBatch, state.Preimages()) + if err := blockBatch.Write(); err != nil { + log.Crit("Failed to write block into disk", "err", err) + } + blockWriteExternalTimer.UpdateSince(start) + log.Debug("blockWriteExternalTimer", "duration", common.PrettyDuration(time.Since(start)), "hash", block.Hash()) + }() + // Commit all cached state changes into underlying memory database. + start := time.Now() + state.SetExpectedStateRoot(block.Root()) root, err := state.Commit(block.NumberU64(), bc.chainConfig.IsEIP158(block.Number())) if err != nil { return err } + stateCommitExternalTimer.UpdateSince(start) + log.Debug("stateCommitExternalTimer", "duration", common.PrettyDuration(time.Since(start)), "hash", block.Hash()) + // If node is running in path mode, skip explicit gc operation // which is unnecessary in this mode. if bc.triedb.Scheme() == rawdb.PathScheme { return nil } // If we're running an archive node, always flush + start = time.Now() + defer func() { + triedbCommitExternalTimer.UpdateSince(start) + log.Debug("triedbCommitExternalTimer", "duration", common.PrettyDuration(time.Since(start)), "hash", block.Hash()) + }() if bc.cacheConfig.TrieDirtyDisabled { return bc.triedb.Commit(root, false) } @@ -1772,7 +1844,11 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) } }() + defer func() { + DebugInnerExecutionDuration = 0 + }() for ; block != nil && err == nil || errors.Is(err, ErrKnownBlock); block, err = it.next() { + DebugInnerExecutionDuration = 0 // If the chain is terminating, stop processing blocks if bc.insertStopped() { log.Debug("Abort during block processing") @@ -1854,7 +1930,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) // If we have a followup block, run that against the current state to pre-cache // transactions and probabilistically some of the account/storage trie nodes. - var followupInterrupt atomic.Bool // parallel mode has a pipeline, similar to this prefetch, to save CPU we disable this prefetch for parallel if !bc.cacheConfig.TrieCleanNoPrefetch && !bc.parallelExecution { if followup, err := it.peek(); followup != nil && err == nil { @@ -1871,6 +1946,8 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) } } + statedb.SetExpectedStateRoot(block.Root()) + // Process block using the parent state as reference point pstart = time.Now() receipts, logs, usedGas, err = bc.processor.Process(block, statedb, bc.vmConfig) @@ -1893,20 +1970,20 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) proctime := time.Since(start) // processing + validation // Update the metrics touched during block processing and validation - accountReadTimer.Update(statedb.AccountReads) // Account reads are complete(in processing) - storageReadTimer.Update(statedb.StorageReads) // Storage reads are complete(in processing) - snapshotAccountReadTimer.Update(statedb.SnapshotAccountReads) // Account reads are complete(in processing) - snapshotStorageReadTimer.Update(statedb.SnapshotStorageReads) // Storage reads are complete(in processing) - accountUpdateTimer.Update(statedb.AccountUpdates) // Account updates are complete(in validation) - storageUpdateTimer.Update(statedb.StorageUpdates) // Storage updates are complete(in validation) - accountHashTimer.Update(statedb.AccountHashes) // Account hashes are complete(in validation) - storageHashTimer.Update(statedb.StorageHashes) // Storage hashes are complete(in validation) - triehash := statedb.AccountHashes + statedb.StorageHashes // The time spent on tries hashing - trieUpdate := statedb.AccountUpdates + statedb.StorageUpdates // The time spent on tries update - trieRead := statedb.SnapshotAccountReads + statedb.AccountReads // The time spent on account read - trieRead += statedb.SnapshotStorageReads + statedb.StorageReads // The time spent on storage read - blockExecutionTimer.Update(ptime - trieRead) // The time spent on EVM processing - blockValidationTimer.Update(vtime - (triehash + trieUpdate)) // The time spent on block validation + accountReadTimer.Update(statedb.AccountReads) // Account reads are complete(in processing) + storageReadTimer.Update(statedb.StorageReads) // Storage reads are complete(in processing) + snapshotAccountReadTimer.Update(statedb.SnapshotAccountReads) // Account reads are complete(in processing) + snapshotStorageReadTimer.Update(statedb.SnapshotStorageReads) // Storage reads are complete(in processing) + accountUpdateTimer.Update(statedb.AccountUpdates) // Account updates are complete(in validation) + storageUpdateTimer.Update(statedb.StorageUpdates) // Storage updates are complete(in validation) + accountHashTimer.Update(statedb.AccountHashes) // Account hashes are complete(in validation) + storageHashTimer.Update(statedb.StorageHashes) // Storage hashes are complete(in validation) + blockExecutionTimer.Update(ptime) // The time spent on block execution + blockValidationTimer.Update(vtime) // The time spent on block validation + + innerExecutionTimer.Update(DebugInnerExecutionDuration) + + log.Debug("New payload execution and validation metrics", "hash", block.Hash(), "execution", common.PrettyDuration(ptime), "validation", common.PrettyDuration(vtime), "accountReads", common.PrettyDuration(statedb.AccountReads), "storageReads", common.PrettyDuration(statedb.StorageReads), "snapshotAccountReads", common.PrettyDuration(statedb.SnapshotAccountReads), "snapshotStorageReads", common.PrettyDuration(statedb.SnapshotStorageReads), "accountUpdates", common.PrettyDuration(statedb.AccountUpdates), "storageUpdates", common.PrettyDuration(statedb.StorageUpdates), "accountHashes", common.PrettyDuration(statedb.AccountHashes), "storageHashes", common.PrettyDuration(statedb.StorageHashes)) // Write the block to the chain and get the status. var ( @@ -1928,10 +2005,14 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) storageCommitTimer.Update(statedb.StorageCommits) // Storage commits are complete, we can mark them snapshotCommitTimer.Update(statedb.SnapshotCommits) // Snapshot commits are complete, we can mark them triedbCommitTimer.Update(statedb.TrieDBCommits) // Trie database commits are complete, we can mark them + trieCommitTimer.Update(statedb.TrieCommits) + codeCommitTimer.Update(statedb.CodeCommits) - blockWriteTimer.Update(time.Since(wstart) - statedb.AccountCommits - statedb.StorageCommits - statedb.SnapshotCommits - statedb.TrieDBCommits) + blockWriteTimer.UpdateSince(wstart) blockInsertTimer.UpdateSince(start) + log.Debug("New payload db write metrics", "hash", block.Hash(), "insert", common.PrettyDuration(time.Since(start)), "writeDB", common.PrettyDuration(time.Since(wstart)), "writeBlock", common.PrettyDuration(time.Since(wstart)), "accountCommit", common.PrettyDuration(statedb.AccountCommits), "storageCommit", common.PrettyDuration(statedb.StorageCommits), "snapshotCommits", common.PrettyDuration(statedb.SnapshotCommits), "triedbCommit", common.PrettyDuration(statedb.TrieDBCommits)) + // Report the import stats before returning the various results stats.processed++ stats.usedGas += usedGas @@ -1942,6 +2023,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) } trieDiffNodes, trieBufNodes, trieImmutableBufNodes, _ := bc.triedb.Size() stats.report(chain, it.index, snapDiffItems, snapBufItems, trieDiffNodes, trieBufNodes, trieImmutableBufNodes, setHead) + blockGasUsedGauge.Update(int64(block.GasUsed()) / 1000000) if !setHead { // After merge we expect few side chains. Simply count @@ -2670,3 +2752,7 @@ func (bc *BlockChain) EnableParallelProcessor(parallelNum int) (*BlockChain, err bc.processor = NewParallelStateProcessor(bc.Config(), bc, bc.engine, parallelNum) return bc, nil } + +func (bc *BlockChain) NoTries() bool { + return bc.stateCache.NoTries() +} diff --git a/core/blockchain_insert.go b/core/blockchain_insert.go index 83a4cea5dc..82a480d0be 100644 --- a/core/blockchain_insert.go +++ b/core/blockchain_insert.go @@ -60,6 +60,7 @@ func (st *insertStats) report(chain []*types.Block, index int, snapDiffItems, sn "blocks", st.processed, "txs", txs, "mgas", float64(st.usedGas) / 1000000, "elapsed", common.PrettyDuration(elapsed), "mgasps", float64(st.usedGas) * 1000 / float64(elapsed), } + mgaspsGauge.Update(int64(st.usedGas)*1000/int64(elapsed)) if timestamp := time.Unix(int64(end.Time()), 0); time.Since(timestamp) > time.Minute { context = append(context, []interface{}{"age", common.PrettyAge(timestamp)}...) } diff --git a/core/blockchain_reader.go b/core/blockchain_reader.go index 30fbcb883b..716ee2fccc 100644 --- a/core/blockchain_reader.go +++ b/core/blockchain_reader.go @@ -17,6 +17,7 @@ package core import ( + "errors" "math/big" "github.com/ethereum/go-ethereum/common" @@ -278,6 +279,9 @@ func (bc *BlockChain) GetTd(hash common.Hash, number uint64) *big.Int { // HasState checks if state trie is fully present in the database or not. func (bc *BlockChain) HasState(hash common.Hash) bool { + if bc.NoTries() { + return bc.snaps != nil && bc.snaps.Snapshot(hash) != nil + } _, err := bc.stateCache.OpenTrie(hash) return err == nil } @@ -334,7 +338,20 @@ func (bc *BlockChain) State() (*state.StateDB, error) { // StateAt returns a new mutable state based on a particular point in time. func (bc *BlockChain) StateAt(root common.Hash) (*state.StateDB, error) { - return state.New(root, bc.stateCache, bc.snaps) + stateDb, err := state.New(root, bc.stateCache, bc.snaps) + if err != nil { + return nil, err + } + + // If there's no trie and the specified snapshot is not available, getting + // any state will by default return nil. + // Instead of that, it will be more useful to return an error to indicate + // the state is not available. + if stateDb.NoTrie() && stateDb.GetSnap() == nil { + return nil, errors.New("state is not available") + } + + return stateDb, err } // Config retrieves the chain's fork configuration. @@ -425,3 +442,6 @@ func (bc *BlockChain) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscript func (bc *BlockChain) SubscribeBlockProcessingEvent(ch chan<- bool) event.Subscription { return bc.scope.Track(bc.blockProcFeed.Subscribe(ch)) } + +// ProofKeeper returns block chain proof keeper. +func (bc *BlockChain) ProofKeeper() *ProofKeeper { return bc.proofKeeper } diff --git a/core/blockchain_test.go b/core/blockchain_test.go index 1415bb6ef3..62466c26b4 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -49,7 +49,7 @@ var ( ) // newCanonical creates a chain database, and injects a deterministic canonical -// chain. Depending on the full flag, if creates either a full block chain or a +// chain. Depending on the full flag, it creates either a full block chain or a // header only chain. The database and genesis specification for block generation // are also returned in case more test blocks are needed later. func newCanonical(engine consensus.Engine, n int, full bool, scheme string) (ethdb.Database, *Genesis, *BlockChain, error) { @@ -162,6 +162,7 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error { if err != nil { return err } + statedb.SetExpectedStateRoot(block.Root()) receipts, _, usedGas, err := blockchain.processor.Process(block, statedb, vm.Config{EnableParallelExec: true, ParallelTxNum: 1}) if err != nil { blockchain.reportBlock(block, receipts, err) diff --git a/core/chain_makers.go b/core/chain_makers.go index 7f999bd28d..0c121a7631 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -38,8 +38,8 @@ import ( // See GenerateChain for a detailed explanation. type BlockGen struct { i int + cm *chainMaker parent *types.Block - chain []*types.Block header *types.Header statedb *state.StateDB @@ -49,7 +49,6 @@ type BlockGen struct { uncles []*types.Header withdrawals []*types.Withdrawal - config *params.ChainConfig engine consensus.Engine } @@ -88,6 +87,22 @@ func (b *BlockGen) SetPoS() { b.header.Difficulty = new(big.Int) } +// Difficulty returns the currently calculated difficulty of the block. +func (b *BlockGen) Difficulty() *big.Int { + return new(big.Int).Set(b.header.Difficulty) +} + +// SetParentBeaconRoot sets the parent beacon root field of the generated +// block. +func (b *BlockGen) SetParentBeaconRoot(root common.Hash) { + b.header.ParentBeaconRoot = &root + var ( + blockContext = NewEVMBlockContext(b.header, b.cm, &b.header.Coinbase, b.cm.config, b.statedb) + vmenv = vm.NewEVM(blockContext, vm.TxContext{}, b.statedb, b.cm.config, vm.Config{}) + ) + ProcessBeaconBlockRoot(root, vmenv, b.statedb) +} + // addTx adds a transaction to the generated block. If no coinbase has // been set, the block's coinbase is set to the zero address. // @@ -100,7 +115,7 @@ func (b *BlockGen) addTx(bc *BlockChain, vmConfig vm.Config, tx *types.Transacti b.SetCoinbase(common.Address{}) } b.statedb.SetTxContext(tx.Hash(), len(b.txs)) - receipt, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, vmConfig) + receipt, err := ApplyTransaction(b.cm.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, vmConfig) if err != nil { panic(err) } @@ -114,11 +129,11 @@ func (b *BlockGen) addTx(bc *BlockChain, vmConfig vm.Config, tx *types.Transacti // AddTx adds a transaction to the generated block. If no coinbase has // been set, the block's coinbase is set to the zero address. // -// AddTx panics if the transaction cannot be executed. In addition to -// the protocol-imposed limitations (gas limit, etc.), there are some -// further limitations on the content of transactions that can be -// added. Notably, contract code relying on the BLOCKHASH instruction -// will panic during execution. +// AddTx panics if the transaction cannot be executed. In addition to the protocol-imposed +// limitations (gas limit, etc.), there are some further limitations on the content of +// transactions that can be added. Notably, contract code relying on the BLOCKHASH +// instruction will panic during execution if it attempts to access a block number outside +// of the range created by GenerateChain. func (b *BlockGen) AddTx(tx *types.Transaction) { b.addTx(nil, vm.Config{}, tx) } @@ -126,11 +141,10 @@ func (b *BlockGen) AddTx(tx *types.Transaction) { // AddTxWithChain adds a transaction to the generated block. If no coinbase has // been set, the block's coinbase is set to the zero address. // -// AddTxWithChain panics if the transaction cannot be executed. In addition to -// the protocol-imposed limitations (gas limit, etc.), there are some -// further limitations on the content of transactions that can be -// added. If contract code relies on the BLOCKHASH instruction, -// the block in chain will be returned. +// AddTxWithChain panics if the transaction cannot be executed. In addition to the +// protocol-imposed limitations (gas limit, etc.), there are some further limitations on +// the content of transactions that can be added. If contract code relies on the BLOCKHASH +// instruction, the block in chain will be returned. func (b *BlockGen) AddTxWithChain(bc *BlockChain, tx *types.Transaction) { b.addTx(bc, vm.Config{}, tx) } @@ -147,8 +161,7 @@ func (b *BlockGen) GetBalance(addr common.Address) *big.Int { return b.statedb.GetBalance(addr) } -// AddUncheckedTx forcefully adds a transaction to the block without any -// validation. +// AddUncheckedTx forcefully adds a transaction to the block without any validation. // // AddUncheckedTx will cause consensus failures when used during real // chain processing. This is best used in conjunction with raw block insertion. @@ -171,6 +184,16 @@ func (b *BlockGen) BaseFee() *big.Int { return new(big.Int).Set(b.header.BaseFee) } +// Gas returns the amount of gas left in the current block. +func (b *BlockGen) Gas() uint64 { + return b.header.GasLimit - b.header.GasUsed +} + +// Signer returns a valid signer instance for the current block. +func (b *BlockGen) Signer() types.Signer { + return types.MakeSigner(b.cm.config, b.header.Number, b.header.Time) +} + // AddUncheckedReceipt forcefully adds a receipts to the block without a // backing transaction. // @@ -196,20 +219,19 @@ func (b *BlockGen) AddUncle(h *types.Header) { var parent *types.Header for i := b.i - 1; i >= 0; i-- { - if b.chain[i].Hash() == h.ParentHash { - parent = b.chain[i].Header() + if b.cm.chain[i].Hash() == h.ParentHash { + parent = b.cm.chain[i].Header() break } } - chainreader := &fakeChainReader{config: b.config} - h.Difficulty = b.engine.CalcDifficulty(chainreader, b.header.Time, parent) + h.Difficulty = b.engine.CalcDifficulty(b.cm, b.header.Time, parent) // The gas limit and price should be derived from the parent h.GasLimit = parent.GasLimit - if b.config.IsLondon(h.Number) { - h.BaseFee = eip1559.CalcBaseFee(b.config, parent, h.Time) - if !b.config.IsLondon(parent.Number) { - parentGasLimit := parent.GasLimit * b.config.ElasticityMultiplier() + if b.cm.config.IsLondon(h.Number) { + h.BaseFee = eip1559.CalcBaseFee(b.cm.config, parent, h.Time) + if !b.cm.config.IsLondon(parent.Number) { + parentGasLimit := parent.GasLimit * b.cm.config.ElasticityMultiplier() h.GasLimit = CalcGasLimit(parentGasLimit, parentGasLimit) } } @@ -231,12 +253,12 @@ func (b *BlockGen) nextWithdrawalIndex() uint64 { return b.withdrawals[len(b.withdrawals)-1].Index + 1 } for i := b.i - 1; i >= 0; i-- { - if wd := b.chain[i].Withdrawals(); len(wd) != 0 { + if wd := b.cm.chain[i].Withdrawals(); len(wd) != 0 { return wd[len(wd)-1].Index + 1 } if i == 0 { // Correctly set the index if no parent had withdrawals. - if wd := b.parent.Withdrawals(); len(wd) != 0 { + if wd := b.cm.bottom.Withdrawals(); len(wd) != 0 { return wd[len(wd)-1].Index + 1 } } @@ -252,9 +274,9 @@ func (b *BlockGen) PrevBlock(index int) *types.Block { panic(fmt.Errorf("block index %d out of range (%d,%d)", index, -1, b.i)) } if index == -1 { - return b.parent + return b.cm.bottom } - return b.chain[index] + return b.cm.chain[index] } // OffsetTime modifies the time instance of a block, implicitly changing its @@ -262,11 +284,10 @@ func (b *BlockGen) PrevBlock(index int) *types.Block { // tied to chain length directly. func (b *BlockGen) OffsetTime(seconds int64) { b.header.Time += uint64(seconds) - if b.header.Time <= b.parent.Header().Time { + if b.header.Time <= b.cm.bottom.Header().Time { panic("block time out of range") } - chainreader := &fakeChainReader{config: b.config} - b.header.Difficulty = b.engine.CalcDifficulty(chainreader, b.header.Time, b.parent.Header()) + b.header.Difficulty = b.engine.CalcDifficulty(b.cm, b.header.Time, b.parent.Header()) } // GenerateChain creates a chain of n blocks. The first block's @@ -285,16 +306,20 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse if config == nil { config = params.TestChainConfig } - blocks, receipts := make(types.Blocks, n), make([]types.Receipts, n) - chainreader := &fakeChainReader{config: config} + if engine == nil { + panic("nil consensus engine") + } + cm := newChainMaker(parent, config, engine) + genblock := func(i int, parent *types.Block, triedb *trie.Database, statedb *state.StateDB) (*types.Block, types.Receipts) { - b := &BlockGen{i: i, chain: blocks, parent: parent, statedb: statedb, config: config, engine: engine} - b.header = makeHeader(chainreader, parent, statedb, b.engine) + b := &BlockGen{i: i, cm: cm, parent: parent, statedb: statedb, engine: engine} + b.header = cm.makeHeader(parent, statedb, b.engine) + // Set the difficulty for clique block. The chain maker doesn't have access // to a chain, so the difficulty will be left unset (nil). Set it here to the // correct value. if b.header.Difficulty == nil { - if config.TerminalTotalDifficulty == nil { + if config.TerminalTotalDifficulty == nil && !config.IsOptimismBedrock(b.header.Number) { // Clique chain b.header.Difficulty = big.NewInt(2) } else { @@ -321,23 +346,23 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse if gen != nil { gen(i, b) } - if b.engine != nil { - block, err := b.engine.FinalizeAndAssemble(chainreader, b.header, statedb, b.txs, b.uncles, b.receipts, b.withdrawals) - if err != nil { - panic(err) - } - // Write state changes to db - root, err := statedb.Commit(b.header.Number.Uint64(), config.IsEIP158(b.header.Number)) - if err != nil { - panic(fmt.Sprintf("state write error: %v", err)) - } - if err = triedb.Commit(root, false); err != nil { - panic(fmt.Sprintf("trie write error: %v", err)) - } - return block, b.receipts + + block, err := b.engine.FinalizeAndAssemble(cm, b.header, statedb, b.txs, b.uncles, b.receipts, b.withdrawals) + if err != nil { + panic(err) + } + + // Write state changes to db + root, err := statedb.Commit(b.header.Number.Uint64(), config.IsEIP158(b.header.Number)) + if err != nil { + panic(fmt.Sprintf("state write error: %v", err)) + } + if err = triedb.Commit(root, false); err != nil { + panic(fmt.Sprintf("trie write error: %v", err)) } - return nil, nil + return block, b.receipts } + // Forcibly use hash-based state scheme for retaining all nodes in disk. triedb := trie.NewDatabase(db, trie.HashDefaults) defer triedb.Close() @@ -347,12 +372,36 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse if err != nil { panic(err) } - block, receipt := genblock(i, parent, triedb, statedb) - blocks[i] = block - receipts[i] = receipt + block, receipts := genblock(i, parent, triedb, statedb) + + // Post-process the receipts. + // Here we assign the final block hash and other info into the receipt. + // In order for DeriveFields to work, the transaction and receipt lists need to be + // of equal length. If AddUncheckedTx or AddUncheckedReceipt are used, there will be + // extra ones, so we just trim the lists here. + receiptsCount := len(receipts) + txs := block.Transactions() + if len(receipts) > len(txs) { + receipts = receipts[:len(txs)] + } else if len(receipts) < len(txs) { + txs = txs[:len(receipts)] + } + var blobGasPrice *big.Int + if block.ExcessBlobGas() != nil { + blobGasPrice = eip4844.CalcBlobFee(*block.ExcessBlobGas()) + } + if err := receipts.DeriveFields(config, block.Hash(), block.NumberU64(), block.Time(), block.BaseFee(), blobGasPrice, txs); err != nil { + panic(err) + } + + // Re-expand to ensure all receipts are returned. + receipts = receipts[:receiptsCount] + + // Advance the chain. + cm.add(block, receipts) parent = block } - return blocks, receipts + return cm.chain, cm.receipts } // GenerateChainWithGenesis is a wrapper of GenerateChain which will initialize @@ -370,35 +419,26 @@ func GenerateChainWithGenesis(genesis *Genesis, engine consensus.Engine, n int, return db, blocks, receipts } -func makeHeader(chain consensus.ChainReader, parent *types.Block, state *state.StateDB, engine consensus.Engine) *types.Header { - var time uint64 - if parent.Time() == 0 { - time = 10 - } else { - time = parent.Time() + 10 // block time is fixed at 10 seconds - } +func (cm *chainMaker) makeHeader(parent *types.Block, state *state.StateDB, engine consensus.Engine) *types.Header { + time := parent.Time() + 10 // block time is fixed at 10 seconds header := &types.Header{ - Root: state.IntermediateRoot(chain.Config().IsEIP158(parent.Number())), + Root: state.IntermediateRoot(cm.config.IsEIP158(parent.Number())), ParentHash: parent.Hash(), Coinbase: parent.Coinbase(), - Difficulty: engine.CalcDifficulty(chain, time, &types.Header{ - Number: parent.Number(), - Time: time - 10, - Difficulty: parent.Difficulty(), - UncleHash: parent.UncleHash(), - }), - GasLimit: parent.GasLimit(), - Number: new(big.Int).Add(parent.Number(), common.Big1), - Time: time, + Difficulty: engine.CalcDifficulty(cm, time, parent.Header()), + GasLimit: parent.GasLimit(), + Number: new(big.Int).Add(parent.Number(), common.Big1), + Time: time, } - if chain.Config().IsLondon(header.Number) { - header.BaseFee = eip1559.CalcBaseFee(chain.Config(), parent.Header(), header.Time) - if !chain.Config().IsLondon(parent.Number()) { - parentGasLimit := parent.GasLimit() * chain.Config().ElasticityMultiplier() + + if cm.config.IsLondon(header.Number) { + header.BaseFee = eip1559.CalcBaseFee(cm.config, parent.Header(), header.Time) + if !cm.config.IsLondon(parent.Number()) { + parentGasLimit := parent.GasLimit() * cm.config.ElasticityMultiplier() header.GasLimit = CalcGasLimit(parentGasLimit, parentGasLimit) } } - if chain.Config().IsCancun(header.Number, header.Time) { + if cm.config.IsCancun(header.Number, header.Time) { var ( parentExcessBlobGas uint64 parentBlobGasUsed uint64 @@ -451,18 +491,86 @@ func makeBlockChainWithGenesis(genesis *Genesis, n int, engine consensus.Engine, return db, blocks } -type fakeChainReader struct { - config *params.ChainConfig +// chainMaker contains the state of chain generation. +type chainMaker struct { + bottom *types.Block + engine consensus.Engine + config *params.ChainConfig + chain []*types.Block + chainByHash map[common.Hash]*types.Block + receipts []types.Receipts +} + +func newChainMaker(bottom *types.Block, config *params.ChainConfig, engine consensus.Engine) *chainMaker { + return &chainMaker{ + bottom: bottom, + config: config, + engine: engine, + chainByHash: make(map[common.Hash]*types.Block), + } +} + +func (cm *chainMaker) add(b *types.Block, r []*types.Receipt) { + cm.chain = append(cm.chain, b) + cm.chainByHash[b.Hash()] = b + cm.receipts = append(cm.receipts, r) +} + +func (cm *chainMaker) blockByNumber(number uint64) *types.Block { + if number == cm.bottom.NumberU64() { + return cm.bottom + } + cur := cm.CurrentHeader().Number.Uint64() + lowest := cm.bottom.NumberU64() + 1 + if number < lowest || number > cur { + return nil + } + return cm.chain[number-lowest] +} + +// ChainReader/ChainContext implementation + +// Config returns the chain configuration (for consensus.ChainReader). +func (cm *chainMaker) Config() *params.ChainConfig { + return cm.config +} + +// Engine returns the consensus engine (for ChainContext). +func (cm *chainMaker) Engine() consensus.Engine { + return cm.engine +} + +func (cm *chainMaker) CurrentHeader() *types.Header { + if len(cm.chain) == 0 { + return cm.bottom.Header() + } + return cm.chain[len(cm.chain)-1].Header() +} + +func (cm *chainMaker) GetHeaderByNumber(number uint64) *types.Header { + b := cm.blockByNumber(number) + if b == nil { + return nil + } + return b.Header() +} + +func (cm *chainMaker) GetHeaderByHash(hash common.Hash) *types.Header { + b := cm.chainByHash[hash] + if b == nil { + return nil + } + return b.Header() } -// Config returns the chain configuration. -func (cr *fakeChainReader) Config() *params.ChainConfig { - return cr.config +func (cm *chainMaker) GetHeader(hash common.Hash, number uint64) *types.Header { + return cm.GetHeaderByNumber(number) } -func (cr *fakeChainReader) CurrentHeader() *types.Header { return nil } -func (cr *fakeChainReader) GetHeaderByNumber(number uint64) *types.Header { return nil } -func (cr *fakeChainReader) GetHeaderByHash(hash common.Hash) *types.Header { return nil } -func (cr *fakeChainReader) GetHeader(hash common.Hash, number uint64) *types.Header { return nil } -func (cr *fakeChainReader) GetBlock(hash common.Hash, number uint64) *types.Block { return nil } -func (cr *fakeChainReader) GetTd(hash common.Hash, number uint64) *big.Int { return nil } +func (cm *chainMaker) GetBlock(hash common.Hash, number uint64) *types.Block { + return cm.blockByNumber(number) +} + +func (cm *chainMaker) GetTd(hash common.Hash, number uint64) *big.Int { + return nil // not supported +} diff --git a/core/chain_makers_test.go b/core/chain_makers_test.go index 6228baf3f7..9dcf19a5b4 100644 --- a/core/chain_makers_test.go +++ b/core/chain_makers_test.go @@ -19,8 +19,10 @@ package core import ( "fmt" "math/big" + "reflect" "testing" + "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/beacon" "github.com/ethereum/go-ethereum/consensus/ethash" @@ -32,7 +34,7 @@ import ( "github.com/ethereum/go-ethereum/trie" ) -func TestGenerateWithdrawalChain(t *testing.T) { +func TestGeneratePOSChain(t *testing.T) { var ( keyHex = "9c647b8b7c4e7c3490668fb6c11473619db80c93704c70893d3813af4090c39c" key, _ = crypto.HexToECDSA(keyHex) @@ -41,21 +43,25 @@ func TestGenerateWithdrawalChain(t *testing.T) { bb = common.Address{0xbb} funds = big.NewInt(0).Mul(big.NewInt(1337), big.NewInt(params.Ether)) config = *params.AllEthashProtocolChanges + asm4788 = common.Hex2Bytes("3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500") gspec = &Genesis{ - Config: &config, - Alloc: GenesisAlloc{address: {Balance: funds}}, + Config: &config, + Alloc: GenesisAlloc{ + address: {Balance: funds}, + params.BeaconRootsStorageAddress: {Balance: common.Big0, Code: asm4788}, + }, BaseFee: big.NewInt(params.InitialBaseFee), Difficulty: common.Big1, GasLimit: 5_000_000, } - gendb = rawdb.NewMemoryDatabase() - signer = types.LatestSigner(gspec.Config) - db = rawdb.NewMemoryDatabase() + gendb = rawdb.NewMemoryDatabase() + db = rawdb.NewMemoryDatabase() ) config.TerminalTotalDifficultyPassed = true config.TerminalTotalDifficulty = common.Big0 config.ShanghaiTime = u64(0) + config.CancunTime = u64(0) // init 0xaa with some storage elements storage := make(map[common.Hash]common.Hash) @@ -77,9 +83,20 @@ func TestGenerateWithdrawalChain(t *testing.T) { } genesis := gspec.MustCommit(gendb, trie.NewDatabase(gendb, trie.HashDefaults)) - chain, _ := GenerateChain(gspec.Config, genesis, beacon.NewFaker(), gendb, 4, func(i int, gen *BlockGen) { - tx, _ := types.SignTx(types.NewTransaction(gen.TxNonce(address), address, big.NewInt(1000), params.TxGas, new(big.Int).Add(gen.BaseFee(), common.Big1), nil), signer, key) + genchain, genreceipts := GenerateChain(gspec.Config, genesis, beacon.NewFaker(), gendb, 4, func(i int, gen *BlockGen) { + gen.SetParentBeaconRoot(common.Hash{byte(i + 1)}) + + // Add value transfer tx. + tx := types.MustSignNewTx(key, gen.Signer(), &types.LegacyTx{ + Nonce: gen.TxNonce(address), + To: &address, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: new(big.Int).Add(gen.BaseFee(), common.Big1), + }) gen.AddTx(tx) + + // Add withdrawals. if i == 1 { gen.AddWithdrawal(&types.Withdrawal{ Validator: 42, @@ -110,21 +127,42 @@ func TestGenerateWithdrawalChain(t *testing.T) { blockchain, _ := NewBlockChain(db, nil, gspec, nil, beacon.NewFaker(), vm.Config{EnableParallelExec: true, ParallelTxNum: 1}, nil, nil) defer blockchain.Stop() - if i, err := blockchain.InsertChain(chain); err != nil { - fmt.Printf("insert error (block %d): %v\n", chain[i].NumberU64(), err) - return + if i, err := blockchain.InsertChain(genchain); err != nil { + t.Fatalf("insert error (block %d): %v\n", genchain[i].NumberU64(), err) } // enforce that withdrawal indexes are monotonically increasing from 0 var ( withdrawalIndex uint64 - head = blockchain.CurrentBlock().Number.Uint64() ) - for i := 0; i < int(head); i++ { - block := blockchain.GetBlockByNumber(uint64(i)) + for i := range genchain { + blocknum := genchain[i].NumberU64() + block := blockchain.GetBlockByNumber(blocknum) if block == nil { - t.Fatalf("block %d not found", i) + t.Fatalf("block %d not found", blocknum) + } + + // Verify receipts. + genBlockReceipts := genreceipts[i] + for _, r := range genBlockReceipts { + if r.BlockNumber.Cmp(block.Number()) != 0 { + t.Errorf("receipt has wrong block number %d, want %d", r.BlockNumber, block.Number()) + } + if r.BlockHash != block.Hash() { + t.Errorf("receipt has wrong block hash %v, want %v", r.BlockHash, block.Hash()) + } + + // patch up empty logs list to make DeepEqual below work + if r.Logs == nil { + r.Logs = []*types.Log{} + } + } + blockchainReceipts := blockchain.GetReceiptsByHash(block.Hash()) + if !reflect.DeepEqual(genBlockReceipts, blockchainReceipts) { + t.Fatalf("receipts mismatch\ngenerated: %s\nblockchain: %s", spew.Sdump(genBlockReceipts), spew.Sdump(blockchainReceipts)) } + + // Verify withdrawals. if len(block.Withdrawals()) == 0 { continue } @@ -134,6 +172,18 @@ func TestGenerateWithdrawalChain(t *testing.T) { } withdrawalIndex += 1 } + + // Verify parent beacon root. + want := common.Hash{byte(blocknum)} + if got := block.BeaconRoot(); *got != want { + t.Fatalf("block %d, wrong parent beacon root: got %s, want %s", i, got, want) + } + state, _ := blockchain.State() + idx := block.Time()%8191 + 8191 + got := state.GetState(params.BeaconRootsStorageAddress, common.BigToHash(new(big.Int).SetUint64(idx))) + if got != want { + t.Fatalf("block %d, wrong parent beacon root in state: got %s, want %s", i, got, want) + } } } diff --git a/core/evm.go b/core/evm.go index 32315e2972..b0ac3276e0 100644 --- a/core/evm.go +++ b/core/evm.go @@ -79,11 +79,15 @@ func NewEVMBlockContext(header *types.Header, chain ChainContext, author *common // NewEVMTxContext creates a new transaction context for a single transaction. func NewEVMTxContext(msg *Message) vm.TxContext { - return vm.TxContext{ + ctx := vm.TxContext{ Origin: msg.From, GasPrice: new(big.Int).Set(msg.GasPrice), BlobHashes: msg.BlobHashes, } + if msg.BlobGasFeeCap != nil { + ctx.BlobFeeCap = new(big.Int).Set(msg.BlobGasFeeCap) + } + return ctx } // GetHashFn returns a GetHashFunc which retrieves header hashes by number diff --git a/core/forkid/forkid_test.go b/core/forkid/forkid_test.go index db634bc14b..e311c0b43f 100644 --- a/core/forkid/forkid_test.go +++ b/core/forkid/forkid_test.go @@ -366,8 +366,9 @@ func TestValidation(t *testing.T) { // TODO(karalabe): Enable this when Cancun is specced //{params.MainnetChainConfig, 20999999, 1677999999, ID{Hash: checksumToBytes(0x71147644), Next: 1678000000}, ErrLocalIncompatibleOrStale}, } + genesis := core.DefaultGenesisBlock().ToBlock() for i, tt := range tests { - filter := newFilter(tt.config, core.DefaultGenesisBlock().ToBlock(), func() (uint64, uint64) { return tt.head, tt.time }) + filter := newFilter(tt.config, genesis, func() (uint64, uint64) { return tt.head, tt.time }) if err := filter(tt.id); err != tt.err { t.Errorf("test %d: validation error mismatch: have %v, want %v", i, err, tt.err) } diff --git a/core/genesis.go b/core/genesis.go index 6f924ab65a..bb6c82da37 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -41,6 +41,7 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" + "github.com/ethereum/go-ethereum/trie/triedb/pathdb" ) //go:generate go run github.com/fjl/gencodec -type Genesis -field-override genesisSpecMarshaling -out gen_genesis.go @@ -137,10 +138,20 @@ func (ga *GenesisAlloc) UnmarshalJSON(data []byte) error { } // hash computes the state root according to the genesis specification. -func (ga *GenesisAlloc) hash() (common.Hash, error) { +func (ga *GenesisAlloc) hash(isVerkle bool) (common.Hash, error) { + // If a genesis-time verkle trie is requested, create a trie config + // with the verkle trie enabled so that the tree can be initialized + // as such. + var config *trie.Config + if isVerkle { + config = &trie.Config{ + PathDB: pathdb.Defaults, + IsVerkle: true, + } + } // Create an ephemeral in-memory database for computing hash, // all the derived states will be discarded to not pollute disk. - db := state.NewDatabase(rawdb.NewMemoryDatabase()) + db := state.NewDatabaseWithConfig(rawdb.NewMemoryDatabase(), config) statedb, err := state.New(types.EmptyRootHash, db, nil) if err != nil { return common.Hash{}, err @@ -162,6 +173,11 @@ func (ga *GenesisAlloc) hash() (common.Hash, error) { // states will be persisted into the given database. Also, the genesis state // specification will be flushed as well. func (ga *GenesisAlloc) flush(db ethdb.Database, triedb *trie.Database, blockhash common.Hash) error { + triedbConfig := triedb.Config() + if triedbConfig != nil { + triedbConfig.NoTries = false + } + statedb, err := state.New(types.EmptyRootHash, state.NewDatabaseWithNodeDB(db, triedb), nil) if err != nil { return err @@ -263,7 +279,9 @@ type ChainOverrides struct { OverrideVerkle *uint64 // optimism OverrideOptimismCanyon *uint64 + OverrideOptimismEcotone *uint64 ApplySuperchainUpgrades bool + OverrideOptimismInterop *uint64 } // SetupGenesisBlock writes or updates the genesis block in db. @@ -323,6 +341,13 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *trie.Database, gen config.Optimism.EIP1559DenominatorCanyon = 250 } } + if overrides != nil && overrides.OverrideOptimismEcotone != nil { + config.EcotoneTime = overrides.OverrideOptimismEcotone + config.CancunTime = overrides.OverrideOptimismEcotone + } + if overrides != nil && overrides.OverrideOptimismInterop != nil { + config.InteropTime = overrides.OverrideOptimismInterop + } } } // Just commit the new block if there is no stored genesis block. @@ -334,22 +359,28 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *trie.Database, gen } else { log.Info("Writing custom genesis block") } + applyOverrides(genesis.Config) block, err := genesis.Commit(db, triedb) if err != nil { return genesis.Config, common.Hash{}, err } - applyOverrides(genesis.Config) return genesis.Config, block.Hash(), nil } // The genesis block is present(perhaps in ancient database) while the // state database is not initialized yet. It can happen that the node // is initialized with an external ancient store. Commit genesis state // in this case. + // If the bedrock block is not 0, that implies that the network was migrated at the bedrock block. + // In this case the genesis state may not be in the state database (e.g. op-geth is performing a snap + // sync without an existing datadir) & even if it were, would not be useful as op-geth is not able to + // execute the pre-bedrock STF. header := rawdb.ReadHeader(db, stored, 0) - if header.Root != types.EmptyRootHash && !triedb.Initialized(header.Root) { + transitionedNetwork := genesis != nil && genesis.Config != nil && genesis.Config.BedrockBlock != nil && genesis.Config.BedrockBlock.Uint64() != 0 + if header.Root != types.EmptyRootHash && !triedb.Initialized(header.Root) && !transitionedNetwork && !triedb.Config().NoTries { if genesis == nil { genesis = DefaultGenesisBlock() } + applyOverrides(genesis.Config) // Ensure the stored genesis matches with the given one. hash := genesis.ToBlock().Hash() if hash != stored { @@ -359,11 +390,11 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *trie.Database, gen if err != nil { return genesis.Config, hash, err } - applyOverrides(genesis.Config) return genesis.Config, block.Hash(), nil } // Check whether the genesis block is already written. if genesis != nil { + applyOverrides(genesis.Config) hash := genesis.ToBlock().Hash() if hash != stored { return genesis.Config, hash, &GenesisMismatchError{stored, hash} @@ -463,6 +494,12 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { } } +// IsVerkle indicates whether the state is already stored in a verkle +// tree at genesis time. +func (g *Genesis) IsVerkle() bool { + return g.Config.IsVerkle(new(big.Int).SetUint64(g.Number), g.Timestamp) +} + // ToBlock returns the genesis block according to genesis specification. func (g *Genesis) ToBlock() *types.Block { var root common.Hash @@ -473,7 +510,7 @@ func (g *Genesis) ToBlock() *types.Block { "and non-empty state-allocation", *g.StateHash)) } root = *g.StateHash - } else if root, err = g.Alloc.hash(); err != nil { + } else if root, err = g.Alloc.hash(g.IsVerkle()); err != nil { panic(err) } head := &types.Header{ @@ -623,16 +660,16 @@ func DefaultHoleskyGenesisBlock() *Genesis { } // DeveloperGenesisBlock returns the 'geth --dev' genesis block. -func DeveloperGenesisBlock(gasLimit uint64, faucet common.Address) *Genesis { +func DeveloperGenesisBlock(gasLimit uint64, faucet *common.Address) *Genesis { // Override the default period to the user requested one config := *params.AllDevChainProtocolChanges // Assemble and return the genesis with the precompiles and faucet pre-funded - return &Genesis{ + genesis := &Genesis{ Config: &config, GasLimit: gasLimit, BaseFee: big.NewInt(params.InitialBaseFee), - Difficulty: big.NewInt(0), + Difficulty: big.NewInt(1), Alloc: map[common.Address]GenesisAccount{ common.BytesToAddress([]byte{1}): {Balance: big.NewInt(1)}, // ECRecover common.BytesToAddress([]byte{2}): {Balance: big.NewInt(1)}, // SHA256 @@ -643,9 +680,12 @@ func DeveloperGenesisBlock(gasLimit uint64, faucet common.Address) *Genesis { common.BytesToAddress([]byte{7}): {Balance: big.NewInt(1)}, // ECScalarMul common.BytesToAddress([]byte{8}): {Balance: big.NewInt(1)}, // ECPairing common.BytesToAddress([]byte{9}): {Balance: big.NewInt(1)}, // BLAKE2b - faucet: {Balance: new(big.Int).Sub(new(big.Int).Lsh(big.NewInt(1), 256), big.NewInt(9))}, }, } + if faucet != nil { + genesis.Alloc[*faucet] = GenesisAccount{Balance: new(big.Int).Sub(new(big.Int).Lsh(big.NewInt(1), 256), big.NewInt(9))} + } + return genesis } func decodePrealloc(data string) GenesisAlloc { diff --git a/core/genesis_test.go b/core/genesis_test.go index c6e01e2166..59c1485d22 100644 --- a/core/genesis_test.go +++ b/core/genesis_test.go @@ -17,6 +17,7 @@ package core import ( + "bytes" "encoding/json" "math/big" "reflect" @@ -231,7 +232,7 @@ func TestReadWriteGenesisAlloc(t *testing.T) { {1}: {Balance: big.NewInt(1), Storage: map[common.Hash]common.Hash{{1}: {1}}}, {2}: {Balance: big.NewInt(2), Storage: map[common.Hash]common.Hash{{2}: {2}}}, } - hash, _ = alloc.hash() + hash, _ = alloc.hash(false) ) blob, _ := json.Marshal(alloc) rawdb.WriteGenesisStateSpec(db, hash, blob) @@ -261,3 +262,66 @@ func newDbConfig(scheme string) *trie.Config { } return &trie.Config{PathDB: pathdb.Defaults} } + +func TestVerkleGenesisCommit(t *testing.T) { + var verkleTime uint64 = 0 + verkleConfig := ¶ms.ChainConfig{ + ChainID: big.NewInt(1), + HomesteadBlock: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: false, + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + ArrowGlacierBlock: big.NewInt(0), + GrayGlacierBlock: big.NewInt(0), + MergeNetsplitBlock: nil, + ShanghaiTime: &verkleTime, + CancunTime: &verkleTime, + PragueTime: &verkleTime, + VerkleTime: &verkleTime, + TerminalTotalDifficulty: big.NewInt(0), + TerminalTotalDifficultyPassed: true, + Ethash: nil, + Clique: nil, + } + + genesis := &Genesis{ + BaseFee: big.NewInt(params.InitialBaseFee), + Config: verkleConfig, + Timestamp: verkleTime, + Difficulty: big.NewInt(0), + Alloc: GenesisAlloc{ + {1}: {Balance: big.NewInt(1), Storage: map[common.Hash]common.Hash{{1}: {1}}}, + }, + } + + expected := common.Hex2Bytes("14398d42be3394ff8d50681816a4b7bf8d8283306f577faba2d5bc57498de23b") + got := genesis.ToBlock().Root().Bytes() + if !bytes.Equal(got, expected) { + t.Fatalf("invalid genesis state root, expected %x, got %x", expected, got) + } + + db := rawdb.NewMemoryDatabase() + triedb := trie.NewDatabase(db, &trie.Config{IsVerkle: true, PathDB: pathdb.Defaults}) + block := genesis.MustCommit(db, triedb) + if !bytes.Equal(block.Root().Bytes(), expected) { + t.Fatalf("invalid genesis state root, expected %x, got %x", expected, got) + } + + // Test that the trie is verkle + if !triedb.IsVerkle() { + t.Fatalf("expected trie to be verkle") + } + + if !rawdb.ExistsAccountTrieNode(db, nil) { + t.Fatal("could not find node") + } +} diff --git a/core/opcodeCompiler/compiler/OpCodeCache.go b/core/opcodeCompiler/compiler/OpCodeCache.go new file mode 100644 index 0000000000..0fdccc358a --- /dev/null +++ b/core/opcodeCompiler/compiler/OpCodeCache.go @@ -0,0 +1,51 @@ +package compiler + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/lru" +) + +type OpCodeCache struct { + optimizedCodeCache *lru.Cache[common.Hash, []byte] + bitvecCache *lru.Cache[common.Hash, []byte] +} + +func (c *OpCodeCache) GetCachedBitvec(codeHash common.Hash) []byte { + bitvec, _ := c.bitvecCache.Get(codeHash) + return bitvec +} + +func (c *OpCodeCache) AddBitvecCache(codeHash common.Hash, bitvec []byte) { + c.bitvecCache.Add(codeHash, bitvec) +} + +func (c *OpCodeCache) RemoveCachedCode(hash common.Hash) { + c.optimizedCodeCache.Remove(hash) +} + +func (c *OpCodeCache) GetCachedCode(hash common.Hash) []byte { + processedCode, _ := c.optimizedCodeCache.Get(hash) + return processedCode +} + +func (c *OpCodeCache) AddCodeCache(hash common.Hash, optimizedCode []byte) { + c.optimizedCodeCache.Add(hash, optimizedCode) +} + +var opcodeCache *OpCodeCache + +const ( + optimizedCodeCacheCap = 1024 + bitvecCacheCap = 1024 +) + +func init() { + opcodeCache = &OpCodeCache{ + optimizedCodeCache: lru.NewCache[common.Hash, []byte](optimizedCodeCacheCap), + bitvecCache: lru.NewCache[common.Hash, []byte](bitvecCacheCap), + } +} + +func getOpCodeCacheInstance() *OpCodeCache { + return opcodeCache +} diff --git a/core/opcodeCompiler/compiler/evmByteCode.go b/core/opcodeCompiler/compiler/evmByteCode.go new file mode 100644 index 0000000000..f4a335cf1d --- /dev/null +++ b/core/opcodeCompiler/compiler/evmByteCode.go @@ -0,0 +1,225 @@ +package compiler + +// This is copied from vm/opcodes.go. + +// ByteCode is an EVM ByteCode +type ByteCode byte + +// 0x0 range - arithmetic ops. +const ( + STOP ByteCode = 0x0 + ADD ByteCode = 0x1 + MUL ByteCode = 0x2 + SUB ByteCode = 0x3 + DIV ByteCode = 0x4 + SDIV ByteCode = 0x5 + MOD ByteCode = 0x6 + SMOD ByteCode = 0x7 + ADDMOD ByteCode = 0x8 + MULMOD ByteCode = 0x9 + EXP ByteCode = 0xa + SIGNEXTEND ByteCode = 0xb +) + +// 0x10 range - comparison ops. +const ( + LT ByteCode = 0x10 + GT ByteCode = 0x11 + SLT ByteCode = 0x12 + SGT ByteCode = 0x13 + EQ ByteCode = 0x14 + ISZERO ByteCode = 0x15 + AND ByteCode = 0x16 + OR ByteCode = 0x17 + XOR ByteCode = 0x18 + NOT ByteCode = 0x19 + BYTE ByteCode = 0x1a + SHL ByteCode = 0x1b + SHR ByteCode = 0x1c + SAR ByteCode = 0x1d +) + +// 0x20 range - crypto. +const ( + KECCAK256 ByteCode = 0x20 +) + +// 0x30 range - closure state. +const ( + ADDRESS ByteCode = 0x30 + BALANCE ByteCode = 0x31 + ORIGIN ByteCode = 0x32 + CALLER ByteCode = 0x33 + CALLVALUE ByteCode = 0x34 + CALLDATALOAD ByteCode = 0x35 + CALLDATASIZE ByteCode = 0x36 + CALLDATACOPY ByteCode = 0x37 + CODESIZE ByteCode = 0x38 + CODECOPY ByteCode = 0x39 + GASPRICE ByteCode = 0x3a + EXTCODESIZE ByteCode = 0x3b + EXTCODECOPY ByteCode = 0x3c + RETURNDATASIZE ByteCode = 0x3d + RETURNDATACOPY ByteCode = 0x3e + EXTCODEHASH ByteCode = 0x3f +) + +// 0x40 range - block operations. +const ( + BLOCKHASH ByteCode = 0x40 + COINBASE ByteCode = 0x41 + TIMESTAMP ByteCode = 0x42 + NUMBER ByteCode = 0x43 + DIFFICULTY ByteCode = 0x44 + RANDOM ByteCode = 0x44 // Same as DIFFICULTY + PREVRANDAO ByteCode = 0x44 // Same as DIFFICULTY + GASLIMIT ByteCode = 0x45 + CHAINID ByteCode = 0x46 + SELFBALANCE ByteCode = 0x47 + BASEFEE ByteCode = 0x48 +) + +// 0x50 range - 'storage' and execution. +const ( + POP ByteCode = 0x50 + MLOAD ByteCode = 0x51 + MSTORE ByteCode = 0x52 + MSTORE8 ByteCode = 0x53 + SLOAD ByteCode = 0x54 + SSTORE ByteCode = 0x55 + JUMP ByteCode = 0x56 + JUMPI ByteCode = 0x57 + PC ByteCode = 0x58 + MSIZE ByteCode = 0x59 + GAS ByteCode = 0x5a + JUMPDEST ByteCode = 0x5b + PUSH0 ByteCode = 0x5f +) + +// 0x60 range - pushes. +const ( + PUSH1 ByteCode = 0x60 + iota + PUSH2 + PUSH3 + PUSH4 + PUSH5 + PUSH6 + PUSH7 + PUSH8 + PUSH9 + PUSH10 + PUSH11 + PUSH12 + PUSH13 + PUSH14 + PUSH15 + PUSH16 + PUSH17 + PUSH18 + PUSH19 + PUSH20 + PUSH21 + PUSH22 + PUSH23 + PUSH24 + PUSH25 + PUSH26 + PUSH27 + PUSH28 + PUSH29 + PUSH30 + PUSH31 + PUSH32 +) + +// 0x80 range - dups. +const ( + DUP1 = 0x80 + iota + DUP2 + DUP3 + DUP4 + DUP5 + DUP6 + DUP7 + DUP8 + DUP9 + DUP10 + DUP11 + DUP12 + DUP13 + DUP14 + DUP15 + DUP16 +) + +// 0x90 range - swaps. +const ( + SWAP1 = 0x90 + iota + SWAP2 + SWAP3 + SWAP4 + SWAP5 + SWAP6 + SWAP7 + SWAP8 + SWAP9 + SWAP10 + SWAP11 + SWAP12 + SWAP13 + SWAP14 + SWAP15 + SWAP16 +) + +// 0xa0 range - logging ops. +const ( + LOG0 ByteCode = 0xa0 + iota + LOG1 + LOG2 + LOG3 + LOG4 +) + +// 0xd0 range - customized instructions. +const ( + Nop ByteCode = 0xd0 + iota + AndSwap1PopSwap2Swap1 + Swap2Swap1PopJump + Swap1PopSwap2Swap1 + PopSwap2Swap1Pop + Push2Jump + Push2JumpI + Push1Push1 + Push1Add + Push1Shl + Push1Dup1 + Swap1Pop + PopJump + Pop2 + Swap2Swap1 + Swap2Pop + Dup2LT + JumpIfZero // 0xe2 +) + +// 0xf0 range - closures. +const ( + CREATE ByteCode = 0xf0 + CALL ByteCode = 0xf1 + CALLCODE ByteCode = 0xf2 + RETURN ByteCode = 0xf3 + DELEGATECALL ByteCode = 0xf4 + CREATE2 ByteCode = 0xf5 + + STATICCALL ByteCode = 0xfa + REVERT ByteCode = 0xfd + INVALID ByteCode = 0xfe + SELFDESTRUCT ByteCode = 0xff +) + +// 0xb0 range. +const ( + TLOAD ByteCode = 0xb3 + TSTORE ByteCode = 0xb4 +) diff --git a/core/opcodeCompiler/compiler/opcodeProcessor.go b/core/opcodeCompiler/compiler/opcodeProcessor.go new file mode 100644 index 0000000000..1e13862d48 --- /dev/null +++ b/core/opcodeCompiler/compiler/opcodeProcessor.go @@ -0,0 +1,384 @@ +package compiler + +import ( + "errors" + "github.com/ethereum/go-ethereum/common" + "github.com/holiman/uint256" + "runtime" +) + +var ( + enabled bool + codeCache *OpCodeCache + taskChannel chan optimizeTask +) + +var ( + ErrFailPreprocessing = errors.New("fail to do preprocessing") + ErrOptimizedDisabled = errors.New("opcode optimization is disabled") +) + +const taskChannelSize = 1024 * 1024 + +const ( + generate optimizeTaskType = 1 + flush optimizeTaskType = 2 +) + +type OpCodeProcessorConfig struct { + DoOpcodeFusion bool +} + +type optimizeTaskType byte + +type CodeType uint8 + +type optimizeTask struct { + taskType optimizeTaskType + hash common.Hash + rawCode []byte +} + +func init() { + taskChannel = make(chan optimizeTask, taskChannelSize) + taskNumber := runtime.NumCPU() * 3 / 8 + if taskNumber < 1 { + taskNumber = 1 + } + codeCache = getOpCodeCacheInstance() + + for i := 0; i < taskNumber; i++ { + go taskProcessor() + } +} + +func EnableOptimization() { + if enabled { + return + } + enabled = true +} + +func DisableOptimization() { + enabled = false +} + +func IsEnabled() bool { + return enabled +} + +func LoadOptimizedCode(hash common.Hash) []byte { + if !enabled { + return nil + } + processedCode := codeCache.GetCachedCode(hash) + return processedCode + +} + +func LoadBitvec(codeHash common.Hash) []byte { + if !enabled { + return nil + } + bitvec := codeCache.GetCachedBitvec(codeHash) + return bitvec +} + +func StoreBitvec(codeHash common.Hash, bitvec []byte) { + if !enabled { + return + } + codeCache.AddBitvecCache(codeHash, bitvec) +} + +func GenOrLoadOptimizedCode(hash common.Hash, code []byte) { + if !enabled { + return + } + task := optimizeTask{generate, hash, code} + taskChannel <- task +} + +func taskProcessor() { + for { + task := <-taskChannel + // Process the message here + handleOptimizationTask(task) + } +} + +func handleOptimizationTask(task optimizeTask) { + switch task.taskType { + case generate: + TryGenerateOptimizedCode(task.hash, task.rawCode) + case flush: + DeleteCodeCache(task.hash) + } +} + +// GenOrRewriteOptimizedCode generate the optimized code and refresh the code cache. +func GenOrRewriteOptimizedCode(hash common.Hash, code []byte) ([]byte, error) { + if !enabled { + return nil, ErrOptimizedDisabled + } + processedCode, err := processByteCodes(code) + if err != nil { + return nil, err + } + codeCache.AddCodeCache(hash, processedCode) + return processedCode, err +} + +func TryGenerateOptimizedCode(hash common.Hash, code []byte) ([]byte, error) { + processedCode := codeCache.GetCachedCode(hash) + var err error = nil + if processedCode == nil || len(processedCode) == 0 { + processedCode, err = GenOrRewriteOptimizedCode(hash, code) + } + return processedCode, err +} + +func DeleteCodeCache(hash common.Hash) { + if !enabled { + return + } + // flush in case there are invalid cached code + codeCache.RemoveCachedCode(hash) +} + +func processByteCodes(code []byte) ([]byte, error) { + return doOpcodesProcess(code) +} + +func doOpcodesProcess(code []byte) ([]byte, error) { + code, err := doCodeFusion(code) + if err != nil { + return nil, ErrFailPreprocessing + } + return code, nil +} + +func doCodeFusion(code []byte) ([]byte, error) { + fusedCode := make([]byte, len(code)) + length := copy(fusedCode, code) + skipToNext := false + for i := 0; i < length; i++ { + cur := i + skipToNext = false + + if length > cur+4 { + code0 := ByteCode(fusedCode[cur+0]) + code1 := ByteCode(fusedCode[cur+1]) + code2 := ByteCode(fusedCode[cur+2]) + code3 := ByteCode(fusedCode[cur+3]) + code4 := ByteCode(fusedCode[cur+4]) + if code0 == AND && code1 == SWAP1 && code2 == POP && code3 == SWAP2 && code4 == SWAP1 { + op := AndSwap1PopSwap2Swap1 + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + fusedCode[cur+2] = byte(Nop) + fusedCode[cur+3] = byte(Nop) + fusedCode[cur+4] = byte(Nop) + skipToNext = true + } + + // Test zero and Jump. target offset at code[2-3] + if code0 == ISZERO && code1 == PUSH2 && code4 == JUMPI { + op := JumpIfZero + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + fusedCode[cur+4] = byte(Nop) + + startMin := cur + 2 + endMin := cur + 4 + integer := new(uint256.Int) + integer.SetBytes(common.RightPadBytes( + fusedCode[startMin:endMin], 2)) + + skipToNext = true + } + + if skipToNext { + i += 4 + continue + } + } + + if length > cur+3 { + code0 := ByteCode(fusedCode[cur+0]) + code1 := ByteCode(fusedCode[cur+1]) + code2 := ByteCode(fusedCode[cur+2]) + code3 := ByteCode(fusedCode[cur+3]) + if code0 == SWAP2 && code1 == SWAP1 && code2 == POP && code3 == JUMP { + op := Swap2Swap1PopJump + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + fusedCode[cur+2] = byte(Nop) + fusedCode[cur+3] = byte(Nop) + skipToNext = true + } + + if code0 == SWAP1 && code1 == POP && code2 == SWAP2 && code3 == SWAP1 { + op := Swap1PopSwap2Swap1 + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + fusedCode[cur+2] = byte(Nop) + fusedCode[cur+3] = byte(Nop) + skipToNext = true + } + + if code0 == POP && code1 == SWAP2 && code2 == SWAP1 && code3 == POP { + op := PopSwap2Swap1Pop + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + fusedCode[cur+2] = byte(Nop) + fusedCode[cur+3] = byte(Nop) + skipToNext = true + } + // push and jump + if code0 == PUSH2 && code3 == JUMP { + op := Push2Jump + fusedCode[cur] = byte(op) + fusedCode[cur+3] = byte(Nop) + skipToNext = true + } + + if code0 == PUSH2 && code3 == JUMPI { + op := Push2JumpI + fusedCode[cur] = byte(op) + fusedCode[cur+3] = byte(Nop) + skipToNext = true + } + + if code0 == PUSH1 && code2 == PUSH1 { + op := Push1Push1 + fusedCode[cur] = byte(op) + fusedCode[cur+2] = byte(Nop) + skipToNext = true + } + + if skipToNext { + i += 3 + continue + } + } + + if length > cur+2 { + code0 := ByteCode(fusedCode[cur+0]) + _ = ByteCode(fusedCode[cur+1]) + code2 := ByteCode(fusedCode[cur+2]) + if code0 == PUSH1 { + if code2 == ADD { + op := Push1Add + fusedCode[cur] = byte(op) + fusedCode[cur+2] = byte(Nop) + skipToNext = true + } + if code2 == SHL { + op := Push1Shl + fusedCode[cur] = byte(op) + fusedCode[cur+2] = byte(Nop) + skipToNext = true + } + + if code2 == DUP1 { + op := Push1Dup1 + fusedCode[cur] = byte(op) + fusedCode[cur+2] = byte(Nop) + skipToNext = true + } + + } + if skipToNext { + i += 2 + continue + } + } + + if length > cur+1 { + code0 := ByteCode(fusedCode[cur+0]) + code1 := ByteCode(fusedCode[cur+1]) + + if code0 == SWAP1 && code1 == POP { + op := Swap1Pop + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + skipToNext = true + } + if code0 == POP && code1 == JUMP { + op := PopJump + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + skipToNext = true + } + + if code0 == POP && code1 == POP { + op := Pop2 + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + skipToNext = true + } + + if code0 == SWAP2 && code1 == SWAP1 { + op := Swap2Swap1 + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + skipToNext = true + } + + if code0 == SWAP2 && code1 == POP { + op := Swap2Pop + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + skipToNext = true + } + + if code0 == DUP2 && code1 == LT { + op := Dup2LT + fusedCode[cur] = byte(op) + fusedCode[cur+1] = byte(Nop) + skipToNext = true + } + + if skipToNext { + i++ + continue + } + } + + skip, steps := calculateSkipSteps(fusedCode, cur) + if skip { + i += steps + continue + } + } + return fusedCode, nil +} + +func calculateSkipSteps(code []byte, cur int) (skip bool, steps int) { + inst := ByteCode(code[cur]) + if inst >= PUSH1 && inst <= PUSH32 { + // skip the data. + steps = int(inst - PUSH1 + 1) + skip = true + return skip, steps + } + + switch inst { + case Push2Jump, Push2JumpI: + steps = 3 + skip = true + case Push1Push1: + steps = 3 + skip = true + case Push1Add, Push1Shl, Push1Dup1: + steps = 2 + skip = true + case JumpIfZero: + steps = 4 + skip = true + default: + return false, 0 + } + return skip, steps +} diff --git a/core/proof_keeper.go b/core/proof_keeper.go new file mode 100644 index 0000000000..720e808d1c --- /dev/null +++ b/core/proof_keeper.go @@ -0,0 +1,605 @@ +package core + +import ( + "encoding/binary" + "encoding/json" + "fmt" + "math/big" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/params" + trie2 "github.com/ethereum/go-ethereum/trie" + "github.com/ethereum/go-ethereum/trie/triedb/pathdb" +) + +const ( + // l2ToL1MessagePasser pre-deploy address. + l2ToL1MessagePasser = "0x4200000000000000000000000000000000000016" + + // gcProofIntervalSecond is used to control gc loop interval. + gcProofIntervalSecond = 3600 + + // maxKeeperMetaNumber is used to gc keep meta, trigger gc workflow + // when meta number > maxKeeperMetaNumber && meta.block_id < latest_block_id - keep_block_span. + maxKeeperMetaNumber = 100 +) + +var ( + l2ToL1MessagePasserAddr = common.HexToAddress(l2ToL1MessagePasser) + addProofTimer = metrics.NewRegisteredTimer("proofkeeper/addproof/time", nil) + getInnerProofTimer = metrics.NewRegisteredTimer("proofkeeper/getinnerproof/time", nil) + queryProofTimer = metrics.NewRegisteredTimer("proofkeeper/queryproof/time", nil) +) + +// keeperMetaRecord is used to ensure proof continuous in scenarios such as enable/disable keeper, interval changes, reorg, etc. +// which is stored in kv db, indexed by prefix+block-id. +type keeperMetaRecord struct { + BlockID uint64 `json:"blockID"` + ProofID uint64 `json:"proofID"` + KeepInterval uint64 `json:"keepInterval"` +} + +// proofDataRecord is used to store proposed proof data. +// which is stored in ancient db, indexed by proof-id. +type proofDataRecord struct { + ProofID uint64 `json:"proofID"` + BlockID uint64 `json:"blockID"` + StateRoot common.Hash `json:"stateRoot"` + + Address common.Address `json:"address"` + AccountProof []string `json:"accountProof"` + Balance *big.Int `json:"balance"` + CodeHash common.Hash `json:"codeHash"` + Nonce uint64 `json:"nonce"` + StorageHash common.Hash `json:"storageHash"` + StorageProof []common.StorageResult `json:"storageProof"` +} + +// proofKeeperOptions defines proof keeper options. +type proofKeeperOptions struct { + enable bool + keepProofBlockSpan uint64 + gcInterval uint64 + watchStartKeepCh chan *pathdb.KeepRecord + notifyFinishKeepCh chan error +} + +// ProofKeeper is used to store proposed proof and op-proposer can query. +type ProofKeeper struct { + opts *proofKeeperOptions + blockChain *BlockChain + keeperMetaDB ethdb.Database + proofDataDB *rawdb.ResettableFreezer + + queryProofCh chan uint64 + waitQueryProofCh chan *proofDataRecord + stopCh chan struct{} + waitStopCh chan error + latestBlockID uint64 +} + +// newProofKeeper returns a proof keeper instance. +func newProofKeeper(opts *proofKeeperOptions) *ProofKeeper { + if opts.keepProofBlockSpan == 0 { + opts.keepProofBlockSpan = params.FullImmutabilityThreshold + } + if opts.gcInterval == 0 { + opts.gcInterval = gcProofIntervalSecond + } + keeper := &ProofKeeper{ + opts: opts, + queryProofCh: make(chan uint64), + waitQueryProofCh: make(chan *proofDataRecord), + stopCh: make(chan struct{}), + waitStopCh: make(chan error), + } + log.Info("Succeed to init proof keeper", "options", opts) + return keeper +} + +// Start is used to start event loop. +func (keeper *ProofKeeper) Start(blockChain *BlockChain, keeperMetaDB ethdb.Database) error { + if !keeper.opts.enable { + return nil + } + var ( + err error + ancientDir string + ) + + keeper.blockChain = blockChain + keeper.keeperMetaDB = keeperMetaDB + if ancientDir, err = keeper.keeperMetaDB.AncientDatadir(); err != nil { + log.Error("Failed to get ancient data dir", "error", err) + return err + } + if keeper.proofDataDB, err = rawdb.NewProofFreezer(ancientDir, false); err != nil { + log.Error("Failed to new proof ancient freezer", "error", err) + return err + } + + go keeper.eventLoop() + log.Info("Succeed to start proof keeper") + return nil +} + +// Stop is used to sync ancient db and stop the event loop. +func (keeper *ProofKeeper) Stop() error { + if !keeper.opts.enable { + return nil + } + + close(keeper.stopCh) + err := <-keeper.waitStopCh + log.Info("Succeed to stop proof keeper", "error", err) + return err +} + +// GetNotifyKeepRecordFunc returns a keeper callback func which is used by path db node buffer list. +// This is a synchronous operation. +func (keeper *ProofKeeper) GetNotifyKeepRecordFunc() pathdb.NotifyKeepFunc { + return func(keepRecord *pathdb.KeepRecord) { + if keeper == nil { + return + } + if keeper.opts == nil || keeper.opts.watchStartKeepCh == nil || keeper.opts.notifyFinishKeepCh == nil { + return + } + if !keeper.opts.enable { + return + } + if keepRecord.BlockID == 0 || keepRecord.KeepInterval == 0 { + return + } + if keepRecord.BlockID%keepRecord.KeepInterval != 0 { + return + } + + var ( + startTimestamp time.Time + err error + ) + + startTimestamp = time.Now() + defer func() { + addProofTimer.UpdateSince(startTimestamp) + log.Info("Keep a new proof", "record", keepRecord, "elapsed", common.PrettyDuration(time.Since(startTimestamp)), "error", err) + }() + + keeper.opts.watchStartKeepCh <- keepRecord + err = <-keeper.opts.notifyFinishKeepCh + } +} + +// getInnerProof is used to make proof by state db interface. +func (keeper *ProofKeeper) getInnerProof(kRecord *pathdb.KeepRecord) (*proofDataRecord, error) { + var ( + err error + header *types.Header + stateDB *state.StateDB + worldTrie *trie2.StateTrie + accountProof common.ProofList + pRecord *proofDataRecord + ) + + startTimestamp := time.Now() + defer func() { + getInnerProofTimer.UpdateSince(startTimestamp) + // log.Info("Succeed to get proof", "proof_record", pRecord, "error", err, "elapsed", common.PrettyDuration(time.Since(startTimestamp))) + }() + + if header = keeper.blockChain.GetHeaderByNumber(kRecord.BlockID); header == nil { + return nil, fmt.Errorf("block is not found, block_id=%d", kRecord.BlockID) + } + if worldTrie, err = trie2.NewStateTrieByInnerReader( + trie2.StateTrieID(header.Root), + keeper.blockChain.stateCache.TrieDB(), + kRecord.PinnedInnerTrieReader); err != nil { + return nil, err + } + if err = worldTrie.Prove(crypto.Keccak256(l2ToL1MessagePasserAddr.Bytes()), &accountProof); err != nil { + return nil, err + } + if stateDB, err = state.NewStateDBByTrie(worldTrie, keeper.blockChain.stateCache, keeper.blockChain.snaps); err != nil { + return nil, err + } + + pRecord = &proofDataRecord{ + BlockID: kRecord.BlockID, + StateRoot: kRecord.StateRoot, + Address: l2ToL1MessagePasserAddr, + AccountProof: accountProof, + Balance: stateDB.GetBalance(l2ToL1MessagePasserAddr), + CodeHash: stateDB.GetCodeHash(l2ToL1MessagePasserAddr), + Nonce: stateDB.GetNonce(l2ToL1MessagePasserAddr), + StorageHash: stateDB.GetStorageRoot(l2ToL1MessagePasserAddr), + StorageProof: make([]common.StorageResult, 0), + } + err = stateDB.Error() + return pRecord, err +} + +// eventLoop is used to update/query keeper meta and proof data in the event loop, which ensure thread-safe. +func (keeper *ProofKeeper) eventLoop() { + if !keeper.opts.enable { + return + } + var ( + err error + putKeeperMetaRecordOnce bool + ancientInitSequenceID uint64 + ) + + gcProofTicker := time.NewTicker(time.Second * time.Duration(keeper.opts.gcInterval)) + defer gcProofTicker.Stop() + + for { + select { + case keepRecord := <-keeper.opts.watchStartKeepCh: + var ( + hasTruncatedMeta bool + curProofID uint64 + proofRecord *proofDataRecord + ) + + proofRecord, err = keeper.getInnerProof(keepRecord) + if err == nil { + hasTruncatedMeta = keeper.truncateKeeperMetaRecordHeadIfNeeded(keepRecord.BlockID) + metaList := keeper.getKeeperMetaRecordList() + if len(metaList) == 0 { + keeper.proofDataDB.Reset() + curProofID = ancientInitSequenceID + } else { + keeper.truncateProofDataRecordHeadIfNeeded(keepRecord.BlockID) + latestProofData := keeper.getLatestProofDataRecord() + if latestProofData != nil { + curProofID = latestProofData.ProofID + 1 + } else { + curProofID = ancientInitSequenceID + } + } + + if hasTruncatedMeta || !putKeeperMetaRecordOnce { + putKeeperMetaRecordOnce = true + keeper.putKeeperMetaRecord(&keeperMetaRecord{ + BlockID: keepRecord.BlockID, + ProofID: curProofID, + KeepInterval: keepRecord.KeepInterval, + }) + } + proofRecord.ProofID = curProofID + err = keeper.putProofDataRecord(proofRecord) + keeper.latestBlockID = keepRecord.BlockID + } + keeper.opts.notifyFinishKeepCh <- err + + case queryBlockID := <-keeper.queryProofCh: + var resultProofRecord *proofDataRecord + metaList := keeper.getKeeperMetaRecordList() + if len(metaList) != 0 && (queryBlockID+keeper.opts.keepProofBlockSpan > keeper.latestBlockID) { + proofID := uint64(0) + index := len(metaList) - 1 + for index >= 0 { + m := metaList[index] + if queryBlockID >= m.BlockID { + if m.KeepInterval == 0 || queryBlockID%m.KeepInterval != 0 { // check + break + } + + proofID = m.ProofID + (queryBlockID-m.BlockID)/m.KeepInterval + resultProofRecord = keeper.getProofDataRecord(proofID) + break + } + index = index - 1 + } + } + keeper.waitQueryProofCh <- resultProofRecord + + case <-keeper.stopCh: + err = keeper.proofDataDB.Sync() + if err == nil { + err = keeper.proofDataDB.Close() + } + keeper.waitStopCh <- err + return + + case <-gcProofTicker.C: + log.Info("Start to gc proof", "latest_block_id", keeper.latestBlockID, "keep_block_span", keeper.opts.keepProofBlockSpan) + if keeper.latestBlockID > keeper.opts.keepProofBlockSpan { + gcBeforeBlockID := keeper.latestBlockID - keeper.opts.keepProofBlockSpan + var gcBeforeKeepMetaRecord *keeperMetaRecord + var gcBeforeProofDataRecord *proofDataRecord + metaList := keeper.getKeeperMetaRecordList() + proofID := uint64(0) + if len(metaList) != 0 { + index := len(metaList) - 1 + for index >= 0 { + m := metaList[index] + if gcBeforeBlockID >= m.BlockID { + gcBeforeKeepMetaRecord = m + proofID = m.ProofID + (gcBeforeBlockID-m.BlockID)/m.KeepInterval + gcBeforeProofDataRecord = keeper.getProofDataRecord(proofID) + break + } + index = index - 1 + } + } + keeper.gcKeeperMetaRecordIfNeeded(gcBeforeKeepMetaRecord) + keeper.gcProofDataRecordIfNeeded(gcBeforeProofDataRecord) + + } + } + } +} + +// getKeeperMetaRecordList returns keeper meta list. +func (keeper *ProofKeeper) getKeeperMetaRecordList() []*keeperMetaRecord { + var ( + metaList []*keeperMetaRecord + err error + iter ethdb.Iterator + ) + + iter = rawdb.IterateKeeperMeta(keeper.keeperMetaDB) + defer iter.Release() + for iter.Next() { + keyBlockID := binary.BigEndian.Uint64(iter.Key()[1:]) + m := keeperMetaRecord{} + if err = json.Unmarshal(iter.Value(), &m); err != nil { + log.Error("Failed to unmarshal keeper meta record", "key_block_id", keyBlockID, "error", err) + continue + } + if keyBlockID != m.BlockID { // check + log.Error("Failed to check consistency between key and value", "key_block_id", keyBlockID, "value_block_id", m.BlockID) + continue + } + // log.Info("Keep meta", "key_block_id", keyBlockID, "meta_record", m) + metaList = append(metaList, &m) + } + // log.Info("Succeed to get meta list", "list", metaList) + return metaList +} + +// truncateKeeperMetaRecordHeadIfNeeded is used to truncate keeper meta record head, +// which is used in reorg. +func (keeper *ProofKeeper) truncateKeeperMetaRecordHeadIfNeeded(blockID uint64) bool { + var ( + err error + iter ethdb.Iterator + batch ethdb.Batch + hasTruncated bool + ) + + iter = rawdb.IterateKeeperMeta(keeper.keeperMetaDB) + defer iter.Release() + batch = keeper.keeperMetaDB.NewBatch() + for iter.Next() { + m := keeperMetaRecord{} + if err = json.Unmarshal(iter.Value(), &m); err != nil { + continue + } + if m.BlockID >= blockID { + hasTruncated = true + rawdb.DeleteKeeperMeta(batch, m.BlockID) + } + } + err = batch.Write() + if err != nil { + log.Crit("Failed to truncate keeper meta head", "err", err) + } + // log.Info("Succeed to truncate keeper meta", "block_id", blockID, "has_truncated", hasTruncated) + return hasTruncated +} + +// putKeeperMetaRecord puts a new keeper meta record. +func (keeper *ProofKeeper) putKeeperMetaRecord(m *keeperMetaRecord) { + meta, err := json.Marshal(*m) + if err != nil { + log.Crit("Failed to marshal keeper meta record", "err", err) + } + rawdb.PutKeeperMeta(keeper.keeperMetaDB, m.BlockID, meta) + log.Info("Succeed to put keeper meta", "record", m) +} + +// gcKeeperMetaRecordIfNeeded is used to the older keeper meta record. +func (keeper *ProofKeeper) gcKeeperMetaRecordIfNeeded(meta *keeperMetaRecord) { + if !keeper.opts.enable { + return + } + if meta == nil { + return + } + metaList := keeper.getKeeperMetaRecordList() + if len(metaList) < maxKeeperMetaNumber { + return + } + + var ( + err error + iter ethdb.Iterator + batch ethdb.Batch + gcCounter uint64 + ) + + iter = rawdb.IterateKeeperMeta(keeper.keeperMetaDB) + defer iter.Release() + batch = keeper.keeperMetaDB.NewBatch() + for iter.Next() { + m := keeperMetaRecord{} + if err = json.Unmarshal(iter.Value(), &m); err != nil { + continue + } + if m.BlockID < meta.BlockID { + rawdb.DeleteKeeperMeta(batch, m.BlockID) + gcCounter++ + } + } + err = batch.Write() + if err != nil { + log.Crit("Failed to gc keeper meta", "err", err) + } + log.Info("Succeed to gc keeper meta", "gc_before_keep_meta", meta, "gc_counter", gcCounter) +} + +// truncateProofDataRecordHeadIfNeeded is used to truncate proof data record head, +// which is used in reorg. +func (keeper *ProofKeeper) truncateProofDataRecordHeadIfNeeded(blockID uint64) { + latestProofDataRecord := keeper.getLatestProofDataRecord() + if latestProofDataRecord == nil { + log.Info("Skip to truncate proof data due to proof data is empty") + return + } + if blockID > latestProofDataRecord.BlockID { + // log.Info("Skip to truncate proof data due to block id is newer") + return + } + + truncateProofID := uint64(0) + proofID := latestProofDataRecord.ProofID + for proofID > 0 { + proof := keeper.getProofDataRecord(proofID) + if proof == nil { + keeper.proofDataDB.Reset() + return + } + if proof.BlockID < blockID { + truncateProofID = proof.ProofID + break + } + proofID = proofID - 1 + } + rawdb.TruncateProofDataHead(keeper.proofDataDB, truncateProofID) + log.Info("Succeed to truncate proof data", "block_id", blockID, "truncate_proof_id", truncateProofID) +} + +// getLatestProofDataRecord return the latest proof data record. +func (keeper *ProofKeeper) getLatestProofDataRecord() *proofDataRecord { + latestProofData := rawdb.GetLatestProofData(keeper.proofDataDB) + if latestProofData == nil { + log.Info("Skip get latest proof data record due to empty") + return nil + } + var data proofDataRecord + err := json.Unmarshal(latestProofData, &data) + if err != nil { + log.Crit("Failed to unmarshal proof data", "err", err) + } + // log.Info("Succeed to get latest proof data", "record", data) + return &data +} + +// getProofDataRecord returns proof record by proofid. +func (keeper *ProofKeeper) getProofDataRecord(proofID uint64) *proofDataRecord { + latestProofData := rawdb.GetProofData(keeper.proofDataDB, proofID) + if latestProofData == nil { + log.Info("Skip get proof data record due not found", "proof_id", proofID) + return nil + } + var data proofDataRecord + err := json.Unmarshal(latestProofData, &data) + if err != nil { + log.Crit("Failed to unmarshal proof data", "err", err) + } + // log.Info("Succeed to get proof data", "record", data) + return &data +} + +// putProofDataRecord puts a new proof data record. +func (keeper *ProofKeeper) putProofDataRecord(p *proofDataRecord) error { + proof, err := json.Marshal(*p) + if err != nil { + log.Error("Failed to marshal proof data", "error", err) + return err + } + err = rawdb.PutProofData(keeper.proofDataDB, p.ProofID, proof) + // log.Info("Succeed to put proof data", "record", p, "error", err) + return err +} + +// gcProofDataRecordIfNeeded is used to the older proof data record. +func (keeper *ProofKeeper) gcProofDataRecordIfNeeded(data *proofDataRecord) { + if !keeper.opts.enable { + return + } + if data == nil { + return + } + if data.ProofID == 0 { + return + } + + rawdb.TruncateProofDataTail(keeper.proofDataDB, data.ProofID) + log.Info("Succeed to gc proof data", "gc_before_proof_data", data) +} + +// IsProposeProofQuery is used to determine whether it is proposed proof. +func (keeper *ProofKeeper) IsProposeProofQuery(address common.Address, storageKeys []string, blockID uint64) bool { + if !keeper.opts.enable { + return false + } + if l2ToL1MessagePasserAddr.Cmp(address) != 0 { + return false + } + if len(storageKeys) != 0 { + return false + } + // blockID%keepInterval == 0 is not checked because keepInterval may have been adjusted before. + _ = blockID + return true +} + +// QueryProposeProof is used to get proof which is stored in ancient proof. +func (keeper *ProofKeeper) QueryProposeProof(blockID uint64, stateRoot common.Hash) (*common.AccountResult, error) { + var ( + result *common.AccountResult + err error + startTimestamp time.Time + ) + + startTimestamp = time.Now() + defer func() { + queryProofTimer.UpdateSince(startTimestamp) + log.Info("Query propose proof", + "block_id", blockID, + "state_root", stateRoot.String(), + "error", err, "elapsed", common.PrettyDuration(time.Since(startTimestamp))) + }() + + keeper.queryProofCh <- blockID + resultProofRecord := <-keeper.waitQueryProofCh + if resultProofRecord == nil { + // Maybe the keeper was disabled for a certain period of time before. + err = fmt.Errorf("proof is not found, block_id=%d", blockID) + return nil, err + } + if resultProofRecord.BlockID != blockID { + // Maybe expected_block_id proof is not kept due to disabled or some bug + err = fmt.Errorf("proof is not found due to block is mismatch, expected_block_id=%d, actual_block_id=%d", + blockID, resultProofRecord.BlockID) + return nil, err + } + if resultProofRecord.StateRoot.Cmp(stateRoot) != 0 { + // Impossible, unless there is a bug. + err = fmt.Errorf("proof is not found due to state root is mismatch, expected_state_root=%s, actual_state_root=%s", + stateRoot.String(), resultProofRecord.StateRoot.String()) + return nil, err + } + result = &common.AccountResult{ + Address: resultProofRecord.Address, + AccountProof: resultProofRecord.AccountProof, + Balance: resultProofRecord.Balance, + CodeHash: resultProofRecord.CodeHash, + Nonce: resultProofRecord.Nonce, + StorageHash: resultProofRecord.StorageHash, + StorageProof: resultProofRecord.StorageProof, + } + return result, nil +} diff --git a/core/proof_keeper_test.go b/core/proof_keeper_test.go new file mode 100644 index 0000000000..a081f58b1a --- /dev/null +++ b/core/proof_keeper_test.go @@ -0,0 +1,198 @@ +package core + +import ( + "os" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/trie/triedb/pathdb" + "github.com/stretchr/testify/assert" +) + +const ( + testProofKeeperDBDir = "./test_proof_keeper_db" +) + +var ( + mockBlockChain *BlockChain + mockKeeperMetaDB ethdb.Database +) + +func setupTestEnv() { + mockKeeperMetaDB, _ = rawdb.Open(rawdb.OpenOptions{ + Type: "pebble", + Directory: testProofKeeperDBDir, + AncientsDirectory: testProofKeeperDBDir + "/ancient", + Namespace: "test_proof_keeper", + Cache: 10, + Handles: 10, + ReadOnly: false, + }) +} + +func cleanupTestEnv() { + mockKeeperMetaDB.Close() + os.RemoveAll(testProofKeeperDBDir) +} + +func TestProofKeeperStartAndStop(t *testing.T) { + setupTestEnv() + + keeperOpts := &proofKeeperOptions{ + enable: true, + keepProofBlockSpan: 100, + watchStartKeepCh: make(chan *pathdb.KeepRecord), + notifyFinishKeepCh: make(chan error), + } + keeper := newProofKeeper(keeperOpts) + assert.NotNil(t, keeper) + + err := keeper.Start(mockBlockChain, mockKeeperMetaDB) + assert.Nil(t, err) + + err = keeper.Stop() + assert.Nil(t, err) + + cleanupTestEnv() +} + +func TestProofKeeperGC(t *testing.T) { + setupTestEnv() + keeperOpts := &proofKeeperOptions{ + enable: true, + keepProofBlockSpan: 100, + gcInterval: 1, + watchStartKeepCh: make(chan *pathdb.KeepRecord), + notifyFinishKeepCh: make(chan error), + } + keeper := newProofKeeper(keeperOpts) + assert.NotNil(t, keeper) + + err := keeper.Start(mockBlockChain, mockKeeperMetaDB) + assert.Nil(t, err) + + for i := uint64(1); i <= 100; i++ { + keeper.putKeeperMetaRecord(&keeperMetaRecord{ + BlockID: i, + ProofID: i - 1, + KeepInterval: 1, + }) + keeper.putProofDataRecord(&proofDataRecord{ + ProofID: i - 1, + BlockID: i, + StateRoot: common.Hash{}, + Address: common.Address{}, + AccountProof: nil, + Balance: nil, + CodeHash: common.Hash{}, + Nonce: 0, + StorageHash: common.Hash{}, + StorageProof: nil, + }) + } + keeper.latestBlockID = 100 + time.Sleep(2 * time.Second) // wait gc loop + + // no gc, becase keeper.latestBlockID <= keeper.opts.keepProofBlockSpan + metaList := keeper.getKeeperMetaRecordList() + assert.Equal(t, 100, len(metaList)) + + for i := uint64(101); i <= 105; i++ { + keeper.putKeeperMetaRecord(&keeperMetaRecord{ + BlockID: i, + ProofID: i - 1, + KeepInterval: 1, + }) + keeper.putProofDataRecord(&proofDataRecord{ + ProofID: i - 1, + BlockID: i, + StateRoot: common.Hash{}, + Address: common.Address{}, + AccountProof: nil, + Balance: nil, + CodeHash: common.Hash{}, + Nonce: 0, + StorageHash: common.Hash{}, + StorageProof: nil, + }) + } + + keeper.latestBlockID = 105 + time.Sleep(2 * time.Second) // wait gc loop + + // gc keep meta which block_id < 5(latestBlockID - keepProofBlockSpan), and 1/2/3/4 blockid keeper meta is truncated. + metaList = keeper.getKeeperMetaRecordList() + assert.Equal(t, 101, len(metaList)) + + // gc proof data, truncate proof id = 4, and 0/1/2/3 proofid proof data is truncated. + assert.NotNil(t, keeper.getProofDataRecord(4)) + assert.Nil(t, keeper.getProofDataRecord(3)) + + err = keeper.Stop() + assert.Nil(t, err) + + cleanupTestEnv() +} + +func TestProofKeeperQuery(t *testing.T) { + setupTestEnv() + + keeperOpts := &proofKeeperOptions{ + enable: true, + watchStartKeepCh: make(chan *pathdb.KeepRecord), + notifyFinishKeepCh: make(chan error), + } + keeper := newProofKeeper(keeperOpts) + assert.NotNil(t, keeper) + + err := keeper.Start(mockBlockChain, mockKeeperMetaDB) + assert.Nil(t, err) + + for i := uint64(1); i <= 100; i++ { + if i%15 == 0 { + keeper.putKeeperMetaRecord(&keeperMetaRecord{ + BlockID: i, + ProofID: i - 1, + KeepInterval: 1, + }) + } + keeper.putProofDataRecord(&proofDataRecord{ + ProofID: i - 1, + BlockID: i, + StateRoot: common.Hash{}, + Address: common.Address{}, + AccountProof: nil, + Balance: nil, + CodeHash: common.Hash{}, + Nonce: 0, + StorageHash: common.Hash{}, + StorageProof: nil, + }) + + } + + keeper.latestBlockID = 100 + result, err := keeper.QueryProposeProof(45, common.Hash{}) + assert.Nil(t, err) + assert.NotNil(t, result) + result, err = keeper.QueryProposeProof(46, common.Hash{}) + assert.Nil(t, err) + assert.NotNil(t, result) + result, err = keeper.QueryProposeProof(1, common.Hash{}) // should >= 15 + assert.NotNil(t, err) + assert.Nil(t, result) + result, err = keeper.QueryProposeProof(100, common.Hash{}) + assert.Nil(t, err) + assert.NotNil(t, result) + result, err = keeper.QueryProposeProof(101, common.Hash{}) // should <= 100 + assert.NotNil(t, err) + assert.Nil(t, result) + + err = keeper.Stop() + assert.Nil(t, err) + + cleanupTestEnv() +} diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index 44a8392c57..40d60236c1 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -334,13 +334,18 @@ func ReadHeaderRange(db ethdb.Reader, number uint64, count uint64) []rlp.RawValu return rlpHeaders } // read remaining from ancients - max := count * 700 - data, err := db.AncientRange(ChainFreezerHeaderTable, i+1-count, count, max) - if err == nil && uint64(len(data)) == count { - // the data is on the order [h, h+1, .., n] -- reordering needed - for i := range data { - rlpHeaders = append(rlpHeaders, data[len(data)-1-i]) - } + data, err := db.AncientRange(ChainFreezerHeaderTable, i+1-count, count, 0) + if err != nil { + log.Error("Failed to read headers from freezer", "err", err) + return rlpHeaders + } + if uint64(len(data)) != count { + log.Warn("Incomplete read of headers from freezer", "wanted", count, "read", len(data)) + return rlpHeaders + } + // The data is on the order [h, h+1, .., n] -- reordering needed + for i := range data { + rlpHeaders = append(rlpHeaders, data[len(data)-1-i]) } return rlpHeaders } diff --git a/core/rawdb/accessors_proof.go b/core/rawdb/accessors_proof.go new file mode 100644 index 0000000000..36f2c9d72b --- /dev/null +++ b/core/rawdb/accessors_proof.go @@ -0,0 +1,75 @@ +package rawdb + +import ( + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +const ( + blockNumberLength = 8 // uint64 is 8 bytes. +) + +// IterateKeeperMeta returns keep meta iterator. +func IterateKeeperMeta(db ethdb.Iteratee) ethdb.Iterator { + return NewKeyLengthIterator(db.NewIterator(proofKeeperMetaPrefix, nil), len(proofKeeperMetaPrefix)+blockNumberLength) +} + +// DeleteKeeperMeta is used to remove the specified keeper meta. +func DeleteKeeperMeta(db ethdb.KeyValueWriter, blockID uint64) { + if err := db.Delete(proofKeeperMetaKey(blockID)); err != nil { + log.Crit("Failed to delete keeper meta", "err", err) + } +} + +// PutKeeperMeta add a new keeper meta. +func PutKeeperMeta(db ethdb.KeyValueWriter, blockID uint64, meta []byte) { + key := proofKeeperMetaKey(blockID) + if err := db.Put(key, meta); err != nil { + log.Crit("Failed to store keeper meta", "err", err) + } +} + +// GetLatestProofData returns the latest head proof data. +func GetLatestProofData(f *ResettableFreezer) []byte { + proofTable := f.freezer.tables[proposeProofTable] + if proofTable == nil { + return nil + } + blob, err := f.Ancient(proposeProofTable, proofTable.items.Load()-1) + if err != nil { + log.Error("Failed to get latest proof data", "latest_proof_id", proofTable.items.Load()-1, "error", err) + return nil + } + return blob +} + +// GetProofData returns the specified proof data. +func GetProofData(f *ResettableFreezer, proofID uint64) []byte { + proofTable := f.freezer.tables[proposeProofTable] + if proofTable == nil { + return nil + } + blob, err := f.Ancient(proposeProofTable, proofID) + if err != nil { + return nil + } + return blob +} + +// TruncateProofDataHead truncates [proofID, end...]. +func TruncateProofDataHead(f *ResettableFreezer, proofID uint64) { + f.freezer.TruncateHead(proofID) +} + +// TruncateProofDataTail truncates [start..., proofID). +func TruncateProofDataTail(f *ResettableFreezer, proofID uint64) { + f.freezer.TruncateTail(proofID) +} + +// PutProofData appends a new proof to ancient proof db, the proofID should be continuous. +func PutProofData(db ethdb.AncientWriter, proofID uint64, proof []byte) error { + _, err := db.ModifyAncients(func(op ethdb.AncientWriteOp) error { + return op.AppendRaw(proposeProofTable, proofID, proof) + }) + return err +} diff --git a/core/rawdb/accessors_proof_test.go b/core/rawdb/accessors_proof_test.go new file mode 100644 index 0000000000..601b9b90bd --- /dev/null +++ b/core/rawdb/accessors_proof_test.go @@ -0,0 +1,87 @@ +package rawdb + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +const ( + testAncientProofDir = "./test_ancient_proof" +) + +var ( + testAncientProofDB *ResettableFreezer + mockData1 = []byte{'a'} + mockData2 = []byte{'1'} +) + +func setupTestEnv() { + testAncientProofDB, _ = NewProofFreezer(testAncientProofDir, false) +} + +func cleanupTestEnv() { + testAncientProofDB.Close() + os.RemoveAll(testAncientProofDir) +} + +func TestProofDataAPI(t *testing.T) { + setupTestEnv() + var proofData []byte + + // case1: empty db + proofData = GetLatestProofData(testAncientProofDB) + assert.Nil(t, proofData) + + // case2: mismatch sequence put failed + mismatchProofID := uint64(2) // should=0 + err := PutProofData(testAncientProofDB, mismatchProofID, mockData1) + assert.NotNil(t, err) + proofData = GetLatestProofData(testAncientProofDB) + assert.Nil(t, proofData) + + // case3: put/get succeed + matchProofID := uint64(0) + err = PutProofData(testAncientProofDB, matchProofID, mockData1) + assert.Nil(t, err) + err = PutProofData(testAncientProofDB, matchProofID+1, mockData2) + assert.Nil(t, err) + proofData = GetLatestProofData(testAncientProofDB) + assert.Equal(t, proofData, mockData2) + proofData = GetProofData(testAncientProofDB, 0) + assert.Equal(t, proofData, mockData1) + proofData = GetProofData(testAncientProofDB, 1) + assert.Equal(t, proofData, mockData2) + + // case4: truncate head + TruncateProofDataHead(testAncientProofDB, 1) + proofData = GetProofData(testAncientProofDB, 1) + assert.Nil(t, proofData) + proofData = GetProofData(testAncientProofDB, 0) + assert.Equal(t, proofData, mockData1) + + // case5: restart + testAncientProofDB.Close() + setupTestEnv() + proofData = GetProofData(testAncientProofDB, 0) + assert.Equal(t, proofData, mockData1) + proofData = GetLatestProofData(testAncientProofDB) + assert.Equal(t, proofData, mockData1) + + // case6: truncate tail + PutProofData(testAncientProofDB, matchProofID+1, mockData2) + proofData = GetProofData(testAncientProofDB, matchProofID) + assert.Equal(t, proofData, mockData1) + PutProofData(testAncientProofDB, matchProofID+2, mockData2) + TruncateProofDataTail(testAncientProofDB, matchProofID+1) + proofData = GetProofData(testAncientProofDB, matchProofID) + assert.Nil(t, proofData) + proofData = GetProofData(testAncientProofDB, matchProofID+1) + assert.Equal(t, proofData, mockData2) + TruncateProofDataTail(testAncientProofDB, matchProofID+2) + proofData = GetProofData(testAncientProofDB, matchProofID+1) + assert.Nil(t, proofData) + + cleanupTestEnv() +} diff --git a/core/rawdb/accessors_snapshot.go b/core/rawdb/accessors_snapshot.go index 3c82b3f731..5e0d6b67c5 100644 --- a/core/rawdb/accessors_snapshot.go +++ b/core/rawdb/accessors_snapshot.go @@ -18,10 +18,12 @@ package rawdb import ( "encoding/binary" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" ) // ReadSnapshotDisabled retrieves if the snapshot maintenance is disabled. @@ -74,6 +76,10 @@ func DeleteSnapshotRoot(db ethdb.KeyValueWriter) { // ReadAccountSnapshot retrieves the snapshot entry of an account trie leaf. func ReadAccountSnapshot(db ethdb.KeyValueReader, hash common.Hash) []byte { + if metrics.EnabledExpensive { + start := time.Now() + defer func() { rawdbGetAccountSnapNodeTimer.UpdateSince(start) }() + } data, _ := db.Get(accountSnapshotKey(hash)) return data } @@ -94,6 +100,10 @@ func DeleteAccountSnapshot(db ethdb.KeyValueWriter, hash common.Hash) { // ReadStorageSnapshot retrieves the snapshot entry of an storage trie leaf. func ReadStorageSnapshot(db ethdb.KeyValueReader, accountHash, storageHash common.Hash) []byte { + if metrics.EnabledExpensive { + start := time.Now() + defer func() { rawdbGetStorageSnapNodeTimer.UpdateSince(start) }() + } data, _ := db.Get(storageSnapshotKey(accountHash, storageHash)) return data } diff --git a/core/rawdb/accessors_trie.go b/core/rawdb/accessors_trie.go index 78f1a70b1c..73bd040d72 100644 --- a/core/rawdb/accessors_trie.go +++ b/core/rawdb/accessors_trie.go @@ -19,11 +19,13 @@ package rawdb import ( "fmt" "sync" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "golang.org/x/crypto/sha3" ) @@ -68,6 +70,10 @@ func (h *hasher) release() { // ReadAccountTrieNode retrieves the account trie node and the associated node // hash with the specified node path. func ReadAccountTrieNode(db ethdb.KeyValueReader, path []byte) ([]byte, common.Hash) { + if metrics.EnabledExpensive { + start := time.Now() + defer func() { rawdbGetAccountTrieNodeTimer.UpdateSince(start) }() + } data, err := db.Get(accountTrieNodeKey(path)) if err != nil { return nil, common.Hash{} @@ -116,6 +122,10 @@ func DeleteAccountTrieNode(db ethdb.KeyValueWriter, path []byte) { // ReadStorageTrieNode retrieves the storage trie node and the associated node // hash with the specified node path. func ReadStorageTrieNode(db ethdb.KeyValueReader, accountHash common.Hash, path []byte) ([]byte, common.Hash) { + if metrics.EnabledExpensive { + start := time.Now() + defer func() { rawdbGetStorageTrieNodeTimer.UpdateSince(start) }() + } data, err := db.Get(storageTrieNodeKey(accountHash, path)) if err != nil { return nil, common.Hash{} @@ -292,6 +302,11 @@ func ReadStateScheme(db ethdb.Reader) string { if len(blob) != 0 { return PathScheme } + // The root node might be deleted during the initial snap sync, check + // the persistent state id then. + if id := ReadPersistentStateID(db); id != 0 { + return PathScheme + } // In a hash-based scheme, the genesis state is consistently stored // on the disk. To assess the scheme of the persistent state, it // suffices to inspect the scheme of the genesis state. diff --git a/core/rawdb/ancient_scheme.go b/core/rawdb/ancient_scheme.go index 6f409fff1d..d6b3f1b76d 100644 --- a/core/rawdb/ancient_scheme.go +++ b/core/rawdb/ancient_scheme.go @@ -66,16 +66,31 @@ var stateFreezerNoSnappy = map[string]bool{ stateHistoryStorageData: false, } +const ( + proposeProofTable = "propose.proof" +) + +var proofFreezerNoSnappy = map[string]bool{ + proposeProofTable: true, +} + // The list of identifiers of ancient stores. var ( - chainFreezerName = "chain" // the folder name of chain segment ancient store. - stateFreezerName = "state" // the folder name of reverse diff ancient store. + ChainFreezerName = "chain" // the folder name of chain segment ancient store. + StateFreezerName = "state" // the folder name of reverse diff ancient store. + ProofFreezerName = "proof" // the folder name of propose withdraw proof store. + ) // freezers the collections of all builtin freezers. -var freezers = []string{chainFreezerName, stateFreezerName} +var freezers = []string{ChainFreezerName, StateFreezerName, ProofFreezerName} // NewStateFreezer initializes the freezer for state history. func NewStateFreezer(ancientDir string, readOnly bool) (*ResettableFreezer, error) { - return NewResettableFreezer(filepath.Join(ancientDir, stateFreezerName), "eth/db/state", readOnly, stateHistoryTableSize, stateFreezerNoSnappy) + return NewResettableFreezer(filepath.Join(ancientDir, StateFreezerName), "eth/db/state", readOnly, stateHistoryTableSize, stateFreezerNoSnappy) +} + +// NewProofFreezer initializes the freezer for propose withdraw proof. +func NewProofFreezer(ancientDir string, readOnly bool) (*ResettableFreezer, error) { + return NewResettableFreezer(filepath.Join(ancientDir, ProofFreezerName), "eth/db/proof", readOnly, stateHistoryTableSize, proofFreezerNoSnappy) } diff --git a/core/rawdb/ancient_utils.go b/core/rawdb/ancient_utils.go index dfb2fdfb67..9b2a4b1cf5 100644 --- a/core/rawdb/ancient_utils.go +++ b/core/rawdb/ancient_utils.go @@ -18,6 +18,7 @@ package rawdb import ( "fmt" + "path/filepath" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" @@ -80,14 +81,14 @@ func inspectFreezers(db ethdb.Database) ([]freezerInfo, error) { var infos []freezerInfo for _, freezer := range freezers { switch freezer { - case chainFreezerName: - info, err := inspect(chainFreezerName, chainFreezerNoSnappy, db) + case ChainFreezerName: + info, err := inspect(ChainFreezerName, chainFreezerNoSnappy, db) if err != nil { return nil, err } infos = append(infos, info) - case stateFreezerName: + case StateFreezerName: if ReadStateScheme(db) != PathScheme { continue } @@ -101,7 +102,27 @@ func inspectFreezers(db ethdb.Database) ([]freezerInfo, error) { } defer f.Close() - info, err := inspect(stateFreezerName, stateFreezerNoSnappy, f) + info, err := inspect(StateFreezerName, stateFreezerNoSnappy, f) + if err != nil { + return nil, err + } + infos = append(infos, info) + + case ProofFreezerName: + if ReadStateScheme(db) != PathScheme { + continue + } + datadir, err := db.AncientDatadir() + if err != nil { + return nil, err + } + f, err := NewProofFreezer(datadir, true) + if err != nil { + return nil, err + } + defer f.Close() + + info, err := inspect(ProofFreezerName, proofFreezerNoSnappy, f) if err != nil { return nil, err } @@ -124,8 +145,10 @@ func InspectFreezerTable(ancient string, freezerName string, tableName string, s tables map[string]bool ) switch freezerName { - case chainFreezerName: + case ChainFreezerName: path, tables = resolveChainFreezerDir(ancient), chainFreezerNoSnappy + case StateFreezerName: + path, tables = filepath.Join(ancient, freezerName), stateFreezerNoSnappy default: return fmt.Errorf("unknown freezer, supported ones: %v", freezers) } diff --git a/core/rawdb/chain_freezer.go b/core/rawdb/chain_freezer.go index cbfaf5b9e4..bb2c409dbb 100644 --- a/core/rawdb/chain_freezer.go +++ b/core/rawdb/chain_freezer.go @@ -131,7 +131,7 @@ func (f *chainFreezer) freeze(db ethdb.KeyValueStore) { continue case *number < threshold: - log.Debug("Current full block not old enough", "number", *number, "hash", hash, "delay", threshold) + log.Debug("Current full block not old enough to freeze", "number", *number, "hash", hash, "delay", threshold) backoff = true continue diff --git a/core/rawdb/database.go b/core/rawdb/database.go index 1d7b7d1ca8..ba222a6b46 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -178,7 +178,7 @@ func resolveChainFreezerDir(ancient string) string { // sub folder, if not then two possibilities: // - chain freezer is not initialized // - chain freezer exists in legacy location (root ancient folder) - freezer := path.Join(ancient, chainFreezerName) + freezer := path.Join(ancient, ChainFreezerName) if !common.FileExist(freezer) { if !common.FileExist(ancient) { // The entire ancient store is not initialized, still use the sub @@ -449,6 +449,28 @@ func (s *stat) Count() string { return s.count.String() } +func PruneHashTrieNodeInDatabase(db ethdb.Database) error { + it := db.NewIterator([]byte{}, []byte{}) + defer it.Release() + + total_num := 0 + for it.Next() { + var key = it.Key() + switch { + case IsLegacyTrieNode(key, it.Value()): + db.Delete(key) + total_num++ + if total_num%100000 == 0 { + log.Info("Pruning hash-base trie nodes", "complete progress", total_num) + } + default: + continue + } + } + log.Info("Pruning hash-base trie nodes", "complete progress", total_num) + return nil +} + // InspectDatabase traverses the entire database and checks the size // of all different categories of data. func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { diff --git a/core/rawdb/freezer_batch.go b/core/rawdb/freezer_batch.go index 3cc7d84f4e..84a63a4518 100644 --- a/core/rawdb/freezer_batch.go +++ b/core/rawdb/freezer_batch.go @@ -182,19 +182,27 @@ func (batch *freezerTableBatch) maybeCommit() error { // commit writes the batched items to the backing freezerTable. func (batch *freezerTableBatch) commit() error { - // Write data. + // Write data. The head file is fsync'd after write to ensure the + // data is truly transferred to disk. _, err := batch.t.head.Write(batch.dataBuffer) if err != nil { return err } + if err := batch.t.head.Sync(); err != nil { + return err + } dataSize := int64(len(batch.dataBuffer)) batch.dataBuffer = batch.dataBuffer[:0] - // Write indices. + // Write indices. The index file is fsync'd after write to ensure the + // data indexes are truly transferred to disk. _, err = batch.t.index.Write(batch.indexBuffer) if err != nil { return err } + if err := batch.t.index.Sync(); err != nil { + return err + } indexSize := int64(len(batch.indexBuffer)) batch.indexBuffer = batch.indexBuffer[:0] diff --git a/core/rawdb/freezer_resettable.go b/core/rawdb/freezer_resettable.go index 0a3892bcdf..7a85489738 100644 --- a/core/rawdb/freezer_resettable.go +++ b/core/rawdb/freezer_resettable.go @@ -22,6 +22,7 @@ import ( "sync" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" ) const tmpSuffix = ".tmp" @@ -118,9 +119,10 @@ func (f *ResettableFreezer) Ancient(kind string, number uint64) ([]byte, error) // AncientRange retrieves multiple items in sequence, starting from the index 'start'. // It will return -// - at most 'max' items, -// - at least 1 item (even if exceeding the maxByteSize), but will otherwise -// return as many items as fit into maxByteSize +// - at most 'count' items, +// - if maxBytes is specified: at least 1 item (even if exceeding the maxByteSize), +// but will otherwise return as many items as fit into maxByteSize. +// - if maxBytes is not specified, 'count' items will be returned if they are present. func (f *ResettableFreezer) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) { f.lock.RLock() defer f.lock.RUnlock() @@ -224,6 +226,7 @@ func cleanup(path string) error { } for _, name := range names { if name == filepath.Base(path)+tmpSuffix { + log.Info("Removed leftover freezer directory", "name", name) return os.RemoveAll(filepath.Join(parent, name)) } } diff --git a/core/rawdb/freezer_table.go b/core/rawdb/freezer_table.go index cb32d61ae8..4b9d510e82 100644 --- a/core/rawdb/freezer_table.go +++ b/core/rawdb/freezer_table.go @@ -215,7 +215,9 @@ func (t *freezerTable) repair() error { if t.readonly { return fmt.Errorf("index file(path: %s, name: %s) size is not a multiple of %d", t.path, t.name, indexEntrySize) } - truncateFreezerFile(t.index, stat.Size()-overflow) // New file can't trigger this path + if err := truncateFreezerFile(t.index, stat.Size()-overflow); err != nil { + return err + } // New file can't trigger this path } // Retrieve the file sizes and prepare for truncation if stat, err = t.index.Stat(); err != nil { @@ -257,6 +259,12 @@ func (t *freezerTable) repair() error { t.index.ReadAt(buffer, offsetsSize-indexEntrySize) lastIndex.unmarshalBinary(buffer) } + // Print an error log if the index is corrupted due to an incorrect + // last index item. While it is theoretically possible to have a zero offset + // by storing all zero-size items, it is highly unlikely to occur in practice. + if lastIndex.offset == 0 && offsetsSize/indexEntrySize > 1 { + log.Error("Corrupted index file detected", "lastOffset", lastIndex.offset, "indexes", offsetsSize/indexEntrySize) + } if t.readonly { t.head, err = t.openFile(lastIndex.filenum, openFreezerFileForReadOnly) } else { @@ -349,7 +357,7 @@ func (t *freezerTable) repair() error { return err } if verbose { - t.logger.Info("Chain freezer table opened", "items", t.items.Load(), "size", t.headBytes) + t.logger.Info("Chain freezer table opened", "items", t.items.Load(), "deleted", t.itemOffset.Load(), "hidden", t.itemHidden.Load(), "tailId", t.tailId, "headId", t.headId, "size", t.headBytes) } else { t.logger.Debug("Chain freezer table opened", "items", t.items.Load(), "size", common.StorageSize(t.headBytes)) } @@ -410,6 +418,9 @@ func (t *freezerTable) truncateHead(items uint64) error { if err := truncateFreezerFile(t.index, int64(length+1)*indexEntrySize); err != nil { return err } + if err := t.index.Sync(); err != nil { + return err + } // Calculate the new expected size of the data file and truncate it var expected indexEntry if length == 0 { @@ -432,6 +443,7 @@ func (t *freezerTable) truncateHead(items uint64) error { // Release any files _after the current head -- both the previous head // and any files which may have been opened for reading t.releaseFilesAfter(expected.filenum, true) + // Set back the historic head t.head = newHead t.headId = expected.filenum @@ -439,6 +451,9 @@ func (t *freezerTable) truncateHead(items uint64) error { if err := truncateFreezerFile(t.head, int64(expected.offset)); err != nil { return err } + if err := t.head.Sync(); err != nil { + return err + } // All data files truncated, set internal counters and return t.headBytes = int64(expected.offset) t.items.Store(items) @@ -452,6 +467,20 @@ func (t *freezerTable) truncateHead(items uint64) error { return nil } +// sizeHidden returns the total data size of hidden items in the freezer table. +// This function assumes the lock is already held. +func (t *freezerTable) sizeHidden() (uint64, error) { + hidden, offset := t.itemHidden.Load(), t.itemOffset.Load() + if hidden <= offset { + return 0, nil + } + indices, err := t.getIndices(hidden-1, 1) + if err != nil { + return 0, err + } + return uint64(indices[1].offset), nil +} + // truncateTail discards any recent data before the provided threshold number. func (t *freezerTable) truncateTail(items uint64) error { t.lock.Lock() @@ -480,6 +509,12 @@ func (t *freezerTable) truncateTail(items uint64) error { newTail.unmarshalBinary(buffer) newTailId = newTail.filenum } + // Save the old size for metrics tracking. This needs to be done + // before any updates to either itemHidden or itemOffset. + oldSize, err := t.sizeNolock() + if err != nil { + return err + } // Update the virtual tail marker and hidden these entries in table. t.itemHidden.Store(items) if err := writeMetadata(t.meta, newMetadata(items)); err != nil { @@ -494,18 +529,12 @@ func (t *freezerTable) truncateTail(items uint64) error { if t.tailId > newTailId { return fmt.Errorf("invalid index, tail-file %d, item-file %d", t.tailId, newTailId) } - // Hidden items exceed the current tail file, drop the relevant - // data files. We need to truncate, save the old size for metrics - // tracking. - oldSize, err := t.sizeNolock() - if err != nil { - return err - } // Count how many items can be deleted from the file. var ( newDeleted = items deleted = t.itemOffset.Load() ) + // Hidden items exceed the current tail file, drop the relevant data files. for current := items - 1; current >= deleted; current -= 1 { if _, err := t.index.ReadAt(buffer, int64((current-deleted+1)*indexEntrySize)); err != nil { return err @@ -522,6 +551,10 @@ func (t *freezerTable) truncateTail(items uint64) error { if err := t.meta.Sync(); err != nil { return err } + // Close the index file before shorten it. + if err := t.index.Close(); err != nil { + return err + } // Truncate the deleted index entries from the index file. err = copyFrom(t.index.Name(), t.index.Name(), indexEntrySize*(newDeleted-deleted+1), func(f *os.File) error { tailIndex := indexEntry{ @@ -535,13 +568,14 @@ func (t *freezerTable) truncateTail(items uint64) error { return err } // Reopen the modified index file to load the changes - if err := t.index.Close(); err != nil { - return err - } t.index, err = openFreezerFileForAppend(t.index.Name()) if err != nil { return err } + // Sync the file to ensure changes are flushed to disk + if err := t.index.Sync(); err != nil { + return err + } // Release any files before the current tail t.tailId = newTailId t.itemOffset.Store(newDeleted) @@ -578,10 +612,12 @@ func (t *freezerTable) Close() error { // error on Windows. doClose(t.index, true, true) doClose(t.meta, true, true) + // The preopened non-head data-files are all opened in readonly. // The head is opened in rw-mode, so we sync it here - but since it's also // part of t.files, it will be closed in the loop below. doClose(t.head, true, false) // sync but do not close + for _, f := range t.files { doClose(f, false, true) // close but do not sync } @@ -658,6 +694,7 @@ func (t *freezerTable) releaseFilesBefore(num uint32, remove bool) { func (t *freezerTable) getIndices(from, count uint64) ([]*indexEntry, error) { // Apply the table-offset from = from - t.itemOffset.Load() + // For reading N items, we need N+1 indices. buffer := make([]byte, (count+1)*indexEntrySize) if _, err := t.index.ReadAt(buffer, int64(from*indexEntrySize)); err != nil { @@ -774,7 +811,7 @@ func (t *freezerTable) retrieveItems(start, count, maxBytes uint64) ([]byte, []i return fmt.Errorf("missing data file %d", fileId) } if _, err := dataFile.ReadAt(output[len(output)-length:], int64(start)); err != nil { - return err + return fmt.Errorf("%w, fileid: %d, start: %d, length: %d", err, fileId, start, length) } return nil } @@ -848,14 +885,18 @@ func (t *freezerTable) size() (uint64, error) { return t.sizeNolock() } -// sizeNolock returns the total data size in the freezer table without obtaining -// the mutex first. +// sizeNolock returns the total data size in the freezer table. This function +// assumes the lock is already held. func (t *freezerTable) sizeNolock() (uint64, error) { stat, err := t.index.Stat() if err != nil { return 0, err } - total := uint64(t.maxFileSize)*uint64(t.headId-t.tailId) + uint64(t.headBytes) + uint64(stat.Size()) + hidden, err := t.sizeHidden() + if err != nil { + return 0, err + } + total := uint64(t.maxFileSize)*uint64(t.headId-t.tailId) + uint64(t.headBytes) + uint64(stat.Size()) - hidden return total, nil } diff --git a/core/rawdb/freezer_table_test.go b/core/rawdb/freezer_table_test.go index 939d093946..4471463932 100644 --- a/core/rawdb/freezer_table_test.go +++ b/core/rawdb/freezer_table_test.go @@ -658,6 +658,13 @@ func TestFreezerOffset(t *testing.T) { } } +func assertTableSize(t *testing.T, f *freezerTable, size int) { + t.Helper() + if got, err := f.size(); got != uint64(size) { + t.Fatalf("expected size of %d bytes, got %d, err: %v", size, got, err) + } +} + func TestTruncateTail(t *testing.T) { t.Parallel() rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() @@ -692,6 +699,9 @@ func TestTruncateTail(t *testing.T) { 5: getChunk(20, 0xaa), 6: getChunk(20, 0x11), }) + // maxFileSize*fileCount + headBytes + indexFileSize - hiddenBytes + expected := 20*7 + 48 - 0 + assertTableSize(t, f, expected) // truncate single element( item 0 ), deletion is only supported at file level f.truncateTail(1) @@ -707,6 +717,8 @@ func TestTruncateTail(t *testing.T) { 5: getChunk(20, 0xaa), 6: getChunk(20, 0x11), }) + expected = 20*7 + 48 - 20 + assertTableSize(t, f, expected) // Reopen the table, the deletion information should be persisted as well f.Close() @@ -739,6 +751,8 @@ func TestTruncateTail(t *testing.T) { 5: getChunk(20, 0xaa), 6: getChunk(20, 0x11), }) + expected = 20*5 + 36 - 0 + assertTableSize(t, f, expected) // Reopen the table, the above testing should still pass f.Close() @@ -760,6 +774,23 @@ func TestTruncateTail(t *testing.T) { 6: getChunk(20, 0x11), }) + // truncate 3 more elements( item 2, 3, 4), the file 1 should be deleted + // file 2 should only contain item 5 + f.truncateTail(5) + checkRetrieveError(t, f, map[uint64]error{ + 0: errOutOfBounds, + 1: errOutOfBounds, + 2: errOutOfBounds, + 3: errOutOfBounds, + 4: errOutOfBounds, + }) + checkRetrieve(t, f, map[uint64][]byte{ + 5: getChunk(20, 0xaa), + 6: getChunk(20, 0x11), + }) + expected = 20*3 + 24 - 20 + assertTableSize(t, f, expected) + // truncate all, the entire freezer should be deleted f.truncateTail(7) checkRetrieveError(t, f, map[uint64]error{ @@ -771,6 +802,8 @@ func TestTruncateTail(t *testing.T) { 5: errOutOfBounds, 6: errOutOfBounds, }) + expected = 12 + assertTableSize(t, f, expected) } func TestTruncateHead(t *testing.T) { diff --git a/core/rawdb/freezer_utils.go b/core/rawdb/freezer_utils.go index 1bbb50c498..752e95ba6a 100644 --- a/core/rawdb/freezer_utils.go +++ b/core/rawdb/freezer_utils.go @@ -73,11 +73,7 @@ func copyFrom(srcPath, destPath string, offset uint64, before func(f *os.File) e return err } f = nil - - if err := os.Rename(fname, destPath); err != nil { - return err - } - return nil + return os.Rename(fname, destPath) } // openFreezerFileForAppend opens a freezer table file and seeks to the end diff --git a/core/rawdb/metrics.go b/core/rawdb/metrics.go new file mode 100644 index 0000000000..b4c09f8689 --- /dev/null +++ b/core/rawdb/metrics.go @@ -0,0 +1,10 @@ +package rawdb + +import "github.com/ethereum/go-ethereum/metrics" + +var ( + rawdbGetAccountTrieNodeTimer = metrics.NewRegisteredTimer("rawdb/get/account/trienode/time", nil) + rawdbGetStorageTrieNodeTimer = metrics.NewRegisteredTimer("rawdb/get/storage/trienode/time", nil) + rawdbGetAccountSnapNodeTimer = metrics.NewRegisteredTimer("rawdb/get/account/snapnode/time", nil) + rawdbGetStorageSnapNodeTimer = metrics.NewRegisteredTimer("rawdb/get/storage/snapnode/time", nil) +) diff --git a/core/rawdb/schema.go b/core/rawdb/schema.go index 8e82459e82..4fd1d3fcc9 100644 --- a/core/rawdb/schema.go +++ b/core/rawdb/schema.go @@ -115,6 +115,9 @@ var ( trieNodeStoragePrefix = []byte("O") // trieNodeStoragePrefix + accountHash + hexPath -> trie node stateIDPrefix = []byte("L") // stateIDPrefix + state root -> state id + // which is used by proof keeper. + proofKeeperMetaPrefix = []byte("p") // proofKeeperMetaPrefix + num (uint64 big endian) -> proof keeper meta + PreimagePrefix = []byte("secure-key-") // PreimagePrefix + hash -> preimage configPrefix = []byte("ethereum-config-") // config prefix for the db genesisPrefix = []byte("ethereum-genesis-") // genesis state prefix for the db @@ -132,6 +135,10 @@ var ( CliqueSnapshotPrefix = []byte("clique-") + BestUpdateKey = []byte("update-") // bigEndian64(syncPeriod) -> RLP(types.LightClientUpdate) (nextCommittee only referenced by root hash) + FixedCommitteeRootKey = []byte("fixedRoot-") // bigEndian64(syncPeriod) -> committee root hash + SyncCommitteeKey = []byte("committee-") // bigEndian64(syncPeriod) -> serialized committee + preimageCounter = metrics.NewRegisteredCounter("db/preimage/total", nil) preimageHitCounter = metrics.NewRegisteredCounter("db/preimage/hits", nil) ) @@ -161,6 +168,11 @@ func headerKey(number uint64, hash common.Hash) []byte { return append(append(headerPrefix, encodeBlockNumber(number)...), hash.Bytes()...) } +// proofKeeperMetaKey = proofKeeperMetaPrefix + num (uint64 big endian) +func proofKeeperMetaKey(number uint64) []byte { + return append(proofKeeperMetaPrefix, encodeBlockNumber(number)...) +} + // headerTDKey = headerPrefix + num (uint64 big endian) + hash + headerTDSuffix func headerTDKey(number uint64, hash common.Hash) []byte { return append(headerKey(number, hash), headerTDSuffix...) diff --git a/core/state/database.go b/core/state/database.go index 9467c8f72e..1a753fdfc6 100644 --- a/core/state/database.go +++ b/core/state/database.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" + "github.com/crate-crypto/go-ipa/banderwagon" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/core/rawdb" @@ -28,6 +29,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie/trienode" + "github.com/ethereum/go-ethereum/trie/utils" ) const ( @@ -36,6 +38,12 @@ const ( // Cache size granted for caching clean code. codeCacheSize = 64 * 1024 * 1024 + + // commitmentSize is the size of commitment stored in cache. + commitmentSize = banderwagon.UncompressedSize + + // Cache item granted for caching commitment results. + commitmentCacheItems = 64 * 1024 * 1024 / (commitmentSize + common.AddressLength) ) // Database wraps access to tries and contract code. @@ -44,7 +52,7 @@ type Database interface { OpenTrie(root common.Hash) (Trie, error) // OpenStorageTrie opens the storage trie of an account. - OpenStorageTrie(stateRoot common.Hash, address common.Address, root common.Hash) (Trie, error) + OpenStorageTrie(stateRoot common.Hash, address common.Address, root common.Hash, trie Trie) (Trie, error) // CopyTrie returns an independent copy of the given trie. CopyTrie(Trie) Trie @@ -60,6 +68,9 @@ type Database interface { // TrieDB returns the underlying trie database for managing trie nodes. TrieDB() *trie.Database + + // NoTries returns whether the database has tries storage. + NoTries() bool } // Trie is a Ethereum Merkle Patricia trie. @@ -70,11 +81,6 @@ type Trie interface { // TODO(fjl): remove this when StateTrie is removed GetKey([]byte) []byte - // GetStorage returns the value for key stored in the trie. The value bytes - // must not be modified by the caller. If a node was not found in the database, - // a trie.MissingNodeError is returned. - GetStorage(addr common.Address, key []byte) ([]byte, error) - // GetAccount abstracts an account read from the trie. It retrieves the // account blob from the trie with provided account address and decodes it // with associated decoding algorithm. If the specified account is not in @@ -83,27 +89,32 @@ type Trie interface { // be returned. GetAccount(address common.Address) (*types.StateAccount, error) - // UpdateStorage associates key with value in the trie. If value has length zero, - // any existing value is deleted from the trie. The value bytes must not be modified - // by the caller while they are stored in the trie. If a node was not found in the - // database, a trie.MissingNodeError is returned. - UpdateStorage(addr common.Address, key, value []byte) error + // GetStorage returns the value for key stored in the trie. The value bytes + // must not be modified by the caller. If a node was not found in the database, + // a trie.MissingNodeError is returned. + GetStorage(addr common.Address, key []byte) ([]byte, error) // UpdateAccount abstracts an account write to the trie. It encodes the // provided account object with associated algorithm and then updates it // in the trie with provided address. UpdateAccount(address common.Address, account *types.StateAccount) error - // UpdateContractCode abstracts code write to the trie. It is expected - // to be moved to the stateWriter interface when the latter is ready. - UpdateContractCode(address common.Address, codeHash common.Hash, code []byte) error + // UpdateStorage associates key with value in the trie. If value has length zero, + // any existing value is deleted from the trie. The value bytes must not be modified + // by the caller while they are stored in the trie. If a node was not found in the + // database, a trie.MissingNodeError is returned. + UpdateStorage(addr common.Address, key, value []byte) error + + // DeleteAccount abstracts an account deletion from the trie. + DeleteAccount(address common.Address) error // DeleteStorage removes any existing value for key from the trie. If a node // was not found in the database, a trie.MissingNodeError is returned. DeleteStorage(addr common.Address, key []byte) error - // DeleteAccount abstracts an account deletion from the trie. - DeleteAccount(address common.Address) error + // UpdateContractCode abstracts code write to the trie. It is expected + // to be moved to the stateWriter interface when the latter is ready. + UpdateContractCode(address common.Address, codeHash common.Hash, code []byte) error // Hash returns the root hash of the trie. It does not write to the database and // can be used even if the trie doesn't have one. @@ -148,6 +159,7 @@ func NewDatabaseWithConfig(db ethdb.Database, config *trie.Config) Database { codeSizeCache: lru.NewCache[common.Hash, int](codeSizeCacheSize), codeCache: lru.NewSizeConstrainedCache[common.Hash, []byte](codeCacheSize), triedb: trie.NewDatabase(db, config), + noTries: config != nil && config.NoTries, } } @@ -158,6 +170,7 @@ func NewDatabaseWithNodeDB(db ethdb.Database, triedb *trie.Database) Database { codeSizeCache: lru.NewCache[common.Hash, int](codeSizeCacheSize), codeCache: lru.NewSizeConstrainedCache[common.Hash, []byte](codeCacheSize), triedb: triedb, + noTries: triedb != nil && triedb.Config() != nil && triedb.Config().NoTries, } } @@ -166,10 +179,18 @@ type cachingDB struct { codeSizeCache *lru.Cache[common.Hash, int] codeCache *lru.SizeConstrainedCache[common.Hash, []byte] triedb *trie.Database + noTries bool } // OpenTrie opens the main account trie at a specific root hash. func (db *cachingDB) OpenTrie(root common.Hash) (Trie, error) { + if db.noTries { + return trie.NewEmptyTrie(), nil + } + + if db.triedb.IsVerkle() { + return trie.NewVerkleTrie(root, db.triedb, utils.NewPointCache(commitmentCacheItems)) + } tr, err := trie.NewStateTrie(trie.StateTrieID(root), db.triedb) if err != nil { return nil, err @@ -178,7 +199,16 @@ func (db *cachingDB) OpenTrie(root common.Hash) (Trie, error) { } // OpenStorageTrie opens the storage trie of an account. -func (db *cachingDB) OpenStorageTrie(stateRoot common.Hash, address common.Address, root common.Hash) (Trie, error) { +func (db *cachingDB) OpenStorageTrie(stateRoot common.Hash, address common.Address, root common.Hash, self Trie) (Trie, error) { + if db.noTries { + return trie.NewEmptyTrie(), nil + } + // In the verkle case, there is only one tree. But the two-tree structure + // is hardcoded in the codebase. So we need to return the same trie in this + // case. + if db.triedb.IsVerkle() { + return self, nil + } tr, err := trie.NewStateTrie(trie.StorageTrieID(stateRoot, crypto.Keccak256Hash(address.Bytes()), root), db.triedb) if err != nil { return nil, err @@ -191,6 +221,8 @@ func (db *cachingDB) CopyTrie(t Trie) Trie { switch t := t.(type) { case *trie.StateTrie: return t.Copy() + case *trie.EmptyTrie: + return t.Copy() default: panic(fmt.Errorf("unknown trie type %T", t)) } @@ -246,3 +278,7 @@ func (db *cachingDB) DiskDB() ethdb.KeyValueStore { func (db *cachingDB) TrieDB() *trie.Database { return db.triedb } + +func (db *cachingDB) NoTries() bool { + return db.noTries +} diff --git a/core/state/dump.go b/core/state/dump.go index 948975d8e1..1b0c0c0dae 100644 --- a/core/state/dump.go +++ b/core/state/dump.go @@ -49,21 +49,24 @@ type DumpCollector interface { // DumpAccount represents an account in the state. type DumpAccount struct { - Balance string `json:"balance"` - Nonce uint64 `json:"nonce"` - Root hexutil.Bytes `json:"root"` - CodeHash hexutil.Bytes `json:"codeHash"` - Code hexutil.Bytes `json:"code,omitempty"` - Storage map[common.Hash]string `json:"storage,omitempty"` - Address *common.Address `json:"address,omitempty"` // Address only present in iterative (line-by-line) mode - SecureKey hexutil.Bytes `json:"key,omitempty"` // If we don't have address, we can output the key + Balance string `json:"balance"` + Nonce uint64 `json:"nonce"` + Root hexutil.Bytes `json:"root"` + CodeHash hexutil.Bytes `json:"codeHash"` + Code hexutil.Bytes `json:"code,omitempty"` + Storage map[common.Hash]string `json:"storage,omitempty"` + Address *common.Address `json:"address,omitempty"` // Address only present in iterative (line-by-line) mode + AddressHash hexutil.Bytes `json:"key,omitempty"` // If we don't have address, we can output the key } // Dump represents the full dump in a collected format, as one large map. type Dump struct { - Root string `json:"root"` - Accounts map[common.Address]DumpAccount `json:"accounts"` + Root string `json:"root"` + Accounts map[string]DumpAccount `json:"accounts"` + // Next can be set to represent that this dump is only partial, and Next + // is where an iterator should be positioned in order to continue the dump. + Next []byte `json:"next,omitempty"` // nil if no more accounts } // OnRoot implements DumpCollector interface @@ -73,27 +76,11 @@ func (d *Dump) OnRoot(root common.Hash) { // OnAccount implements DumpCollector interface func (d *Dump) OnAccount(addr *common.Address, account DumpAccount) { - if addr != nil { - d.Accounts[*addr] = account + if addr == nil { + d.Accounts[fmt.Sprintf("pre(%s)", account.AddressHash)] = account } -} - -// IteratorDump is an implementation for iterating over data. -type IteratorDump struct { - Root string `json:"root"` - Accounts map[common.Address]DumpAccount `json:"accounts"` - Next []byte `json:"next,omitempty"` // nil if no more accounts -} - -// OnRoot implements DumpCollector interface -func (d *IteratorDump) OnRoot(root common.Hash) { - d.Root = fmt.Sprintf("%x", root) -} - -// OnAccount implements DumpCollector interface -func (d *IteratorDump) OnAccount(addr *common.Address, account DumpAccount) { if addr != nil { - d.Accounts[*addr] = account + d.Accounts[(*addr).String()] = account } } @@ -105,14 +92,14 @@ type iterativeDump struct { // OnAccount implements DumpCollector interface func (d iterativeDump) OnAccount(addr *common.Address, account DumpAccount) { dumpAccount := &DumpAccount{ - Balance: account.Balance, - Nonce: account.Nonce, - Root: account.Root, - CodeHash: account.CodeHash, - Code: account.Code, - Storage: account.Storage, - SecureKey: account.SecureKey, - Address: addr, + Balance: account.Balance, + Nonce: account.Nonce, + Root: account.Root, + CodeHash: account.CodeHash, + Code: account.Code, + Storage: account.Storage, + AddressHash: account.AddressHash, + Address: addr, } d.Encode(dumpAccount) } @@ -142,6 +129,7 @@ func (s *StateDB) DumpToCollector(c DumpCollector, conf *DumpConfig) (nextKey [] trieIt, err := s.trie.NodeIterator(conf.Start) if err != nil { + log.Error("Trie dumping error", "err", err) return nil } it := trie.NewIterator(trieIt) @@ -150,26 +138,27 @@ func (s *StateDB) DumpToCollector(c DumpCollector, conf *DumpConfig) (nextKey [] if err := rlp.DecodeBytes(it.Value, &data); err != nil { panic(err) } - account := DumpAccount{ - Balance: data.Balance.String(), - Nonce: data.Nonce, - Root: data.Root[:], - CodeHash: data.CodeHash, - SecureKey: it.Key, - } var ( - addrBytes = s.trie.GetKey(it.Key) - addr = common.BytesToAddress(addrBytes) + account = DumpAccount{ + Balance: data.Balance.String(), + Nonce: data.Nonce, + Root: data.Root[:], + CodeHash: data.CodeHash, + AddressHash: it.Key, + } address *common.Address + addr common.Address + addrBytes = s.trie.GetKey(it.Key) ) if addrBytes == nil { - // Preimage missing missingPreimages++ if conf.OnlyWithAddresses { continue } } else { + addr = common.BytesToAddress(addrBytes) address = &addr + account.Address = address } obj := newObject(s, s.isParallel, addr, &data) if !conf.SkipCode { @@ -220,12 +209,13 @@ func (s *StateDB) DumpToCollector(c DumpCollector, conf *DumpConfig) (nextKey [] return nextKey } -// RawDump returns the entire state an a single large object +// RawDump returns the state. If the processing is aborted e.g. due to options +// reaching Max, the `Next` key is set on the returned Dump. func (s *StateDB) RawDump(opts *DumpConfig) Dump { dump := &Dump{ - Accounts: make(map[common.Address]DumpAccount), + Accounts: make(map[string]DumpAccount), } - s.DumpToCollector(dump, opts) + dump.Next = s.DumpToCollector(dump, opts) return *dump } @@ -234,7 +224,7 @@ func (s *StateDB) Dump(opts *DumpConfig) []byte { dump := s.RawDump(opts) json, err := json.MarshalIndent(dump, "", " ") if err != nil { - fmt.Println("Dump err", err) + log.Error("Error dumping state", "err", err) } return json } @@ -243,12 +233,3 @@ func (s *StateDB) Dump(opts *DumpConfig) []byte { func (s *StateDB) IterativeDump(opts *DumpConfig, output *json.Encoder) { s.DumpToCollector(iterativeDump{output}, opts) } - -// IteratorDump dumps out a batch of accounts starts with the given start key -func (s *StateDB) IteratorDump(opts *DumpConfig) IteratorDump { - iterator := &IteratorDump{ - Accounts: make(map[common.Address]DumpAccount), - } - iterator.Next = s.DumpToCollector(iterator, opts) - return *iterator -} diff --git a/core/state/iterator.go b/core/state/iterator.go index 683efd73de..dc84ce689b 100644 --- a/core/state/iterator.go +++ b/core/state/iterator.go @@ -123,7 +123,7 @@ func (it *nodeIterator) step() error { address := common.BytesToAddress(preimage) // Traverse the storage slots belong to the account - dataTrie, err := it.state.db.OpenStorageTrie(it.state.originalRoot, address, account.Root) + dataTrie, err := it.state.db.OpenStorageTrie(it.state.originalRoot, address, account.Root, it.state.trie) if err != nil { return err } diff --git a/core/state/pruner/pruner.go b/core/state/pruner/pruner.go index 6f17e052b3..5431512db3 100644 --- a/core/state/pruner/pruner.go +++ b/core/state/pruner/pruner.go @@ -28,7 +28,9 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" @@ -79,6 +81,104 @@ type Pruner struct { snaptree *snapshot.Tree } +func NewAllPruner(db ethdb.Database) (*Pruner, error) { + headBlock := rawdb.ReadHeadBlock(db) + if headBlock == nil { + return nil, errors.New("Failed to load head block") + } + return &Pruner{ + db: db, + }, nil +} + +func (p *Pruner) PruneAll(genesis *core.Genesis) error { + return pruneAll(p.db, genesis) +} + +func pruneAll(pruneDB ethdb.Database, g *core.Genesis) error { + var ( + count int + size common.StorageSize + pstart = time.Now() + logged = time.Now() + batch = pruneDB.NewBatch() + iter = pruneDB.NewIterator(nil, nil) + ) + start := time.Now() + for iter.Next() { + key := iter.Key() + if len(key) == common.HashLength { + count += 1 + size += common.StorageSize(len(key) + len(iter.Value())) + batch.Delete(key) + + var eta time.Duration // Realistically will never remain uninited + if done := binary.BigEndian.Uint64(key[:8]); done > 0 { + var ( + left = math.MaxUint64 - binary.BigEndian.Uint64(key[:8]) + speed = done/uint64(time.Since(pstart)/time.Millisecond+1) + 1 // +1s to avoid division by zero + ) + eta = time.Duration(left/speed) * time.Millisecond + } + if time.Since(logged) > 8*time.Second { + log.Info("Pruning state data", "nodes", count, "size", size, + "elapsed", common.PrettyDuration(time.Since(pstart)), "eta", common.PrettyDuration(eta)) + logged = time.Now() + } + // Recreate the iterator after every batch commit in order + // to allow the underlying compactor to delete the entries. + if batch.ValueSize() >= ethdb.IdealBatchSize { + batch.Write() + batch.Reset() + + iter.Release() + iter = pruneDB.NewIterator(nil, key) + } + } + } + if batch.ValueSize() > 0 { + batch.Write() + batch.Reset() + } + iter.Release() + log.Info("Pruned state data", "nodes", count, "size", size, "elapsed", common.PrettyDuration(time.Since(pstart))) + + // Start compactions, will remove the deleted data from the disk immediately. + // Note for small pruning, the compaction is skipped. + if count >= rangeCompactionThreshold { + cstart := time.Now() + for b := 0x00; b <= 0xf0; b += 0x10 { + var ( + start = []byte{byte(b)} + end = []byte{byte(b + 0x10)} + ) + if b == 0xf0 { + end = nil + } + log.Info("Compacting database", "range", fmt.Sprintf("%#x-%#x", start, end), "elapsed", common.PrettyDuration(time.Since(cstart))) + if err := pruneDB.Compact(start, end); err != nil { + log.Error("Database compaction failed", "error", err) + return err + } + } + log.Info("Database compaction finished", "elapsed", common.PrettyDuration(time.Since(cstart))) + } + statedb, _ := state.New(common.Hash{}, state.NewDatabase(pruneDB), nil) + for addr, account := range g.Alloc { + statedb.AddBalance(addr, account.Balance) + statedb.SetCode(addr, account.Code) + statedb.SetNonce(addr, account.Nonce) + for key, value := range account.Storage { + statedb.SetState(addr, key, value) + } + } + root := statedb.IntermediateRoot(false) + statedb.Commit(0, false) + statedb.Database().TrieDB().Commit(root, true) + log.Info("State pruning successful", "pruned", size, "elapsed", common.PrettyDuration(time.Since(start))) + return nil +} + // NewPruner creates the pruner instance. func NewPruner(db ethdb.Database, config Config) (*Pruner, error) { headBlock := rawdb.ReadHeadBlock(db) @@ -125,12 +225,12 @@ func prune(snaptree *snapshot.Tree, root common.Hash, maindb ethdb.Database, sta // dangling node is the state root is super low. So the dangling nodes in // theory will never ever be visited again. var ( - count int - size common.StorageSize - pstart = time.Now() - logged = time.Now() - batch = maindb.NewBatch() - iter = maindb.NewIterator(nil, nil) + skipped, count int + size common.StorageSize + pstart = time.Now() + logged = time.Now() + batch = maindb.NewBatch() + iter = maindb.NewIterator(nil, nil) ) for iter.Next() { key := iter.Key() @@ -149,6 +249,7 @@ func prune(snaptree *snapshot.Tree, root common.Hash, maindb ethdb.Database, sta log.Debug("Forcibly delete the middle state roots", "hash", common.BytesToHash(checkKey)) } else { if stateBloom.Contain(checkKey) { + skipped += 1 continue } } @@ -165,7 +266,7 @@ func prune(snaptree *snapshot.Tree, root common.Hash, maindb ethdb.Database, sta eta = time.Duration(left/speed) * time.Millisecond } if time.Since(logged) > 8*time.Second { - log.Info("Pruning state data", "nodes", count, "size", size, + log.Info("Pruning state data", "nodes", count, "skipped", skipped, "size", size, "elapsed", common.PrettyDuration(time.Since(pstart)), "eta", common.PrettyDuration(eta)) logged = time.Now() } diff --git a/core/state/snapshot/conversion.go b/core/state/snapshot/conversion.go index 989ee6c9b2..9e07ee8523 100644 --- a/core/state/snapshot/conversion.go +++ b/core/state/snapshot/conversion.go @@ -368,21 +368,15 @@ func generateTrieRoot(db ethdb.KeyValueWriter, scheme string, it Iterator, accou } func stackTrieGenerate(db ethdb.KeyValueWriter, scheme string, owner common.Hash, in chan trieKV, out chan common.Hash) { - var nodeWriter trie.NodeWriteFunc + options := trie.NewStackTrieOptions() if db != nil { - nodeWriter = func(path []byte, hash common.Hash, blob []byte) { + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { rawdb.WriteTrieNode(db, owner, path, hash, blob, scheme) - } + }) } - t := trie.NewStackTrie(nodeWriter) + t := trie.NewStackTrie(options) for leaf := range in { t.Update(leaf.key[:], leaf.value) } - var root common.Hash - if db == nil { - root = t.Hash() - } else { - root, _ = t.Commit() - } - out <- root + out <- t.Commit() } diff --git a/core/state/snapshot/disklayer.go b/core/state/snapshot/disklayer.go index 513f0f5aba..d563b67ca4 100644 --- a/core/state/snapshot/disklayer.go +++ b/core/state/snapshot/disklayer.go @@ -45,6 +45,16 @@ type diskLayer struct { lock sync.RWMutex } +// Release releases underlying resources; specifically the fastcache requires +// Reset() in order to not leak memory. +// OBS: It does not invoke Close on the diskdb +func (dl *diskLayer) Release() error { + if dl.cache != nil { + dl.cache.Reset() + } + return nil +} + // Root returns root hash for which this snapshot was made. func (dl *diskLayer) Root() common.Hash { return dl.root diff --git a/core/state/snapshot/generate.go b/core/state/snapshot/generate.go index 204584c956..f455a6db3f 100644 --- a/core/state/snapshot/generate.go +++ b/core/state/snapshot/generate.go @@ -230,7 +230,9 @@ func (dl *diskLayer) proveRange(ctx *generatorContext, trieId *trie.ID, prefix [ if origin == nil && !diskMore { stackTr := trie.NewStackTrie(nil) for i, key := range keys { - stackTr.Update(key, vals[i]) + if err := stackTr.Update(key, vals[i]); err != nil { + return nil, err + } } if gotRoot := stackTr.Hash(); gotRoot != root { return &proofResult{ @@ -444,7 +446,7 @@ func (dl *diskLayer) generateRange(ctx *generatorContext, trieId *trie.ID, prefi // Trie errors should never happen. Still, in case of a bug, expose the // error here, as the outer code will presume errors are interrupts, not // some deeper issues. - log.Error("State snapshotter failed to iterate trie", "err", err) + log.Error("State snapshotter failed to iterate trie", "err", iter.Err) return false, nil, iter.Err } // Delete all stale snapshot states remaining diff --git a/core/state/snapshot/generate_test.go b/core/state/snapshot/generate_test.go index 07016b675c..c25f3e7e8b 100644 --- a/core/state/snapshot/generate_test.go +++ b/core/state/snapshot/generate_test.go @@ -601,7 +601,7 @@ func testGenerateWithExtraAccounts(t *testing.T, scheme string) { } func enableLogging() { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelTrace, true))) } // Tests that snapshot generation when an extra account with storage exists in the snap state. diff --git a/core/state/snapshot/journal.go b/core/state/snapshot/journal.go index 4d070208f5..696f831a36 100644 --- a/core/state/snapshot/journal.go +++ b/core/state/snapshot/journal.go @@ -120,7 +120,7 @@ func loadAndParseJournal(db ethdb.KeyValueStore, base *diskLayer) (snapshot, jou } // loadSnapshot loads a pre-existing state snapshot backed by a key-value store. -func loadSnapshot(diskdb ethdb.KeyValueStore, triedb *trie.Database, root common.Hash, cache int, recovery bool, noBuild bool) (snapshot, bool, error) { +func loadSnapshot(diskdb ethdb.KeyValueStore, triedb *trie.Database, root common.Hash, cache int, recovery bool, noBuild bool, withoutTrie bool) (snapshot, bool, error) { // If snapshotting is disabled (initial sync in progress), don't do anything, // wait for the chain to permit us to do something meaningful if rawdb.ReadSnapshotDisabled(diskdb) { @@ -152,6 +152,9 @@ func loadSnapshot(diskdb ethdb.KeyValueStore, triedb *trie.Database, root common // which is below the snapshot. In this case the snapshot can be recovered // by re-executing blocks but right now it's unavailable. if head := snapshot.Root(); head != root { + if withoutTrie { + return snapshot, false, nil + } // If it's legacy snapshot, or it's new-format snapshot but // it's not in recovery mode, returns the error here for // rebuilding the entire snapshot forcibly. diff --git a/core/state/snapshot/snapshot.go b/core/state/snapshot/snapshot.go index b5a34ea9ff..fb706239d9 100644 --- a/core/state/snapshot/snapshot.go +++ b/core/state/snapshot/snapshot.go @@ -154,6 +154,7 @@ type Config struct { Recovery bool // Indicator that the snapshots is in the recovery mode NoBuild bool // Indicator that the snapshots generation is disallowed AsyncBuild bool // The snapshot generation is allowed to be constructed asynchronously + NoTries bool // Indicator that the snapshot tries are disabled } // Tree is an Ethereum state snapshot tree. It consists of one persistent base @@ -201,7 +202,7 @@ func New(config Config, diskdb ethdb.KeyValueStore, triedb *trie.Database, root layers: make(map[common.Hash]snapshot), } // Attempt to load a previously persisted snapshot and rebuild one if failed - head, disabled, err := loadSnapshot(diskdb, triedb, root, config.CacheSize, config.Recovery, config.NoBuild) + head, disabled, err := loadSnapshot(diskdb, triedb, root, config.CacheSize, config.Recovery, config.NoBuild, config.NoTries) if disabled { log.Warn("Snapshot maintenance disabled (syncing)") return snap, nil @@ -653,6 +654,13 @@ func diffToDisk(bottom *diffLayer) *diskLayer { return res } +// Release releases resources +func (t *Tree) Release() { + if dl := t.disklayer(); dl != nil { + dl.Release() + } +} + // Journal commits an entire diff hierarchy to disk into a single journal entry. // This is meant to be used during shutdown to persist the snapshot without // flattening everything down (bad for reorgs). diff --git a/core/state/state_object.go b/core/state/state_object.go index fd68972cf5..bcac425dd4 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -24,6 +24,8 @@ import ( "sync" "time" + "github.com/ethereum/go-ethereum/core/opcodeCompiler/compiler" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" @@ -233,7 +235,10 @@ func (s *stateObject) empty() bool { // newObject creates a state object. func newObject(dbItf StateDBer, isParallel bool, address common.Address, acct *types.StateAccount) *stateObject { db := dbItf.getBaseStateDB() - origin := acct + var ( + origin = acct + created = acct == nil // true if the account was not existent + ) if acct == nil { acct = types.NewEmptyStateAccount() } @@ -248,6 +253,7 @@ func newObject(dbItf StateDBer, isParallel bool, address common.Address, acct *t originStorage: newStorage(isParallel), pendingStorage: newStorage(isParallel), dirtyStorage: newStorage(isParallel), + created: created, } } @@ -282,7 +288,7 @@ func (s *stateObject) getTrie() (Trie, error) { s.trie = s.db.prefetcher.trie(s.addrHash, s.data.Root) } if s.trie == nil { - tr, err := s.db.db.OpenStorageTrie(s.db.originalRoot, s.address, s.data.Root) + tr, err := s.db.db.OpenStorageTrie(s.db.originalRoot, s.address, s.data.Root, s.db.trie) if err != nil { return nil, err } @@ -462,6 +468,7 @@ func (s *stateObject) updateTrie() (Trie, error) { var ( storage map[common.Hash][]byte origin map[common.Hash][]byte + hasher = crypto.NewKeccakState() ) tr, err := s.getTrie() if err != nil { @@ -471,6 +478,8 @@ func (s *stateObject) updateTrie() (Trie, error) { // Insert all the pending storage updates into the trie usedStorage := make([][]byte, 0, s.pendingStorage.Length()) + dirtyStorage := make(map[common.Hash][]byte) + s.pendingStorage.Range(func(keyItf, valueItf interface{}) bool { key := keyItf.(common.Hash) value := valueItf.(common.Hash) @@ -479,55 +488,78 @@ func (s *stateObject) updateTrie() (Trie, error) { if value == originalValue { return true } - prev, _ := s.originStorage.GetValue(key) - s.originStorage.StoreValue(key, value) - - var encoded []byte // rlp-encoded value to be used by the snapshot - if (value == common.Hash{}) { - if err := tr.DeleteStorage(s.address, key[:]); err != nil { - s.db.setError(err) - } - s.db.StorageDeleted += 1 - } else { - // Encoding []byte cannot fail, ok to ignore the error. - trimmed := common.TrimLeftZeroes(value[:]) - encoded, _ = rlp.EncodeToBytes(trimmed) - if err := tr.UpdateStorage(s.address, key[:], trimmed); err != nil { - s.db.setError(err) + var v []byte + if value != (common.Hash{}) { + value := value + v = common.TrimLeftZeroes(value[:]) + } + dirtyStorage[key] = v + return true + }) + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + for key, value := range dirtyStorage { + if len(value) == 0 { + if err := tr.DeleteStorage(s.address, key[:]); err != nil { + s.db.setError(err) + } + s.db.StorageDeleted += 1 + } else { + if err := tr.UpdateStorage(s.address, key[:], value); err != nil { + s.db.setError(err) + } + s.db.StorageUpdated += 1 } - s.db.StorageUpdated += 1 + // Cache the items for preloading + usedStorage = append(usedStorage, common.CopyBytes(key[:])) } - // Cache the mutated storage slots until commit + }() + // If state snapshotting is active, cache the data til commit + wg.Add(1) + go func() { + defer wg.Done() + s.db.StorageMux.Lock() + // The snapshot storage map for the object + storage = s.db.storages[s.addrHash] if storage == nil { - if storage = s.db.storages[s.addrHash]; storage == nil { - storage = make(map[common.Hash][]byte) - s.db.storages[s.addrHash] = storage - } + storage = make(map[common.Hash][]byte, len(dirtyStorage)) + s.db.storages[s.addrHash] = storage } - khash := crypto.HashData(s.db.hasher, key[:]) - storage[khash] = encoded // encoded will be nil if it's deleted - // Cache the original value of mutated storage slots + origin = s.db.storagesOrigin[s.address] if origin == nil { - if origin = s.db.storagesOrigin[s.address]; origin == nil { - origin = make(map[common.Hash][]byte) - s.db.storagesOrigin[s.address] = origin - } + origin = make(map[common.Hash][]byte) + s.db.storagesOrigin[s.address] = origin } - // Track the original value of slot only if it's mutated first time - if _, ok := origin[khash]; !ok { - if prev == (common.Hash{}) { - origin[khash] = nil // nil if it was not present previously - } else { - // Encoding []byte cannot fail, ok to ignore the error. - b, _ := rlp.EncodeToBytes(common.TrimLeftZeroes(prev[:])) - origin[khash] = b + s.db.StorageMux.Unlock() + for key, value := range dirtyStorage { + khash := crypto.HashData(hasher, key[:]) + + // rlp-encoded value to be used by the snapshot + var encoded []byte + if len(value) != 0 { + encoded, _ = rlp.EncodeToBytes(value) + } + storage[khash] = encoded // encoded will be nil if it's deleted + + // Track the original value of slot only if it's mutated first time + prev, _ := s.originStorage.GetValue(key) + s.originStorage.StoreValue(key, common.BytesToHash(value)) // fill back left zeroes by BytesToHash + if _, ok := origin[khash]; !ok { + if prev == (common.Hash{}) { + origin[khash] = nil // nil if it was not present previously + } else { + // Encoding []byte cannot fail, ok to ignore the error. + b, _ := rlp.EncodeToBytes(common.TrimLeftZeroes(prev[:])) + origin[khash] = b + } } } - // Cache the items for preloading - usedStorage = append(usedStorage, common.CopyBytes(key[:])) // Copy needed for closure - return true - }) + }() + wg.Wait() + if s.db.prefetcher != nil { s.db.prefetcher.used(s.addrHash, s.data.Root, usedStorage) } @@ -538,6 +570,13 @@ func (s *stateObject) updateTrie() (Trie, error) { // updateRoot flushes all cached storage mutations to trie, recalculating the // new storage trie root. func (s *stateObject) updateRoot() { + // If node runs in no trie mode, set root to empty. + defer func() { + if s.db.db.NoTries() { + s.data.Root = types.EmptyRootHash + } + }() + // Flush cached storage mutations into trie, short circuit if any error // is occurred or there is not change in the trie. tr, err := s.updateTrie() @@ -747,6 +786,7 @@ func (s *stateObject) setCode(codeHash common.Hash, code []byte) { s.code = code s.data.CodeHash = codeHash[:] s.dirtyCode = true + compiler.GenOrLoadOptimizedCode(codeHash, s.code) } func (s *stateObject) SetNonce(nonce uint64) { diff --git a/core/state/state_test.go b/core/state/state_test.go index 170cd39315..fc05b5121b 100644 --- a/core/state/state_test.go +++ b/core/state/state_test.go @@ -71,6 +71,7 @@ func TestDump(t *testing.T) { "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x0000000000000000000000000000000000000001", "key": "0x1468288056310c82aa4c01a7e12a10f8111a0560e72b700555479031b86c357d" }, "0x0000000000000000000000000000000000000002": { @@ -78,6 +79,7 @@ func TestDump(t *testing.T) { "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x0000000000000000000000000000000000000002", "key": "0xd52688a8f926c816ca1e079067caba944f158e764817b83fc43594370ca9cf62" }, "0x0000000000000000000000000000000000000102": { @@ -86,6 +88,7 @@ func TestDump(t *testing.T) { "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0x87874902497a5bb968da31a2998d8f22e949d1ef6214bcdedd8bae24cca4b9e3", "code": "0x03030303030303", + "address": "0x0000000000000000000000000000000000000102", "key": "0xa17eacbc25cda025e81db9c5c62868822c73ce097cee2a63e33a2e41268358a1" } } diff --git a/core/state/statedb.go b/core/state/statedb.go index 6d1f9a5889..024b56e35f 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -21,15 +21,18 @@ import ( "bytes" "fmt" "math/big" + "runtime" "sort" "sync" "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/gopool" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" @@ -174,6 +177,7 @@ type StateDB struct { db Database prefetcher *triePrefetcher trie Trie + noTrie bool hasher crypto.KeccakState snaps *snapshot.Tree // Nil if snapshot is not available snap snapshot.Snapshot // Nil if snapshot is not available @@ -188,9 +192,15 @@ type StateDB struct { // originalRoot is the pre-state root, before any changes were made. // It will be updated when the Commit is called. originalRoot common.Hash + expectedRoot common.Hash // The state root in the block header + stateRoot common.Hash // The calculation result of IntermediateRoot + + fullProcessed bool // These maps hold the state changes (including the corresponding // original value) that occurred in this **block**. + AccountMux sync.Mutex // Mutex for accounts access + StorageMux sync.Mutex // Mutex for storages access accounts map[common.Hash][]byte // The mutated accounts in 'slim RLP' encoding storages map[common.Hash]map[common.Hash][]byte // The mutated slots in prefix-zero trimmed rlp format accountsOrigin map[common.Address][]byte // The original value of mutated accounts in 'slim RLP' encoding @@ -249,6 +259,8 @@ type StateDB struct { SnapshotStorageReads time.Duration SnapshotCommits time.Duration TrieDBCommits time.Duration + TrieCommits time.Duration + CodeCommits time.Duration AccountUpdated int StorageUpdated int @@ -300,7 +312,36 @@ func New(root common.Hash, db Database, snaps *snapshot.Tree) (*StateDB, error) if sdb.snaps != nil { sdb.snap = sdb.snaps.Snapshot(root) } + _, sdb.noTrie = tr.(*trie.EmptyTrie) + return sdb, nil +} +// NewStateDBByTrie creates a new state db by a given trie. +func NewStateDBByTrie(tr Trie, db Database, snaps *snapshot.Tree) (*StateDB, error) { + sdb := &StateDB{ + db: db, + trie: tr, + originalRoot: tr.Hash(), + snaps: snaps, + accounts: make(map[common.Hash][]byte), + storages: make(map[common.Hash]map[common.Hash][]byte), + accountsOrigin: make(map[common.Address][]byte), + storagesOrigin: make(map[common.Address]map[common.Hash][]byte), + stateObjects: make(map[common.Address]*stateObject), + stateObjectsPending: make(map[common.Address]struct{}), + stateObjectsDirty: make(map[common.Address]struct{}), + stateObjectsDestruct: make(map[common.Address]*types.StateAccount), + logs: make(map[common.Hash][]*types.Log), + preimages: make(map[common.Hash][]byte), + journal: newJournal(), + accessList: newAccessList(), + transientStorage: newTransientStorage(), + hasher: crypto.NewKeccakState(), + } + if sdb.snaps != nil { + sdb.snap = sdb.snaps.Snapshot(tr.Hash()) + } + _, sdb.noTrie = tr.(*trie.EmptyTrie) return sdb, nil } @@ -320,6 +361,10 @@ func (s *StateDB) getStateObjectFromStateObjects(addr common.Address) (*stateObj // state trie concurrently while the state is mutated so that when we reach the // commit phase, most of the needed data is already hot. func (s *StateDB) StartPrefetcher(namespace string) { + if s.noTrie { + return + } + if s.prefetcher != nil { s.prefetcher.close() s.prefetcher = nil @@ -332,12 +377,21 @@ func (s *StateDB) StartPrefetcher(namespace string) { // StopPrefetcher terminates a running prefetcher and reports any leftover stats // from the gathered metrics. func (s *StateDB) StopPrefetcher() { + if s.noTrie { + return + } + if s.prefetcher != nil { s.prefetcher.close() s.prefetcher = nil } } +// Mark that the block is full processed +func (s *StateDB) MarkFullProcessed() { + s.fullProcessed = true +} + // setError remembers the first non-nil error it is called with. func (s *StateDB) setError(err error) { if s.dbErr == nil { @@ -655,20 +709,21 @@ func (s *StateDB) GetTransientState(addr common.Address, key common.Hash) common // updateStateObject writes the given object to the trie. func (s *StateDB) updateStateObject(obj *stateObject) { - // Track the amount of time wasted on updating the account from the trie - if metrics.EnabledExpensive { - defer func(start time.Time) { s.AccountUpdates += time.Since(start) }(time.Now()) - } - // Encode the account and update the account trie - addr := obj.Address() - - if err := s.trie.UpdateAccount(addr, &obj.data); err != nil { - s.setError(fmt.Errorf("updateStateObject (%x) error: %v", addr[:], err)) + if !s.noTrie { + // Track the amount of time wasted on updating the account from the trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountUpdates += time.Since(start) }(time.Now()) + } + // Encode the account and update the account trie + addr := obj.Address() + if err := s.trie.UpdateAccount(addr, &obj.data); err != nil { + s.setError(fmt.Errorf("updateStateObject (%x) error: %v", addr[:], err)) + } + if obj.dirtyCode { + s.trie.UpdateContractCode(obj.Address(), common.BytesToHash(obj.CodeHash()), obj.code) + } } - if obj.dirtyCode { - s.trie.UpdateContractCode(obj.Address(), common.BytesToHash(obj.CodeHash()), obj.code) - } // Cache the data until commit. Note, this update mechanism is not symmetric // to the deletion, because whereas it is enough to track account updates // at commit time, deletions need tracking at transaction boundary level to @@ -689,6 +744,10 @@ func (s *StateDB) updateStateObject(obj *stateObject) { // deleteStateObject removes the given object from the state trie. func (s *StateDB) deleteStateObject(obj *stateObject) { + if s.noTrie { + return + } + // Track the amount of time wasted on deleting the account from the trie if metrics.EnabledExpensive { defer func(start time.Time) { s.AccountUpdates += time.Since(start) }(time.Now()) @@ -1449,7 +1508,54 @@ func (s *StateDB) Finalise(deleteEmptyObjects bool) { func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { // Finalise all the dirty storage states and write them into the tries s.Finalise(deleteEmptyObjects) + s.AccountsIntermediateRoot() + return s.StateIntermediateRoot() +} + +func (s *StateDB) AccountsIntermediateRoot() { + tasks := make(chan func()) + finishCh := make(chan struct{}) + defer close(finishCh) + wg := sync.WaitGroup{} + for i := 0; i < runtime.NumCPU(); i++ { + go func() { + for { + select { + case task := <-tasks: + task() + case <-finishCh: + return + } + } + }() + } + + // Although naively it makes sense to retrieve the account trie and then do + // the contract storage and account updates sequentially, that short circuits + // the account prefetcher. Instead, let's process all the storage updates + // first, giving the account prefetches just a few more milliseconds of time + // to pull useful data from disk. + for addr := range s.stateObjectsPending { + if obj := s.stateObjects[addr]; !obj.deleted { + wg.Add(1) + tasks <- func() { + defer wg.Done() + obj.updateRoot() + + // Cache the data until commit. Note, this update mechanism is not symmetric + // to the deletion, because whereas it is enough to track account updates + // at commit time, deletions need tracking at transaction boundary level to + // ensure we capture state clearing. + s.AccountMux.Lock() + s.accounts[obj.addrHash] = types.SlimAccountRLP(obj.data) + s.AccountMux.Unlock() + } + } + } + wg.Wait() +} +func (s *StateDB) StateIntermediateRoot() common.Hash { // If there was a trie prefetcher operating, it gets aborted and irrevocably // modified after we start retrieving tries. Remove it from the statedb after // this round of use. @@ -1494,6 +1600,14 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { s.trie = trie } } + if s.trie == nil { + tr, err := s.db.OpenTrie(s.originalRoot) + if err != nil { + panic(fmt.Sprintf("failed to open trie tree %s", s.originalRoot)) + } + s.trie = tr + } + usedAddrs := make([][]byte, 0, len(s.stateObjectsPending)) for addr := range s.stateObjectsPending { @@ -1528,8 +1642,17 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { if metrics.EnabledExpensive { defer func(start time.Time) { s.AccountHashes += time.Since(start) }(time.Now()) } - ret := s.trie.Hash() - return ret + + if s.noTrie { + return s.expectedRoot + } else { + return s.trie.Hash() + } +} + +// Mark that the block is processed by diff layer +func (s *StateDB) SetExpectedStateRoot(root common.Hash) { + s.expectedRoot = root } // SetTxContext sets the current transaction hash and index which are @@ -1564,10 +1687,12 @@ func (s *StateDB) fastDeleteStorage(addrHash common.Hash, root common.Hash) (boo nodes = trienode.NewNodeSet(addrHash) slots = make(map[common.Hash][]byte) ) - stack := trie.NewStackTrie(func(path []byte, hash common.Hash, blob []byte) { + options := trie.NewStackTrieOptions() + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { nodes.AddNode(path, trienode.NewDeleted()) size += common.StorageSize(len(path)) }) + stack := trie.NewStackTrie(options) for iter.Next() { if size > storageDeleteLimit { return true, size, nil, nil, nil @@ -1596,7 +1721,7 @@ func (s *StateDB) fastDeleteStorage(addrHash common.Hash, root common.Hash) (boo // employed when the associated state snapshot is not available. It iterates the // storage slots along with all internal trie nodes via trie directly. func (s *StateDB) slowDeleteStorage(addr common.Address, addrHash common.Hash, root common.Hash) (bool, common.StorageSize, map[common.Hash][]byte, *trienode.NodeSet, error) { - tr, err := s.db.OpenStorageTrie(s.originalRoot, addr, root) + tr, err := s.db.OpenStorageTrie(s.originalRoot, addr, root, s.trie) if err != nil { return false, 0, nil, nil, fmt.Errorf("failed to open storage trie, err: %w", err) } @@ -1770,131 +1895,242 @@ func (s *StateDB) handleDestruction(nodes *trienode.MergedNodeSet) (map[common.A func (s *StateDB) Commit(block uint64, deleteEmptyObjects bool) (common.Hash, error) { // Short circuit in case any database failure occurred earlier. if s.dbErr != nil { + s.StopPrefetcher() return common.Hash{}, fmt.Errorf("commit aborted due to earlier error: %v", s.dbErr) } - // Finalize any pending changes and merge everything into the tries - s.IntermediateRoot(deleteEmptyObjects) - // Commit objects to the trie, measuring the elapsed time var ( accountTrieNodesUpdated int accountTrieNodesDeleted int - storageTrieNodesUpdated int - storageTrieNodesDeleted int - nodes = trienode.NewMergedNodeSet() - codeWriter = s.db.DiskDB().NewBatch() + // Storage Tree is updated concurrently, and statistics require mutex, + // which will affect performance, so it is discarded + //storageTrieNodesUpdated int + //storageTrieNodesDeleted int + + nodes = trienode.NewMergedNodeSet() + incomplete map[common.Address]struct{} ) - // Handle all state deletions first - incomplete, err := s.handleDestruction(nodes) - if err != nil { - return common.Hash{}, err - } - // Handle all state updates afterwards - for addr := range s.stateObjectsDirty { - obj, _ := s.getStateObjectFromStateObjects(addr) - if obj.deleted { - continue - } - // Write any contract code associated with the state object - if obj.code != nil && obj.dirtyCode { - rawdb.WriteCode(codeWriter, common.BytesToHash(obj.CodeHash()), obj.code) - obj.dirtyCode = false - } - // Write any storage changes in the state object to its storage trie - set, err := obj.commit() - if err != nil { - return common.Hash{}, err - } - // Merge the dirty nodes of storage trie into global set. It is possible - // that the account was destructed and then resurrected in the same block. - // In this case, the node set is shared by both accounts. - if set != nil { - if err := nodes.Merge(set); err != nil { - return common.Hash{}, err - } - updates, deleted := set.Size() - storageTrieNodesUpdated += updates - storageTrieNodesDeleted += deleted - } - } - if codeWriter.ValueSize() > 0 { - if err := codeWriter.Write(); err != nil { - log.Crit("Failed to commit dirty codes", "error", err) - } - } - // Write the account trie changes, measuring the amount of wasted time - var start time.Time - if metrics.EnabledExpensive { - start = time.Now() - } - root, set, err := s.trie.Commit(true) - if err != nil { - return common.Hash{}, err - } - // Merge the dirty nodes of account trie into global set - if set != nil { - if err := nodes.Merge(set); err != nil { - return common.Hash{}, err - } - accountTrieNodesUpdated, accountTrieNodesDeleted = set.Size() + if !s.fullProcessed { + s.stateRoot = s.IntermediateRoot(deleteEmptyObjects) } + if metrics.EnabledExpensive { - s.AccountCommits += time.Since(start) - - accountUpdatedMeter.Mark(int64(s.AccountUpdated)) - storageUpdatedMeter.Mark(int64(s.StorageUpdated)) - accountDeletedMeter.Mark(int64(s.AccountDeleted)) - storageDeletedMeter.Mark(int64(s.StorageDeleted)) - accountTrieUpdatedMeter.Mark(int64(accountTrieNodesUpdated)) - accountTrieDeletedMeter.Mark(int64(accountTrieNodesDeleted)) - storageTriesUpdatedMeter.Mark(int64(storageTrieNodesUpdated)) - storageTriesDeletedMeter.Mark(int64(storageTrieNodesDeleted)) - s.AccountUpdated, s.AccountDeleted = 0, 0 - s.StorageUpdated, s.StorageDeleted = 0, 0 - } - // If snapshotting is enabled, update the snapshot tree with this new version - if s.snap != nil { - start := time.Now() - // Only update if there's a state transition (skip empty Clique blocks) - if parent := s.snap.Root(); parent != root { - if err := s.snaps.Update(root, parent, s.convertAccountSet(s.stateObjectsDestruct), s.accounts, s.storages); err != nil { - log.Warn("Failed to update snapshot tree", "from", parent, "to", root, "err", err) + defer func(start time.Time) { + s.AccountCommits += time.Since(start) + accountUpdatedMeter.Mark(int64(s.AccountUpdated)) + storageUpdatedMeter.Mark(int64(s.StorageUpdated)) + accountDeletedMeter.Mark(int64(s.AccountDeleted)) + storageDeletedMeter.Mark(int64(s.StorageDeleted)) + accountTrieUpdatedMeter.Mark(int64(accountTrieNodesUpdated)) + accountTrieDeletedMeter.Mark(int64(accountTrieNodesDeleted)) + //storageTriesUpdatedMeter.Mark(int64(storageTrieNodesUpdated)) + //storageTriesDeletedMeter.Mark(int64(storageTrieNodesDeleted)) + s.AccountUpdated, s.AccountDeleted = 0, 0 + s.StorageUpdated, s.StorageDeleted = 0, 0 + }(time.Now()) + } + + commitFuncs := []func() error{ + func() error { + if metrics.EnabledExpensive { + defer func(start time.Time) { s.TrieCommits += time.Since(start) }(time.Now()) } - // Keep 128 diff layers in the memory, persistent layer is 129th. - // - head layer is paired with HEAD state - // - head-1 layer is paired with HEAD-1 state - // - head-127 layer(bottom-most diff layer) is paired with HEAD-127 state - if err := s.snaps.Cap(root, 128); err != nil { - log.Warn("Failed to cap snapshot tree", "root", root, "layers", 128, "err", err) + if s.fullProcessed { + if s.stateRoot = s.StateIntermediateRoot(); s.expectedRoot != s.stateRoot { + log.Error("Invalid merkle root", "remote", s.expectedRoot, "local", s.stateRoot) + return fmt.Errorf("invalid merkle root (remote: %x local: %x)", s.expectedRoot, s.stateRoot) + } } + var err error + // Handle all state deletions first + incomplete, err = s.handleDestruction(nodes) + if err != nil { + return err + } + + tasks := make(chan func()) + type taskResult struct { + err error + nodeSet *trienode.NodeSet + } + taskResults := make(chan taskResult, len(s.stateObjectsDirty)) + tasksNum := 0 + finishCh := make(chan struct{}) + + threads := gopool.Threads(len(s.stateObjectsDirty)) + wg := sync.WaitGroup{} + for i := 0; i < threads; i++ { + wg.Add(1) + go func() { + defer wg.Done() + for { + select { + case task := <-tasks: + task() + case <-finishCh: + return + } + } + }() + } + + for addr := range s.stateObjectsDirty { + if obj := s.stateObjects[addr]; !obj.deleted { + tasks <- func() { + // Write any storage changes in the state object to its storage trie + if !s.noTrie { + if set, err := obj.commit(); err != nil { + taskResults <- taskResult{err, nil} + return + } else { + taskResults <- taskResult{nil, set} + } + } else { + taskResults <- taskResult{nil, nil} + } + } + tasksNum++ + } + } + + for i := 0; i < tasksNum; i++ { + res := <-taskResults + if res.err != nil { + close(finishCh) + return res.err + } + // Merge the dirty nodes of storage trie into global set. It is possible + // that the account was destructed and then resurrected in the same block. + // In this case, the node set is shared by both accounts. + if res.nodeSet != nil { + if err := nodes.Merge(res.nodeSet); err != nil { + return err + } + } + } + close(finishCh) + + if !s.noTrie { + var start time.Time + if metrics.EnabledExpensive { + start = time.Now() + } + root, set, err := s.trie.Commit(true) + if err != nil { + return err + } + // Merge the dirty nodes of account trie into global set + if set != nil { + if err := nodes.Merge(set); err != nil { + return err + } + accountTrieNodesUpdated, accountTrieNodesDeleted = set.Size() + } + if metrics.EnabledExpensive { + s.AccountCommits += time.Since(start) + } + + origin := s.originalRoot + if origin == (common.Hash{}) { + origin = types.EmptyRootHash + } + + if root != origin { + start := time.Now() + set := triestate.New(s.accountsOrigin, s.storagesOrigin, incomplete) + if err := s.db.TrieDB().Update(root, origin, block, nodes, set); err != nil { + return err + } + s.originalRoot = root + if metrics.EnabledExpensive { + s.TrieDBCommits += time.Since(start) + } + if s.onCommit != nil { + s.onCommit(set) + } + } + } + wg.Wait() + return nil + }, + func() error { + if metrics.EnabledExpensive { + defer func(start time.Time) { s.CodeCommits += time.Since(start) }(time.Now()) + } + codeWriter := s.db.DiskDB().NewBatch() + for addr := range s.stateObjectsDirty { + if obj := s.stateObjects[addr]; !obj.deleted { + // Write any contract code associated with the state object + if obj.code != nil && obj.dirtyCode { + rawdb.WriteCode(codeWriter, common.BytesToHash(obj.CodeHash()), obj.code) + obj.dirtyCode = false + if codeWriter.ValueSize() > ethdb.IdealBatchSize { + if err := codeWriter.Write(); err != nil { + return err + } + codeWriter.Reset() + } + } + } + } + if codeWriter.ValueSize() > 0 { + if err := codeWriter.Write(); err != nil { + log.Crit("Failed to commit dirty codes", "error", err) + return err + } + } + return nil + }, + func() error { + // If snapshotting is enabled, update the snapshot tree with this new version + if s.snap != nil { + if metrics.EnabledExpensive { + defer func(start time.Time) { s.SnapshotCommits += time.Since(start) }(time.Now()) + } + // Only update if there's a state transition (skip empty Clique blocks) + if parent := s.snap.Root(); parent != s.expectedRoot { + err := s.snaps.Update(s.expectedRoot, parent, s.convertAccountSet(s.stateObjectsDestruct), s.accounts, s.storages) + + if err != nil { + log.Warn("Failed to update snapshot tree", "from", parent, "to", s.expectedRoot, "err", err) + } + + // Keep n diff layers in the memory + // - head layer is paired with HEAD state + // - head-1 layer is paired with HEAD-1 state + // - head-(n-1) layer(bottom-most diff layer) is paired with HEAD-(n-1)state + go func() { + if err := s.snaps.Cap(s.expectedRoot, 128); err != nil { + log.Warn("Failed to cap snapshot tree", "root", s.expectedRoot, "layers", 128, "err", err) + } + }() + } + } + return nil + }, + } + defer s.StopPrefetcher() + commitRes := make(chan error, len(commitFuncs)) + for _, f := range commitFuncs { + // commitFuncs[0] and commitFuncs[1] both read map `stateObjects`, but no conflicts + tmpFunc := f + go func() { + commitRes <- tmpFunc() + }() + } + for i := 0; i < len(commitFuncs); i++ { + r := <-commitRes + if r != nil { + return common.Hash{}, r } - if metrics.EnabledExpensive { - s.SnapshotCommits += time.Since(start) - } - s.snap = nil } + + root := s.stateRoot + s.snap = nil if root == (common.Hash{}) { root = types.EmptyRootHash } - origin := s.originalRoot - if origin == (common.Hash{}) { - origin = types.EmptyRootHash - } - if root != origin { - start := time.Now() - set := triestate.New(s.accountsOrigin, s.storagesOrigin, incomplete) - if err := s.db.TrieDB().Update(root, origin, block, nodes, set); err != nil { - return common.Hash{}, err - } - s.originalRoot = root - if metrics.EnabledExpensive { - s.TrieDBCommits += time.Since(start) - } - if s.onCommit != nil { - s.onCommit(set) - } - } // Clear all internal flags at the end of commit operation. s.accounts = make(map[common.Hash][]byte) s.storages = make(map[common.Hash]map[common.Hash][]byte) @@ -1995,6 +2231,20 @@ func (s *StateDB) convertAccountSet(set map[common.Address]*types.StateAccount) return ret } +// OpenStorageTrie opens the storage trie for the storage root of the provided address. +func (s *StateDB) OpenStorageTrie(addr common.Address) (Trie, error) { + storageRoot := s.GetStorageRoot(addr) + return s.db.OpenStorageTrie(s.originalRoot, addr, storageRoot, s.trie) +} + +func (s *StateDB) NoTrie() bool { + return s.noTrie +} + +func (s *StateDB) GetSnap() snapshot.Snapshot { + return s.snap +} + // copySet returns a deep-copied set. func copySet[k comparable](set map[k][]byte) map[k][]byte { copied := make(map[k][]byte, len(set)) diff --git a/core/state/statedb_test.go b/core/state/statedb_test.go index 87c555416d..ee8ed7da0b 100644 --- a/core/state/statedb_test.go +++ b/core/state/statedb_test.go @@ -31,6 +31,8 @@ import ( "testing" "testing/quick" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state/snapshot" @@ -41,7 +43,6 @@ import ( "github.com/ethereum/go-ethereum/trie/triedb/hashdb" "github.com/ethereum/go-ethereum/trie/triedb/pathdb" "github.com/ethereum/go-ethereum/trie/trienode" - "github.com/holiman/uint256" ) var ( @@ -433,10 +434,12 @@ func (test *snapshotTest) run() bool { state, _ = New(types.EmptyRootHash, NewDatabase(rawdb.NewMemoryDatabase()), nil) snapshotRevs = make([]int, len(test.snapshots)) sindex = 0 + checkstates = make([]*StateDB, len(test.snapshots)) ) for i, action := range test.actions { if len(test.snapshots) > sindex && i == test.snapshots[sindex] { snapshotRevs[sindex] = state.Snapshot() + checkstates[sindex] = state.Copy() sindex++ } action.fn(action, state) @@ -444,12 +447,8 @@ func (test *snapshotTest) run() bool { // Revert all snapshots in reverse order. Each revert must yield a state // that is equivalent to fresh state with all actions up the snapshot applied. for sindex--; sindex >= 0; sindex-- { - checkstate, _ := New(types.EmptyRootHash, state.Database(), nil) - for _, action := range test.actions[:test.snapshots[sindex]] { - action.fn(action, checkstate) - } state.RevertToSnapshot(snapshotRevs[sindex]) - if err := test.checkEqual(state, checkstate); err != nil { + if err := test.checkEqual(state, checkstates[sindex]); err != nil { test.err = fmt.Errorf("state mismatch after revert to snapshot %d\n%v", sindex, err) return false } @@ -1131,7 +1130,9 @@ func TestResetObject(t *testing.T) { state.CreateAccount(addr) state.SetBalance(addr, big.NewInt(2)) state.SetState(addr, slotB, common.BytesToHash([]byte{0x2})) - root, _ := state.Commit(0, true) + root := state.IntermediateRoot(true) + state.SetExpectedStateRoot(root) + root, _ = state.Commit(0, true) // Ensure the original account is wiped properly snap := snaps.Snapshot(root) diff --git a/core/state/trie_prefetcher.go b/core/state/trie_prefetcher.go index 772c698dd0..c2a49417d4 100644 --- a/core/state/trie_prefetcher.go +++ b/core/state/trie_prefetcher.go @@ -305,7 +305,9 @@ func (sf *subfetcher) loop() { } sf.trie = trie } else { - trie, err := sf.db.OpenStorageTrie(sf.state, sf.addr, sf.root) + // The trie argument can be nil as verkle doesn't support prefetching + // yet. TODO FIX IT(rjl493456442), otherwise code will panic here. + trie, err := sf.db.OpenStorageTrie(sf.state, sf.addr, sf.root, nil) if err != nil { log.Warn("Trie prefetcher failed opening trie", "root", sf.root, "err", err) return diff --git a/core/state_processor.go b/core/state_processor.go index 39dc5264ac..92b9013f14 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -19,6 +19,9 @@ package core import ( "errors" "fmt" + "math/big" + "time" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/consensus/misc" @@ -26,10 +29,12 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" - "math/big" ) +var processTxTimer = metrics.NewRegisteredTimer("process/tx/time", nil) + // StateProcessor is a basic Processor, which takes care of transitioning // state from one point to another. // @@ -74,8 +79,7 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg misc.ApplyPreContractHardFork(statedb) } - // opBNB no need to hard code this contract via hardfork - // misc.EnsureCreate2Deployer(p.config, block.Time(), statedb) + misc.EnsureCreate2Deployer(p.config, block.Time(), statedb) var ( context = NewEVMBlockContext(header, p.bc, nil, p.config, statedb) @@ -85,9 +89,10 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg if beaconRoot := block.BeaconRoot(); beaconRoot != nil { ProcessBeaconBlockRoot(*beaconRoot, vmenv, statedb) } - + statedb.MarkFullProcessed() // Iterate over and process the individual transactions for i, tx := range block.Transactions() { + start := time.Now() msg, err := TransactionToMessage(tx, signer, header.BaseFee) if err != nil { return nil, nil, 0, fmt.Errorf("could not apply tx %d [%v]: %w", i, tx.Hash().Hex(), err) @@ -100,6 +105,9 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg receipts = append(receipts, receipt) allLogs = append(allLogs, receipt.Logs...) + if metrics.EnabledExpensive { + processTxTimer.UpdateSince(start) + } } // Fail if Shanghai not enabled and len(withdrawals) is non-zero. withdrawals := block.Withdrawals() @@ -188,7 +196,8 @@ func ApplyTransaction(config *params.ChainConfig, bc ChainContext, author *commo } // Create a new context to be used in the EVM environment blockContext := NewEVMBlockContext(header, bc, author, config, statedb) - vmenv := vm.NewEVM(blockContext, vm.TxContext{BlobHashes: tx.BlobHashes()}, statedb, config, cfg) + txContext := NewEVMTxContext(msg) + vmenv := vm.NewEVM(blockContext, txContext, statedb, config, cfg) return applyTransaction(msg, config, gp, statedb, header.Number, header.Hash(), tx, usedGas, vmenv) } diff --git a/core/state_processor_test.go b/core/state_processor_test.go index b91e9a72dd..a32f0b822e 100644 --- a/core/state_processor_test.go +++ b/core/state_processor_test.go @@ -96,7 +96,7 @@ func TestStateProcessorErrors(t *testing.T) { }), signer, key1) return tx } - var mkBlobTx = func(nonce uint64, to common.Address, gasLimit uint64, gasTipCap, gasFeeCap *big.Int, hashes []common.Hash) *types.Transaction { + var mkBlobTx = func(nonce uint64, to common.Address, gasLimit uint64, gasTipCap, gasFeeCap, blobGasFeeCap *big.Int, hashes []common.Hash) *types.Transaction { tx, err := types.SignTx(types.NewTx(&types.BlobTx{ Nonce: nonce, GasTipCap: uint256.MustFromBig(gasTipCap), @@ -104,6 +104,7 @@ func TestStateProcessorErrors(t *testing.T) { Gas: gasLimit, To: to, BlobHashes: hashes, + BlobFeeCap: uint256.MustFromBig(blobGasFeeCap), Value: new(uint256.Int), }), signer, key1) if err != nil { @@ -197,7 +198,7 @@ func TestStateProcessorErrors(t *testing.T) { txs: []*types.Transaction{ mkDynamicTx(0, common.Address{}, params.TxGas, big.NewInt(0), big.NewInt(0)), }, - want: "could not apply tx 0 [0xc4ab868fef0c82ae0387b742aee87907f2d0fc528fc6ea0a021459fb0fc4a4a8]: max fee per gas less than block base fee: address 0x71562b71999873DB5b286dF957af199Ec94617F7, maxFeePerGas: 0 baseFee: 875000000", + want: "could not apply tx 0 [0xc4ab868fef0c82ae0387b742aee87907f2d0fc528fc6ea0a021459fb0fc4a4a8]: max fee per gas less than block base fee: address 0x71562b71999873DB5b286dF957af199Ec94617F7, maxFeePerGas: 0, baseFee: 875000000", }, { // ErrTipVeryHigh txs: []*types.Transaction{ @@ -248,9 +249,9 @@ func TestStateProcessorErrors(t *testing.T) { }, { // ErrBlobFeeCapTooLow txs: []*types.Transaction{ - mkBlobTx(0, common.Address{}, params.TxGas, big.NewInt(1), big.NewInt(1), []common.Hash{(common.Hash{1})}), + mkBlobTx(0, common.Address{}, params.TxGas, big.NewInt(1), big.NewInt(1), big.NewInt(0), []common.Hash{(common.Hash{1})}), }, - want: "could not apply tx 0 [0x6c11015985ce82db691d7b2d017acda296db88b811c3c60dc71449c76256c716]: max fee per gas less than block base fee: address 0x71562b71999873DB5b286dF957af199Ec94617F7, maxFeePerGas: 1 baseFee: 875000000", + want: "could not apply tx 0 [0x6c11015985ce82db691d7b2d017acda296db88b811c3c60dc71449c76256c716]: max fee per gas less than block base fee: address 0x71562b71999873DB5b286dF957af199Ec94617F7, maxFeePerGas: 1, baseFee: 875000000", }, } { block := GenerateBadBlock(gspec.ToBlock(), beacon.New(ethash.NewFaker()), tt.txs, gspec.Config) @@ -359,7 +360,8 @@ func TestStateProcessorErrors(t *testing.T) { func GenerateBadBlock(parent *types.Block, engine consensus.Engine, txs types.Transactions, config *params.ChainConfig) *types.Block { difficulty := big.NewInt(0) if !config.TerminalTotalDifficultyPassed { - difficulty = engine.CalcDifficulty(&fakeChainReader{config}, parent.Time()+10, &types.Header{ + fakeChainReader := newChainMaker(nil, config, engine) + difficulty = engine.CalcDifficulty(fakeChainReader, parent.Time()+10, &types.Header{ Number: parent.Number(), Time: parent.Time(), Difficulty: parent.Difficulty(), diff --git a/core/state_transition.go b/core/state_transition.go index 6a7089f9b3..202c72696e 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -21,6 +21,7 @@ import ( "fmt" "math" "math/big" + "time" "github.com/ethereum/go-ethereum/common" cmath "github.com/ethereum/go-ethereum/common/math" @@ -29,12 +30,16 @@ import ( "github.com/ethereum/go-ethereum/params" ) +// TODO delete after debug performance metrics +var DebugInnerExecutionDuration time.Duration + // ExecutionResult includes all output after executing given evm // message no matter the execution itself is successful or not. type ExecutionResult struct { - UsedGas uint64 // Total used gas but include the refunded gas - Err error // Any error encountered during the execution(listed in core/vm/errors.go) - ReturnData []byte // Returned data from evm(function result or data supplied with revert opcode) + UsedGas uint64 // Total used gas, not including the refunded gas + RefundedGas uint64 // Total gas refunded after execution + Err error // Any error encountered during the execution(listed in core/vm/errors.go) + ReturnData []byte // Returned data from evm(function result or data supplied with revert opcode) } // Unwrap returns the internal evm error which allows us for further @@ -144,28 +149,28 @@ type Message struct { // This field will be set to true for operations like RPC eth_call. SkipAccountChecks bool - IsSystemTx bool // IsSystemTx indicates the message, if also a deposit, does not emit gas usage. - IsDepositTx bool // IsDepositTx indicates the message is force-included and can persist a mint. - Mint *big.Int // Mint is the amount to mint before EVM processing, or nil if there is no minting. - RollupDataGas types.RollupGasData // RollupDataGas indicates the rollup cost of the message, 0 if not a rollup or no cost. + IsSystemTx bool // IsSystemTx indicates the message, if also a deposit, does not emit gas usage. + IsDepositTx bool // IsDepositTx indicates the message is force-included and can persist a mint. + Mint *big.Int // Mint is the amount to mint before EVM processing, or nil if there is no minting. + RollupCostData types.RollupCostData // RollupCostData caches data to compute the fee we charge for data availability } // TransactionToMessage converts a transaction into a Message. func TransactionToMessage(tx *types.Transaction, s types.Signer, baseFee *big.Int) (*Message, error) { msg := &Message{ - Nonce: tx.Nonce(), - GasLimit: tx.Gas(), - GasPrice: new(big.Int).Set(tx.GasPrice()), - GasFeeCap: new(big.Int).Set(tx.GasFeeCap()), - GasTipCap: new(big.Int).Set(tx.GasTipCap()), - To: tx.To(), - Value: tx.Value(), - Data: tx.Data(), - AccessList: tx.AccessList(), - IsSystemTx: tx.IsSystemTx(), - IsDepositTx: tx.IsDepositTx(), - Mint: tx.Mint(), - RollupDataGas: tx.RollupDataGas(), + Nonce: tx.Nonce(), + GasLimit: tx.Gas(), + GasPrice: new(big.Int).Set(tx.GasPrice()), + GasFeeCap: new(big.Int).Set(tx.GasFeeCap()), + GasTipCap: new(big.Int).Set(tx.GasTipCap()), + To: tx.To(), + Value: tx.Value(), + Data: tx.Data(), + AccessList: tx.AccessList(), + IsSystemTx: tx.IsSystemTx(), + IsDepositTx: tx.IsDepositTx(), + Mint: tx.Mint(), + RollupCostData: tx.RollupCostData(), SkipAccountChecks: false, BlobHashes: tx.BlobHashes(), @@ -245,10 +250,10 @@ func (st *StateTransition) buyGas() error { mgval = mgval.Mul(mgval, st.msg.GasPrice) var l1Cost *big.Int if st.evm.Context.L1CostFunc != nil && !st.msg.SkipAccountChecks { - l1Cost = st.evm.Context.L1CostFunc(st.evm.Context.BlockNumber.Uint64(), st.evm.Context.Time, st.msg.RollupDataGas, st.msg.IsDepositTx) - } - if l1Cost != nil { - mgval = mgval.Add(mgval, l1Cost) + l1Cost = st.evm.Context.L1CostFunc(st.msg.RollupCostData, st.evm.Context.Time) + if l1Cost != nil { + mgval = mgval.Add(mgval, l1Cost) + } } balanceCheck := new(big.Int).Set(mgval) if st.msg.GasFeeCap != nil { @@ -322,11 +327,11 @@ func (st *StateTransition) preCheck() error { msg.From.Hex(), codeHash) } } - // Make sure that transaction gasFeeCap is greater than the baseFee (post london) if st.evm.ChainConfig().IsLondon(st.evm.Context.BlockNumber) { // Skip the checks if gas fields are zero and baseFee was explicitly disabled (eth_call) - if !st.evm.Config.NoBaseFee || msg.GasFeeCap.BitLen() > 0 || msg.GasTipCap.BitLen() > 0 { + skipCheck := st.evm.Config.NoBaseFee && msg.GasFeeCap.BitLen() == 0 && msg.GasTipCap.BitLen() == 0 + if !skipCheck { if l := msg.GasFeeCap.BitLen(); l > 256 { return fmt.Errorf("%w: address %v, maxFeePerGas bit length: %d", ErrFeeCapVeryHigh, msg.From.Hex(), l) @@ -342,7 +347,7 @@ func (st *StateTransition) preCheck() error { // This will panic if baseFee is nil, but basefee presence is verified // as part of header validation. if msg.GasFeeCap.Cmp(st.evm.Context.BaseFee) < 0 { - return fmt.Errorf("%w: address %v, maxFeePerGas: %s baseFee: %s", ErrFeeCapTooLow, + return fmt.Errorf("%w: address %v, maxFeePerGas: %s, baseFee: %s", ErrFeeCapTooLow, msg.From.Hex(), msg.GasFeeCap, st.evm.Context.BaseFee) } } @@ -359,17 +364,21 @@ func (st *StateTransition) preCheck() error { } } } - + // Check that the user is paying at least the current blob fee if st.evm.ChainConfig().IsCancun(st.evm.Context.BlockNumber, st.evm.Context.Time) { if st.blobGasUsed() > 0 { - // Check that the user is paying at least the current blob fee - blobFee := st.evm.Context.BlobBaseFee - if st.msg.BlobGasFeeCap.Cmp(blobFee) < 0 { - return fmt.Errorf("%w: address %v have %v want %v", ErrBlobFeeCapTooLow, st.msg.From.Hex(), st.msg.BlobGasFeeCap, blobFee) + // Skip the checks if gas fields are zero and blobBaseFee was explicitly disabled (eth_call) + skipCheck := st.evm.Config.NoBaseFee && msg.BlobGasFeeCap.BitLen() == 0 + if !skipCheck { + // This will panic if blobBaseFee is nil, but blobBaseFee presence + // is verified as part of header validation. + if msg.BlobGasFeeCap.Cmp(st.evm.Context.BlobBaseFee) < 0 { + return fmt.Errorf("%w: address %v blobGasFeeCap: %v, blobBaseFee: %v", ErrBlobFeeCapTooLow, + msg.From.Hex(), msg.BlobGasFeeCap, st.evm.Context.BlobBaseFee) + } } } } - return st.buyGas() } @@ -473,6 +482,7 @@ func (st *StateTransition) innerTransitionDb() (*ExecutionResult, error) { ret []byte vmerr error // vm errors do not effect consensus and are therefore not assigned to err ) + start := time.Now() if contractCreation { ret, _, st.gasRemaining, vmerr = st.evm.Create(sender, msg.Data, st.gasRemaining, msg.Value) } else { @@ -480,6 +490,8 @@ func (st *StateTransition) innerTransitionDb() (*ExecutionResult, error) { st.state.SetNonce(msg.From, st.state.GetNonce(sender.Address())+1) ret, st.gasRemaining, vmerr = st.evm.Call(sender, st.to(), msg.Data, st.gasRemaining, msg.Value) } + DebugInnerExecutionDuration += time.Since(start) + // if deposit: skip refunds, skip tipping coinbase // Regolith changes this behaviour to report the actual gasUsed instead of always reporting all gas used. if st.msg.IsDepositTx && !rules.IsOptimismRegolith { @@ -498,19 +510,21 @@ func (st *StateTransition) innerTransitionDb() (*ExecutionResult, error) { // Note for deposit tx there is no ETH refunded for unused gas, but that's taken care of by the fact that gasPrice // is always 0 for deposit tx. So calling refundGas will ensure the gasUsed accounting is correct without actually // changing the sender's balance + var gasRefund uint64 if !rules.IsLondon { // Before EIP-3529: refunds were capped to gasUsed / 2 - st.refundGas(params.RefundQuotient) + gasRefund = st.refundGas(params.RefundQuotient) } else { // After EIP-3529: refunds are capped to gasUsed / 5 - st.refundGas(params.RefundQuotientEIP3529) + gasRefund = st.refundGas(params.RefundQuotientEIP3529) } if st.msg.IsDepositTx && rules.IsOptimismRegolith { // Skip coinbase payments for deposit tx in Regolith return &ExecutionResult{ - UsedGas: st.gasUsed(), - Err: vmerr, - ReturnData: ret, + UsedGas: st.gasUsed(), + RefundedGas: gasRefund, + Err: vmerr, + ReturnData: ret, }, nil } @@ -531,20 +545,21 @@ func (st *StateTransition) innerTransitionDb() (*ExecutionResult, error) { // Check that we are post bedrock to enable op-geth to be able to create pseudo pre-bedrock blocks (these are pre-bedrock, but don't follow l2 geth rules) // Note optimismConfig will not be nil if rules.IsOptimismBedrock is true - if optimismConfig := st.evm.ChainConfig().Optimism; optimismConfig != nil && rules.IsOptimismBedrock { + if optimismConfig := st.evm.ChainConfig().Optimism; optimismConfig != nil && rules.IsOptimismBedrock && !st.msg.IsDepositTx { st.state.AddBalance(params.OptimismBaseFeeRecipient, new(big.Int).Mul(new(big.Int).SetUint64(st.gasUsed()), st.evm.Context.BaseFee)) - if cost := st.evm.Context.L1CostFunc(st.evm.Context.BlockNumber.Uint64(), st.evm.Context.Time, st.msg.RollupDataGas, st.msg.IsDepositTx); cost != nil { + if cost := st.evm.Context.L1CostFunc(st.msg.RollupCostData, st.evm.Context.Time); cost != nil { st.state.AddBalance(params.OptimismL1FeeRecipient, cost) } } return &ExecutionResult{ - UsedGas: st.gasUsed(), - Err: vmerr, - ReturnData: ret, + UsedGas: st.gasUsed(), + RefundedGas: gasRefund, + Err: vmerr, + ReturnData: ret, }, nil } -func (st *StateTransition) refundGas(refundQuotient uint64) { +func (st *StateTransition) refundGas(refundQuotient uint64) uint64 { // Apply refund counter, capped to a refund quotient refund := st.gasUsed() / refundQuotient if refund > st.state.GetRefund() { @@ -559,6 +574,8 @@ func (st *StateTransition) refundGas(refundQuotient uint64) { // Also return remaining gas to the block gas counter so it is // available for the next transaction. st.gp.AddGas(st.gasRemaining) + + return refund } // gasUsed returns the amount of gas used up by the state transition. diff --git a/core/txpool/blobpool/blobpool.go b/core/txpool/blobpool/blobpool.go index 625302e9c4..499f8f1312 100644 --- a/core/txpool/blobpool/blobpool.go +++ b/core/txpool/blobpool/blobpool.go @@ -738,7 +738,7 @@ func (p *BlobPool) offload(addr common.Address, nonce uint64, id uint64, inclusi } // Reset implements txpool.SubPool, allowing the blob pool's internal state to be -// kept in sync with the main transacion pool's internal state. +// kept in sync with the main transaction pool's internal state. func (p *BlobPool) Reset(oldHead, newHead *types.Header) { waitStart := time.Now() p.lock.Lock() @@ -972,7 +972,7 @@ func (p *BlobPool) reinject(addr common.Address, txhash common.Hash) error { } // SetGasTip implements txpool.SubPool, allowing the blob pool's gas requirements -// to be kept in sync with the main transacion pool's gas requirements. +// to be kept in sync with the main transaction pool's gas requirements. func (p *BlobPool) SetGasTip(tip *big.Int) { p.lock.Lock() defer p.lock.Unlock() diff --git a/core/txpool/blobpool/blobpool_test.go b/core/txpool/blobpool/blobpool_test.go index 6011f33bfa..b877be5614 100644 --- a/core/txpool/blobpool/blobpool_test.go +++ b/core/txpool/blobpool/blobpool_test.go @@ -319,7 +319,7 @@ func verifyPoolInternals(t *testing.T, pool *BlobPool) { // - 3. All transactions after a nonce gap must be dropped // - 4. All transactions after an underpriced one (including it) must be dropped func TestOpenDrops(t *testing.T) { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelTrace, true))) // Create a temporary folder for the persistent backend storage, _ := os.MkdirTemp("", "blobpool-") @@ -594,13 +594,13 @@ func TestOpenDrops(t *testing.T) { verifyPoolInternals(t, pool) } -// Tests that transactions loaded from disk are indexed corrently. +// Tests that transactions loaded from disk are indexed correctly. // // - 1. Transactions must be groupped by sender, sorted by nonce // - 2. Eviction thresholds are calculated correctly for the sequences // - 3. Balance usage of an account is totals across all transactions func TestOpenIndex(t *testing.T) { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelTrace, true))) // Create a temporary folder for the persistent backend storage, _ := os.MkdirTemp("", "blobpool-") @@ -689,7 +689,7 @@ func TestOpenIndex(t *testing.T) { // Tests that after indexing all the loaded transactions from disk, a price heap // is correctly constructed based on the head basefee and blobfee. func TestOpenHeap(t *testing.T) { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelTrace, true))) // Create a temporary folder for the persistent backend storage, _ := os.MkdirTemp("", "blobpool-") @@ -776,7 +776,7 @@ func TestOpenHeap(t *testing.T) { // Tests that after the pool's previous state is loaded back, any transactions // over the new storage cap will get dropped. func TestOpenCap(t *testing.T) { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelTrace, true))) // Create a temporary folder for the persistent backend storage, _ := os.MkdirTemp("", "blobpool-") @@ -868,7 +868,7 @@ func TestOpenCap(t *testing.T) { // specific to the blob pool. It does not do an exhaustive transaction validity // check. func TestAdd(t *testing.T) { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelTrace, true))) // seed is a helper tumpe to seed an initial state db and pool type seed struct { diff --git a/core/txpool/blobpool/metrics.go b/core/txpool/blobpool/metrics.go index 070cc5ca47..587804cc61 100644 --- a/core/txpool/blobpool/metrics.go +++ b/core/txpool/blobpool/metrics.go @@ -65,7 +65,7 @@ var ( pooltipGauge = metrics.NewRegisteredGauge("blobpool/pooltip", nil) // addwait/time, resetwait/time and getwait/time track the rough health of - // the pool and wether or not it's capable of keeping up with the load from + // the pool and whether or not it's capable of keeping up with the load from // the network. addwaitHist = metrics.NewRegisteredHistogram("blobpool/addwait", nil, metrics.NewExpDecaySample(1028, 0.015)) addtimeHist = metrics.NewRegisteredHistogram("blobpool/addtime", nil, metrics.NewExpDecaySample(1028, 0.015)) diff --git a/core/txpool/legacypool/cache_for_miner.go b/core/txpool/legacypool/cache_for_miner.go new file mode 100644 index 0000000000..b02c06d832 --- /dev/null +++ b/core/txpool/legacypool/cache_for_miner.go @@ -0,0 +1,136 @@ +package legacypool + +import ( + "math/big" + "sort" + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/txpool" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/metrics" +) + +var ( + pendingCacheGauge = metrics.NewRegisteredGauge("txpool/legacypool/pending/cache", nil) + localCacheGauge = metrics.NewRegisteredGauge("txpool/legacypool/local/cache", nil) +) + +// copy of pending transactions +type cacheForMiner struct { + txLock sync.Mutex + pending map[common.Address]map[*types.Transaction]struct{} + locals map[common.Address]bool + addrLock sync.Mutex +} + +func newCacheForMiner() *cacheForMiner { + return &cacheForMiner{ + pending: make(map[common.Address]map[*types.Transaction]struct{}), + locals: make(map[common.Address]bool), + } +} + +func (pc *cacheForMiner) add(txs types.Transactions, signer types.Signer) { + if len(txs) == 0 { + return + } + pc.txLock.Lock() + defer pc.txLock.Unlock() + pendingCacheGauge.Inc(int64(len(txs))) + for _, tx := range txs { + addr, _ := types.Sender(signer, tx) + slots, ok := pc.pending[addr] + if !ok { + slots = make(map[*types.Transaction]struct{}) + pc.pending[addr] = slots + } + slots[tx] = struct{}{} + } +} + +func (pc *cacheForMiner) del(txs types.Transactions, signer types.Signer) { + if len(txs) == 0 { + return + } + pc.txLock.Lock() + defer pc.txLock.Unlock() + for _, tx := range txs { + addr, _ := types.Sender(signer, tx) + slots, ok := pc.pending[addr] + if !ok { + continue + } + pendingCacheGauge.Dec(1) + delete(slots, tx) + if len(slots) == 0 { + delete(pc.pending, addr) + } + } +} + +func (pc *cacheForMiner) dump(pool txpool.LazyResolver, gasPrice, baseFee *big.Int, enforceTip bool) map[common.Address][]*txpool.LazyTransaction { + pending := make(map[common.Address]types.Transactions) + pc.txLock.Lock() + for addr, txlist := range pc.pending { + pending[addr] = make(types.Transactions, 0, len(txlist)) + for tx := range txlist { + pending[addr] = append(pending[addr], tx) + } + } + pc.txLock.Unlock() + pendingLazy := make(map[common.Address][]*txpool.LazyTransaction) + for addr, txs := range pending { + // sorted by nonce + sort.Sort(types.TxByNonce(txs)) + // If the miner requests tip enforcement, cap the lists now + if enforceTip && !pc.isLocal(addr) { + for i, tx := range txs { + if tx.EffectiveGasTipIntCmp(gasPrice, baseFee) < 0 { + txs = txs[:i] + break + } + } + } + if len(txs) > 0 { + lazies := make([]*txpool.LazyTransaction, len(txs)) + for i, tx := range txs { + lazies[i] = &txpool.LazyTransaction{ + Pool: pool, + Hash: tx.Hash(), + Tx: tx, + Time: tx.Time(), + GasFeeCap: tx.GasFeeCap(), + GasTipCap: tx.GasTipCap(), + Gas: tx.Gas(), + BlobGas: tx.BlobGas(), + } + } + pendingLazy[addr] = lazies + } + } + return pendingLazy +} + +func (pc *cacheForMiner) markLocal(addr common.Address) { + pc.addrLock.Lock() + defer pc.addrLock.Unlock() + localCacheGauge.Inc(1) + pc.locals[addr] = true +} + +func (pc *cacheForMiner) isLocal(addr common.Address) bool { + pc.addrLock.Lock() + defer pc.addrLock.Unlock() + return pc.locals[addr] +} + +func (pc *cacheForMiner) flattenLocals() []common.Address { + pc.addrLock.Lock() + defer pc.addrLock.Unlock() + locals := make([]common.Address, 0, len(pc.locals)) + for addr := range pc.locals { + locals = append(locals, addr) + } + return locals +} diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index 41c96476be..9e998c4159 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -57,10 +57,6 @@ const ( ) var ( - // ErrAlreadyKnown is returned if the transactions is already contained - // within the pool. - ErrAlreadyKnown = errors.New("already known") - // ErrTxPoolOverflow is returned if the transaction pool is full and can't accept // another remote transaction. ErrTxPoolOverflow = errors.New("txpool is full") @@ -110,6 +106,32 @@ var ( reheapTimer = metrics.NewRegisteredTimer("txpool/reheap", nil) staledMeter = metrics.NewRegisteredMeter("txpool/staled/count", nil) // staled transactions + + // duration of miner worker fetching all pending transactions + getPendingDurationTimer = metrics.NewRegisteredTimer("txpool/getpending/time", nil) + // duration of miner worker fetching all local addresses + getLocalsDurationTimer = metrics.NewRegisteredTimer("txpool/getlocals/time", nil) + // demote metrics + // demoteDuration measures how long time a demotion takes. + demoteTxMeter = metrics.NewRegisteredMeter("txpool/demote/tx", nil) + resetDepthMeter = metrics.NewRegisteredMeter("txpool/reset/depth", nil) //reorg depth of blocks which causes demote + + // mutex latency metrics + reannMutexTimer = metrics.NewRegisteredTimer("txpool/mutex/reannounce/duration", nil) + nonceMutexTimer = metrics.NewRegisteredTimer("txpool/mutex/nonce/duration", nil) + journalMutexTimer = metrics.NewRegisteredTimer("txpool/mutex/journal/duration", nil) + + // latency of add() method + addTimer = metrics.NewRegisteredTimer("txpool/addtime", nil) + addWithLockTimer = metrics.NewRegisteredTimer("txpool/locked/addtime", nil) + + // reorg detail metrics + resetTimer = metrics.NewRegisteredTimer("txpool/resettime", nil) + promoteTimer = metrics.NewRegisteredTimer("txpool/promotetime", nil) + demoteTimer = metrics.NewRegisteredTimer("txpool/demotetime", nil) + reorgresetTimer = metrics.NewRegisteredTimer("txpool/reorgresettime", nil) + truncateTimer = metrics.NewRegisteredTimer("txpool/truncatetime", nil) + reorgresetNoblockingTimer = metrics.NewRegisteredTimer("txpool/noblocking/reorgresettime", nil) ) // BlockChain defines the minimal set of methods needed to back a tx pool with @@ -245,6 +267,9 @@ type LegacyPool struct { all *lookup // All transactions to allow lookups priced *pricedList // All transactions sorted by price + pendingCacheDumper func(enforceTip bool) map[common.Address][]*txpool.LazyTransaction + pendingCache *cacheForMiner //pending list cache for miner + reqResetCh chan *txpoolResetRequest reqPromoteCh chan *accountSet queueTxEventCh chan *types.Transaction @@ -274,8 +299,8 @@ func New(config Config, chain BlockChain) *LegacyPool { chain: chain, chainconfig: chain.Config(), signer: types.LatestSigner(chain.Config()), - pending: make(map[common.Address]*list), - queue: make(map[common.Address]*list), + pending: make(map[common.Address]*list, config.GlobalSlots), + queue: make(map[common.Address]*list, config.GlobalQueue), beats: make(map[common.Address]time.Time), all: newLookup(), reqResetCh: make(chan *txpoolResetRequest), @@ -284,11 +309,13 @@ func New(config Config, chain BlockChain) *LegacyPool { reorgDoneCh: make(chan chan struct{}), reorgShutdownCh: make(chan struct{}), initDoneCh: make(chan struct{}), + pendingCache: newCacheForMiner(), } pool.locals = newAccountSet(pool.signer) for _, addr := range config.Locals { log.Info("Setting new local account", "address", addr) pool.locals.add(addr) + pool.pendingCache.markLocal(addr) } pool.priced = newPricedList(pool.all) @@ -320,6 +347,11 @@ func (pool *LegacyPool) Init(gasTip *big.Int, head *types.Header, reserve txpool // Set the basic pool parameters pool.gasTip.Store(gasTip) + // set dumper + pool.pendingCacheDumper = func(enforceTip bool) map[common.Address][]*txpool.LazyTransaction { + return pool.pendingCache.dump(pool, gasTip, pool.gasTip.Load(), enforceTip) + } + // Initialize the state with head block, or fallback to empty one in // case the head state is not available(might occur when node is not // fully synced). @@ -420,14 +452,17 @@ func (pool *LegacyPool) loop() { case <-journal.C: if pool.journal != nil { pool.mu.Lock() + t0 := time.Now() if err := pool.journal.rotate(pool.toJournal()); err != nil { log.Warn("Failed to rotate local tx journal", "err", err) } + journalMutexTimer.UpdateSince(t0) pool.mu.Unlock() } case <-reannounce.C: pool.mu.RLock() + t0 := time.Now() reannoTxs := func() []*types.Transaction { txs := make([]*types.Transaction, 0) for addr, list := range pool.pending { @@ -448,6 +483,7 @@ func (pool *LegacyPool) loop() { } return txs }() + reannMutexTimer.UpdateSince(t0) pool.mu.RUnlock() staledMeter.Mark(int64(len(reannoTxs))) if len(reannoTxs) > 0 { @@ -519,6 +555,9 @@ func (pool *LegacyPool) SetGasTip(tip *big.Int) { func (pool *LegacyPool) Nonce(addr common.Address) uint64 { pool.mu.RLock() defer pool.mu.RUnlock() + defer func(t0 time.Time) { + nonceMutexTimer.UpdateSince(t0) + }(time.Now()) return pool.pendingNonces.get(addr) } @@ -588,48 +627,19 @@ func (pool *LegacyPool) ContentFrom(addr common.Address) ([]*types.Transaction, // transactions and only return those whose **effective** tip is large enough in // the next pending execution environment. func (pool *LegacyPool) Pending(enforceTips bool) map[common.Address][]*txpool.LazyTransaction { - pool.mu.Lock() - defer pool.mu.Unlock() - - pending := make(map[common.Address][]*txpool.LazyTransaction, len(pool.pending)) - for addr, list := range pool.pending { - txs := list.Flatten() - - // If the miner requests tip enforcement, cap the lists now - if enforceTips && !pool.locals.contains(addr) { - for i, tx := range txs { - if tx.EffectiveGasTipIntCmp(pool.gasTip.Load(), pool.priced.urgent.baseFee) < 0 { - txs = txs[:i] - break - } - } - } - if len(txs) > 0 { - lazies := make([]*txpool.LazyTransaction, len(txs)) - for i := 0; i < len(txs); i++ { - lazies[i] = &txpool.LazyTransaction{ - Pool: pool, - Hash: txs[i].Hash(), - Tx: txs[i], - Time: txs[i].Time(), - GasFeeCap: txs[i].GasFeeCap(), - GasTipCap: txs[i].GasTipCap(), - Gas: txs[i].Gas(), - BlobGas: txs[i].BlobGas(), - } - } - pending[addr] = lazies - } - } - return pending + defer func(t0 time.Time) { + getPendingDurationTimer.Update(time.Since(t0)) + }(time.Now()) + return pool.pendingCacheDumper(enforceTips) } // Locals retrieves the accounts currently considered local by the pool. func (pool *LegacyPool) Locals() []common.Address { - pool.mu.Lock() - defer pool.mu.Unlock() + defer func(t0 time.Time) { + getLocalsDurationTimer.Update(time.Since(t0)) + }(time.Now()) - return pool.locals.flatten() + return pool.pendingCache.flattenLocals() } // toJournal retrieves all transactions that should be included in the journal, @@ -716,7 +726,7 @@ func (pool *LegacyPool) validateTx(tx *types.Transaction, local bool) error { if tx := list.txs.Get(nonce); tx != nil { cost := tx.Cost() if pool.l1CostFn != nil { - if l1Cost := pool.l1CostFn(tx.RollupDataGas()); l1Cost != nil { // add rollup cost + if l1Cost := pool.l1CostFn(tx.RollupCostData()); l1Cost != nil { // add rollup cost cost = cost.Add(cost, l1Cost) } } @@ -746,7 +756,7 @@ func (pool *LegacyPool) add(tx *types.Transaction, local bool) (replaced bool, e if pool.all.Get(hash) != nil { log.Trace("Discarding already known transaction", "hash", hash) knownTxMeter.Mark(1) - return false, ErrAlreadyKnown + return false, txpool.ErrAlreadyKnown } // Make the local flag. If it's from local source or it's from the network but // the sender is marked as local previously, treat it as the local transaction. @@ -855,7 +865,9 @@ func (pool *LegacyPool) add(tx *types.Transaction, local bool) (replaced bool, e return false, txpool.ErrReplaceUnderpriced } // New transaction is better, replace old one + pool.pendingCache.add([]*types.Transaction{tx}, pool.signer) if old != nil { + pool.pendingCache.del([]*types.Transaction{old}, pool.signer) pool.all.Remove(old.Hash()) pool.priced.Removed(1) pendingReplaceMeter.Mark(1) @@ -879,6 +891,7 @@ func (pool *LegacyPool) add(tx *types.Transaction, local bool) (replaced bool, e if local && !pool.locals.contains(from) { log.Info("Setting new local account", "address", from) pool.locals.add(from) + pool.pendingCache.markLocal(from) pool.priced.Removed(pool.all.RemoteToLocals(pool.locals)) // Migrate the remotes if it's marked as local first time. } if isLocal { @@ -987,10 +1000,12 @@ func (pool *LegacyPool) promoteTx(addr common.Address, hash common.Hash, tx *typ return false } // Otherwise discard any previous transaction and mark this + pool.pendingCache.add([]*types.Transaction{tx}, pool.signer) if old != nil { pool.all.Remove(old.Hash()) pool.priced.Removed(1) pendingReplaceMeter.Mark(1) + pool.pendingCache.del([]*types.Transaction{old}, pool.signer) } else { // Nothing was replaced, bump the pending counter pendingGauge.Inc(1) @@ -1015,8 +1030,7 @@ func (pool *LegacyPool) addLocals(txs []*types.Transaction) []error { // addLocal enqueues a single local transaction into the pool if it is valid. This is // a convenience wrapper around addLocals. func (pool *LegacyPool) addLocal(tx *types.Transaction) error { - errs := pool.addLocals([]*types.Transaction{tx}) - return errs[0] + return pool.addLocals([]*types.Transaction{tx})[0] } // addRemotes enqueues a batch of transactions into the pool if they are valid. If the @@ -1031,8 +1045,7 @@ func (pool *LegacyPool) addRemotes(txs []*types.Transaction) []error { // addRemote enqueues a single transaction into the pool if it is valid. This is a convenience // wrapper around addRemotes. func (pool *LegacyPool) addRemote(tx *types.Transaction) error { - errs := pool.addRemotes([]*types.Transaction{tx}) - return errs[0] + return pool.addRemotes([]*types.Transaction{tx})[0] } // addRemotesSync is like addRemotes, but waits for pool reorganization. Tests use this method. @@ -1051,6 +1064,9 @@ func (pool *LegacyPool) addRemoteSync(tx *types.Transaction) error { // If sync is set, the method will block until all internal maintenance related // to the add is finished. Only use this during tests for determinism! func (pool *LegacyPool) Add(txs []*types.Transaction, local, sync bool) []error { + defer func(t0 time.Time) { + addTimer.UpdateSince(t0) + }(time.Now()) // Do not treat as local if local transactions have been disabled local = local && !pool.config.NoLocals @@ -1062,7 +1078,7 @@ func (pool *LegacyPool) Add(txs []*types.Transaction, local, sync bool) []error for i, tx := range txs { // If the transaction is known, pre-set the error slot if pool.all.Get(tx.Hash()) != nil { - errs[i] = ErrAlreadyKnown + errs[i] = txpool.ErrAlreadyKnown knownTxMeter.Mark(1) continue } @@ -1071,6 +1087,7 @@ func (pool *LegacyPool) Add(txs []*types.Transaction, local, sync bool) []error // in transactions before obtaining lock if err := pool.validateTxBasics(tx, local); err != nil { errs[i] = err + log.Trace("Discarding invalid transaction", "hash", tx.Hash(), "err", err) invalidTxMeter.Mark(1) continue } @@ -1083,7 +1100,9 @@ func (pool *LegacyPool) Add(txs []*types.Transaction, local, sync bool) []error // Process all the new transaction and merge any errors into the original slice pool.mu.Lock() + t0 := time.Now() newErrs, dirtyAddrs := pool.addTxsLocked(news, local) + addWithLockTimer.UpdateSince(t0) pool.mu.Unlock() var nilSlot = 0 @@ -1212,6 +1231,7 @@ func (pool *LegacyPool) removeTx(hash common.Hash, outofbound bool, unreserve bo // Update the account nonce if needed pool.pendingNonces.setIfLower(addr, tx.Nonce()) // Reduce the pending counter + pool.pendingCache.del(append(invalids, tx), pool.signer) pendingGauge.Dec(int64(1 + len(invalids))) return 1 + len(invalids) } @@ -1336,10 +1356,13 @@ func (pool *LegacyPool) scheduleReorgLoop() { func (pool *LegacyPool) runReorg(done chan struct{}, reset *txpoolResetRequest, dirtyAccounts *accountSet, events map[common.Address]*sortedMap) { defer func(t0 time.Time) { reorgDurationTimer.Update(time.Since(t0)) + if reset != nil { + reorgresetTimer.UpdateSince(t0) + } }(time.Now()) defer close(done) - var promoteAddrs []common.Address + var promoteAddrs, demoteAddrs []common.Address if dirtyAccounts != nil && reset == nil { // Only dirty accounts need to be promoted, unless we're resetting. // For resets, all addresses in the tx queue will be promoted and @@ -1347,9 +1370,11 @@ func (pool *LegacyPool) runReorg(done chan struct{}, reset *txpoolResetRequest, promoteAddrs = dirtyAccounts.flatten() } pool.mu.Lock() + tl, t0 := time.Now(), time.Now() if reset != nil { // Reset from the old head to the new, rescheduling any reorged transactions - pool.reset(reset.oldHead, reset.newHead) + demoteAddrs = pool.reset(reset.oldHead, reset.newHead) + resetTimer.UpdateSince(t0) // Nonces were reset, discard any events that became stale for addr := range events { @@ -1365,21 +1390,30 @@ func (pool *LegacyPool) runReorg(done chan struct{}, reset *txpoolResetRequest, } } // Check for pending transactions for every account that sent new ones + t0 = time.Now() promoted := pool.promoteExecutables(promoteAddrs) + promoteTimer.UpdateSince(t0) // If a new block appeared, validate the pool of pending transactions. This will // remove any transaction that has been included in the block or was invalidated // because of another transaction (e.g. higher gas price). + t0 = time.Now() if reset != nil { - pool.demoteUnexecutables() + pool.demoteUnexecutables(demoteAddrs) + demoteTimer.UpdateSince(t0) + var pendingBaseFee = pool.priced.urgent.baseFee if reset.newHead != nil { if pool.chainconfig.IsLondon(new(big.Int).Add(reset.newHead.Number, big.NewInt(1))) { - pendingBaseFee := eip1559.CalcBaseFee(pool.chainconfig, reset.newHead, reset.newHead.Time+1) + pendingBaseFee = eip1559.CalcBaseFee(pool.chainconfig, reset.newHead, reset.newHead.Time+1) pool.priced.SetBaseFee(pendingBaseFee) } else { pool.priced.Reheap() } } + gasTip, baseFee := pool.gasTip.Load(), pendingBaseFee + pool.pendingCacheDumper = func(enforceTip bool) map[common.Address][]*txpool.LazyTransaction { + return pool.pendingCache.dump(pool, gasTip, baseFee, enforceTip) + } // Update all accounts to the latest known pending nonce nonces := make(map[common.Address]uint64, len(pool.pending)) for addr, list := range pool.pending { @@ -1389,11 +1423,14 @@ func (pool *LegacyPool) runReorg(done chan struct{}, reset *txpoolResetRequest, pool.pendingNonces.setAll(nonces) } // Ensure pool.queue and pool.pending sizes stay within the configured limits. + t0 = time.Now() pool.truncatePending() pool.truncateQueue() + truncateTimer.UpdateSince(t0) dropBetweenReorgHistogram.Update(int64(pool.changesSinceReorg)) pool.changesSinceReorg = 0 // Reset change counter + reorgresetNoblockingTimer.UpdateSince(tl) pool.mu.Unlock() // Notify subsystems for newly added transactions @@ -1415,16 +1452,41 @@ func (pool *LegacyPool) runReorg(done chan struct{}, reset *txpoolResetRequest, // reset retrieves the current state of the blockchain and ensures the content // of the transaction pool is valid with regard to the chain state. -func (pool *LegacyPool) reset(oldHead, newHead *types.Header) { +func (pool *LegacyPool) reset(oldHead, newHead *types.Header) (demoteAddrs []common.Address) { // If we're reorging an old state, reinject all dropped transactions var reinject types.Transactions + // collect demote addresses + var collectAddr = func(txs types.Transactions) { + addrs := make(map[common.Address]struct{}) + for _, tx := range txs { + if !pool.Filter(tx) { + continue + } + // it is heavy to get sender from tx, so we try to get it from the pool + if oldtx := pool.all.Get(tx.Hash()); oldtx != nil { + tx = oldtx + } + addr, err := types.Sender(pool.signer, tx) + //it might come from other pool, by other signer + if err != nil { + continue + } + addrs[addr] = struct{}{} + } + demoteAddrs = make([]common.Address, 0, len(addrs)) + for addr := range addrs { + demoteAddrs = append(demoteAddrs, addr) + } + } + + var depth uint64 = 1 if oldHead != nil && oldHead.Hash() != newHead.ParentHash { // If the reorg is too deep, avoid doing it (will happen during fast sync) oldNum := oldHead.Number.Uint64() newNum := newHead.Number.Uint64() - if depth := uint64(math.Abs(float64(oldNum) - float64(newNum))); depth > 64 { + if depth = uint64(math.Abs(float64(oldNum) - float64(newNum))); depth > 64 { log.Debug("Skipping deep transaction reorg", "depth", depth) } else { // Reorg seems shallow enough to pull in all transactions into memory @@ -1490,9 +1552,18 @@ func (pool *LegacyPool) reset(oldHead, newHead *types.Header) { } } reinject = lost + + collectAddr(append(discarded, included...)) } } + } else if newHead != nil && oldHead.Hash() == newHead.ParentHash { + block := pool.chain.GetBlock(newHead.Hash(), newHead.Number.Uint64()) + if block != nil { + collectAddr(block.Transactions()) + } } + resetDepthMeter.Mark(int64(depth)) + log.Info("reset block depth", "depth", depth) // Initialize the internal state to the current head if newHead == nil { newHead = pool.chain.CurrentBlock() // Special case during testing @@ -1506,15 +1577,17 @@ func (pool *LegacyPool) reset(oldHead, newHead *types.Header) { pool.currentState = statedb pool.pendingNonces = newNoncer(statedb) - costFn := types.NewL1CostFunc(pool.chainconfig, statedb) - pool.l1CostFn = func(dataGas types.RollupGasData) *big.Int { - return costFn(newHead.Number.Uint64(), newHead.Time, dataGas, false) + if costFn := types.NewL1CostFunc(pool.chainconfig, statedb); costFn != nil { + pool.l1CostFn = func(rollupCostData types.RollupCostData) *big.Int { + return costFn(rollupCostData, newHead.Time) + } } // Inject any transactions discarded due to reorgs log.Debug("Reinjecting stale transactions", "count", len(reinject)) core.SenderCacher.Recover(pool.signer, reinject) pool.addTxsLocked(reinject, false) + return } // promoteExecutables moves transactions that have become processable from the @@ -1542,7 +1615,7 @@ func (pool *LegacyPool) promoteExecutables(accounts []common.Address) []*types.T if !list.Empty() && pool.l1CostFn != nil { // Reduce the cost-cap by L1 rollup cost of the first tx if necessary. Other txs will get filtered out afterwards. el := list.txs.FirstElement() - if l1Cost := pool.l1CostFn(el.RollupDataGas()); l1Cost != nil { + if l1Cost := pool.l1CostFn(el.RollupCostData()); l1Cost != nil { balance = new(big.Int).Sub(balance, l1Cost) // negative big int is fine } } @@ -1619,6 +1692,7 @@ func (pool *LegacyPool) truncatePending() { } // Gradually drop transactions from offenders offenders := []common.Address{} + var dropPendingCache []*types.Transaction for pending > pool.config.GlobalSlots && !spammers.Empty() { // Retrieve the next offender if not local address offender, _ := spammers.Pop() @@ -1645,6 +1719,7 @@ func (pool *LegacyPool) truncatePending() { log.Trace("Removed fairness-exceeding pending transaction", "hash", hash) } pool.priced.Removed(len(caps)) + dropPendingCache = append(dropPendingCache, caps...) pendingGauge.Dec(int64(len(caps))) if pool.locals.contains(offenders[i]) { localGauge.Dec(int64(len(caps))) @@ -1671,6 +1746,7 @@ func (pool *LegacyPool) truncatePending() { pool.pendingNonces.setIfLower(addr, tx.Nonce()) log.Trace("Removed fairness-exceeding pending transaction", "hash", hash) } + dropPendingCache = append(dropPendingCache, caps...) pool.priced.Removed(len(caps)) pendingGauge.Dec(int64(len(caps))) if pool.locals.contains(addr) { @@ -1680,6 +1756,7 @@ func (pool *LegacyPool) truncatePending() { } } } + pool.pendingCache.del(dropPendingCache, pool.signer) pendingRateLimitMeter.Mark(int64(pendingBeforeCap - pending)) } @@ -1735,10 +1812,23 @@ func (pool *LegacyPool) truncateQueue() { // Note: transactions are not marked as removed in the priced list because re-heaping // is always explicitly triggered by SetBaseFee and it would be unnecessary and wasteful // to trigger a re-heap is this function -func (pool *LegacyPool) demoteUnexecutables() { +func (pool *LegacyPool) demoteUnexecutables(demoteAddrs []common.Address) { + if demoteAddrs == nil { + demoteAddrs = make([]common.Address, 0, len(pool.pending)) + for addr := range pool.pending { + demoteAddrs = append(demoteAddrs, addr) + } + } + demoteTxMeter.Mark(int64(len(demoteAddrs))) + // Iterate over all accounts and demote any non-executable transactions gasLimit := txpool.EffectiveGasLimit(pool.chainconfig, pool.currentHead.Load().GasLimit) - for addr, list := range pool.pending { + for _, addr := range demoteAddrs { + list := pool.pending[addr] + if list == nil { + continue + } + var dropPendingCache []*types.Transaction nonce := pool.currentState.GetNonce(addr) // Drop all transactions that are deemed too old (low nonce) @@ -1752,7 +1842,7 @@ func (pool *LegacyPool) demoteUnexecutables() { if !list.Empty() && pool.l1CostFn != nil { // Reduce the cost-cap by L1 rollup cost of the first tx if necessary. Other txs will get filtered out afterwards. el := list.txs.FirstElement() - if l1Cost := pool.l1CostFn(el.RollupDataGas()); l1Cost != nil { + if l1Cost := pool.l1CostFn(el.RollupCostData()); l1Cost != nil { balance = new(big.Int).Sub(balance, l1Cost) // negative big int is fine } } @@ -1772,6 +1862,9 @@ func (pool *LegacyPool) demoteUnexecutables() { // Internal shuffle shouldn't touch the lookup set. pool.enqueueTx(hash, tx, false, false) } + dropPendingCache = append(dropPendingCache, olds...) + dropPendingCache = append(dropPendingCache, invalids...) + dropPendingCache = append(dropPendingCache, drops...) pendingGauge.Dec(int64(len(olds) + len(drops) + len(invalids))) if pool.locals.contains(addr) { localGauge.Dec(int64(len(olds) + len(drops) + len(invalids))) @@ -1786,6 +1879,7 @@ func (pool *LegacyPool) demoteUnexecutables() { // Internal shuffle shouldn't touch the lookup set. pool.enqueueTx(hash, tx, false, false) } + dropPendingCache = append(dropPendingCache, gapped...) pendingGauge.Dec(int64(len(gapped))) } // Delete the entire pending entry if it became empty. @@ -1795,6 +1889,7 @@ func (pool *LegacyPool) demoteUnexecutables() { pool.reserve(addr, false) } } + pool.pendingCache.del(dropPendingCache, pool.signer) } } diff --git a/core/txpool/legacypool/legacypool_test.go b/core/txpool/legacypool/legacypool_test.go index fb2a77d559..283bddff14 100644 --- a/core/txpool/legacypool/legacypool_test.go +++ b/core/txpool/legacypool/legacypool_test.go @@ -2567,7 +2567,7 @@ func benchmarkPendingDemotion(b *testing.B, size int) { // Benchmark the speed of pool validation b.ResetTimer() for i := 0; i < b.N; i++ { - pool.demoteUnexecutables() + pool.demoteUnexecutables(nil) } } diff --git a/core/txpool/legacypool/list.go b/core/txpool/legacypool/list.go index 0772ada8aa..61a83b62fd 100644 --- a/core/txpool/legacypool/list.go +++ b/core/txpool/legacypool/list.go @@ -339,7 +339,7 @@ func (l *list) Add(tx *types.Transaction, priceBump uint64, l1CostFn txpool.L1Co // Add new tx cost to totalcost l.totalcost.Add(l.totalcost, tx.Cost()) if l1CostFn != nil { - if l1Cost := l1CostFn(tx.RollupDataGas()); l1Cost != nil { // add rollup cost + if l1Cost := l1CostFn(tx.RollupCostData()); l1Cost != nil { // add rollup cost l.totalcost.Add(l.totalcost, l1Cost) } } diff --git a/core/txpool/txpool.go b/core/txpool/txpool.go index 3ca2f9475a..a92a4b6355 100644 --- a/core/txpool/txpool.go +++ b/core/txpool/txpool.go @@ -30,7 +30,7 @@ import ( "github.com/ethereum/go-ethereum/metrics" ) -type L1CostFunc func(dataGas types.RollupGasData) *big.Int +type L1CostFunc func(dataGas types.RollupCostData) *big.Int // TxStatus is the current status of a transaction as seen by the pool. type TxStatus uint diff --git a/core/txpool/validation.go b/core/txpool/validation.go index 182a2dcb37..30ece38b78 100644 --- a/core/txpool/validation.go +++ b/core/txpool/validation.go @@ -70,6 +70,9 @@ func ValidateTransaction(tx *types.Transaction, head *types.Header, signer types Meter(TypeNotSupportDeposit).Mark(1) return core.ErrTxTypeNotSupported } + if opts.Config.IsOptimism() && tx.Type() == types.BlobTxType { + return core.ErrTxTypeNotSupported + } // Ensure transactions not implemented by the calling pool are rejected if opts.Accept&(1<= 2 { // need at least an info tx and a non-info tx - if data := txs[0].Data(); len(data) >= 4+32*8 { // function selector + 8 arguments to setL1BlockValues - l1Basefee := new(big.Int).SetBytes(data[4+32*2 : 4+32*3]) // arg index 2 - overhead := new(big.Int).SetBytes(data[4+32*6 : 4+32*7]) // arg index 6 - scalar := new(big.Int).SetBytes(data[4+32*7 : 4+32*8]) // arg index 7 - fscalar := new(big.Float).SetInt(scalar) // legacy: format fee scalar as big Float - fdivisor := new(big.Float).SetUint64(1_000_000) // 10**6, i.e. 6 decimals - feeScalar := new(big.Float).Quo(fscalar, fdivisor) - for i := 0; i < len(rs); i++ { - if !txs[i].IsDepositTx() { - gas := txs[i].RollupDataGas().DataGas(time, config) - rs[i].L1GasPrice = l1Basefee - // GasUsed reported in receipt should include the overhead - rs[i].L1GasUsed = new(big.Int).Add(new(big.Int).SetUint64(gas), overhead) - rs[i].L1Fee = L1Cost(gas, l1Basefee, overhead, scalar) - rs[i].FeeScalar = feeScalar - } + if config.Optimism != nil && len(txs) >= 2 && config.IsBedrock(new(big.Int).SetUint64(number)) { // need at least an info tx and a non-info tx + l1BaseFee, costFunc, feeScalar, err := extractL1GasParams(config, time, txs[0].Data()) + if err != nil { + return err + } + for i := 0; i < len(rs); i++ { + if txs[i].IsDepositTx() { + continue } - } else { - return fmt.Errorf("L1 info tx only has %d bytes, cannot read gas price parameters", len(data)) + rs[i].L1GasPrice = l1BaseFee + rs[i].L1Fee, rs[i].L1GasUsed = costFunc(txs[i].RollupCostData()) + rs[i].FeeScalar = feeScalar } } - return nil } diff --git a/core/types/receipt_test.go b/core/types/receipt_test.go index 766640129c..8eaae91057 100644 --- a/core/types/receipt_test.go +++ b/core/types/receipt_test.go @@ -34,6 +34,21 @@ import ( ) var ( + bedrockGenesisTestConfig = func() *params.ChainConfig { + conf := *params.AllCliqueProtocolChanges // copy the config + conf.Clique = nil + conf.TerminalTotalDifficultyPassed = true + conf.BedrockBlock = big.NewInt(0) + conf.Optimism = ¶ms.OptimismConfig{EIP1559Elasticity: 50, EIP1559Denominator: 10} + return &conf + }() + ecotoneTestConfig = func() *params.ChainConfig { + conf := *bedrockGenesisTestConfig // copy the config + time := uint64(0) + conf.EcotoneTime = &time + return &conf + }() + legacyReceipt = &Receipt{ Status: ReceiptStatusFailed, CumulativeGasUsed: 1, @@ -451,10 +466,10 @@ func TestDecodeEmptyTypedReceipt(t *testing.T) { // Tests that receipt data can be correctly derived from the contextual infos func TestDeriveFields(t *testing.T) { // Re-derive receipts. - basefee := big.NewInt(1000) + baseFee := big.NewInt(1000) blobGasPrice := big.NewInt(920) derivedReceipts := clearComputedFieldsOnReceipts(receipts) - err := Receipts(derivedReceipts).DeriveFields(params.TestChainConfig, blockHash, blockNumber.Uint64(), blockTime, basefee, blobGasPrice, txs) + err := Receipts(derivedReceipts).DeriveFields(params.TestChainConfig, blockHash, blockNumber.Uint64(), blockTime, baseFee, blobGasPrice, txs) if err != nil { t.Fatalf("DeriveFields(...) = %v, want ", err) } @@ -683,30 +698,20 @@ func clearComputedFieldsOnLogs(logs []*Log) []*Log { return l } -func TestDeriveOptimismTxReceipt(t *testing.T) { - to4 := common.HexToAddress("0x4") +func getOptimismTxReceipts( + t *testing.T, l1AttributesPayload []byte, + l1GasPrice, l1GasUsed *big.Int, feeScalar *big.Float, l1Fee *big.Int) ([]*Transaction, []*Receipt) { + //to4 := common.HexToAddress("0x4") // Create a few transactions to have receipts for txs := Transactions{ NewTx(&DepositTx{ To: nil, // contract creation Value: big.NewInt(6), Gas: 50, - // System config with L1Scalar=2_000_000 (becomes 2 after division), L1Overhead=2500, L1BaseFee=5000 - Data: common.Hex2Bytes("015d8eb900000000000000000000000000000000000000000000000026b39534042076f70000000000000000000000000000000000000000000000007e33b7c4995967580000000000000000000000000000000000000000000000000000000000001388547dea8ff339566349ed0ef6384876655d1b9b955e36ac165c6b8ab69b9af5cd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123400000000000000000000000000000000000000000000000000000000000009c400000000000000000000000000000000000000000000000000000000001e8480"), - }), - NewTx(&DynamicFeeTx{ - To: &to4, - Nonce: 4, - Value: big.NewInt(4), - Gas: 4, - GasTipCap: big.NewInt(44), - GasFeeCap: big.NewInt(1045), - Data: []byte{0, 1, 255, 0}, + Data: l1AttributesPayload, }), + emptyTx, } - depNonce := uint64(7) - blockNumber := big.NewInt(1) - blockHash := common.BytesToHash([]byte{0x03, 0x14}) // Create the corresponding receipts receipts := Receipts{ @@ -741,35 +746,83 @@ func TestDeriveOptimismTxReceipt(t *testing.T) { BlockHash: blockHash, BlockNumber: blockNumber, TransactionIndex: 0, - DepositNonce: &depNonce, + DepositNonce: &depNonce1, }, &Receipt{ - Type: DynamicFeeTxType, + Type: LegacyTxType, + EffectiveGasPrice: big.NewInt(0), PostState: common.Hash{4}.Bytes(), CumulativeGasUsed: 10, Logs: []*Log{}, // derived fields: - TxHash: txs[1].Hash(), - GasUsed: 18446744073709551561, - EffectiveGasPrice: big.NewInt(1044), - BlockHash: blockHash, - BlockNumber: blockNumber, - TransactionIndex: 1, - L1GasPrice: big.NewInt(5000), - L1GasUsed: big.NewInt(3976), - L1Fee: big.NewInt(39760000), - FeeScalar: big.NewFloat(2), + TxHash: txs[1].Hash(), + GasUsed: 18446744073709551561, + BlockHash: blockHash, + BlockNumber: blockNumber, + TransactionIndex: 1, + L1GasPrice: l1GasPrice, + L1GasUsed: l1GasUsed, + L1Fee: l1Fee, + FeeScalar: feeScalar, }, } + return txs, receipts +} + +func TestDeriveOptimismBedrockTxReceipts(t *testing.T) { + // Bedrock style l1 attributes with L1Scalar=7_000_000 (becomes 7 after division), L1Overhead=50, L1BaseFee=1000*1e6 + payload := common.Hex2Bytes("015d8eb900000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000004d2000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000004d2000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000006acfc0015d8eb900000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000004d2000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000004d2000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000006acfc0") + // the parameters we use below are defined in rollup_test.go + l1GasPrice := baseFee + l1GasUsed := bedrockGas + feeScalar := big.NewFloat(float64(scalar.Uint64() / 1e6)) + l1Fee := bedrockFee + txs, receipts := getOptimismTxReceipts(t, payload, l1GasPrice, l1GasUsed, feeScalar, l1Fee) + + // Re-derive receipts. + baseFee := big.NewInt(1000) + derivedReceipts := clearComputedFieldsOnReceipts(receipts) + err := Receipts(derivedReceipts).DeriveFields(bedrockGenesisTestConfig, blockHash, blockNumber.Uint64(), 0, baseFee, nil, txs) + if err != nil { + t.Fatalf("DeriveFields(...) = %v, want ", err) + } + checkBedrockReceipts(t, receipts, derivedReceipts) + + // Should get same result with the Ecotone config because it will assume this is "first ecotone block" + // if it sees the bedrock style L1 attributes. + err = Receipts(derivedReceipts).DeriveFields(ecotoneTestConfig, blockHash, blockNumber.Uint64(), 0, baseFee, nil, txs) + if err != nil { + t.Fatalf("DeriveFields(...) = %v, want ", err) + } + checkBedrockReceipts(t, receipts, derivedReceipts) +} + +func TestDeriveOptimismEcotoneTxReceipts(t *testing.T) { + // Ecotone style l1 attributes with baseFeeScalar=2, blobBaseFeeScalar=3, baseFee=1000*1e6, blobBaseFee=10*1e6 + payload := common.Hex2Bytes("440a5e20000000020000000300000000000004d200000000000004d200000000000004d2000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000004d200000000000000000000000000000000000000000000000000000000000004d2") + // the parameters we use below are defined in rollup_test.go + l1GasPrice := baseFee + l1GasUsed := ecotoneGas + l1Fee := ecotoneFee + txs, receipts := getOptimismTxReceipts(t, payload, l1GasPrice, l1GasUsed, nil /*feeScalar*/, l1Fee) // Re-derive receipts. - basefee := big.NewInt(1000) + baseFee := big.NewInt(1000) derivedReceipts := clearComputedFieldsOnReceipts(receipts) - err := Receipts(derivedReceipts).DeriveFields(params.OptimismTestConfig, blockHash, blockNumber.Uint64(), 0, basefee, nil, txs) + // Should error out if we try to process this with a pre-Ecotone config + err := Receipts(derivedReceipts).DeriveFields(bedrockGenesisTestConfig, blockHash, blockNumber.Uint64(), 0, baseFee, nil, txs) + if err == nil { + t.Fatalf("expected error from deriving ecotone receipts with pre-ecotone config, got none") + } + + err = Receipts(derivedReceipts).DeriveFields(ecotoneTestConfig, blockHash, blockNumber.Uint64(), 0, baseFee, nil, txs) if err != nil { t.Fatalf("DeriveFields(...) = %v, want ", err) } + diffReceipts(t, receipts, derivedReceipts) +} +func diffReceipts(t *testing.T, receipts, derivedReceipts []*Receipt) { // Check diff of receipts against derivedReceipts. r1, err := json.MarshalIndent(receipts, "", " ") if err != nil { @@ -783,6 +836,10 @@ func TestDeriveOptimismTxReceipt(t *testing.T) { if d != "" { t.Fatal("receipts differ:", d) } +} + +func checkBedrockReceipts(t *testing.T, receipts, derivedReceipts []*Receipt) { + diffReceipts(t, receipts, derivedReceipts) // Check that we preserved the invariant: l1Fee = l1GasPrice * l1GasUsed * l1FeeScalar // but with more difficult int math... diff --git a/core/types/rlp_fuzzer_test.go b/core/types/rlp_fuzzer_test.go new file mode 100644 index 0000000000..a3b9f72436 --- /dev/null +++ b/core/types/rlp_fuzzer_test.go @@ -0,0 +1,147 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package types + +import ( + "bytes" + "fmt" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/rlp" + "github.com/holiman/uint256" +) + +func decodeEncode(input []byte, val interface{}) error { + if err := rlp.DecodeBytes(input, val); err != nil { + // not valid rlp, nothing to do + return nil + } + // If it _were_ valid rlp, we can encode it again + output, err := rlp.EncodeToBytes(val) + if err != nil { + return err + } + if !bytes.Equal(input, output) { + return fmt.Errorf("encode-decode is not equal, \ninput : %x\noutput: %x", input, output) + } + return nil +} + +func FuzzRLP(f *testing.F) { + f.Fuzz(fuzzRlp) +} + +func fuzzRlp(t *testing.T, input []byte) { + if len(input) == 0 || len(input) > 500*1024 { + return + } + rlp.Split(input) + if elems, _, err := rlp.SplitList(input); err == nil { + rlp.CountValues(elems) + } + rlp.NewStream(bytes.NewReader(input), 0).Decode(new(interface{})) + if err := decodeEncode(input, new(interface{})); err != nil { + t.Fatal(err) + } + { + var v struct { + Int uint + String string + Bytes []byte + } + if err := decodeEncode(input, &v); err != nil { + t.Fatal(err) + } + } + { + type Types struct { + Bool bool + Raw rlp.RawValue + Slice []*Types + Iface []interface{} + } + var v Types + if err := decodeEncode(input, &v); err != nil { + t.Fatal(err) + } + } + { + type AllTypes struct { + Int uint + String string + Bytes []byte + Bool bool + Raw rlp.RawValue + Slice []*AllTypes + Array [3]*AllTypes + Iface []interface{} + } + var v AllTypes + if err := decodeEncode(input, &v); err != nil { + t.Fatal(err) + } + } + { + if err := decodeEncode(input, [10]byte{}); err != nil { + t.Fatal(err) + } + } + { + var v struct { + Byte [10]byte + Rool [10]bool + } + if err := decodeEncode(input, &v); err != nil { + t.Fatal(err) + } + } + { + var h Header + if err := decodeEncode(input, &h); err != nil { + t.Fatal(err) + } + var b Block + if err := decodeEncode(input, &b); err != nil { + t.Fatal(err) + } + var tx Transaction + if err := decodeEncode(input, &tx); err != nil { + t.Fatal(err) + } + var txs Transactions + if err := decodeEncode(input, &txs); err != nil { + t.Fatal(err) + } + var rs Receipts + if err := decodeEncode(input, &rs); err != nil { + t.Fatal(err) + } + } + { + var v struct { + AnIntPtr *big.Int + AnInt big.Int + AnU256Ptr *uint256.Int + AnU256 uint256.Int + NotAnU256 [4]uint64 + } + if err := decodeEncode(input, &v); err != nil { + t.Fatal(err) + } + } +} diff --git a/core/types/rollup_cost.go b/core/types/rollup_cost.go new file mode 100644 index 0000000000..c40b24db94 --- /dev/null +++ b/core/types/rollup_cost.go @@ -0,0 +1,285 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package types + +import ( + "bytes" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" +) + +const ( + // The two 4-byte Ecotone fee scalar values are packed into the same storage slot as the 8-byte + // sequence number and have the following Solidity offsets within the slot. Note that Solidity + // offsets correspond to the last byte of the value in the slot, counting backwards from the + // end of the slot. For example, The 8-byte sequence number has offset 0, and is therefore + // stored as big-endian format in bytes [24:32] of the slot. + BaseFeeScalarSlotOffset = 12 // bytes [16:20] of the slot + BlobBaseFeeScalarSlotOffset = 8 // bytes [20:24] of the slot + + // scalarSectionStart is the beginning of the scalar values segment in the slot + // array. baseFeeScalar is in the first four bytes of the segment, blobBaseFeeScalar the next + // four. + scalarSectionStart = 32 - BaseFeeScalarSlotOffset - 4 +) + +func init() { + if BlobBaseFeeScalarSlotOffset != BaseFeeScalarSlotOffset-4 { + panic("this code assumes the scalars are at adjacent positions in the scalars slot") + } +} + +var ( + // BedrockL1AttributesSelector is the function selector indicating Bedrock style L1 gas + // attributes. + BedrockL1AttributesSelector = []byte{0x01, 0x5d, 0x8e, 0xb9} + // EcotoneL1AttributesSelector is the selector indicating Ecotone style L1 gas attributes. + EcotoneL1AttributesSelector = []byte{0x44, 0x0a, 0x5e, 0x20} + + // L1BlockAddr is the address of the L1Block contract which stores the L1 gas attributes. + L1BlockAddr = common.HexToAddress("0x4200000000000000000000000000000000000015") + + L1BaseFeeSlot = common.BigToHash(big.NewInt(1)) + OverheadSlot = common.BigToHash(big.NewInt(5)) + ScalarSlot = common.BigToHash(big.NewInt(6)) + + // L2BlobBaseFeeSlot was added with the Ecotone upgrade and stores the blobBaseFee L1 gas + // attribute. + L1BlobBaseFeeSlot = common.BigToHash(big.NewInt(7)) + // L1FeeScalarsSlot as of the Ecotone upgrade stores the 32-bit basefeeScalar and + // blobBaseFeeScalar L1 gas attributes at offsets `BaseFeeScalarSlotOffset` and + // `BlobBaseFeeScalarSlotOffset` respectively. + L1FeeScalarsSlot = common.BigToHash(big.NewInt(3)) + + oneMillion = big.NewInt(1_000_000) + ecotoneDivisor = big.NewInt(1_000_000 * 16) + sixteen = big.NewInt(16) + + emptyScalars = make([]byte, 8) +) + +// RollupCostData is a transaction structure that caches data for quickly computing the data +// availablility costs for the transaction. +type RollupCostData struct { + zeroes, ones uint64 +} + +type StateGetter interface { + GetState(common.Address, common.Hash) common.Hash +} + +// L1CostFunc is used in the state transition to determine the data availability fee charged to the +// sender of non-Deposit transactions. It returns nil if no data availability fee is charged. +type L1CostFunc func(rcd RollupCostData, blockTime uint64) *big.Int + +// l1CostFunc is an internal version of L1CostFunc that also returns the gasUsed for use in +// receipts. +type l1CostFunc func(rcd RollupCostData) (fee, gasUsed *big.Int) + +func NewRollupCostData(data []byte) (out RollupCostData) { + for _, b := range data { + if b == 0 { + out.zeroes++ + } else { + out.ones++ + } + } + return out +} + +// NewL1CostFunc returns a function used for calculating data availability fees, or nil if this is +// not an op-stack chain. +func NewL1CostFunc(config *params.ChainConfig, statedb StateGetter) L1CostFunc { + if config.Optimism == nil { + return nil + } + forBlock := ^uint64(0) + var cachedFunc l1CostFunc + return func(rollupCostData RollupCostData, blockTime uint64) *big.Int { + if rollupCostData == (RollupCostData{}) { + return nil // Do not charge if there is no rollup cost-data (e.g. RPC call or deposit). + } + if forBlock != blockTime { + if forBlock != ^uint64(0) { + // best practice is not to re-use l1 cost funcs across different blocks, but we + // make it work just in case. + log.Info("l1 cost func re-used for different L1 block", "oldTime", forBlock, "newTime", blockTime) + } + forBlock = blockTime + // Note: the various state variables below are not initialized from the DB until this + // point to allow deposit transactions from the block to be processed first by state + // transition. This behavior is consensus critical! + if !config.IsOptimismEcotone(blockTime) { + cachedFunc = newL1CostFuncBedrock(config, statedb, blockTime) + } else { + l1BlobBaseFee := statedb.GetState(L1BlockAddr, L1BlobBaseFeeSlot).Big() + l1FeeScalars := statedb.GetState(L1BlockAddr, L1FeeScalarsSlot).Bytes() + + // Edge case: the very first Ecotone block requires we use the Bedrock cost + // function. We detect this scenario by checking if the Ecotone parameters are + // unset. Not here we rely on assumption that the scalar parameters are adjacent + // in the buffer and basefeeScalar comes first. + if l1BlobBaseFee.BitLen() == 0 && + bytes.Equal(emptyScalars, l1FeeScalars[scalarSectionStart:scalarSectionStart+8]) { + log.Info("using bedrock l1 cost func for first Ecotone block", "time", blockTime) + cachedFunc = newL1CostFuncBedrock(config, statedb, blockTime) + } else { + l1BaseFee := statedb.GetState(L1BlockAddr, L1BaseFeeSlot).Big() + offset := scalarSectionStart + l1BaseFeeScalar := new(big.Int).SetBytes(l1FeeScalars[offset : offset+4]) + l1BlobBaseFeeScalar := new(big.Int).SetBytes(l1FeeScalars[offset+4 : offset+8]) + cachedFunc = newL1CostFuncEcotone(l1BaseFee, l1BlobBaseFee, l1BaseFeeScalar, l1BlobBaseFeeScalar) + } + } + } + fee, _ := cachedFunc(rollupCostData) + return fee + } +} + +// newL1CostFuncBedrock returns an L1 cost function suitable for Bedrock, Regolith, and the first +// block only of the Ecotone upgrade. +func newL1CostFuncBedrock(config *params.ChainConfig, statedb StateGetter, blockTime uint64) l1CostFunc { + l1BaseFee := statedb.GetState(L1BlockAddr, L1BaseFeeSlot).Big() + overhead := statedb.GetState(L1BlockAddr, OverheadSlot).Big() + scalar := statedb.GetState(L1BlockAddr, ScalarSlot).Big() + isRegolith := config.IsRegolith(blockTime) + return newL1CostFuncBedrockHelper(l1BaseFee, overhead, scalar, isRegolith) +} + +// newL1CostFuncBedrockHelper is lower level version of newL1CostFuncBedrock that expects already +// extracted parameters +func newL1CostFuncBedrockHelper(l1BaseFee, overhead, scalar *big.Int, isRegolith bool) l1CostFunc { + return func(rollupCostData RollupCostData) (fee, gasUsed *big.Int) { + if rollupCostData == (RollupCostData{}) { + return nil, nil // Do not charge if there is no rollup cost-data (e.g. RPC call or deposit) + } + gas := rollupCostData.zeroes * params.TxDataZeroGas + if isRegolith { + gas += rollupCostData.ones * params.TxDataNonZeroGasEIP2028 + } else { + gas += (rollupCostData.ones + 68) * params.TxDataNonZeroGasEIP2028 + } + gasWithOverhead := new(big.Int).SetUint64(gas) + gasWithOverhead.Add(gasWithOverhead, overhead) + l1Cost := l1CostHelper(gasWithOverhead, l1BaseFee, scalar) + return l1Cost, gasWithOverhead + } +} + +// newL1CostFuncEcotone returns an l1 cost function suitable for the Ecotone upgrade except for the +// very first block of the upgrade. +func newL1CostFuncEcotone(l1BaseFee, l1BlobBaseFee, l1BaseFeeScalar, l1BlobBaseFeeScalar *big.Int) l1CostFunc { + return func(costData RollupCostData) (fee, calldataGasUsed *big.Int) { + calldataGas := (costData.zeroes * params.TxDataZeroGas) + (costData.ones * params.TxDataNonZeroGasEIP2028) + calldataGasUsed = new(big.Int).SetUint64(calldataGas) + + // Ecotone L1 cost function: + // + // (calldataGas/16)*(l1BaseFee*16*l1BaseFeeScalar + l1BlobBaseFee*l1BlobBaseFeeScalar)/1e6 + // + // We divide "calldataGas" by 16 to change from units of calldata gas to "estimated # of bytes when + // compressed". Known as "compressedTxSize" in the spec. + // + // Function is actually computed as follows for better precision under integer arithmetic: + // + // calldataGas*(l1BaseFee*16*l1BaseFeeScalar + l1BlobBaseFee*l1BlobBaseFeeScalar)/16e6 + + calldataCostPerByte := new(big.Int).Set(l1BaseFee) + calldataCostPerByte = calldataCostPerByte.Mul(calldataCostPerByte, sixteen) + calldataCostPerByte = calldataCostPerByte.Mul(calldataCostPerByte, l1BaseFeeScalar) + + blobCostPerByte := new(big.Int).Set(l1BlobBaseFee) + blobCostPerByte = blobCostPerByte.Mul(blobCostPerByte, l1BlobBaseFeeScalar) + + fee = new(big.Int).Add(calldataCostPerByte, blobCostPerByte) + fee = fee.Mul(fee, calldataGasUsed) + fee = fee.Div(fee, ecotoneDivisor) + + return fee, calldataGasUsed + } +} + +// extractL1GasParams extracts the gas parameters necessary to compute gas costs from L1 block info +func extractL1GasParams(config *params.ChainConfig, time uint64, data []byte) (l1BaseFee *big.Int, costFunc l1CostFunc, feeScalar *big.Float, err error) { + if config.IsEcotone(time) { + // edge case: for the very first Ecotone block we still need to use the Bedrock + // function. We detect this edge case by seeing if the function selector is the old one + if len(data) >= 4 && !bytes.Equal(data[0:4], BedrockL1AttributesSelector) { + l1BaseFee, costFunc, err = extractL1GasParamsEcotone(data) + return + } + } + + // data consists of func selector followed by 7 ABI-encoded parameters (32 bytes each) + if len(data) < 4+32*8 { + return nil, nil, nil, fmt.Errorf("expected at least %d L1 info bytes, got %d", 4+32*8, len(data)) + } + data = data[4:] // trim function selector + l1BaseFee = new(big.Int).SetBytes(data[32*2 : 32*3]) // arg index 2 + overhead := new(big.Int).SetBytes(data[32*6 : 32*7]) // arg index 6 + scalar := new(big.Int).SetBytes(data[32*7 : 32*8]) // arg index 7 + fscalar := new(big.Float).SetInt(scalar) // legacy: format fee scalar as big Float + fdivisor := new(big.Float).SetUint64(1_000_000) // 10**6, i.e. 6 decimals + feeScalar = new(big.Float).Quo(fscalar, fdivisor) + costFunc = newL1CostFuncBedrockHelper(l1BaseFee, overhead, scalar, config.IsRegolith(time)) + return +} + +// extractEcotoneL1GasParams extracts the gas parameters necessary to compute gas from L1 attribute +// info calldata after the Ecotone upgrade, but not for the very first Ecotone block. +func extractL1GasParamsEcotone(data []byte) (l1BaseFee *big.Int, costFunc l1CostFunc, err error) { + if len(data) != 164 { + return nil, nil, fmt.Errorf("expected 164 L1 info bytes, got %d", len(data)) + } + // data layout assumed for Ecotone: + // offset type varname + // 0 + // 4 uint32 _basefeeScalar + // 8 uint32 _blobBaseFeeScalar + // 12 uint64 _sequenceNumber, + // 20 uint64 _timestamp, + // 28 uint64 _l1BlockNumber + // 36 uint256 _basefee, + // 68 uint256 _blobBaseFee, + // 100 bytes32 _hash, + // 132 bytes32 _batcherHash, + l1BaseFee = new(big.Int).SetBytes(data[36:68]) + l1BlobBaseFee := new(big.Int).SetBytes(data[68:100]) + l1BaseFeeScalar := new(big.Int).SetBytes(data[4:8]) + l1BlobBaseFeeScalar := new(big.Int).SetBytes(data[8:12]) + costFunc = newL1CostFuncEcotone(l1BaseFee, l1BlobBaseFee, l1BaseFeeScalar, l1BlobBaseFeeScalar) + return +} + +// L1Cost computes the the data availability fee for transactions in blocks prior to the Ecotone +// upgrade. It is used by e2e tests so must remain exported. +func L1Cost(rollupDataGas uint64, l1BaseFee, overhead, scalar *big.Int) *big.Int { + l1GasUsed := new(big.Int).SetUint64(rollupDataGas) + l1GasUsed.Add(l1GasUsed, overhead) + return l1CostHelper(l1GasUsed, l1BaseFee, scalar) +} + +func l1CostHelper(gasWithOverhead, l1BaseFee, scalar *big.Int) *big.Int { + fee := new(big.Int).Set(gasWithOverhead) + fee.Mul(fee, l1BaseFee).Mul(fee, scalar).Div(fee, oneMillion) + return fee +} diff --git a/core/types/rollup_cost_test.go b/core/types/rollup_cost_test.go new file mode 100644 index 0000000000..d893f4517b --- /dev/null +++ b/core/types/rollup_cost_test.go @@ -0,0 +1,245 @@ +package types + +import ( + "encoding/binary" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" + "github.com/stretchr/testify/require" +) + +var ( + baseFee = big.NewInt(1000 * 1e6) + overhead = big.NewInt(50) + scalar = big.NewInt(7 * 1e6) + + blobBaseFee = big.NewInt(10 * 1e6) + baseFeeScalar = big.NewInt(2) + blobBaseFeeScalar = big.NewInt(3) + + // below are the expected cost func outcomes for the above parameter settings on the emptyTx + // which is defined in transaction_test.go + bedrockFee = big.NewInt(11326000000000) + regolithFee = big.NewInt(3710000000000) + ecotoneFee = big.NewInt(960900) // (480/16)*(2*16*1000 + 3*10) == 960900 + + bedrockGas = big.NewInt(1618) + regolithGas = big.NewInt(530) // 530 = 1618 - (16*68) + ecotoneGas = big.NewInt(480) +) + +func TestBedrockL1CostFunc(t *testing.T) { + costFunc0 := newL1CostFuncBedrockHelper(baseFee, overhead, scalar, false /*isRegolith*/) + costFunc1 := newL1CostFuncBedrockHelper(baseFee, overhead, scalar, true) + + c0, g0 := costFunc0(emptyTx.RollupCostData()) // pre-Regolith + c1, g1 := costFunc1(emptyTx.RollupCostData()) + + require.Equal(t, bedrockFee, c0) + require.Equal(t, bedrockGas, g0) // gas-used + + require.Equal(t, regolithFee, c1) + require.Equal(t, regolithGas, g1) +} + +func TestEcotoneL1CostFunc(t *testing.T) { + costFunc := newL1CostFuncEcotone(baseFee, blobBaseFee, baseFeeScalar, blobBaseFeeScalar) + c, g := costFunc(emptyTx.RollupCostData()) + require.Equal(t, ecotoneGas, g) + require.Equal(t, ecotoneFee, c) +} + +func TestExtractBedrockGasParams(t *testing.T) { + regolithTime := uint64(1) + config := ¶ms.ChainConfig{ + Optimism: params.OptimismTestConfig.Optimism, + RegolithTime: ®olithTime, + } + + data := getBedrockL1Attributes(baseFee, overhead, scalar) + + _, costFuncPreRegolith, _, err := extractL1GasParams(config, regolithTime-1, data) + require.NoError(t, err) + + // Function should continue to succeed even with extra data (that just gets ignored) since we + // have been testing the data size is at least the expected number of bytes instead of exactly + // the expected number of bytes. It's unclear if this flexibility was intentional, but since + // it's been in production we shouldn't change this behavior. + data = append(data, []byte{0xBE, 0xEE, 0xEE, 0xFF}...) // tack on garbage data + _, costFuncRegolith, _, err := extractL1GasParams(config, regolithTime, data) + require.NoError(t, err) + + c, _ := costFuncPreRegolith(emptyTx.RollupCostData()) + require.Equal(t, bedrockFee, c) + + c, _ = costFuncRegolith(emptyTx.RollupCostData()) + require.Equal(t, regolithFee, c) + + // try to extract from data which has not enough params, should get error. + data = data[:len(data)-4-32] + _, _, _, err = extractL1GasParams(config, regolithTime, data) + require.Error(t, err) +} + +func TestExtractEcotoneGasParams(t *testing.T) { + zeroTime := uint64(0) + // create a config where ecotone upgrade is active + config := ¶ms.ChainConfig{ + Optimism: params.OptimismTestConfig.Optimism, + RegolithTime: &zeroTime, + EcotoneTime: &zeroTime, + } + require.True(t, config.IsOptimismEcotone(0)) + + data := getEcotoneL1Attributes(baseFee, blobBaseFee, baseFeeScalar, blobBaseFeeScalar) + + _, costFunc, _, err := extractL1GasParams(config, 0, data) + require.NoError(t, err) + + c, g := costFunc(emptyTx.RollupCostData()) + + require.Equal(t, ecotoneGas, g) + require.Equal(t, ecotoneFee, c) + + // make sure wrong amont of data results in error + data = append(data, 0x00) // tack on garbage byte + _, _, err = extractL1GasParamsEcotone(data) + require.Error(t, err) +} + +// make sure the first block of the ecotone upgrade is properly detected, and invokes the bedrock +// cost function appropriately +func TestFirstBlockEcotoneGasParams(t *testing.T) { + zeroTime := uint64(0) + // create a config where ecotone upgrade is active + config := ¶ms.ChainConfig{ + Optimism: params.OptimismTestConfig.Optimism, + RegolithTime: &zeroTime, + EcotoneTime: &zeroTime, + } + require.True(t, config.IsOptimismEcotone(0)) + + data := getBedrockL1Attributes(baseFee, overhead, scalar) + + _, oldCostFunc, _, err := extractL1GasParams(config, 0, data) + require.NoError(t, err) + c, _ := oldCostFunc(emptyTx.RollupCostData()) + require.Equal(t, regolithFee, c) +} + +func getBedrockL1Attributes(baseFee, overhead, scalar *big.Int) []byte { + uint256 := make([]byte, 32) + ignored := big.NewInt(1234) + data := []byte{} + data = append(data, BedrockL1AttributesSelector...) + data = append(data, ignored.FillBytes(uint256)...) // arg 0 + data = append(data, ignored.FillBytes(uint256)...) // arg 1 + data = append(data, baseFee.FillBytes(uint256)...) // arg 2 + data = append(data, ignored.FillBytes(uint256)...) // arg 3 + data = append(data, ignored.FillBytes(uint256)...) // arg 4 + data = append(data, ignored.FillBytes(uint256)...) // arg 5 + data = append(data, overhead.FillBytes(uint256)...) // arg 6 + data = append(data, scalar.FillBytes(uint256)...) // arg 7 + return data +} + +func getEcotoneL1Attributes(baseFee, blobBaseFee, baseFeeScalar, blobBaseFeeScalar *big.Int) []byte { + ignored := big.NewInt(1234) + data := []byte{} + uint256 := make([]byte, 32) + uint64 := make([]byte, 8) + uint32 := make([]byte, 4) + data = append(data, EcotoneL1AttributesSelector...) + data = append(data, baseFeeScalar.FillBytes(uint32)...) + data = append(data, blobBaseFeeScalar.FillBytes(uint32)...) + data = append(data, ignored.FillBytes(uint64)...) + data = append(data, ignored.FillBytes(uint64)...) + data = append(data, ignored.FillBytes(uint64)...) + data = append(data, baseFee.FillBytes(uint256)...) + data = append(data, blobBaseFee.FillBytes(uint256)...) + data = append(data, ignored.FillBytes(uint256)...) + data = append(data, ignored.FillBytes(uint256)...) + return data +} + +type testStateGetter struct { + baseFee, blobBaseFee, overhead, scalar *big.Int + baseFeeScalar, blobBaseFeeScalar uint32 +} + +func (sg *testStateGetter) GetState(addr common.Address, slot common.Hash) common.Hash { + buf := common.Hash{} + switch slot { + case L1BaseFeeSlot: + sg.baseFee.FillBytes(buf[:]) + case OverheadSlot: + sg.overhead.FillBytes(buf[:]) + case ScalarSlot: + sg.scalar.FillBytes(buf[:]) + case L1BlobBaseFeeSlot: + sg.blobBaseFee.FillBytes(buf[:]) + case L1FeeScalarsSlot: + offset := scalarSectionStart + binary.BigEndian.PutUint32(buf[offset:offset+4], sg.baseFeeScalar) + binary.BigEndian.PutUint32(buf[offset+4:offset+8], sg.blobBaseFeeScalar) + default: + panic("unknown slot") + } + return buf +} + +// TestNewL1CostFunc tests that the appropriate cost function is selected based on the +// configuration and statedb values. +func TestNewL1CostFunc(t *testing.T) { + time := uint64(1) + config := ¶ms.ChainConfig{ + Optimism: params.OptimismTestConfig.Optimism, + } + statedb := &testStateGetter{ + baseFee: baseFee, + overhead: overhead, + scalar: scalar, + blobBaseFee: blobBaseFee, + baseFeeScalar: uint32(baseFeeScalar.Uint64()), + blobBaseFeeScalar: uint32(blobBaseFeeScalar.Uint64()), + } + + costFunc := NewL1CostFunc(config, statedb) + require.NotNil(t, costFunc) + + // empty cost data should result in nil fee + fee := costFunc(RollupCostData{}, time) + require.Nil(t, fee) + + // emptyTx fee w/ bedrock config should be the bedrock fee + fee = costFunc(emptyTx.RollupCostData(), time) + require.NotNil(t, fee) + require.Equal(t, bedrockFee, fee) + + // emptyTx fee w/ regolith config should be the regolith fee + config.RegolithTime = &time + costFunc = NewL1CostFunc(config, statedb) + require.NotNil(t, costFunc) + fee = costFunc(emptyTx.RollupCostData(), time) + require.NotNil(t, fee) + require.Equal(t, regolithFee, fee) + + // emptyTx fee w/ ecotone config should be the ecotone fee + config.EcotoneTime = &time + costFunc = NewL1CostFunc(config, statedb) + fee = costFunc(emptyTx.RollupCostData(), time) + require.NotNil(t, fee) + require.Equal(t, ecotoneFee, fee) + + // emptyTx fee w/ ecotone config, but simulate first ecotone block by blowing away the ecotone + // params. Should result in regolith fee. + statedb.baseFeeScalar = 0 + statedb.blobBaseFeeScalar = 0 + statedb.blobBaseFee = new(big.Int) + costFunc = NewL1CostFunc(config, statedb) + fee = costFunc(emptyTx.RollupCostData(), time) + require.NotNil(t, fee) + require.Equal(t, regolithFee, fee) +} diff --git a/core/types/rollup_l1_cost.go b/core/types/rollup_l1_cost.go deleted file mode 100644 index 521dfc10d7..0000000000 --- a/core/types/rollup_l1_cost.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2022 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package types - -import ( - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/params" -) - -type RollupGasData struct { - Zeroes, Ones uint64 -} - -func (r RollupGasData) DataGas(time uint64, cfg *params.ChainConfig) (gas uint64) { - gas = r.Zeroes * params.TxDataZeroGas - if cfg.IsRegolith(time) { - gas += r.Ones * params.TxDataNonZeroGasEIP2028 - } else { - gas += (r.Ones + 68) * params.TxDataNonZeroGasEIP2028 - } - return gas -} - -type StateGetter interface { - GetState(common.Address, common.Hash) common.Hash -} - -// L1CostFunc is used in the state transition to determine the cost of a rollup message. -// Returns nil if there is no cost. -type L1CostFunc func(blockNum uint64, blockTime uint64, dataGas RollupGasData, isDepositTx bool) *big.Int - -var ( - L1BaseFeeSlot = common.BigToHash(big.NewInt(1)) - OverheadSlot = common.BigToHash(big.NewInt(5)) - ScalarSlot = common.BigToHash(big.NewInt(6)) -) - -var L1BlockAddr = common.HexToAddress("0x4200000000000000000000000000000000000015") - -// NewL1CostFunc returns a function used for calculating L1 fee cost. -// This depends on the oracles because gas costs can change over time. -// It returns nil if there is no applicable cost function. -func NewL1CostFunc(config *params.ChainConfig, statedb StateGetter) L1CostFunc { - cacheBlockNum := ^uint64(0) - var l1BaseFee, overhead, scalar *big.Int - return func(blockNum uint64, blockTime uint64, dataGas RollupGasData, isDepositTx bool) *big.Int { - rollupDataGas := dataGas.DataGas(blockTime, config) // Only fake txs for RPC view-calls are 0. - if config.Optimism == nil || isDepositTx || rollupDataGas == 0 { - return nil - } - if blockNum != cacheBlockNum { - l1BaseFee = statedb.GetState(L1BlockAddr, L1BaseFeeSlot).Big() - overhead = statedb.GetState(L1BlockAddr, OverheadSlot).Big() - scalar = statedb.GetState(L1BlockAddr, ScalarSlot).Big() - cacheBlockNum = blockNum - } - return L1Cost(rollupDataGas, l1BaseFee, overhead, scalar) - } -} - -func L1Cost(rollupDataGas uint64, l1BaseFee, overhead, scalar *big.Int) *big.Int { - l1GasUsed := new(big.Int).SetUint64(rollupDataGas) - l1GasUsed = l1GasUsed.Add(l1GasUsed, overhead) - l1Cost := l1GasUsed.Mul(l1GasUsed, l1BaseFee) - l1Cost = l1Cost.Mul(l1Cost, scalar) - return l1Cost.Div(l1Cost, big.NewInt(1_000_000)) -} diff --git a/core/types/rollup_l1_cost_test.go b/core/types/rollup_l1_cost_test.go deleted file mode 100644 index e43ea967ee..0000000000 --- a/core/types/rollup_l1_cost_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package types - -import ( - "math/rand" - "testing" - - "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" -) - -func TestRollupGasData(t *testing.T) { - for i := 0; i < 100; i++ { - zeroes := rand.Uint64() - ones := rand.Uint64() - - r := RollupGasData{ - Zeroes: zeroes, - Ones: ones, - } - time := uint64(1) - cfg := ¶ms.ChainConfig{ - RegolithTime: &time, - } - gasPreRegolith := r.DataGas(0, cfg) - gasPostRegolith := r.DataGas(1, cfg) - - require.Equal(t, r.Zeroes*params.TxDataZeroGas+(r.Ones+68)*params.TxDataNonZeroGasEIP2028, gasPreRegolith) - require.Equal(t, r.Zeroes*params.TxDataZeroGas+r.Ones*params.TxDataNonZeroGasEIP2028, gasPostRegolith) - } -} diff --git a/core/types/transaction.go b/core/types/transaction.go index fc00327ea6..d41c6a5488 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -19,6 +19,7 @@ package types import ( "bytes" "errors" + "fmt" "io" "math/big" "sync/atomic" @@ -38,6 +39,9 @@ var ( ErrTxTypeNotSupported = errors.New("transaction type not supported") ErrGasFeeCapTooLow = errors.New("fee cap less than base fee") errShortTypedTx = errors.New("typed transaction too short") + errInvalidYParity = errors.New("'yParity' field must be 0 or 1") + errVYParityMismatch = errors.New("'v' and 'yParity' fields do not match") + errVYParityMissing = errors.New("missing 'yParity' or 'v' field in transaction") ) // Transaction types. @@ -58,8 +62,8 @@ type Transaction struct { size atomic.Value from atomic.Value - // cache of RollupGasData details to compute the gas the tx takes on L1 for its share of rollup data - rollupGas atomic.Value + // cache of details to compute the data availability fee + rollupCostData atomic.Value } // NewTx creates a new transaction. @@ -366,27 +370,20 @@ func (tx *Transaction) Cost() *big.Int { return total } -// RollupDataGas is the amount of gas it takes to confirm the tx on L1 as a rollup -func (tx *Transaction) RollupDataGas() RollupGasData { +// RollupCostData caches the information needed to efficiently compute the data availability fee +func (tx *Transaction) RollupCostData() RollupCostData { if tx.Type() == DepositTxType { - return RollupGasData{} + return RollupCostData{} } - if v := tx.rollupGas.Load(); v != nil { - return v.(RollupGasData) + if v := tx.rollupCostData.Load(); v != nil { + return v.(RollupCostData) } data, err := tx.MarshalBinary() if err != nil { // Silent error, invalid txs will not be marshalled/unmarshalled for batch submission anyway. log.Error("failed to encode tx for L1 cost computation", "err", err) } - var out RollupGasData - for _, byt := range data { - if byt == 0 { - out.Zeroes++ - } else { - out.Ones++ - } - } - tx.rollupGas.Store(out) + out := NewRollupCostData(data) + tx.rollupCostData.Store(out) return out } @@ -446,7 +443,20 @@ func (tx *Transaction) EffectiveGasTipCmp(other *Transaction, baseFee *big.Int) if baseFee == nil { return tx.GasTipCapCmp(other) } - return tx.EffectiveGasTipValue(baseFee).Cmp(other.EffectiveGasTipValue(baseFee)) + // the EffectiveGasTipValue() always copies two big.Int, which cost almost 90% cpu resource of the whole function, + // so we define an alternative function to improve the performance. + return effectiveGasTipValue(tx, baseFee).Cmp(effectiveGasTipValue(other, baseFee)) +} + +func effectiveGasTipValue(tx *Transaction, baseFee *big.Int) *big.Int { + if tx.Type() == DepositTxType { + return new(big.Int) + } + if baseFee == nil { + return tx.inner.gasTipCap() + } + gasFeeCap := tx.inner.gasFeeCap() + return math.BigMin(tx.inner.gasTipCap(), new(big.Int).Sub(gasFeeCap, baseFee)) } // EffectiveGasTipIntCmp compares the effective gasTipCap of a transaction to the given gasTipCap. @@ -489,6 +499,18 @@ func (tx *Transaction) BlobTxSidecar() *BlobTxSidecar { return nil } +// SetBlobTxSidecar sets the sidecar of a transaction. +// The sidecar should match the blob-tx versioned hashes, or the transaction will be invalid. +// This allows tools to easily re-attach blob sidecars to signed transactions that omit the sidecar. +func (tx *Transaction) SetBlobTxSidecar(sidecar *BlobTxSidecar) error { + blobtx, ok := tx.inner.(*BlobTx) + if !ok { + return fmt.Errorf("not a blob tx, type = %d", tx.Type()) + } + blobtx.Sidecar = sidecar + return nil +} + // BlobGasFeeCapCmp compares the blob fee cap of two transactions. func (tx *Transaction) BlobGasFeeCapCmp(other *Transaction) int { return tx.BlobGasFeeCap().Cmp(other.BlobGasFeeCap()) diff --git a/core/types/transaction_marshalling.go b/core/types/transaction_marshalling.go index b15ac26c5d..fcb8bc21bc 100644 --- a/core/types/transaction_marshalling.go +++ b/core/types/transaction_marshalling.go @@ -65,18 +65,18 @@ func (tx *txJSON) yParityValue() (*big.Int, error) { if tx.YParity != nil { val := uint64(*tx.YParity) if val != 0 && val != 1 { - return nil, errors.New("'yParity' field must be 0 or 1") + return nil, errInvalidYParity } bigval := new(big.Int).SetUint64(val) if tx.V != nil && tx.V.ToInt().Cmp(bigval) != 0 { - return nil, errors.New("'v' and 'yParity' fields do not match") + return nil, errVYParityMismatch } return bigval, nil } if tx.V != nil { return tx.V.ToInt(), nil } - return nil, errors.New("missing 'yParity' or 'v' field in transaction") + return nil, errVYParityMissing } // MarshalJSON marshals as JSON with a hash. @@ -314,9 +314,6 @@ func (tx *Transaction) UnmarshalJSON(input []byte) error { return errors.New("missing required field 'input' in transaction") } itx.Data = *dec.Input - if dec.V == nil { - return errors.New("missing required field 'v' in transaction") - } if dec.AccessList != nil { itx.AccessList = *dec.AccessList } @@ -381,9 +378,6 @@ func (tx *Transaction) UnmarshalJSON(input []byte) error { return errors.New("missing required field 'input' in transaction") } itx.Data = *dec.Input - if dec.V == nil { - return errors.New("missing required field 'v' in transaction") - } if dec.AccessList != nil { itx.AccessList = *dec.AccessList } diff --git a/core/types/transaction_signing.go b/core/types/transaction_signing.go index f0fb643cad..0ffe8c92d7 100644 --- a/core/types/transaction_signing.go +++ b/core/types/transaction_signing.go @@ -40,7 +40,7 @@ type sigCache struct { func MakeSigner(config *params.ChainConfig, blockNumber *big.Int, blockTime uint64) Signer { var signer Signer switch { - case config.IsCancun(blockNumber, blockTime): + case config.IsCancun(blockNumber, blockTime) && !config.IsOptimism(): signer = NewCancunSigner(config.ChainID) case config.IsLondon(blockNumber): signer = NewLondonSigner(config.ChainID) @@ -65,7 +65,7 @@ func MakeSigner(config *params.ChainConfig, blockNumber *big.Int, blockTime uint // have the current block number available, use MakeSigner instead. func LatestSigner(config *params.ChainConfig) Signer { if config.ChainID != nil { - if config.CancunTime != nil { + if config.CancunTime != nil && !config.IsOptimism() { return NewCancunSigner(config.ChainID) } if config.LondonBlock != nil { diff --git a/core/types/transaction_test.go b/core/types/transaction_test.go index 25ced0841b..76a010d2e5 100644 --- a/core/types/transaction_test.go +++ b/core/types/transaction_test.go @@ -451,3 +451,97 @@ func TestTransactionSizes(t *testing.T) { } } } + +func TestYParityJSONUnmarshalling(t *testing.T) { + baseJson := map[string]interface{}{ + // type is filled in by the test + "chainId": "0x7", + "nonce": "0x0", + "to": "0x1b442286e32ddcaa6e2570ce9ed85f4b4fc87425", + "gas": "0x124f8", + "gasPrice": "0x693d4ca8", + "maxPriorityFeePerGas": "0x3b9aca00", + "maxFeePerGas": "0x6fc23ac00", + "maxFeePerBlobGas": "0x3b9aca00", + "value": "0x0", + "input": "0x", + "accessList": []interface{}{}, + "blobVersionedHashes": []string{ + "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014", + }, + + // v and yParity are filled in by the test + "r": "0x2a922afc784d07e98012da29f2f37cae1f73eda78aa8805d3df6ee5dbb41ec1", + "s": "0x4f1f75ae6bcdf4970b4f305da1a15d8c5ddb21f555444beab77c9af2baab14", + } + + tests := []struct { + name string + v string + yParity string + wantErr error + }{ + // Valid v and yParity + {"valid v and yParity, 0x0", "0x0", "0x0", nil}, + {"valid v and yParity, 0x1", "0x1", "0x1", nil}, + + // Valid v, missing yParity + {"valid v, missing yParity, 0x0", "0x0", "", nil}, + {"valid v, missing yParity, 0x1", "0x1", "", nil}, + + // Valid yParity, missing v + {"valid yParity, missing v, 0x0", "", "0x0", nil}, + {"valid yParity, missing v, 0x1", "", "0x1", nil}, + + // Invalid yParity + {"invalid yParity, 0x2", "", "0x2", errInvalidYParity}, + + // Conflicting v and yParity + {"conflicting v and yParity", "0x1", "0x0", errVYParityMismatch}, + + // Missing v and yParity + {"missing v and yParity", "", "", errVYParityMissing}, + } + + // Run for all types that accept yParity + t.Parallel() + for _, txType := range []uint64{ + AccessListTxType, + DynamicFeeTxType, + BlobTxType, + } { + txType := txType + for _, test := range tests { + test := test + t.Run(fmt.Sprintf("txType=%d: %s", txType, test.name), func(t *testing.T) { + // Copy the base json + testJson := make(map[string]interface{}) + for k, v := range baseJson { + testJson[k] = v + } + + // Set v, yParity and type + if test.v != "" { + testJson["v"] = test.v + } + if test.yParity != "" { + testJson["yParity"] = test.yParity + } + testJson["type"] = fmt.Sprintf("0x%x", txType) + + // Marshal the JSON + jsonBytes, err := json.Marshal(testJson) + if err != nil { + t.Fatal(err) + } + + // Unmarshal the tx + var tx Transaction + err = tx.UnmarshalJSON(jsonBytes) + if err != test.wantErr { + t.Fatalf("wrong error: got %v, want %v", err, test.wantErr) + } + }) + } + } +} diff --git a/core/vm/analysis.go b/core/vm/analysis.go index 38af9084ac..7677601c95 100644 --- a/core/vm/analysis.go +++ b/core/vm/analysis.go @@ -76,6 +76,14 @@ func codeBitmapInternal(code, bits bitvec) bitvec { for pc := uint64(0); pc < uint64(len(code)); { op := OpCode(code[pc]) pc++ + + // handle super instruction. + step, processed := codeBitmapForSI(code, pc, op, &bits) + if processed { + pc += step + continue + } + if int8(op) < int8(PUSH1) { // If not PUSH (the int8(op) > int(PUSH32) is always false). continue } @@ -116,3 +124,30 @@ func codeBitmapInternal(code, bits bitvec) bitvec { } return bits } + +func codeBitmapForSI(code []byte, pc uint64, op OpCode, bits *bitvec) (step uint64, processed bool) { + // pc points to the data pointer for push, or the next op for opcode + // bits marks the data bytes pointed by [pc] + switch op { + case Push2Jump, Push2JumpI: + bits.setN(set2BitsMask, pc) + step = 3 + processed = true + case Push1Push1: + bits.set1(pc) + bits.set1(pc + 2) + step = 3 + processed = true + case Push1Add, Push1Shl, Push1Dup1: + bits.set1(pc) + step = 2 + processed = true + case JumpIfZero: + bits.setN(set2BitsMask, pc+1) + step = 4 + processed = true + default: + return 0, false + } + return step, processed +} diff --git a/core/vm/contract.go b/core/vm/contract.go index e4b03bd74f..478a728885 100644 --- a/core/vm/contract.go +++ b/core/vm/contract.go @@ -17,10 +17,10 @@ package vm import ( - "math/big" - "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/opcodeCompiler/compiler" "github.com/holiman/uint256" + "math/big" ) // ContractRef is a reference to the contract's backing object @@ -58,8 +58,9 @@ type Contract struct { CodeAddr *common.Address Input []byte - Gas uint64 - value *big.Int + Gas uint64 + value *big.Int + optimized bool } // NewContract returns a new contract environment for the execution of EVM. @@ -112,8 +113,17 @@ func (c *Contract) isCode(udest uint64) bool { if !exist { // Do the analysis and save in parent context // We do not need to store it in c.analysis - analysis = codeBitmap(c.Code) - c.jumpdests[c.CodeHash] = analysis + if c.optimized { + analysis = compiler.LoadBitvec(c.CodeHash) + if analysis == nil { + analysis = codeBitmap(c.Code) + compiler.StoreBitvec(c.CodeHash, analysis) + } + c.jumpdests[c.CodeHash] = analysis + } else { + analysis = codeBitmap(c.Code) + c.jumpdests[c.CodeHash] = analysis + } } // Also stash it in current contract for faster access c.analysis = analysis diff --git a/core/vm/contracts.go b/core/vm/contracts.go index 4253663a54..2cd9174efb 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -33,6 +33,7 @@ import ( "github.com/ethereum/go-ethereum/crypto/bls12381" "github.com/ethereum/go-ethereum/crypto/bn256" "github.com/ethereum/go-ethereum/crypto/kzg4844" + "github.com/ethereum/go-ethereum/crypto/secp256r1" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" @@ -127,6 +128,28 @@ var PrecompiledContractsCancun = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, common.BytesToAddress([]byte{9}): &blake2F{}, common.BytesToAddress([]byte{0x0a}): &kzgPointEvaluation{}, + + common.BytesToAddress([]byte{102}): &blsSignatureVerify{}, + common.BytesToAddress([]byte{103}): &cometBFTLightBlockValidate{}, +} + +// PrecompiledContractsHaber contains the default set of pre-compiled Ethereum +// contracts used in the Haber release. +var PrecompiledContractsHaber = map[common.Address]PrecompiledContract{ + common.BytesToAddress([]byte{1}): &ecrecover{}, + common.BytesToAddress([]byte{2}): &sha256hash{}, + common.BytesToAddress([]byte{3}): &ripemd160hash{}, + common.BytesToAddress([]byte{4}): &dataCopy{}, + common.BytesToAddress([]byte{5}): &bigModExp{eip2565: true}, + common.BytesToAddress([]byte{6}): &bn256AddIstanbul{}, + common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, + common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, + common.BytesToAddress([]byte{9}): &blake2F{}, + common.BytesToAddress([]byte{0x0a}): &kzgPointEvaluation{}, + common.BytesToAddress([]byte{0x01, 0x00}): &p256Verify{}, + + common.BytesToAddress([]byte{102}): &blsSignatureVerify{}, + common.BytesToAddress([]byte{103}): &cometBFTLightBlockValidate{}, } // PrecompiledContractsBLS contains the set of pre-compiled Ethereum @@ -144,6 +167,7 @@ var PrecompiledContractsBLS = map[common.Address]PrecompiledContract{ } var ( + PrecompiledAddressesHaber []common.Address PrecompiledAddressesCancun []common.Address PrecompiledAddressesFermat []common.Address PrecompiledAddressesBerlin []common.Address @@ -171,11 +195,16 @@ func init() { for k := range PrecompiledContractsCancun { PrecompiledAddressesCancun = append(PrecompiledAddressesCancun, k) } + for k := range PrecompiledContractsHaber { + PrecompiledAddressesHaber = append(PrecompiledAddressesHaber, k) + } } // ActivePrecompiles returns the precompiles enabled with the current configuration. func ActivePrecompiles(rules params.Rules) []common.Address { switch { + case rules.IsHaber: + return PrecompiledAddressesHaber case rules.IsCancun: return PrecompiledAddressesCancun case rules.IsFermat: @@ -1164,6 +1193,40 @@ func kZGToVersionedHash(kzg kzg4844.Commitment) common.Hash { return h } +// P256VERIFY (secp256r1 signature verification) +// implemented as a native contract +type p256Verify struct{} + +// RequiredGas returns the gas required to execute the precompiled contract +func (c *p256Verify) RequiredGas(input []byte) uint64 { + return params.P256VerifyGas +} + +// Run executes the precompiled contract with given 160 bytes of param, returning the output and the used gas +func (c *p256Verify) Run(input []byte) ([]byte, error) { + // Required input length is 160 bytes + const p256VerifyInputLength = 160 + // Check the input length + if len(input) != p256VerifyInputLength { + // Input length is invalid + return nil, nil + } + + // Extract the hash, r, s, x, y from the input + hash := input[0:32] + r, s := new(big.Int).SetBytes(input[32:64]), new(big.Int).SetBytes(input[64:96]) + x, y := new(big.Int).SetBytes(input[96:128]), new(big.Int).SetBytes(input[128:160]) + + // Verify the secp256r1 signature + if secp256r1.Verify(hash, r, s, x, y) { + // Signature is valid + return common.LeftPadBytes([]byte{1}, 32), nil + } else { + // Signature is invalid + return nil, nil + } +} + // blsSignatureVerify implements bls signature verification precompile. type blsSignatureVerify struct{} diff --git a/tests/fuzzers/runtime/runtime_fuzz.go b/core/vm/contracts_fuzz_test.go similarity index 55% rename from tests/fuzzers/runtime/runtime_fuzz.go rename to core/vm/contracts_fuzz_test.go index b30e9243d8..87c1fff7cc 100644 --- a/tests/fuzzers/runtime/runtime_fuzz.go +++ b/core/vm/contracts_fuzz_test.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2023 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,23 +14,31 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package runtime +package vm import ( - "github.com/ethereum/go-ethereum/core/vm/runtime" + "testing" + + "github.com/ethereum/go-ethereum/common" ) -// Fuzz is the basic entry point for the go-fuzz tool -// -// This returns 1 for valid parse:able/runnable code, 0 -// for invalid opcode. -func Fuzz(input []byte) int { - _, _, err := runtime.Execute(input, input, &runtime.Config{ - GasLimit: 12000000, - }) - // invalid opcode - if err != nil && len(err.Error()) > 6 && err.Error()[:7] == "invalid" { - return 0 +func FuzzPrecompiledContracts(f *testing.F) { + // Create list of addresses + var addrs []common.Address + for k := range allPrecompiles { + addrs = append(addrs, k) } - return 1 + f.Fuzz(func(t *testing.T, addr uint8, input []byte) { + a := addrs[int(addr)%len(addrs)] + p := allPrecompiles[a] + gas := p.RequiredGas(input) + if gas > 10_000_000 { + return + } + inWant := string(input) + RunPrecompiledContract(p, input, gas) + if inHave := string(input); inWant != inHave { + t.Errorf("Precompiled %v modified input data", a) + } + }) } diff --git a/core/vm/contracts_test.go b/core/vm/contracts_test.go index 2557271736..b9b415c431 100644 --- a/core/vm/contracts_test.go +++ b/core/vm/contracts_test.go @@ -18,6 +18,7 @@ package vm import ( "bytes" + "crypto/sha256" "encoding/hex" "encoding/json" "fmt" @@ -25,9 +26,10 @@ import ( "testing" "time" - "github.com/stretchr/testify/require" - "github.com/ethereum/go-ethereum/common" + "github.com/prysmaticlabs/prysm/v4/crypto/bls" + blscommon "github.com/prysmaticlabs/prysm/v4/crypto/bls/common" + "github.com/stretchr/testify/require" ) // precompiledTest defines the input/output pairs for precompiled contract tests. @@ -61,6 +63,8 @@ var allPrecompiles = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{9}): &blake2F{}, common.BytesToAddress([]byte{0x0a}): &kzgPointEvaluation{}, + common.BytesToAddress([]byte{0x01, 0x00}): &p256Verify{}, + common.BytesToAddress([]byte{0x0f, 0x0a}): &bls12381G1Add{}, common.BytesToAddress([]byte{0x0f, 0x0b}): &bls12381G1Mul{}, common.BytesToAddress([]byte{0x0f, 0x0c}): &bls12381G1MultiExp{}, @@ -399,6 +403,18 @@ func BenchmarkPrecompiledBLS12381G2MultiExpWorstCase(b *testing.B) { benchmarkPrecompiled("0f", testcase, b) } +// Benchmarks the sample inputs from the P256VERIFY precompile. +func BenchmarkPrecompiledP256Verify(bench *testing.B) { + t := precompiledTest{ + Input: "4cee90eb86eaa050036147a12d49004b6b9c72bd725d39d4785011fe190f0b4da73bd4903f0ce3b639bbbf6e8e80d16931ff4bcf5993d58468e8fb19086e8cac36dbcd03009df8c59286b162af3bd7fcc0450c9aa81be5d10d312af6c66b1d604aebd3099c618202fcfe16ae7770b0c49ab5eadf74b754204a3bb6060e44eff37618b065f9832de4ca6ca971a7a1adc826d0f7c00181a5fb2ddf79ae00b4e10e", + Expected: "0000000000000000000000000000000000000000000000000000000000000001", + Name: "p256Verify", + } + benchmarkPrecompiled("100", t, bench) +} + +func TestPrecompiledP256Verify(t *testing.T) { testJson("p256Verify", "100", t) } + func TestCometBFTLightBlockValidate(t *testing.T) { inputStr := "000000000000000000000000000000000000000000000000000000000000018c677265656e6669656c645f393030302d3132310000000000000000000000000000000000000000013c350cd55b99dc6c2b7da9bef5410fbfb869fede858e7b95bf7ca294e228bb40e33f6e876d63791ebd05ff617a1b4f4ad1aa2ce65e3c3a9cdfb33e0ffa7e8423000000000098968015154514f68ce65a0d9eecc578c0ab12da0a2a28a0805521b5b7ae56eb3fb24555efbfe59e1622bfe9f7be8c9022e9b3f2442739c1ce870b9adee169afe60f674edd7c86451c5363d89052fde8351895eeea166ce5373c36e31b518ed191d0c599aa0f5b0000000000989680432f6c4908a9aa5f3444421f466b11645235c99b831b2a2de9e504d7ea299e52a202ce529808618eb3bfc0addf13d8c5f2df821d81e18f9bc61583510b322d067d46323b0a572635c06a049c0a2a929e3c8184a50cf6a8b95708c25834ade456f399015a0000000000989680864cb9828254d712f8e59b164fc6a9402dc4e6c59065e38cff24f5323c8c5da888a0f97e5ee4ba1e11b0674b0a0d06204c1dfa247c370cd4be3e799fc4f6f48d977ac7ca0aeb060adb030a02080b1213677265656e6669656c645f393030302d3132311802220c08b2d7f3a10610e8d2adb3032a480a20ec6ecb5db4ffb17fabe40c60ca7b8441e9c5d77585d0831186f3c37aa16e9c15122408011220a2ab9e1eb9ea52812f413526e424b326aff2f258a56e00d690db9f805b60fe7e32200f40aeff672e8309b7b0aefbb9a1ae3d4299b5c445b7d54e8ff398488467f0053a20e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85542203c350cd55b99dc6c2b7da9bef5410fbfb869fede858e7b95bf7ca294e228bb404a203c350cd55b99dc6c2b7da9bef5410fbfb869fede858e7b95bf7ca294e228bb405220294d8fbd0b94b767a7eba9840f299a3586da7fe6b5dead3b7eecba193c400f935a20bc50557c12d7392b0d07d75df0b61232d48f86a74fdea6d1485d9be6317d268c6220e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8556a20e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85572146699336aa109d1beab3946198c8e59f3b2cbd92f7a4065e3cd89e315ca39d87dee92835b98f8b8ec0861d6d9bb2c60156df5d375b3ceb1fbe71af6a244907d62548a694165caa660fec7a9b4e7b9198191361c71be0b128a0308021a480a20726abd0fdbfb6f779b0483e6e4b4b6f12241f6ea2bf374233ab1a316692b6415122408011220159f10ff15a8b58fc67a92ffd7f33c8cd407d4ce81b04ca79177dfd00ca19a67226808021214050cff76cc632760ba9db796c046004c900967361a0c08b3d7f3a10610808cadba03224080713027ffb776a702d78fd0406205c629ba473e1f8d6af646190f6eb9262cd67d69be90d10e597b91e06d7298eb6fa4b8f1eb7752ebf352a1f51560294548042268080212146699336aa109d1beab3946198c8e59f3b2cbd92f1a0c08b3d7f3a10610b087c1c00322405e2ddb70acfe4904438be3d9f4206c0ace905ac4fc306a42cfc9e86268950a0fbfd6ec5f526d3e41a3ef52bf9f9f358e3cb4c3feac76c762fa3651c1244fe004226808021214c55765fd2d0570e869f6ac22e7f2916a35ea300d1a0c08b3d7f3a10610f0b3d492032240ca17898bd22232fc9374e1188636ee321a396444a5b1a79f7628e4a11f265734b2ab50caf21e8092c55d701248e82b2f011426cb35ba22043b497a6b4661930612a0050aa8010a14050cff76cc632760ba9db796c046004c9009673612220a20e33f6e876d63791ebd05ff617a1b4f4ad1aa2ce65e3c3a9cdfb33e0ffa7e84231880ade2042080a6bbf6ffffffffff012a30a0805521b5b7ae56eb3fb24555efbfe59e1622bfe9f7be8c9022e9b3f2442739c1ce870b9adee169afe60f674edd7c86321415154514f68ce65a0d9eecc578c0ab12da0a2a283a14ee7a2a6a44d427f6949eeb8f12ea9fbb2501da880aa2010a146699336aa109d1beab3946198c8e59f3b2cbd92f12220a20451c5363d89052fde8351895eeea166ce5373c36e31b518ed191d0c599aa0f5b1880ade2042080ade2042a30831b2a2de9e504d7ea299e52a202ce529808618eb3bfc0addf13d8c5f2df821d81e18f9bc61583510b322d067d46323b3214432f6c4908a9aa5f3444421f466b11645235c99b3a14a0a7769429468054e19059af4867da0a495567e50aa2010a14c55765fd2d0570e869f6ac22e7f2916a35ea300d12220a200a572635c06a049c0a2a929e3c8184a50cf6a8b95708c25834ade456f399015a1880ade2042080ade2042a309065e38cff24f5323c8c5da888a0f97e5ee4ba1e11b0674b0a0d06204c1dfa247c370cd4be3e799fc4f6f48d977ac7ca3214864cb9828254d712f8e59b164fc6a9402dc4e6c53a143139916d97df0c589312b89950b6ab9795f34d1a12a8010a14050cff76cc632760ba9db796c046004c9009673612220a20e33f6e876d63791ebd05ff617a1b4f4ad1aa2ce65e3c3a9cdfb33e0ffa7e84231880ade2042080a6bbf6ffffffffff012a30a0805521b5b7ae56eb3fb24555efbfe59e1622bfe9f7be8c9022e9b3f2442739c1ce870b9adee169afe60f674edd7c86321415154514f68ce65a0d9eecc578c0ab12da0a2a283a14ee7a2a6a44d427f6949eeb8f12ea9fbb2501da88" expectOutputStr := "000000000000000000000000000000000000000000000000000000000000018c677265656e6669656c645f393030302d3132310000000000000000000000000000000000000000023c350cd55b99dc6c2b7da9bef5410fbfb869fede858e7b95bf7ca294e228bb40e33f6e876d63791ebd05ff617a1b4f4ad1aa2ce65e3c3a9cdfb33e0ffa7e8423000000000098968015154514f68ce65a0d9eecc578c0ab12da0a2a28a0805521b5b7ae56eb3fb24555efbfe59e1622bfe9f7be8c9022e9b3f2442739c1ce870b9adee169afe60f674edd7c86451c5363d89052fde8351895eeea166ce5373c36e31b518ed191d0c599aa0f5b0000000000989680432f6c4908a9aa5f3444421f466b11645235c99b831b2a2de9e504d7ea299e52a202ce529808618eb3bfc0addf13d8c5f2df821d81e18f9bc61583510b322d067d46323b0a572635c06a049c0a2a929e3c8184a50cf6a8b95708c25834ade456f399015a0000000000989680864cb9828254d712f8e59b164fc6a9402dc4e6c59065e38cff24f5323c8c5da888a0f97e5ee4ba1e11b0674b0a0d06204c1dfa247c370cd4be3e799fc4f6f48d977ac7ca" @@ -411,3 +427,37 @@ func TestCometBFTLightBlockValidate(t *testing.T) { require.NoError(t, err) require.Equal(t, expectOutputStr, hex.EncodeToString(res)) } + +func TestBlsSignatureVerify(t *testing.T) { + msg := "test_bls_signature_verify_precompile_contract" + msgHash := sha256.Sum256([]byte(msg)) + + privateKey1, err := bls.RandKey() + require.NoError(t, err) + privateKey2, err := bls.RandKey() + require.NoError(t, err) + + sig1 := privateKey1.Sign(msgHash[:]) + sig2 := privateKey2.Sign(msgHash[:]) + sig := bls.AggregateSignatures([]blscommon.Signature{sig1, sig2}) + + input := msgHash[:] + input = append(input, sig.Marshal()...) + input = append(input, privateKey1.PublicKey().Marshal()...) + input = append(input, privateKey2.PublicKey().Marshal()...) + + inputStr := hex.EncodeToString(input) + t.Logf("input string: %s", inputStr) + input, err = hex.DecodeString(inputStr) + require.NoError(t, err) + + contract := &blsSignatureVerify{} + res, err := contract.Run(input) + require.NoError(t, err) + require.Equal(t, big1.Bytes(), res) + + input[0] += 1 + res, err = contract.Run(input) + require.NoError(t, err) + require.Equal(t, big0.Bytes(), res) +} diff --git a/core/vm/evm.go b/core/vm/evm.go index 9a0759fb0f..4595855576 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -20,6 +20,8 @@ import ( "math/big" "sync/atomic" + "github.com/ethereum/go-ethereum/core/opcodeCompiler/compiler" + "github.com/holiman/uint256" "github.com/ethereum/go-ethereum/common" @@ -41,6 +43,8 @@ type ( func (evm *EVM) precompile(addr common.Address) (PrecompiledContract, bool) { var precompiles map[common.Address]PrecompiledContract switch { + case evm.chainRules.IsHaber: + precompiles = PrecompiledContractsHaber case evm.chainRules.IsCancun: precompiles = PrecompiledContractsCancun case evm.chainRules.IsFermat: @@ -55,6 +59,13 @@ func (evm *EVM) precompile(addr common.Address) (PrecompiledContract, bool) { precompiles = PrecompiledContractsHomestead } p, ok := precompiles[addr] + // Restrict overrides to known precompiles + if ok && evm.chainConfig.IsOptimism() && evm.Config.OptimismPrecompileOverrides != nil { + override, ok := evm.Config.OptimismPrecompileOverrides(evm.chainRules, p, addr) + if ok { + return override, ok + } + } return p, ok } @@ -77,8 +88,8 @@ type BlockContext struct { BlockNumber *big.Int // Provides information for NUMBER Time uint64 // Provides information for TIME Difficulty *big.Int // Provides information for DIFFICULTY - BaseFee *big.Int // Provides information for BASEFEE - BlobBaseFee *big.Int // Provides information for BLOBBASEFEE + BaseFee *big.Int // Provides information for BASEFEE (0 if vm runs with NoBaseFee flag and 0 gas price) + BlobBaseFee *big.Int // Provides information for BLOBBASEFEE (0 if vm runs with NoBaseFee flag and 0 blob gas price) Random *common.Hash // Provides information for PREVRANDAO } @@ -87,8 +98,9 @@ type BlockContext struct { type TxContext struct { // Message information Origin common.Address // Provides information for ORIGIN - GasPrice *big.Int // Provides information for GASPRICE + GasPrice *big.Int // Provides information for GASPRICE (and is used to zero the basefee if NoBaseFee is set) BlobHashes []common.Hash // Provides information for BLOBHASH + BlobFeeCap *big.Int // Is used to zero the blobbasefee if NoBaseFee is set } // EVM is the Ethereum Virtual Machine base object and provides @@ -130,6 +142,17 @@ type EVM struct { // NewEVM returns a new EVM. The returned EVM is not thread safe and should // only ever be used *once*. func NewEVM(blockCtx BlockContext, txCtx TxContext, statedb StateDB, chainConfig *params.ChainConfig, config Config) *EVM { + // If basefee tracking is disabled (eth_call, eth_estimateGas, etc), and no + // gas prices were specified, lower the basefee to 0 to avoid breaking EVM + // invariants (basefee < feecap) + if config.NoBaseFee { + if txCtx.GasPrice.BitLen() == 0 { + blockCtx.BaseFee = new(big.Int) + } + if txCtx.BlobFeeCap != nil && txCtx.BlobFeeCap.BitLen() == 0 { + blockCtx.BlobBaseFee = new(big.Int) + } + } evm := &EVM{ Context: blockCtx, TxContext: txCtx, @@ -139,6 +162,9 @@ func NewEVM(blockCtx BlockContext, txCtx TxContext, statedb StateDB, chainConfig chainRules: chainConfig.Rules(blockCtx.BlockNumber, blockCtx.Random != nil, blockCtx.Time), } evm.interpreter = NewEVMInterpreter(evm) + if config.EnableOpcodeOptimizations { + compiler.EnableOptimization() + } return evm } @@ -165,14 +191,6 @@ func (evm *EVM) Interpreter() *EVMInterpreter { return evm.interpreter } -// SetBlockContext updates the block context of the EVM. -func (evm *EVM) SetBlockContext(blockCtx BlockContext) { - evm.Context = blockCtx - num := blockCtx.BlockNumber - timestamp := blockCtx.Time - evm.chainRules = evm.chainConfig.Rules(num, blockCtx.Random != nil, timestamp) -} - // Call executes the contract associated with the addr with the given input as // parameters. It also handles any necessary value transfer required and takes // the necessary steps to create accounts and reverses the state in case of an @@ -233,14 +251,27 @@ func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas if len(code) == 0 { ret, err = nil, nil // gas is unchanged } else { - addrCopy := addr - // If the account has no code, we can abort here - // The depth-check is already done, and precompiles handled above - contract := NewContract(caller, AccountRef(addrCopy), value, gas) - contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), code) - ret, err = evm.interpreter.Run(contract, input, false) - evm.StateDB.ParallelMakeUp(addr, input) - gas = contract.Gas + if evm.Config.EnableOpcodeOptimizations { + addrCopy := addr + // If the account has no code, we can abort here + // The depth-check is already done, and precompiles handled above + contract := NewContract(caller, AccountRef(addrCopy), value, gas) + codeHash := evm.StateDB.GetCodeHash(addrCopy) + contract.optimized, code = tryGetOptimizedCode(evm, codeHash, code) + contract.SetCallCode(&addrCopy, codeHash, code) + ret, err = evm.interpreter.Run(contract, input, false) + evm.StateDB.ParallelMakeUp(addr, input) + gas = contract.Gas + } else { + addrCopy := addr + // If the account has no code, we can abort here + // The depth-check is already done, and precompiles handled above + contract := NewContract(caller, AccountRef(addrCopy), value, gas) + contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), code) + ret, err = evm.interpreter.Run(contract, input, false) + evm.StateDB.ParallelMakeUp(addr, input) + gas = contract.Gas + } } } // When an error was returned by the EVM or when setting the creation code @@ -291,13 +322,26 @@ func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte, if p, isPrecompile := evm.precompile(addr); isPrecompile { ret, gas, err = RunPrecompiledContract(p, input, gas) } else { - addrCopy := addr - // Initialise a new contract and set the code that is to be used by the EVM. - // The contract is a scoped environment for this execution context only. - contract := NewContract(caller, AccountRef(caller.Address()), value, gas) - contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), evm.StateDB.GetCode(addrCopy)) - ret, err = evm.interpreter.Run(contract, input, false) - gas = contract.Gas + if evm.Config.EnableOpcodeOptimizations { + addrCopy := addr + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. + contract := NewContract(caller, AccountRef(caller.Address()), value, gas) + code := evm.StateDB.GetCode(addrCopy) + codeHash := evm.StateDB.GetCodeHash(addrCopy) + contract.optimized, code = tryGetOptimizedCode(evm, codeHash, code) + contract.SetCallCode(&addrCopy, codeHash, code) + ret, err = evm.interpreter.Run(contract, input, false) + gas = contract.Gas + } else { + addrCopy := addr + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. + contract := NewContract(caller, AccountRef(caller.Address()), value, gas) + contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), evm.StateDB.GetCode(addrCopy)) + ret, err = evm.interpreter.Run(contract, input, false) + gas = contract.Gas + } } if err != nil { evm.StateDB.RevertToSnapshot(snapshot) @@ -336,12 +380,24 @@ func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []by if p, isPrecompile := evm.precompile(addr); isPrecompile { ret, gas, err = RunPrecompiledContract(p, input, gas) } else { - addrCopy := addr - // Initialise a new contract and make initialise the delegate values - contract := NewContract(caller, AccountRef(caller.Address()), nil, gas).AsDelegate() - contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), evm.StateDB.GetCode(addrCopy)) - ret, err = evm.interpreter.Run(contract, input, false) - gas = contract.Gas + if evm.Config.EnableOpcodeOptimizations { + addrCopy := addr + // Initialise a new contract and make initialise the delegate values + contract := NewContract(caller, AccountRef(caller.Address()), nil, gas).AsDelegate() + code := evm.StateDB.GetCode(addrCopy) + codeHash := evm.StateDB.GetCodeHash(addrCopy) + contract.optimized, code = tryGetOptimizedCode(evm, codeHash, code) + contract.SetCallCode(&addrCopy, codeHash, code) + ret, err = evm.interpreter.Run(contract, input, false) + gas = contract.Gas + } else { + addrCopy := addr + // Initialise a new contract and make initialise the delegate values + contract := NewContract(caller, AccountRef(caller.Address()), nil, gas).AsDelegate() + contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), evm.StateDB.GetCode(addrCopy)) + ret, err = evm.interpreter.Run(contract, input, false) + gas = contract.Gas + } } if err != nil { evm.StateDB.RevertToSnapshot(snapshot) @@ -385,19 +441,38 @@ func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte if p, isPrecompile := evm.precompile(addr); isPrecompile { ret, gas, err = RunPrecompiledContract(p, input, gas) } else { - // At this point, we use a copy of address. If we don't, the go compiler will - // leak the 'contract' to the outer scope, and make allocation for 'contract' - // even if the actual execution ends on RunPrecompiled above. - addrCopy := addr - // Initialise a new contract and set the code that is to be used by the EVM. - // The contract is a scoped environment for this execution context only. - contract := NewContract(caller, AccountRef(addrCopy), new(big.Int), gas) - contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), evm.StateDB.GetCode(addrCopy)) - // When an error was returned by the EVM or when setting the creation code - // above we revert to the snapshot and consume any gas remaining. Additionally - // when we're in Homestead this also counts for code storage gas errors. - ret, err = evm.interpreter.Run(contract, input, true) - gas = contract.Gas + if evm.Config.EnableOpcodeOptimizations { + // At this point, we use a copy of address. If we don't, the go compiler will + // leak the 'contract' to the outer scope, and make allocation for 'contract' + // even if the actual execution ends on RunPrecompiled above. + addrCopy := addr + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. + contract := NewContract(caller, AccountRef(addrCopy), new(big.Int), gas) + code := evm.StateDB.GetCode(addrCopy) + codeHash := evm.StateDB.GetCodeHash(addrCopy) + contract.optimized, code = tryGetOptimizedCode(evm, codeHash, code) + contract.SetCallCode(&addrCopy, codeHash, code) + // When an error was returned by the EVM or when setting the creation code + // above we revert to the snapshot and consume any gas remaining. Additionally + // when we're in Homestead this also counts for code storage gas errors. + ret, err = evm.interpreter.Run(contract, input, true) + gas = contract.Gas + } else { + // At this point, we use a copy of address. If we don't, the go compiler will + // leak the 'contract' to the outer scope, and make allocation for 'contract' + // even if the actual execution ends on RunPrecompiled above. + addrCopy := addr + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. + contract := NewContract(caller, AccountRef(addrCopy), new(big.Int), gas) + contract.SetCallCode(&addrCopy, evm.StateDB.GetCodeHash(addrCopy), evm.StateDB.GetCode(addrCopy)) + // When an error was returned by the EVM or when setting the creation code + // above we revert to the snapshot and consume any gas remaining. Additionally + // when we're in Homestead this also counts for code storage gas errors. + ret, err = evm.interpreter.Run(contract, input, true) + gas = contract.Gas + } } if err != nil { evm.StateDB.RevertToSnapshot(snapshot) @@ -408,6 +483,20 @@ func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte return ret, gas, err } +func tryGetOptimizedCode(evm *EVM, codeHash common.Hash, rawCode []byte) (bool, []byte) { + var code []byte + optimized := false + code = rawCode + optCode := compiler.LoadOptimizedCode(codeHash) + if len(optCode) != 0 { + code = optCode + optimized = true + } else { + compiler.GenOrLoadOptimizedCode(codeHash, rawCode) + } + return optimized, code +} + type codeAndHash struct { code []byte hash common.Hash @@ -469,9 +558,18 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, evm.Config.Tracer.CaptureEnter(typ, caller.Address(), address, codeAndHash.code, gas, value) } } - + // We don't optimize creation code as it run only once. + contract.optimized = false + if evm.Config.EnableOpcodeOptimizations { + compiler.DisableOptimization() + } ret, err := evm.interpreter.Run(contract, nil, false) + // After creation, retrieve to optimization + if evm.Config.EnableOpcodeOptimizations { + compiler.EnableOptimization() + } + // Check whether the max code size has been exceeded, assign err if the case. if err == nil && evm.chainRules.IsEIP158 && len(ret) > params.MaxCodeSize { err = ErrMaxCodeSizeExceeded diff --git a/core/vm/gas_table_test.go b/core/vm/gas_table_test.go index 4a5259a262..c1f7fd70c8 100644 --- a/core/vm/gas_table_test.go +++ b/core/vm/gas_table_test.go @@ -116,7 +116,7 @@ var createGasTests = []struct { minimumGas uint64 }{ // legacy create(0, 0, 0xc000) without 3860 used - {"0x61C00060006000f0" + "600052" + "60206000F3", false, 41237, 41237}, + {"0x61C00060006000f0" + "600052" + "60206000F3", false, 41237, 41237}, //nolint:all // legacy create(0, 0, 0xc000) _with_ 3860 {"0x61C00060006000f0" + "600052" + "60206000F3", true, 44309, 44309}, // create2(0, 0, 0xc001, 0) without 3860 diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 9f4b3659da..e71ac58422 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -169,7 +169,8 @@ func opByte(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byt } func opAddmod(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { - x, y, z := scope.Stack.pop(), scope.Stack.pop(), scope.Stack.peek() + x, y := scope.Stack.pop2() + z := scope.Stack.peek() if z.IsZero() { z.Clear() } else { @@ -179,7 +180,8 @@ func opAddmod(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]b } func opMulmod(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { - x, y, z := scope.Stack.pop(), scope.Stack.pop(), scope.Stack.peek() + x, y := scope.Stack.pop2() + z := scope.Stack.peek() z.MulMod(&x, &y, z) return nil, nil } @@ -237,11 +239,8 @@ func opKeccak256(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ( if interpreter.hasher == nil { interpreter.hasher = crypto.NewKeccakState() - } else { - interpreter.hasher.Reset() } - interpreter.hasher.Write(data) - interpreter.hasher.Read(interpreter.hasherBuf[:]) + interpreter.hasherBuf = crypto.HashData(interpreter.hasher, data) evm := interpreter.evm if evm.Config.EnablePreimageRecording { @@ -298,9 +297,8 @@ func opCallDataSize(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext func opCallDataCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { var ( - memOffset = scope.Stack.pop() - dataOffset = scope.Stack.pop() - length = scope.Stack.pop() + memOffset, dataOffset = scope.Stack.pop2() + length = scope.Stack.pop() ) dataOffset64, overflow := dataOffset.Uint64WithOverflow() if overflow { @@ -321,9 +319,8 @@ func opReturnDataSize(pc *uint64, interpreter *EVMInterpreter, scope *ScopeConte func opReturnDataCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { var ( - memOffset = scope.Stack.pop() - dataOffset = scope.Stack.pop() - length = scope.Stack.pop() + memOffset, dataOffset = scope.Stack.pop2() + length = scope.Stack.pop() ) offset64, overflow := dataOffset.Uint64WithOverflow() @@ -356,15 +353,18 @@ func opCodeSize(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([ func opCodeCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { var ( - memOffset = scope.Stack.pop() - codeOffset = scope.Stack.pop() - length = scope.Stack.pop() + memOffset, codeOffset = scope.Stack.pop2() + length = scope.Stack.pop() ) uint64CodeOffset, overflow := codeOffset.Uint64WithOverflow() if overflow { uint64CodeOffset = 0xffffffffffffffff } - codeCopy := getData(scope.Contract.Code, uint64CodeOffset, length.Uint64()) + contractRawCode := scope.Contract.Code + if interpreter.evm.Config.EnableOpcodeOptimizations && scope.Contract.optimized { + contractRawCode = interpreter.evm.StateDB.GetCode(*scope.Contract.CodeAddr) + } + codeCopy := getData(contractRawCode, uint64CodeOffset, length.Uint64()) scope.Memory.Set(memOffset.Uint64(), length.Uint64(), codeCopy) return nil, nil @@ -501,13 +501,13 @@ func opMload(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]by func opMstore(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { // pop value of the stack - mStart, val := scope.Stack.pop(), scope.Stack.pop() + mStart, val := scope.Stack.pop2() scope.Memory.Set32(mStart.Uint64(), &val) return nil, nil } func opMstore8(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { - off, val := scope.Stack.pop(), scope.Stack.pop() + off, val := scope.Stack.pop2() scope.Memory.store[off.Uint64()] = byte(val.Uint64()) return nil, nil } @@ -524,8 +524,7 @@ func opSstore(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]b if interpreter.readOnly { return nil, ErrWriteProtection } - loc := scope.Stack.pop() - val := scope.Stack.pop() + loc, val := scope.Stack.pop2() interpreter.evm.StateDB.SetState(scope.Contract.Address(), loc.Bytes32(), val.Bytes32()) return nil, nil } @@ -546,7 +545,7 @@ func opJumpi(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]by if interpreter.evm.abort.Load() { return nil, errStopToken } - pos, cond := scope.Stack.pop(), scope.Stack.pop() + pos, cond := scope.Stack.pop2() if !cond.IsZero() { if !scope.Contract.validJumpdest(&pos) { return nil, ErrInvalidJump @@ -580,10 +579,10 @@ func opCreate(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]b return nil, ErrWriteProtection } var ( - value = scope.Stack.pop() - offset, size = scope.Stack.pop(), scope.Stack.pop() - input = scope.Memory.GetCopy(int64(offset.Uint64()), int64(size.Uint64())) - gas = scope.Contract.Gas + value, offset = scope.Stack.pop2() + size = scope.Stack.pop() + input = scope.Memory.GetCopy(int64(offset.Uint64()), int64(size.Uint64())) + gas = scope.Contract.Gas ) if interpreter.evm.chainRules.IsEIP150 { gas -= gas / 64 @@ -626,11 +625,10 @@ func opCreate2(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([] return nil, ErrWriteProtection } var ( - endowment = scope.Stack.pop() - offset, size = scope.Stack.pop(), scope.Stack.pop() - salt = scope.Stack.pop() - input = scope.Memory.GetCopy(int64(offset.Uint64()), int64(size.Uint64())) - gas = scope.Contract.Gas + endowment, offset = scope.Stack.pop2() + size, salt = scope.Stack.pop2() + input = scope.Memory.GetCopy(int64(offset.Uint64()), int64(size.Uint64())) + gas = scope.Contract.Gas ) // Apply EIP150 gas -= gas / 64 @@ -794,14 +792,14 @@ func opStaticCall(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) } func opReturn(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { - offset, size := scope.Stack.pop(), scope.Stack.pop() + offset, size := scope.Stack.pop2() ret := scope.Memory.GetPtr(int64(offset.Uint64()), int64(size.Uint64())) return ret, errStopToken } func opRevert(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { - offset, size := scope.Stack.pop(), scope.Stack.pop() + offset, size := scope.Stack.pop2() ret := scope.Memory.GetPtr(int64(offset.Uint64()), int64(size.Uint64())) interpreter.returnData = ret @@ -934,3 +932,280 @@ func makeSwap(size int64) executionFunc { return nil, nil } } + +// fused instructions +// opAndSwap1PopSwap2Swap1 implements the fused instruction of And and `move to the stack bottom`. +func opAndSwap1PopSwap2Swap1(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + a, b := scope.Stack.pop2() + c, d, e := scope.Stack.peek(), scope.Stack.Back(1), scope.Stack.Back(2) + r := a.And(&a, &b) + tmp := *e + *e = *r + *c = *d + *d = tmp + *pc += 4 + return nil, nil +} + +// opSwap2Swap1PopJump +func opSwap2Swap1PopJump(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + a, _ := scope.Stack.pop2() + c := scope.Stack.peek() + dest := *c + *c = a + if !scope.Contract.validJumpdest(&dest) { + return nil, ErrInvalidJump + } + *pc = dest.Uint64() - 1 // pc will be increased by the interpreter loop + return nil, nil +} + +// opSwap1PopSwap2Swap1 +func opSwap1PopSwap2Swap1(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + a, _ := scope.Stack.pop2() + c, d := scope.Stack.pop(), scope.Stack.peek() + scope.Stack.push(d) + *d = a + scope.Stack.push(&c) + *pc += 3 // pc will be increased by the interpreter loop + return nil, nil +} + +// opPopSwap2Swap1Pop +func opPopSwap2Swap1Pop(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + _, b := scope.Stack.pop2() + _, d := scope.Stack.pop(), scope.Stack.peek() + scope.Stack.push(d) + *d = b + *pc += 3 // pc will be increased by the interpreter loop + return nil, nil +} + +// opPush2Jump +func opPush2Jump(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + var ( + codeLen = len(scope.Contract.Code) + integer = new(uint256.Int) + pos = integer.Clear() + ) + + startMin := codeLen + if int(*pc+1) < startMin { + startMin = int(*pc + 1) + } + + endMin := codeLen + if startMin+2 < endMin { + endMin = startMin + 2 + } + + pos = integer.SetBytes(common.RightPadBytes( + scope.Contract.Code[startMin:endMin], 2)) + + if !scope.Contract.validJumpdest(pos) { + return nil, ErrInvalidJump + } + *pc = pos.Uint64() - 1 // pc will be increased by the interpreter loop + return nil, nil +} + +// opPush2JumpI +func opPush2JumpI(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + var ( + codeLen = len(scope.Contract.Code) + integer = new(uint256.Int) + pos = integer.Clear() + ) + + startMin := codeLen + if int(*pc+1) < startMin { + startMin = int(*pc + 1) + } + + endMin := codeLen + if startMin+2 < endMin { + endMin = startMin + 2 + } + + pos = integer.SetBytes(common.RightPadBytes( + scope.Contract.Code[startMin:endMin], 2)) + + cond := scope.Stack.pop() + if !cond.IsZero() { + if !scope.Contract.validJumpdest(pos) { + return nil, ErrInvalidJump + } + *pc = pos.Uint64() - 1 // pc will be increased by the interpreter loop + } else { + *pc += 3 + } + return nil, nil +} + +// opPush1Push1 +func opPush1Push1(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + var ( + codeLen = uint64(len(scope.Contract.Code)) + a, b = new(uint256.Int), new(uint256.Int) + ) + *pc += 3 + if *pc < codeLen { + a = a.SetUint64(uint64(scope.Contract.Code[*pc-2])) + b = b.SetUint64(uint64(scope.Contract.Code[*pc])) + } + scope.Stack.push2(a, b) + //scope.Stack.push(b) + return nil, nil +} + +// opPush1Add +func opPush1Add(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + var ( + codeLen = uint64(len(scope.Contract.Code)) + a = new(uint256.Int) + ) + *pc += 1 + if *pc < codeLen { + a = a.SetUint64(uint64(scope.Contract.Code[*pc])) + } + b := scope.Stack.pop() + scope.Stack.push(b.Add(a, &b)) + *pc += 1 + return nil, nil +} + +// opPush1Shl +func opPush1Shl(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + var ( + codeLen = uint64(len(scope.Contract.Code)) + shift = new(uint256.Int) + ) + *pc += 1 + if *pc < codeLen { + shift = shift.SetUint64(uint64(scope.Contract.Code[*pc])) + } else { + shift = shift.Clear() + } + value := scope.Stack.peek() + + if shift.LtUint64(256) { + value.Lsh(value, uint(shift.Uint64())) + } else { + value.Clear() + } + *pc += 1 + return nil, nil +} + +// opPush1Dup1 +func opPush1Dup1(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + var ( + codeLen = uint64(len(scope.Contract.Code)) + value = new(uint256.Int) + ) + *pc += 1 + if *pc < codeLen { + value = value.SetUint64(uint64(scope.Contract.Code[*pc])) + } + + scope.Stack.push2(value, value) + //scope.Stack.push(value) + *pc += 1 + return nil, nil +} + +// opSwap1Pop +func opSwap1Pop(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + a, b := scope.Stack.pop(), scope.Stack.peek() + *b = a + *pc += 1 + return nil, nil +} + +// opPopJump +func opPopJump(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + _, pos := scope.Stack.pop2() + if !scope.Contract.validJumpdest(&pos) { + return nil, ErrInvalidJump + } + *pc = pos.Uint64() - 1 // pc will be increased by the interpreter loop + return nil, nil +} + +// opPop2 +func opPop2(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + _, _ = scope.Stack.pop2() + *pc += 1 // pc will be increased by the interpreter loop + return nil, nil +} + +// opSwap2Swap1 +func opSwap2Swap1(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + a, b, c := *scope.Stack.peek(), *scope.Stack.Back(1), *scope.Stack.Back(2) + // to b, c, a + *scope.Stack.peek() = b + *scope.Stack.Back(1) = c + *scope.Stack.Back(2) = a + *pc += 1 // pc will be increased by the interpreter loop + return nil, nil +} + +// opSwap2Pop +func opSwap2Pop(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + // a,b,c -> b,a + a := scope.Stack.peek() + *scope.Stack.Back(2) = *a + scope.Stack.pop() + *pc += 1 // pc will be increased by the interpreter loop + return nil, nil +} + +// opDup2Lt +func opDup2LT(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + x := scope.Stack.peek() + y := scope.Stack.Back(1) + if y.Lt(x) { + x.SetOne() + } else { + x.Clear() + } + *pc += 1 // pc will be increased by the interpreter loop + return nil, nil +} + +// opJumpIfZero +func opJumpIfZero(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + value := scope.Stack.pop() + integer := new(uint256.Int) + pos := new(uint256.Int) + + if value.IsZero() { + codeLen := len(scope.Contract.Code) + *pc += 2 + startMin := codeLen + if int(*pc) < startMin { + startMin = int(*pc) + } + + endMin := codeLen + if startMin+2 < endMin { + endMin = startMin + 2 + } + + pos = integer.SetBytes(common.RightPadBytes( + scope.Contract.Code[startMin:endMin], 2)) + + if !scope.Contract.validJumpdest(pos) { + return nil, ErrInvalidJump + } + *pc = pos.Uint64() - 1 // pc will be increased by the interpreter loop + } else { + *pc += 4 + } + return nil, nil +} + +// opNop has no behavior. +func opNop(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + return nil, nil +} diff --git a/core/vm/interpreter.go b/core/vm/interpreter.go index 75cc45f7f7..9c5443d19e 100644 --- a/core/vm/interpreter.go +++ b/core/vm/interpreter.go @@ -21,16 +21,22 @@ import ( "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" ) +// PrecompileOverrides is a function that can be used to override the default precompiled contracts +type PrecompileOverrides func(params.Rules, PrecompiledContract, common.Address) (PrecompiledContract, bool) + // Config are the configuration options for the Interpreter type Config struct { - Tracer EVMLogger // Opcode logger - NoBaseFee bool // Forces the EIP-1559 baseFee to 0 (needed for 0 price calls) - EnablePreimageRecording bool // Enables recording of SHA3/keccak preimages - ExtraEips []int // Additional EIPS that are to be enabled - EnableParallelExec bool // Whether to execute transaction in parallel mode when do full sync - ParallelTxNum int // Number of slot for transaction execution + Tracer EVMLogger // Opcode logger + NoBaseFee bool // Forces the EIP-1559 baseFee to 0 (needed for 0 price calls) + EnablePreimageRecording bool // Enables recording of SHA3/keccak preimages + ExtraEips []int // Additional EIPS that are to be enabled + EnableParallelExec bool // Whether to execute transaction in parallel mode when do full sync + ParallelTxNum int // Number of slot for transaction execution + OptimismPrecompileOverrides PrecompileOverrides // Precompile overrides for Optimism + EnableOpcodeOptimizations bool // Enable opcode optimization } // ScopeContext contains the things that are per-call, such as stack and memory, @@ -97,6 +103,9 @@ func NewEVMInterpreter(evm *EVM) *EVMInterpreter { } } evm.Config.ExtraEips = extraEips + if evm.Config.EnableOpcodeOptimizations { + table = createOptimizedOpcodeTable(table) + } return &EVMInterpreter{evm: evm, table: table} } diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index fb87258326..92af953dc7 100644 --- a/core/vm/jump_table.go +++ b/core/vm/jump_table.go @@ -1074,3 +1074,134 @@ func copyJumpTable(source *JumpTable) *JumpTable { } return &dest } + +func createOptimizedOpcodeTable(tbl *JumpTable) *JumpTable { + // super instructions + tbl[Nop] = &operation{ + execute: opNop, + constantGas: 0, + minStack: minStack(0, 0), + maxStack: maxStack(0, 0), + } + + tbl[AndSwap1PopSwap2Swap1] = &operation{ + execute: opAndSwap1PopSwap2Swap1, + constantGas: 4*GasFastestStep + GasQuickStep, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + } + + tbl[Swap2Swap1PopJump] = &operation{ + execute: opSwap2Swap1PopJump, + constantGas: 2*GasFastestStep + GasQuickStep + GasMidStep, + minStack: minStack(3, 3), + maxStack: maxStack(3, 3), + } + + tbl[Swap1PopSwap2Swap1] = &operation{ + execute: opSwap1PopSwap2Swap1, + constantGas: 3*GasFastestStep + GasQuickStep, + minStack: minStack(4, 4), + maxStack: maxStack(4, 4), + } + + tbl[PopSwap2Swap1Pop] = &operation{ + execute: opPopSwap2Swap1Pop, + constantGas: 2*GasFastestStep + 2*GasQuickStep, + minStack: minStack(4, 4), + maxStack: maxStack(4, 4), + } + + tbl[Push2Jump] = &operation{ + execute: opPush2Jump, + constantGas: GasFastestStep + GasMidStep, + minStack: minStack(0, 0), + maxStack: maxStack(0, 0), + } + + tbl[Push2JumpI] = &operation{ + execute: opPush2JumpI, + constantGas: GasFastestStep + GasSlowStep, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + } + + tbl[Push1Push1] = &operation{ + execute: opPush1Push1, + constantGas: 2 * GasFastestStep, + minStack: minStack(0, 2), + maxStack: maxStack(0, 2), + } + + tbl[Push1Add] = &operation{ + execute: opPush1Add, + constantGas: 2 * GasFastestStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + } + + tbl[Push1Shl] = &operation{ + execute: opPush1Shl, + constantGas: 2 * GasFastestStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + } + + tbl[Push1Dup1] = &operation{ + execute: opPush1Dup1, + constantGas: 2 * GasFastestStep, + minStack: minStack(0, 2), + maxStack: maxStack(0, 2), + } + + tbl[Swap1Pop] = &operation{ + execute: opSwap1Pop, + constantGas: GasFastestStep + GasQuickStep, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + } + + tbl[PopJump] = &operation{ + execute: opPopJump, + constantGas: GasQuickStep + GasMidStep, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + } + + tbl[Pop2] = &operation{ + execute: opPop2, + constantGas: 2 * GasQuickStep, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + } + + tbl[Swap2Swap1] = &operation{ + execute: opSwap2Swap1, + constantGas: 2 * GasFastestStep, + minStack: minStack(0, 0), + maxStack: maxStack(0, 0), + } + + tbl[Swap2Pop] = &operation{ + execute: opSwap2Pop, + constantGas: GasFastestStep + GasQuickStep, + minStack: minStack(0, 0), + maxStack: maxStack(0, 0), + } + + tbl[Dup2LT] = &operation{ + execute: opDup2LT, + constantGas: 2 * GasFastestStep, + minStack: minStack(2, 2), + maxStack: maxStack(2, 2), + } + + tbl[JumpIfZero] = &operation{ + execute: opJumpIfZero, + constantGas: 2*GasFastestStep + GasSlowStep, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + } + + return tbl +} diff --git a/core/vm/opcodes.go b/core/vm/opcodes.go index a11cf05a15..bacf36fa78 100644 --- a/core/vm/opcodes.go +++ b/core/vm/opcodes.go @@ -25,7 +25,7 @@ type OpCode byte // IsPush specifies if an opcode is a PUSH opcode. func (op OpCode) IsPush() bool { - return PUSH1 <= op && op <= PUSH32 + return PUSH0 <= op && op <= PUSH32 } // 0x0 range - arithmetic ops. @@ -209,6 +209,28 @@ const ( LOG4 ) +// 0xd0 range - customized instructions. +const ( + Nop OpCode = 0xd0 + iota + AndSwap1PopSwap2Swap1 + Swap2Swap1PopJump + Swap1PopSwap2Swap1 + PopSwap2Swap1Pop + Push2Jump + Push2JumpI + Push1Push1 + Push1Add + Push1Shl + Push1Dup1 + Swap1Pop + PopJump + Pop2 + Swap2Swap1 + Swap2Pop + Dup2LT + JumpIfZero // 0xe2 +) + // 0xf0 range - closures. const ( CREATE OpCode = 0xf0 @@ -224,8 +246,7 @@ const ( SELFDESTRUCT OpCode = 0xff ) -// Since the opcodes aren't all in order we can't use a regular slice. -var opCodeToString = map[OpCode]string{ +var opCodeToString = [256]string{ // 0x0 range - arithmetic ops. STOP: "STOP", ADD: "ADD", @@ -385,6 +406,26 @@ var opCodeToString = map[OpCode]string{ LOG3: "LOG3", LOG4: "LOG4", + // 0xd0 range. + Nop: "NOP", + AndSwap1PopSwap2Swap1: "ANDSWAP1POPSWAP2SWAP1", + Swap2Swap1PopJump: "SWAP2SWAP1POPJUMP", + Swap1PopSwap2Swap1: "SWAP1POPSWAP2SWAP1", + PopSwap2Swap1Pop: "POPSWAP2SWAP1POP", + Push2Jump: "PUSH2JUMP", + Push2JumpI: "PUSH2JUMPI", + Push1Push1: "PUSH1PUSH1", + Push1Add: "PUSH1ADD", + Push1Shl: "PUSH1SHL", + Push1Dup1: "PUSH1DUP1", + Swap1Pop: "SWAP1POP", + PopJump: "POPJUMP", + Pop2: "POP2", + Swap2Swap1: "SWAP2SWAP1", + Swap2Pop: "SWAP2POP", + Dup2LT: "DUP2LT", + JumpIfZero: "JUMPIFZERO", + // 0xf0 range - closures. CREATE: "CREATE", CALL: "CALL", @@ -399,12 +440,10 @@ var opCodeToString = map[OpCode]string{ } func (op OpCode) String() string { - str := opCodeToString[op] - if len(str) == 0 { - return fmt.Sprintf("opcode %#x not defined", int(op)) + if s := opCodeToString[op]; s != "" { + return s } - - return str + return fmt.Sprintf("opcode %#x not defined", int(op)) } var stringToOp = map[string]OpCode{ @@ -549,14 +588,33 @@ var stringToOp = map[string]OpCode{ "LOG2": LOG2, "LOG3": LOG3, "LOG4": LOG4, - "CREATE": CREATE, - "CREATE2": CREATE2, - "CALL": CALL, - "RETURN": RETURN, - "CALLCODE": CALLCODE, - "REVERT": REVERT, - "INVALID": INVALID, - "SELFDESTRUCT": SELFDESTRUCT, + + "NOP": Nop, + "ANDSWAP1POPSWAP2SWAP1": AndSwap1PopSwap2Swap1, + "SWAP2SWAP1POPJUMP": Swap2Swap1PopJump, + "SWAP1POPSWAP2SWAP1": Swap1PopSwap2Swap1, + "POPSWAP2SWAP1POP": PopSwap2Swap1Pop, + "PUSH2JUMP": Push2Jump, + "PUSH2JUMPI": Push2JumpI, + "PUSH1PUSH1": Push1Push1, + "PUSH1ADD": Push1Add, + "PUSH1SHL": Push1Shl, + "PUSH1DUP1": Push1Dup1, + "SWAP1POP": Swap1Pop, + "POPJUMP": PopJump, + "POP2": Pop2, + "SWAP2SWAP1": Swap2Swap1, + "SWAP2POP": Swap2Pop, + "DUP2LT": Dup2LT, + "JUMPIFZERO": JumpIfZero, + "CREATE": CREATE, + "CREATE2": CREATE2, + "CALL": CALL, + "RETURN": RETURN, + "CALLCODE": CALLCODE, + "REVERT": REVERT, + "INVALID": INVALID, + "SELFDESTRUCT": SELFDESTRUCT, } // StringToOp finds the opcode whose name is stored in `str`. diff --git a/core/vm/runtime/env.go b/core/vm/runtime/env.go index 64aa550a25..34335b8e9e 100644 --- a/core/vm/runtime/env.go +++ b/core/vm/runtime/env.go @@ -26,6 +26,7 @@ func NewEnv(cfg *Config) *vm.EVM { Origin: cfg.Origin, GasPrice: cfg.GasPrice, BlobHashes: cfg.BlobHashes, + BlobFeeCap: cfg.BlobFeeCap, } blockContext := vm.BlockContext{ CanTransfer: core.CanTransfer, diff --git a/core/vm/runtime/runtime.go b/core/vm/runtime/runtime.go index cfd7e4dbc4..d10457e7fa 100644 --- a/core/vm/runtime/runtime.go +++ b/core/vm/runtime/runtime.go @@ -46,6 +46,7 @@ type Config struct { BaseFee *big.Int BlobBaseFee *big.Int BlobHashes []common.Hash + BlobFeeCap *big.Int Random *common.Hash State *state.StateDB @@ -97,7 +98,7 @@ func setDefaults(cfg *Config) { cfg.BaseFee = big.NewInt(params.InitialBaseFee) } if cfg.BlobBaseFee == nil { - cfg.BlobBaseFee = new(big.Int) + cfg.BlobBaseFee = big.NewInt(params.BlobTxMinBlobGasprice) } } diff --git a/core/vm/runtime/runtime_example_test.go b/core/vm/runtime/runtime_example_test.go index b7d0ddc384..88f48f4551 100644 --- a/core/vm/runtime/runtime_example_test.go +++ b/core/vm/runtime/runtime_example_test.go @@ -18,13 +18,14 @@ package runtime_test import ( "fmt" + "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm/runtime" ) func ExampleExecute() { - ret, _, err := runtime.Execute(common.Hex2Bytes("6060604052600a8060106000396000f360606040526008565b00"), nil, nil) + ret, _, err := runtime.Execute(common.Hex2Bytes("6060604052600a8060106000396000f360606040526008565b00"), nil, &runtime.Config{EVMConfig: vm.Config{EnableOpcodeOptimizations: false}}) if err != nil { fmt.Println(err) } diff --git a/tests/fuzzers/stacktrie/debug/main.go b/core/vm/runtime/runtime_fuzz_test.go similarity index 64% rename from tests/fuzzers/stacktrie/debug/main.go rename to core/vm/runtime/runtime_fuzz_test.go index 6b634f05c2..8a4d31d819 100644 --- a/tests/fuzzers/stacktrie/debug/main.go +++ b/core/vm/runtime/runtime_fuzz_test.go @@ -1,4 +1,4 @@ -// Copyright 2020 The go-ethereum Authors +// Copyright 2023 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,25 +14,16 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package main +package runtime import ( - "fmt" - "os" - - "github.com/ethereum/go-ethereum/tests/fuzzers/stacktrie" + "testing" ) -func main() { - if len(os.Args) != 2 { - fmt.Fprintf(os.Stderr, "Usage: debug ") - os.Exit(1) - } - crasher := os.Args[1] - data, err := os.ReadFile(crasher) - if err != nil { - fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) - os.Exit(1) - } - stacktrie.Debug(data) +func FuzzVmRuntime(f *testing.F) { + f.Fuzz(func(t *testing.T, code, input []byte) { + Execute(code, input, &Config{ + GasLimit: 12000000, + }) + }) } diff --git a/core/vm/runtime/runtime_test.go b/core/vm/runtime/runtime_test.go index 15621a14d7..dea5abf995 100644 --- a/core/vm/runtime/runtime_test.go +++ b/core/vm/runtime/runtime_test.go @@ -18,16 +18,13 @@ package runtime import ( "fmt" - "math/big" - "os" - "strings" - "testing" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/asm" + "github.com/ethereum/go-ethereum/core/opcodeCompiler/compiler" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" @@ -35,6 +32,11 @@ import ( "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum/go-ethereum/params" + "math/big" + "os" + "strings" + "testing" + "time" // force-load js tracers to trigger registration _ "github.com/ethereum/go-ethereum/eth/tracers/js" @@ -663,7 +665,8 @@ func TestColdAccountAccessCost(t *testing.T) { tracer := logger.NewStructLogger(nil) Execute(tc.code, nil, &Config{ EVMConfig: vm.Config{ - Tracer: tracer, + Tracer: tracer, + EnableOpcodeOptimizations: false, }, }) have := tracer.StructLogs()[tc.step].GasCost @@ -671,7 +674,7 @@ func TestColdAccountAccessCost(t *testing.T) { for ii, op := range tracer.StructLogs() { t.Logf("%d: %v %d", ii, op.OpName(), op.GasCost) } - t.Fatalf("tescase %d, gas report wrong, step %d, have %d want %d", i, tc.step, have, want) + t.Fatalf("testcase %d, gas report wrong, step %d, have %d want %d", i, tc.step, have, want) } } } @@ -834,7 +837,185 @@ func TestRuntimeJSTracer(t *testing.T) { GasLimit: 1000000, State: statedb, EVMConfig: vm.Config{ - Tracer: tracer, + Tracer: tracer, + EnableOpcodeOptimizations: false, + }}) + if err != nil { + t.Fatal("didn't expect error", err) + } + res, err := tracer.GetResult() + if err != nil { + t.Fatal(err) + } + if have, want := string(res), tc.results[i]; have != want { + t.Errorf("wrong result for tracer %d testcase %d, have \n%v\nwant\n%v\n", i, j, have, want) + } + } + } +} + +func TestRuntimeJSTracerWithOpcodeOptimizer(t *testing.T) { + jsTracers := []string{ + `{enters: 0, exits: 0, enterGas: 0, gasUsed: 0, steps:0, + step: function() { this.steps++}, + fault: function() {}, + result: function() { + return [this.enters, this.exits,this.enterGas,this.gasUsed, this.steps].join(",") + }, + enter: function(frame) { + this.enters++; + this.enterGas = frame.getGas(); + }, + exit: function(res) { + this.exits++; + this.gasUsed = res.getGasUsed(); + }}`, + `{enters: 0, exits: 0, enterGas: 0, gasUsed: 0, steps:0, + fault: function() {}, + result: function() { + return [this.enters, this.exits,this.enterGas,this.gasUsed, this.steps].join(",") + }, + enter: function(frame) { + this.enters++; + this.enterGas = frame.getGas(); + }, + exit: function(res) { + this.exits++; + this.gasUsed = res.getGasUsed(); + }}`} + tests := []struct { + code []byte + // One result per tracer + results []string + }{ + { + // CREATE + code: []byte{ + // Store initcode in memory at 0x00 (5 bytes left-padded to 32 bytes) + byte(vm.PUSH5), + // Init code: PUSH1 0, PUSH1 0, RETURN (3 steps) + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.RETURN), + byte(vm.PUSH1), 0, + byte(vm.MSTORE), + // length, offset, value + byte(vm.PUSH1), 5, byte(vm.PUSH1), 27, byte(vm.PUSH1), 0, + byte(vm.CREATE), + byte(vm.POP), + }, + results: []string{`"1,1,952855,6,11"`, `"1,1,952855,6,0"`}, + }, + { + // CREATE2 + code: []byte{ + // Store initcode in memory at 0x00 (5 bytes left-padded to 32 bytes) + byte(vm.PUSH5), + // Init code: PUSH1 0, PUSH1 0, RETURN (3 steps) + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.RETURN), + byte(vm.PUSH1), 0, + byte(vm.MSTORE), + // salt, length, offset, value + byte(vm.PUSH1), 1, byte(vm.PUSH1), 5, byte(vm.PUSH1), 27, byte(vm.PUSH1), 0, + byte(vm.CREATE2), + byte(vm.POP), + }, + results: []string{`"1,1,952846,6,11"`, `"1,1,952846,6,0"`}, + }, + { + // CALL + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0, // value + byte(vm.PUSH1), 0xbb, //address + byte(vm.GAS), // gas + byte(vm.CALL), + byte(vm.POP), + }, + results: []string{`"1,1,981796,6,9"`, `"1,1,981796,6,0"`}, + }, + { + // CALLCODE + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0, // value + byte(vm.PUSH1), 0xcc, //address + byte(vm.GAS), // gas + byte(vm.CALLCODE), + byte(vm.POP), + }, + results: []string{`"1,1,981796,6,9"`, `"1,1,981796,6,0"`}, + }, + { + // STATICCALL + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0xdd, //address + byte(vm.GAS), // gas + byte(vm.STATICCALL), + byte(vm.POP), + }, + results: []string{`"1,1,981799,6,9"`, `"1,1,981799,6,0"`}, + }, + { + // DELEGATECALL + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0xee, //address + byte(vm.GAS), // gas + byte(vm.DELEGATECALL), + byte(vm.POP), + }, + results: []string{`"1,1,981799,6,9"`, `"1,1,981799,6,0"`}, + }, + { + // CALL self-destructing contract + code: []byte{ + // outsize, outoffset, insize, inoffset + byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0, // value + byte(vm.PUSH1), 0xff, //address + byte(vm.GAS), // gas + byte(vm.CALL), + byte(vm.POP), + }, + results: []string{`"2,2,0,5003,9"`, `"2,2,0,5003,0"`}, + }, + } + calleeCode := []byte{ + byte(vm.PUSH1), 0, + byte(vm.PUSH1), 0, + byte(vm.RETURN), + } + depressedCode := []byte{ + byte(vm.PUSH1), 0xaa, + byte(vm.SELFDESTRUCT), + } + main := common.HexToAddress("0xaa") + compiler.EnableOptimization() + for i, jsTracer := range jsTracers { + for j, tc := range tests { + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) + statedb.SetCode(main, tc.code) + statedb.SetCode(common.HexToAddress("0xbb"), calleeCode) + statedb.SetCode(common.HexToAddress("0xcc"), calleeCode) + statedb.SetCode(common.HexToAddress("0xdd"), calleeCode) + statedb.SetCode(common.HexToAddress("0xee"), calleeCode) + statedb.SetCode(common.HexToAddress("0xff"), depressedCode) + /* wait for optimized code to be generated */ + time.Sleep(time.Second) + tracer, err := tracers.DefaultDirectory.New(jsTracer, new(tracers.Context), nil) + if err != nil { + t.Fatal(err) + } + _, _, err = Call(main, nil, &Config{ + GasLimit: 1000000, + State: statedb, + EVMConfig: vm.Config{ + Tracer: tracer, + EnableOpcodeOptimizations: true, }}) if err != nil { t.Fatal("didn't expect error", err) diff --git a/core/vm/stack.go b/core/vm/stack.go index e1a957e244..6c94eeb47f 100644 --- a/core/vm/stack.go +++ b/core/vm/stack.go @@ -54,12 +54,26 @@ func (st *Stack) push(d *uint256.Int) { st.data = append(st.data, *d) } +// push push to tos +func (st *Stack) push2(a *uint256.Int, b *uint256.Int) { + // NOTE push limit (1024) is checked in baseCheck + st.data = append(st.data, *a, *b) +} + +// pop the top most elem in stack or cache func (st *Stack) pop() (ret uint256.Int) { ret = st.data[len(st.data)-1] st.data = st.data[:len(st.data)-1] return } +// pop the top most elem in stack or cache +func (st *Stack) pop2() (ret uint256.Int, ret1 uint256.Int) { + ret, ret1 = st.data[len(st.data)-1], st.data[len(st.data)-2] + st.data = st.data[:len(st.data)-2] + return +} + func (st *Stack) len() int { return len(st.data) } diff --git a/core/vm/testdata/precompiles/p256Verify.json b/core/vm/testdata/precompiles/p256Verify.json new file mode 100644 index 0000000000..b631d907ac --- /dev/null +++ b/core/vm/testdata/precompiles/p256Verify.json @@ -0,0 +1,5469 @@ +[ + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd762927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #1: signature malleability", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #3: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #5: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b8252927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #8: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #9: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #10: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #11: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #12: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #13: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #14: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #15: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #16: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #17: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #18: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #19: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #20: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #21: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #22: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255100000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #23: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255100000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #24: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #25: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #26: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #27: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #28: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #29: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255000000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #30: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255000000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #31: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #32: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #33: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #34: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #35: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #36: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255200000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #37: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255200000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #38: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #39: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #40: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #41: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #42: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #43: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #44: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #45: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #46: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #47: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #48: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #49: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #50: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff0000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #51: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff0000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #52: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #53: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #54: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #55: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #56: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #57: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "70239dd877f7c944c422f44dea4ed1a52f2627416faf2f072fa50c772ed6f80764a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e6af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #58: Edge case for Shamir multiplication", + "NoBenchmark": false + }, + { + "Input": "00000000690ed426ccf17803ebe2bd0884bcd58a1bb5e7477ead3645f356e7a916aea964a2f6506d6f78c81c91fc7e8bded7d397738448de1e19a0ec580bf266252cd762130c6667cfe8b7bc47d27d78391e8e80c578d1cd38c3ff033be928e92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #59: special case hash", + "NoBenchmark": false + }, + { + "Input": "7300000000213f2a525c6035725235c2f696ad3ebb5ee47f140697ad25770d919cc98be2347d469bf476dfc26b9b733df2d26d6ef524af917c665baccb23c882093496459effe2d8d70727b82462f61d0ec1b7847929d10ea631dacb16b56c322927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #60: special case hash", + "NoBenchmark": false + }, + { + "Input": "ddf2000000005e0be0635b245f0b97978afd25daadeb3edb4a0161c27fe0604573b3c90ecd390028058164524dde892703dce3dea0d53fa8093999f07ab8aa432f67b0b8e20636695bb7d8bf0a651c802ed25a395387b5f4188c0c4075c886342927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #61: special case hash", + "NoBenchmark": false + }, + { + "Input": "67ab1900000000784769c4ecb9e164d6642b8499588b89855be1ec355d0841a0bfab3098252847b328fadf2f89b95c851a7f0eb390763378f37e90119d5ba3ddbdd64e234e832b1067c2d058ccb44d978195ccebb65c2aaf1e2da9b8b4987e3b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #62: special case hash", + "NoBenchmark": false + }, + { + "Input": "a2bf09460000000076d7dbeffe125eaf02095dff252ee905e296b6350fc311cf204a9784074b246d8bf8bf04a4ceb1c1f1c9aaab168b1596d17093c5cd21d2cd51cce41670636783dc06a759c8847868a406c2506fe17975582fe648d1d88b522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #63: special case hash", + "NoBenchmark": false + }, + { + "Input": "3554e827c700000000e1e75e624a06b3a0a353171160858129e15c544e4f0e65ed66dc34f551ac82f63d4aa4f81fe2cb0031a91d1314f835027bca0f1ceeaa0399ca123aa09b13cd194a422e18d5fda167623c3f6e5d4d6abb8953d67c0c48c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #64: special case hash", + "NoBenchmark": false + }, + { + "Input": "9b6cd3b812610000000026941a0f0bb53255ea4c9fd0cb3426e3a54b9fc6965c060b700bef665c68899d44f2356a578d126b062023ccc3c056bf0f60a237012b8d186c027832965f4fcc78a3366ca95dedbb410cbef3f26d6be5d581c11d36102927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #65: special case hash", + "NoBenchmark": false + }, + { + "Input": "883ae39f50bf0100000000e7561c26fc82a52baa51c71ca877162f93c4ae01869f6adfe8d5eb5b2c24d7aa7934b6cf29c93ea76cd313c9132bb0c8e38c96831db26a9c9e40e55ee0890c944cf271756c906a33e66b5bd15e051593883b5e99022927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #66: special case hash", + "NoBenchmark": false + }, + { + "Input": "a1ce5d6e5ecaf28b0000000000fa7cd010540f420fb4ff7401fe9fce011d0ba6a1af03ca91677b673ad2f33615e56174a1abf6da168cebfa8868f4ba273f16b720aa73ffe48afa6435cd258b173d0c2377d69022e7d098d75caf24c8c5e06b1c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #67: special case hash", + "NoBenchmark": false + }, + { + "Input": "8ea5f645f373f580930000000038345397330012a8ee836c5494cdffd5ee8054fdc70602766f8eed11a6c99a71c973d5659355507b843da6e327a28c11893db93df5349688a085b137b1eacf456a9e9e0f6d15ec0078ca60a7f83f2b10d213502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #68: special case hash", + "NoBenchmark": false + }, + { + "Input": "660570d323e9f75fa734000000008792d65ce93eabb7d60d8d9c1bbdcb5ef305b516a314f2fce530d6537f6a6c49966c23456f63c643cf8e0dc738f7b876e675d39ffd033c92b6d717dd536fbc5efdf1967c4bd80954479ba66b0120cd16fff22927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #69: special case hash", + "NoBenchmark": false + }, + { + "Input": "d0462673154cce587dde8800000000e98d35f1f45cf9c3bf46ada2de4c568c343b2cbf046eac45842ecb7984d475831582717bebb6492fd0a485c101e29ff0a84c9b7b47a98b0f82de512bc9313aaf51701099cac5f76e68c8595fc1c1d992582927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #70: special case hash", + "NoBenchmark": false + }, + { + "Input": "bd90640269a7822680cedfef000000000caef15a6171059ab83e7b4418d7278f30c87d35e636f540841f14af54e2f9edd79d0312cfa1ab656c3fb15bfde48dcf47c15a5a82d24b75c85a692bd6ecafeb71409ede23efd08e0db9abf6340677ed2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #71: special case hash", + "NoBenchmark": false + }, + { + "Input": "33239a52d72f1311512e41222a00000000d2dcceb301c54b4beae8e284788a7338686ff0fda2cef6bc43b58cfe6647b9e2e8176d168dec3c68ff262113760f52067ec3b651f422669601662167fa8717e976e2db5e6a4cf7c2ddabb3fde9d67d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #72: special case hash", + "NoBenchmark": false + }, + { + "Input": "b8d64fbcd4a1c10f1365d4e6d95c000000007ee4a21a1cbe1dc84c2d941ffaf144a3e23bf314f2b344fc25c7f2de8b6af3e17d27f5ee844b225985ab6e2775cf2d48e223205e98041ddc87be532abed584f0411f5729500493c9cc3f4dd15e862927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #73: special case hash", + "NoBenchmark": false + }, + { + "Input": "01603d3982bf77d7a3fef3183ed092000000003a227420db4088b20fe0e9d84a2ded5b7ec8e90e7bf11f967a3d95110c41b99db3b5aa8d330eb9d638781688e97d5792c53628155e1bfc46fb1a67e3088de049c328ae1f44ec69238a009808f92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #74: special case hash", + "NoBenchmark": false + }, + { + "Input": "9ea6994f1e0384c8599aa02e6cf66d9c000000004d89ef50b7e9eb0cfbff7363bdae7bcb580bf335efd3bc3d31870f923eaccafcd40ec2f605976f15137d8b8ff6dfa12f19e525270b0106eecfe257499f373a4fb318994f24838122ce7ec3c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #75: special case hash", + "NoBenchmark": false + }, + { + "Input": "d03215a8401bcf16693979371a01068a4700000000e2fa5bf692bc670905b18c50f9c4f0cd6940e162720957ffff513799209b78596956d21ece251c2401f1c6d7033a0a787d338e889defaaabb106b95a4355e411a59c32aa5167dfab2447262927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #76: special case hash", + "NoBenchmark": false + }, + { + "Input": "307bfaaffb650c889c84bf83f0300e5dc87e000000008408fd5f64b582e3bb14f612820687604fa01906066a378d67540982e29575d019aabe90924ead5c860d3f9367702dd7dd4f75ea98afd20e328a1a99f4857b316525328230ce294b0fef2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #77: special case hash", + "NoBenchmark": false + }, + { + "Input": "bab5c4f4df540d7b33324d36bb0c157551527c00000000e4af574bb4d54ea6b89505e407657d6e8bc93db5da7aa6f5081f61980c1949f56b0f2f507da5782a7ac60d31904e3669738ffbeccab6c3656c08e0ed5cb92b3cfa5e7f71784f9c50212927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #78: special case hash", + "NoBenchmark": false + }, + { + "Input": "d4ba47f6ae28f274e4f58d8036f9c36ec2456f5b00000000c3b869197ef5e15ebbd16fbbb656b6d0d83e6a7787cd691b08735aed371732723e1c68a40404517d9d8e35dba96028b7787d91315be675877d2d097be5e8ee34560e3e7fd25c0f002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #79: special case hash", + "NoBenchmark": false + }, + { + "Input": "79fd19c7235ea212f29f1fa00984342afe0f10aafd00000000801e47f8c184e12ec9760122db98fd06ea76848d35a6da442d2ceef7559a30cf57c61e92df327e7ab271da90859479701fccf86e462ee3393fb6814c27b760c4963625c0a198782927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #80: special case hash", + "NoBenchmark": false + }, + { + "Input": "8c291e8eeaa45adbaf9aba5c0583462d79cbeb7ac97300000000a37ea6700cda54e76b7683b6650baa6a7fc49b1c51eed9ba9dd463221f7a4f1005a89fe00c592ea076886c773eb937ec1cc8374b7915cfd11b1c1ae1166152f2f7806a31c8fd2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #81: special case hash", + "NoBenchmark": false + }, + { + "Input": "0eaae8641084fa979803efbfb8140732f4cdcf66c3f78a000000003c278a6b215291deaf24659ffbbce6e3c26f6021097a74abdbb69be4fb10419c0c496c946665d6fcf336d27cc7cdb982bb4e4ecef5827f84742f29f10abf83469270a03dc32927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #82: special case hash", + "NoBenchmark": false + }, + { + "Input": "e02716d01fb23a5a0068399bf01bab42ef17c6d96e13846c00000000afc0f89d207a3241812d75d947419dc58efb05e8003b33fc17eb50f9d15166a88479f107cdee749f2e492b213ce80b32d0574f62f1c5d70793cf55e382d5caadf75927672927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #83: special case hash", + "NoBenchmark": false + }, + { + "Input": "9eb0bf583a1a6b9a194e9a16bc7dab2a9061768af89d00659a00000000fc7de16554e49f82a855204328ac94913bf01bbe84437a355a0a37c0dee3cf81aa7728aea00de2507ddaf5c94e1e126980d3df16250a2eaebc8be486effe7f22b4f9292927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #84: special case hash", + "NoBenchmark": false + }, + { + "Input": "62aac98818b3b84a2c214f0d5e72ef286e1030cb53d9a82b690e00000000cd15a54c5062648339d2bff06f71c88216c26c6e19b4d80a8c602990ac82707efdfce99bbe7fcfafae3e69fd016777517aa01056317f467ad09aff09be73c9731b0d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #85: special case hash", + "NoBenchmark": false + }, + { + "Input": "3760a7f37cf96218f29ae43732e513efd2b6f552ea4b6895464b9300000000c8975bd7157a8d363b309f1f444012b1a1d23096593133e71b4ca8b059cff37eaf7faa7a28b1c822baa241793f2abc930bd4c69840fe090f2aacc46786bf9196222927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #86: special case hash", + "NoBenchmark": false + }, + { + "Input": "0da0a1d2851d33023834f2098c0880096b4320bea836cd9cbb6ff6c8000000005694a6f84b8f875c276afd2ebcfe4d61de9ec90305afb1357b95b3e0da43885e0dffad9ffd0b757d8051dec02ebdf70d8ee2dc5c7870c0823b6ccc7c679cbaa42927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #87: special case hash", + "NoBenchmark": false + }, + { + "Input": "ffffffff293886d3086fd567aafd598f0fe975f735887194a764a231e82d289aa0c30e8026fdb2b4b4968a27d16a6d08f7098f1a98d21620d7454ba9790f1ba65e470453a8a399f15baf463f9deceb53acc5ca64459149688bd2760c654243392927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #88: special case hash", + "NoBenchmark": false + }, + { + "Input": "7bffffffff2376d1e3c03445a072e24326acdc4ce127ec2e0e8d9ca99527e7b7614ea84acf736527dd73602cd4bb4eea1dfebebd5ad8aca52aa0228cf7b99a88737cc85f5f2d2f60d1b8183f3ed490e4de14368e96a9482c2a4dd193195c902f2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #89: special case hash", + "NoBenchmark": false + }, + { + "Input": "a2b5ffffffffebb251b085377605a224bc80872602a6e467fd016807e97fa395bead6734ebe44b810d3fb2ea00b1732945377338febfd439a8d74dfbd0f942fa6bb18eae36616a7d3cad35919fd21a8af4bbe7a10f73b3e036a46b103ef56e2a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #90: special case hash", + "NoBenchmark": false + }, + { + "Input": "641227ffffffff6f1b96fa5f097fcf3cc1a3c256870d45a67b83d0967d4b20c0499625479e161dacd4db9d9ce64854c98d922cbf212703e9654fae182df9bad242c177cf37b8193a0131108d97819edd9439936028864ac195b64fca76d9d6932927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #91: special case hash", + "NoBenchmark": false + }, + { + "Input": "958415d8ffffffffabad03e2fc662dc3ba203521177502298df56f36600e0f8b08f16b8093a8fb4d66a2c8065b541b3d31e3bfe694f6b89c50fb1aaa6ff6c9b29d6455e2d5d1779748573b611cb95d4a21f967410399b39b535ba3e5af81ca2e2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #92: special case hash", + "NoBenchmark": false + }, + { + "Input": "f1d8de4858ffffffff1281093536f47fe13deb04e1fbe8fb954521b6975420f8be26231b6191658a19dd72ddb99ed8f8c579b6938d19bce8eed8dc2b338cb5f8e1d9a32ee56cffed37f0f22b2dcb57d5c943c14f79694a03b9c5e96952575c892927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #93: special case hash", + "NoBenchmark": false + }, + { + "Input": "0927895f2802ffffffff10782dd14a3b32dc5d47c05ef6f1876b95c81fc31def15e76880898316b16204ac920a02d58045f36a229d4aa4f812638c455abe0443e74d357d3fcb5c8c5337bd6aba4178b455ca10e226e13f9638196506a19391232927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #94: special case hash", + "NoBenchmark": false + }, + { + "Input": "60907984aa7e8effffffff4f332862a10a57c3063fb5a30624cf6a0c3ac80589352ecb53f8df2c503a45f9846fc28d1d31e6307d3ddbffc1132315cc07f16dad1348dfa9c482c558e1d05c5242ca1c39436726ecd28258b1899792887dd0a3c62927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #95: special case hash", + "NoBenchmark": false + }, + { + "Input": "c6ff198484939170ffffffff0af42cda50f9a5f50636ea6942d6b9b8cd6ae1e24a40801a7e606ba78a0da9882ab23c7677b8642349ed3d652c5bfa5f2a9558fb3a49b64848d682ef7f605f2832f7384bdc24ed2925825bf8ea77dc59817257822927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #96: special case hash", + "NoBenchmark": false + }, + { + "Input": "de030419345ca15c75ffffffff8074799b9e0956cc43135d16dfbe4d27d7e68deacc5e1a8304a74d2be412b078924b3bb3511bac855c05c9e5e9e44df3d61e967451cd8e18d6ed1885dd827714847f96ec4bb0ed4c36ce9808db8f714204f6d12927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #97: special case hash", + "NoBenchmark": false + }, + { + "Input": "6f0e3eeaf42b28132b88fffffffff6c8665604d34acb19037e1ab78caaaac6ff2f7a5e9e5771d424f30f67fdab61e8ce4f8cd1214882adb65f7de94c31577052ac4e69808345809b44acb0b2bd889175fb75dd050c5a449ab9528f8f78daa10c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #98: special case hash", + "NoBenchmark": false + }, + { + "Input": "cdb549f773b3e62b3708d1ffffffffbe48f7c0591ddcae7d2cb222d1f8017ab9ffcda40f792ce4d93e7e0f0e95e1a2147dddd7f6487621c30a03d710b330021979938b55f8a17f7ed7ba9ade8f2065a1fa77618f0b67add8d58c422c2453a49a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #99: special case hash", + "NoBenchmark": false + }, + { + "Input": "2c3f26f96a3ac0051df4989bffffffff9fd64886c1dc4f9924d8fd6f0edb048481f2359c4faba6b53d3e8c8c3fcc16a948350f7ab3a588b28c17603a431e39a8cd6f6a5cc3b55ead0ff695d06c6860b509e46d99fccefb9f7f9e101857f743002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #100: special case hash", + "NoBenchmark": false + }, + { + "Input": "ac18f8418c55a2502cb7d53f9affffffff5c31d89fda6a6b8476397c04edf411dfc8bf520445cbb8ee1596fb073ea283ea130251a6fdffa5c3f5f2aaf75ca808048e33efce147c9dd92823640e338e68bfd7d0dc7a4905b3a7ac711e577e90e72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #101: special case hash", + "NoBenchmark": false + }, + { + "Input": "4f9618f98e2d3a15b24094f72bb5ffffffffa2fd3e2893683e5a6ab8cf0ee610ad019f74c6941d20efda70b46c53db166503a0e393e932f688227688ba6a576293320eb7ca0710255346bdbb3102cdcf7964ef2e0988e712bc05efe16c1993452927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #102: special case hash", + "NoBenchmark": false + }, + { + "Input": "422e82a3d56ed10a9cc21d31d37a25ffffffff67edf7c40204caae73ab0bc75aac8096842e8add68c34e78ce11dd71e4b54316bd3ebf7fffdeb7bd5a3ebc1883f5ca2f4f23d674502d4caf85d187215d36e3ce9f0ce219709f21a3aac003b7a82927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #103: special case hash", + "NoBenchmark": false + }, + { + "Input": "7075d245ccc3281b6e7b329ff738fbb417a5ffffffffa0842d9890b5cf95d018677b2d3a59b18a5ff939b70ea002250889ddcd7b7b9d776854b4943693fb92f76b4ba856ade7677bf30307b21f3ccda35d2f63aee81efd0bab6972cc0795db552927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #104: special case hash", + "NoBenchmark": false + }, + { + "Input": "3c80de54cd9226989443d593fa4fd6597e280ebeffffffffc1847eb76c217a95479e1ded14bcaed0379ba8e1b73d3115d84d31d4b7c30e1f05e1fc0d5957cfb0918f79e35b3d89487cf634a4f05b2e0c30857ca879f97c771e877027355b24432927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #105: special case hash", + "NoBenchmark": false + }, + { + "Input": "de21754e29b85601980bef3d697ea2770ce891a8cdffffffffc7906aa794b39b43dfccd0edb9e280d9a58f01164d55c3d711e14b12ac5cf3b64840ead512a0a31dbe33fa8ba84533cd5c4934365b3442ca1174899b78ef9a3199f495843897722927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #106: special case hash", + "NoBenchmark": false + }, + { + "Input": "8f65d92927cfb86a84dd59623fb531bb599e4d5f7289ffffffff2f1f2f57881c5b09ab637bd4caf0f4c7c7e4bca592fea20e9087c259d26a38bb4085f0bbff1145b7eb467b6748af618e9d80d6fdcd6aa24964e5a13f885bca8101de08eb0d752927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #107: special case hash", + "NoBenchmark": false + }, + { + "Input": "6b63e9a74e092120160bea3877dace8a2cc7cd0e8426cbfffffffffafc8c3ca85e9b1c5a028070df5728c5c8af9b74e0667afa570a6cfa0114a5039ed15ee06fb1360907e2d9785ead362bb8d7bd661b6c29eeffd3c5037744edaeb9ad990c202927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #108: special case hash", + "NoBenchmark": false + }, + { + "Input": "fc28259702a03845b6d75219444e8b43d094586e249c8699ffffffffe852512e0671a0a85c2b72d54a2fb0990e34538b4890050f5a5712f6d1a7a5fb8578f32edb1846bab6b7361479ab9c3285ca41291808f27fd5bd4fdac720e5854713694c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #109: special case hash", + "NoBenchmark": false + }, + { + "Input": "1273b4502ea4e3bccee044ee8e8db7f774ecbcd52e8ceb571757ffffffffe20a7673f8526748446477dbbb0590a45492c5d7d69859d301abbaedb35b2095103a3dc70ddf9c6b524d886bed9e6af02e0e4dec0d417a414fed3807ef4422913d7c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #110: special case hash", + "NoBenchmark": false + }, + { + "Input": "08fb565610a79baa0c566c66228d81814f8c53a15b96e602fb49ffffffffff6e7f085441070ecd2bb21285089ebb1aa6450d1a06c36d3ff39dfd657a796d12b5249712012029870a2459d18d47da9aa492a5e6cb4b2d8dafa9e4c5c54a2b9a8b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #111: special case hash", + "NoBenchmark": false + }, + { + "Input": "d59291cc2cf89f3087715fcb1aa4e79aa2403f748e97d7cd28ecaefeffffffff914c67fb61dd1e27c867398ea7322d5ab76df04bc5aa6683a8e0f30a5d287348fa07474031481dda4953e3ac1959ee8cea7e66ec412b38d6c96d28f6d37304ea2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #112: special case hash", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000004319055358e8617b0c46353d039cdaabffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e0ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #113: k*G has a large x-coordinate", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000fffffffffffffffffffffffcffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e0ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #114: r too large", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254eab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #115: r,s are large", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd480984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c5611feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #116: r and s^-1 have a large Hamming weight", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a54201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c0595c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #117: r and s^-1 have a large Hamming weight", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac9575d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #118: small r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000036627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b15726170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #120: small r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000055a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bfef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #122: small r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c73770af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #124: small r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325560000000000000000000000000000000000000000000000000000000000000006cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c73770af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #126: r is larger than n", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000005ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd84be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e13920f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #127: s is larger than n", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502300000000000000000000000000000000000000000000000000000000000001008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea88d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #128: small r and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000002d9b4d347952d6ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7a4838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05ffa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #129: smallish r and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000001033e67e37b32b445580bf4eff8b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4d7393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #130: 100-bit r and small s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b5ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #131: small r and 100 bit s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502300000000000000000000000000000000000000062522bbd3ecbe7c39e93e7c25ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b1d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #132: 100-bit r and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d5555555550000000055555555555555553ef7a8e48d07df81a693439654210c70083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #133: r and s^-1 are close to n", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c7000000000000000000000000000000000000000000000000000000000000000018aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e1937387405bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #134: s == 1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c7000000000000000000000000000000000000000000000000000000000000000008aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e1937387405bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #135: s == 0", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8555555550000000055555555555555553ef7a8e48d07df81a693439654210c70b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f2871b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #136: point at infinity during verify", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8f50d371b91bfb1d7d14e1323523bc3aa8cbf2c57f9e284de628c8b4536787b86f94ad887ac94d527247cd2e7d0c8b1291c553c9730405380b14cbb209f5fa2dd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #137: edge case for signature malleability", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a968ec6e298eafe16539156ce57a14b04a7047c221bafc3a582eaeb0d857c4d94697bed1af17850117fdb39b2324f220a5698ed16c426a27335bb385ac8ca6fb30", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #138: edge case for signature malleability", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c70bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502369da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b866d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #139: u1 == 1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c7044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52ed8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff3233e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #140: u1 == n - 1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c70555555550000000055555555555555553ef7a8e48d07df81a693439654210c703623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab7858db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #141: u2 == 1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c70aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #142: u2 == n - 1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde91e1ba60fdedb76a46bcb51dc0b8b4b7e019f0a28721885fa5d3a8196623397db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff773504f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #143: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdea5843ffeb73af94313ba4831b53fe24f799e525b1e8e8c87b59b95b430ad9dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #144: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd03ffcabf2f1b4d2a65190db1680d62bb994e41c5251cd73b3c3dfc5e5bafc035d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #145: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4dfbc401f971cd304b33dfdb17d0fed0fe4c1a88ae648e0d2847f74977534989a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c326337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #146: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbc4024761cd2ffd43dfdb17d0fed112b988977055cd3a8e54971eba9cda5ca71c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b73877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #147: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd788048ed39a5ffa77bfb62fa1fda2257742bf35d128fb3459f2a0c909ee86f915eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #148: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd476d9131fd381bd917d0fed112bc9e0a5924b5ed5b11167edd8b23582b3cb15e5caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47adeb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #149: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8374253e3e21bd154448d0a8f640fe46fafa8b19ce78d538f6cc0a19662d3601c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b0986237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #150: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd357cfd3be4d01d413c5b9ede36cba5452c11ee7fe14879e749ae6a2d897a52d63fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced03ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #151: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd29798c5c0ee287d4a5e8e6b799fd86b8df5225298e6ffc807cd2f2bc27a0a6d89cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #152: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0b70f22c781092452dca1a5711fa3a5a1f72add1bf52c2ff7cae4820b30078dda3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #153: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd16e1e458f021248a5b9434ae23f474b43ee55ba37ea585fef95c90416600f1baf19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #154: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2252d6856831b6cf895e4f0535eeaf0e5e5809753df848fe760ad86219016a9783a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #155: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd81ffe55f178da695b28c86d8b406b15dab1a9e39661a3ae017fbe390ac0972c3dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #156: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a67e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #157: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f22eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #158: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e84db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f356d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #159: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd66755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf291b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad66349aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #160: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd55a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834df97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #161: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc885ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #162: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc86000a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cde6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #163: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e868612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #164: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb2769ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #165: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b0992f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8033dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #166: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09eff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #167: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e378651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #168: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa6d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6def6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #169: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f0ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e15428911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #170: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #171: point duplication during verification", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc469637c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #172: duplication bug", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001555555550000000055555555555555553ef7a8e48d07df81a693439654210c706adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a647e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #173: point with x-coordinate 0", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c703333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d25045d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #175: comparison with point at infinity ", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978555555550000000055555555555555553ef7a8e48d07df81a693439654210c704fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #176: extreme value for k and edgecase s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63ccc6a771527024227792170a6f8eee735bf32b7f98af669ead299802e32d7c3107bc3b4b5e65ab887bbd343572b3e5619261fe3a073e2ffd78412f726867db589e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #177: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7851c2bbad08e54ec7a9af99f49f03644d6ec6d59b207fec98de85a7d15b956efcee9960283045075684b410be8d0f7494b91aa2379f60727319f10ddeb0fe9d6", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #178: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699783333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaf6417c8a670584e388676949e53da7fc55911ff68318d1bf3061205acb19c48f8f2b743df34ad0f72674acb7505929784779cd9ac916c3669ead43026ab6d43f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #179: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997849249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185501421277be45a5eefec6c639930d636032565af420cf3373f557faa7f8a06438673d6cb6076e1cfcdc7dfe7384c8e5cac08d74501f2ae6e89cad195d0aa1371", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #180: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997816a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb0d935bf9ffc115a527735f729ca8a4ca23ee01a4894adf0e3415ac84e808bb343195a3762fea29ed38912bd9ea6c4fde70c3050893a4375850ce61d82eba33c5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #181: extreme value for k", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296555555550000000055555555555555553ef7a8e48d07df81a693439654210c705e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca215de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #182: extreme value for k and edgecase s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc169fb797325843faff2f7a5b5445da9e2fd6226f7ef90ef0bfe924104b02db8e7bbb8de662c7b9b1cf9b22f7a2e582bd46d581d68878efb2b861b131d8a1d667", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #183: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7271cd89c000143096b62d4e9e4ca885aef2f7023d18affdaf8b7b548981487540a1c6e954e32108435b55fa385b0f76481a609b9149ccb4b02b2ca47fe8e4da5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #184: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaa3d0bc7ed8f09d2cb7ddb46ebc1ed799ab1563a9ab84bf524587a220afe499c12e22dc3b3c103824a4f378d96adb0a408abf19ce7d68aa6244f78cb216fa3f8df", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #185: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29649249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b72e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #186: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29616a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb8d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #187: extreme value for k", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #188: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502344a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #189: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #190: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502344a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #191: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a0177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e204aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #192: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "dc1921946f4af96a2856e7be399007c9e807bdf4c5332f19f59ec9dd1bb8c7b3530bd6b0c9af2d69ba897f6b5fb59695cfbf33afe66dbadcf5b8d2a2a6538e23d85e489cb7a161fd55ededcedbf4cc0c0987e3e3f0f242cae934c72caa3f43e904aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #193: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b8604aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #194: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "de47c9b27eb8d300dbb5f2c353e632c393262cf06340c4fa7f1b40c4cbd36f90986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb713dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c04aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #195: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f19b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #196: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f910fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df557374f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #197: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e3541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb556774f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #198: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a59f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #199: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f914cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b439638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe33cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #200: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b553cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #201: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f911158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf3466830228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f2855193cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #202: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d3e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a12513363cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #203: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #204: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b43dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd1399292829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #205: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f915eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af782c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb52829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #206: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9196843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #207: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f6402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #208: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dbafffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #209: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #210: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb300000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #211: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f916b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f75939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #212: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #213: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9131230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb070f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beffbcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #214: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #215: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f917e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859459450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aabcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #216: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35689c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #217: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b3472b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #218: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_p1363_test.json EcdsaP1363Verify SHA-256 #219: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd762927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #1: signature malleability", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #2: Legacy:ASN encoding of s misses leading 0", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #3: valid", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502329a3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #118: modify first byte of integer", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e98b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #120: modify last byte of integer", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568475b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #121: modify last byte of integer", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1800b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568472927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #124: truncated integer", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #133: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #134: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #137: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f47aa2bbd0a4c384ee1493b1f518ada018ef05465583885980861905228a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #139: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b8252927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #143: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #177: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #178: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #179: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #180: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #181: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #187: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #188: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #189: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #190: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #191: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #197: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #198: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #199: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #200: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #201: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #207: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #208: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #209: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #210: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #211: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #217: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #218: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #219: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #220: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #221: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "70239dd877f7c944c422f44dea4ed1a52f2627416faf2f072fa50c772ed6f80764a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e6af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #230: Edge case for Shamir multiplication", + "NoBenchmark": false + }, + { + "Input": "00000000690ed426ccf17803ebe2bd0884bcd58a1bb5e7477ead3645f356e7a916aea964a2f6506d6f78c81c91fc7e8bded7d397738448de1e19a0ec580bf266252cd762130c6667cfe8b7bc47d27d78391e8e80c578d1cd38c3ff033be928e92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #231: special case hash", + "NoBenchmark": false + }, + { + "Input": "7300000000213f2a525c6035725235c2f696ad3ebb5ee47f140697ad25770d919cc98be2347d469bf476dfc26b9b733df2d26d6ef524af917c665baccb23c882093496459effe2d8d70727b82462f61d0ec1b7847929d10ea631dacb16b56c322927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #232: special case hash", + "NoBenchmark": false + }, + { + "Input": "ddf2000000005e0be0635b245f0b97978afd25daadeb3edb4a0161c27fe0604573b3c90ecd390028058164524dde892703dce3dea0d53fa8093999f07ab8aa432f67b0b8e20636695bb7d8bf0a651c802ed25a395387b5f4188c0c4075c886342927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #233: special case hash", + "NoBenchmark": false + }, + { + "Input": "67ab1900000000784769c4ecb9e164d6642b8499588b89855be1ec355d0841a0bfab3098252847b328fadf2f89b95c851a7f0eb390763378f37e90119d5ba3ddbdd64e234e832b1067c2d058ccb44d978195ccebb65c2aaf1e2da9b8b4987e3b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #234: special case hash", + "NoBenchmark": false + }, + { + "Input": "a2bf09460000000076d7dbeffe125eaf02095dff252ee905e296b6350fc311cf204a9784074b246d8bf8bf04a4ceb1c1f1c9aaab168b1596d17093c5cd21d2cd51cce41670636783dc06a759c8847868a406c2506fe17975582fe648d1d88b522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #235: special case hash", + "NoBenchmark": false + }, + { + "Input": "3554e827c700000000e1e75e624a06b3a0a353171160858129e15c544e4f0e65ed66dc34f551ac82f63d4aa4f81fe2cb0031a91d1314f835027bca0f1ceeaa0399ca123aa09b13cd194a422e18d5fda167623c3f6e5d4d6abb8953d67c0c48c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #236: special case hash", + "NoBenchmark": false + }, + { + "Input": "9b6cd3b812610000000026941a0f0bb53255ea4c9fd0cb3426e3a54b9fc6965c060b700bef665c68899d44f2356a578d126b062023ccc3c056bf0f60a237012b8d186c027832965f4fcc78a3366ca95dedbb410cbef3f26d6be5d581c11d36102927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #237: special case hash", + "NoBenchmark": false + }, + { + "Input": "883ae39f50bf0100000000e7561c26fc82a52baa51c71ca877162f93c4ae01869f6adfe8d5eb5b2c24d7aa7934b6cf29c93ea76cd313c9132bb0c8e38c96831db26a9c9e40e55ee0890c944cf271756c906a33e66b5bd15e051593883b5e99022927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #238: special case hash", + "NoBenchmark": false + }, + { + "Input": "a1ce5d6e5ecaf28b0000000000fa7cd010540f420fb4ff7401fe9fce011d0ba6a1af03ca91677b673ad2f33615e56174a1abf6da168cebfa8868f4ba273f16b720aa73ffe48afa6435cd258b173d0c2377d69022e7d098d75caf24c8c5e06b1c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #239: special case hash", + "NoBenchmark": false + }, + { + "Input": "8ea5f645f373f580930000000038345397330012a8ee836c5494cdffd5ee8054fdc70602766f8eed11a6c99a71c973d5659355507b843da6e327a28c11893db93df5349688a085b137b1eacf456a9e9e0f6d15ec0078ca60a7f83f2b10d213502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #240: special case hash", + "NoBenchmark": false + }, + { + "Input": "660570d323e9f75fa734000000008792d65ce93eabb7d60d8d9c1bbdcb5ef305b516a314f2fce530d6537f6a6c49966c23456f63c643cf8e0dc738f7b876e675d39ffd033c92b6d717dd536fbc5efdf1967c4bd80954479ba66b0120cd16fff22927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #241: special case hash", + "NoBenchmark": false + }, + { + "Input": "d0462673154cce587dde8800000000e98d35f1f45cf9c3bf46ada2de4c568c343b2cbf046eac45842ecb7984d475831582717bebb6492fd0a485c101e29ff0a84c9b7b47a98b0f82de512bc9313aaf51701099cac5f76e68c8595fc1c1d992582927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #242: special case hash", + "NoBenchmark": false + }, + { + "Input": "bd90640269a7822680cedfef000000000caef15a6171059ab83e7b4418d7278f30c87d35e636f540841f14af54e2f9edd79d0312cfa1ab656c3fb15bfde48dcf47c15a5a82d24b75c85a692bd6ecafeb71409ede23efd08e0db9abf6340677ed2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #243: special case hash", + "NoBenchmark": false + }, + { + "Input": "33239a52d72f1311512e41222a00000000d2dcceb301c54b4beae8e284788a7338686ff0fda2cef6bc43b58cfe6647b9e2e8176d168dec3c68ff262113760f52067ec3b651f422669601662167fa8717e976e2db5e6a4cf7c2ddabb3fde9d67d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #244: special case hash", + "NoBenchmark": false + }, + { + "Input": "b8d64fbcd4a1c10f1365d4e6d95c000000007ee4a21a1cbe1dc84c2d941ffaf144a3e23bf314f2b344fc25c7f2de8b6af3e17d27f5ee844b225985ab6e2775cf2d48e223205e98041ddc87be532abed584f0411f5729500493c9cc3f4dd15e862927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #245: special case hash", + "NoBenchmark": false + }, + { + "Input": "01603d3982bf77d7a3fef3183ed092000000003a227420db4088b20fe0e9d84a2ded5b7ec8e90e7bf11f967a3d95110c41b99db3b5aa8d330eb9d638781688e97d5792c53628155e1bfc46fb1a67e3088de049c328ae1f44ec69238a009808f92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #246: special case hash", + "NoBenchmark": false + }, + { + "Input": "9ea6994f1e0384c8599aa02e6cf66d9c000000004d89ef50b7e9eb0cfbff7363bdae7bcb580bf335efd3bc3d31870f923eaccafcd40ec2f605976f15137d8b8ff6dfa12f19e525270b0106eecfe257499f373a4fb318994f24838122ce7ec3c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #247: special case hash", + "NoBenchmark": false + }, + { + "Input": "d03215a8401bcf16693979371a01068a4700000000e2fa5bf692bc670905b18c50f9c4f0cd6940e162720957ffff513799209b78596956d21ece251c2401f1c6d7033a0a787d338e889defaaabb106b95a4355e411a59c32aa5167dfab2447262927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #248: special case hash", + "NoBenchmark": false + }, + { + "Input": "307bfaaffb650c889c84bf83f0300e5dc87e000000008408fd5f64b582e3bb14f612820687604fa01906066a378d67540982e29575d019aabe90924ead5c860d3f9367702dd7dd4f75ea98afd20e328a1a99f4857b316525328230ce294b0fef2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #249: special case hash", + "NoBenchmark": false + }, + { + "Input": "bab5c4f4df540d7b33324d36bb0c157551527c00000000e4af574bb4d54ea6b89505e407657d6e8bc93db5da7aa6f5081f61980c1949f56b0f2f507da5782a7ac60d31904e3669738ffbeccab6c3656c08e0ed5cb92b3cfa5e7f71784f9c50212927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #250: special case hash", + "NoBenchmark": false + }, + { + "Input": "d4ba47f6ae28f274e4f58d8036f9c36ec2456f5b00000000c3b869197ef5e15ebbd16fbbb656b6d0d83e6a7787cd691b08735aed371732723e1c68a40404517d9d8e35dba96028b7787d91315be675877d2d097be5e8ee34560e3e7fd25c0f002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #251: special case hash", + "NoBenchmark": false + }, + { + "Input": "79fd19c7235ea212f29f1fa00984342afe0f10aafd00000000801e47f8c184e12ec9760122db98fd06ea76848d35a6da442d2ceef7559a30cf57c61e92df327e7ab271da90859479701fccf86e462ee3393fb6814c27b760c4963625c0a198782927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #252: special case hash", + "NoBenchmark": false + }, + { + "Input": "8c291e8eeaa45adbaf9aba5c0583462d79cbeb7ac97300000000a37ea6700cda54e76b7683b6650baa6a7fc49b1c51eed9ba9dd463221f7a4f1005a89fe00c592ea076886c773eb937ec1cc8374b7915cfd11b1c1ae1166152f2f7806a31c8fd2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #253: special case hash", + "NoBenchmark": false + }, + { + "Input": "0eaae8641084fa979803efbfb8140732f4cdcf66c3f78a000000003c278a6b215291deaf24659ffbbce6e3c26f6021097a74abdbb69be4fb10419c0c496c946665d6fcf336d27cc7cdb982bb4e4ecef5827f84742f29f10abf83469270a03dc32927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #254: special case hash", + "NoBenchmark": false + }, + { + "Input": "e02716d01fb23a5a0068399bf01bab42ef17c6d96e13846c00000000afc0f89d207a3241812d75d947419dc58efb05e8003b33fc17eb50f9d15166a88479f107cdee749f2e492b213ce80b32d0574f62f1c5d70793cf55e382d5caadf75927672927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #255: special case hash", + "NoBenchmark": false + }, + { + "Input": "9eb0bf583a1a6b9a194e9a16bc7dab2a9061768af89d00659a00000000fc7de16554e49f82a855204328ac94913bf01bbe84437a355a0a37c0dee3cf81aa7728aea00de2507ddaf5c94e1e126980d3df16250a2eaebc8be486effe7f22b4f9292927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #256: special case hash", + "NoBenchmark": false + }, + { + "Input": "62aac98818b3b84a2c214f0d5e72ef286e1030cb53d9a82b690e00000000cd15a54c5062648339d2bff06f71c88216c26c6e19b4d80a8c602990ac82707efdfce99bbe7fcfafae3e69fd016777517aa01056317f467ad09aff09be73c9731b0d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #257: special case hash", + "NoBenchmark": false + }, + { + "Input": "3760a7f37cf96218f29ae43732e513efd2b6f552ea4b6895464b9300000000c8975bd7157a8d363b309f1f444012b1a1d23096593133e71b4ca8b059cff37eaf7faa7a28b1c822baa241793f2abc930bd4c69840fe090f2aacc46786bf9196222927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #258: special case hash", + "NoBenchmark": false + }, + { + "Input": "0da0a1d2851d33023834f2098c0880096b4320bea836cd9cbb6ff6c8000000005694a6f84b8f875c276afd2ebcfe4d61de9ec90305afb1357b95b3e0da43885e0dffad9ffd0b757d8051dec02ebdf70d8ee2dc5c7870c0823b6ccc7c679cbaa42927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #259: special case hash", + "NoBenchmark": false + }, + { + "Input": "ffffffff293886d3086fd567aafd598f0fe975f735887194a764a231e82d289aa0c30e8026fdb2b4b4968a27d16a6d08f7098f1a98d21620d7454ba9790f1ba65e470453a8a399f15baf463f9deceb53acc5ca64459149688bd2760c654243392927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #260: special case hash", + "NoBenchmark": false + }, + { + "Input": "7bffffffff2376d1e3c03445a072e24326acdc4ce127ec2e0e8d9ca99527e7b7614ea84acf736527dd73602cd4bb4eea1dfebebd5ad8aca52aa0228cf7b99a88737cc85f5f2d2f60d1b8183f3ed490e4de14368e96a9482c2a4dd193195c902f2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #261: special case hash", + "NoBenchmark": false + }, + { + "Input": "a2b5ffffffffebb251b085377605a224bc80872602a6e467fd016807e97fa395bead6734ebe44b810d3fb2ea00b1732945377338febfd439a8d74dfbd0f942fa6bb18eae36616a7d3cad35919fd21a8af4bbe7a10f73b3e036a46b103ef56e2a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #262: special case hash", + "NoBenchmark": false + }, + { + "Input": "641227ffffffff6f1b96fa5f097fcf3cc1a3c256870d45a67b83d0967d4b20c0499625479e161dacd4db9d9ce64854c98d922cbf212703e9654fae182df9bad242c177cf37b8193a0131108d97819edd9439936028864ac195b64fca76d9d6932927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #263: special case hash", + "NoBenchmark": false + }, + { + "Input": "958415d8ffffffffabad03e2fc662dc3ba203521177502298df56f36600e0f8b08f16b8093a8fb4d66a2c8065b541b3d31e3bfe694f6b89c50fb1aaa6ff6c9b29d6455e2d5d1779748573b611cb95d4a21f967410399b39b535ba3e5af81ca2e2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #264: special case hash", + "NoBenchmark": false + }, + { + "Input": "f1d8de4858ffffffff1281093536f47fe13deb04e1fbe8fb954521b6975420f8be26231b6191658a19dd72ddb99ed8f8c579b6938d19bce8eed8dc2b338cb5f8e1d9a32ee56cffed37f0f22b2dcb57d5c943c14f79694a03b9c5e96952575c892927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #265: special case hash", + "NoBenchmark": false + }, + { + "Input": "0927895f2802ffffffff10782dd14a3b32dc5d47c05ef6f1876b95c81fc31def15e76880898316b16204ac920a02d58045f36a229d4aa4f812638c455abe0443e74d357d3fcb5c8c5337bd6aba4178b455ca10e226e13f9638196506a19391232927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #266: special case hash", + "NoBenchmark": false + }, + { + "Input": "60907984aa7e8effffffff4f332862a10a57c3063fb5a30624cf6a0c3ac80589352ecb53f8df2c503a45f9846fc28d1d31e6307d3ddbffc1132315cc07f16dad1348dfa9c482c558e1d05c5242ca1c39436726ecd28258b1899792887dd0a3c62927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #267: special case hash", + "NoBenchmark": false + }, + { + "Input": "c6ff198484939170ffffffff0af42cda50f9a5f50636ea6942d6b9b8cd6ae1e24a40801a7e606ba78a0da9882ab23c7677b8642349ed3d652c5bfa5f2a9558fb3a49b64848d682ef7f605f2832f7384bdc24ed2925825bf8ea77dc59817257822927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #268: special case hash", + "NoBenchmark": false + }, + { + "Input": "de030419345ca15c75ffffffff8074799b9e0956cc43135d16dfbe4d27d7e68deacc5e1a8304a74d2be412b078924b3bb3511bac855c05c9e5e9e44df3d61e967451cd8e18d6ed1885dd827714847f96ec4bb0ed4c36ce9808db8f714204f6d12927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #269: special case hash", + "NoBenchmark": false + }, + { + "Input": "6f0e3eeaf42b28132b88fffffffff6c8665604d34acb19037e1ab78caaaac6ff2f7a5e9e5771d424f30f67fdab61e8ce4f8cd1214882adb65f7de94c31577052ac4e69808345809b44acb0b2bd889175fb75dd050c5a449ab9528f8f78daa10c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #270: special case hash", + "NoBenchmark": false + }, + { + "Input": "cdb549f773b3e62b3708d1ffffffffbe48f7c0591ddcae7d2cb222d1f8017ab9ffcda40f792ce4d93e7e0f0e95e1a2147dddd7f6487621c30a03d710b330021979938b55f8a17f7ed7ba9ade8f2065a1fa77618f0b67add8d58c422c2453a49a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #271: special case hash", + "NoBenchmark": false + }, + { + "Input": "2c3f26f96a3ac0051df4989bffffffff9fd64886c1dc4f9924d8fd6f0edb048481f2359c4faba6b53d3e8c8c3fcc16a948350f7ab3a588b28c17603a431e39a8cd6f6a5cc3b55ead0ff695d06c6860b509e46d99fccefb9f7f9e101857f743002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #272: special case hash", + "NoBenchmark": false + }, + { + "Input": "ac18f8418c55a2502cb7d53f9affffffff5c31d89fda6a6b8476397c04edf411dfc8bf520445cbb8ee1596fb073ea283ea130251a6fdffa5c3f5f2aaf75ca808048e33efce147c9dd92823640e338e68bfd7d0dc7a4905b3a7ac711e577e90e72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #273: special case hash", + "NoBenchmark": false + }, + { + "Input": "4f9618f98e2d3a15b24094f72bb5ffffffffa2fd3e2893683e5a6ab8cf0ee610ad019f74c6941d20efda70b46c53db166503a0e393e932f688227688ba6a576293320eb7ca0710255346bdbb3102cdcf7964ef2e0988e712bc05efe16c1993452927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #274: special case hash", + "NoBenchmark": false + }, + { + "Input": "422e82a3d56ed10a9cc21d31d37a25ffffffff67edf7c40204caae73ab0bc75aac8096842e8add68c34e78ce11dd71e4b54316bd3ebf7fffdeb7bd5a3ebc1883f5ca2f4f23d674502d4caf85d187215d36e3ce9f0ce219709f21a3aac003b7a82927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #275: special case hash", + "NoBenchmark": false + }, + { + "Input": "7075d245ccc3281b6e7b329ff738fbb417a5ffffffffa0842d9890b5cf95d018677b2d3a59b18a5ff939b70ea002250889ddcd7b7b9d776854b4943693fb92f76b4ba856ade7677bf30307b21f3ccda35d2f63aee81efd0bab6972cc0795db552927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #276: special case hash", + "NoBenchmark": false + }, + { + "Input": "3c80de54cd9226989443d593fa4fd6597e280ebeffffffffc1847eb76c217a95479e1ded14bcaed0379ba8e1b73d3115d84d31d4b7c30e1f05e1fc0d5957cfb0918f79e35b3d89487cf634a4f05b2e0c30857ca879f97c771e877027355b24432927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #277: special case hash", + "NoBenchmark": false + }, + { + "Input": "de21754e29b85601980bef3d697ea2770ce891a8cdffffffffc7906aa794b39b43dfccd0edb9e280d9a58f01164d55c3d711e14b12ac5cf3b64840ead512a0a31dbe33fa8ba84533cd5c4934365b3442ca1174899b78ef9a3199f495843897722927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #278: special case hash", + "NoBenchmark": false + }, + { + "Input": "8f65d92927cfb86a84dd59623fb531bb599e4d5f7289ffffffff2f1f2f57881c5b09ab637bd4caf0f4c7c7e4bca592fea20e9087c259d26a38bb4085f0bbff1145b7eb467b6748af618e9d80d6fdcd6aa24964e5a13f885bca8101de08eb0d752927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #279: special case hash", + "NoBenchmark": false + }, + { + "Input": "6b63e9a74e092120160bea3877dace8a2cc7cd0e8426cbfffffffffafc8c3ca85e9b1c5a028070df5728c5c8af9b74e0667afa570a6cfa0114a5039ed15ee06fb1360907e2d9785ead362bb8d7bd661b6c29eeffd3c5037744edaeb9ad990c202927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #280: special case hash", + "NoBenchmark": false + }, + { + "Input": "fc28259702a03845b6d75219444e8b43d094586e249c8699ffffffffe852512e0671a0a85c2b72d54a2fb0990e34538b4890050f5a5712f6d1a7a5fb8578f32edb1846bab6b7361479ab9c3285ca41291808f27fd5bd4fdac720e5854713694c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #281: special case hash", + "NoBenchmark": false + }, + { + "Input": "1273b4502ea4e3bccee044ee8e8db7f774ecbcd52e8ceb571757ffffffffe20a7673f8526748446477dbbb0590a45492c5d7d69859d301abbaedb35b2095103a3dc70ddf9c6b524d886bed9e6af02e0e4dec0d417a414fed3807ef4422913d7c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #282: special case hash", + "NoBenchmark": false + }, + { + "Input": "08fb565610a79baa0c566c66228d81814f8c53a15b96e602fb49ffffffffff6e7f085441070ecd2bb21285089ebb1aa6450d1a06c36d3ff39dfd657a796d12b5249712012029870a2459d18d47da9aa492a5e6cb4b2d8dafa9e4c5c54a2b9a8b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #283: special case hash", + "NoBenchmark": false + }, + { + "Input": "d59291cc2cf89f3087715fcb1aa4e79aa2403f748e97d7cd28ecaefeffffffff914c67fb61dd1e27c867398ea7322d5ab76df04bc5aa6683a8e0f30a5d287348fa07474031481dda4953e3ac1959ee8cea7e66ec412b38d6c96d28f6d37304ea2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #284: special case hash", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000fffffffffffffffffffffffcffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e0ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #286: r too large", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254eab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #287: r,s are large", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd480984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c5611feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #288: r and s^-1 have a large Hamming weight", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a54201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c0595c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #289: r and s^-1 have a large Hamming weight", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d5555555550000000055555555555555553ef7a8e48d07df81a693439654210c70083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #301: r and s^-1 are close to n", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8555555550000000055555555555555553ef7a8e48d07df81a693439654210c70b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f2871b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #304: point at infinity during verify", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8f50d371b91bfb1d7d14e1323523bc3aa8cbf2c57f9e284de628c8b4536787b86f94ad887ac94d527247cd2e7d0c8b1291c553c9730405380b14cbb209f5fa2dd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #305: edge case for signature malleability", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a968ec6e298eafe16539156ce57a14b04a7047c221bafc3a582eaeb0d857c4d94697bed1af17850117fdb39b2324f220a5698ed16c426a27335bb385ac8ca6fb30", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #306: edge case for signature malleability", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c70bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502369da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b866d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #307: u1 == 1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c7044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52ed8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff3233e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #308: u1 == n - 1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c70555555550000000055555555555555553ef7a8e48d07df81a693439654210c703623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab7858db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #309: u2 == 1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c70aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #310: u2 == n - 1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde91e1ba60fdedb76a46bcb51dc0b8b4b7e019f0a28721885fa5d3a8196623397db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff773504f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #311: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdea5843ffeb73af94313ba4831b53fe24f799e525b1e8e8c87b59b95b430ad9dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #312: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd03ffcabf2f1b4d2a65190db1680d62bb994e41c5251cd73b3c3dfc5e5bafc035d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #313: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4dfbc401f971cd304b33dfdb17d0fed0fe4c1a88ae648e0d2847f74977534989a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c326337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #314: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbc4024761cd2ffd43dfdb17d0fed112b988977055cd3a8e54971eba9cda5ca71c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b73877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #315: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd788048ed39a5ffa77bfb62fa1fda2257742bf35d128fb3459f2a0c909ee86f915eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #316: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd476d9131fd381bd917d0fed112bc9e0a5924b5ed5b11167edd8b23582b3cb15e5caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47adeb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #317: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8374253e3e21bd154448d0a8f640fe46fafa8b19ce78d538f6cc0a19662d3601c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b0986237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #318: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd357cfd3be4d01d413c5b9ede36cba5452c11ee7fe14879e749ae6a2d897a52d63fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced03ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #319: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd29798c5c0ee287d4a5e8e6b799fd86b8df5225298e6ffc807cd2f2bc27a0a6d89cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #320: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0b70f22c781092452dca1a5711fa3a5a1f72add1bf52c2ff7cae4820b30078dda3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #321: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd16e1e458f021248a5b9434ae23f474b43ee55ba37ea585fef95c90416600f1baf19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #322: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2252d6856831b6cf895e4f0535eeaf0e5e5809753df848fe760ad86219016a9783a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #323: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd81ffe55f178da695b28c86d8b406b15dab1a9e39661a3ae017fbe390ac0972c3dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #324: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a67e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #325: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f22eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #326: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e84db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f356d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #327: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd66755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf291b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad66349aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #328: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd55a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834df97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #329: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc885ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #330: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc86000a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cde6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #331: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e868612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #332: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb2769ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #333: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b0992f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8033dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #334: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09eff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #335: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e378651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #336: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa6d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6def6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #337: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f0ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e15428911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #338: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #339: point duplication during verification", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc469637c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #340: duplication bug", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023555555550000000055555555555555553ef7a8e48d07df81a693439654210c703333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d25045d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #343: comparison with point at infinity ", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978555555550000000055555555555555553ef7a8e48d07df81a693439654210c704fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #344: extreme value for k and edgecase s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63ccc6a771527024227792170a6f8eee735bf32b7f98af669ead299802e32d7c3107bc3b4b5e65ab887bbd343572b3e5619261fe3a073e2ffd78412f726867db589e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #345: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7851c2bbad08e54ec7a9af99f49f03644d6ec6d59b207fec98de85a7d15b956efcee9960283045075684b410be8d0f7494b91aa2379f60727319f10ddeb0fe9d6", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #346: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699783333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaf6417c8a670584e388676949e53da7fc55911ff68318d1bf3061205acb19c48f8f2b743df34ad0f72674acb7505929784779cd9ac916c3669ead43026ab6d43f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #347: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997849249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185501421277be45a5eefec6c639930d636032565af420cf3373f557faa7f8a06438673d6cb6076e1cfcdc7dfe7384c8e5cac08d74501f2ae6e89cad195d0aa1371", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #348: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050237cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997816a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb0d935bf9ffc115a527735f729ca8a4ca23ee01a4894adf0e3415ac84e808bb343195a3762fea29ed38912bd9ea6c4fde70c3050893a4375850ce61d82eba33c5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #349: extreme value for k", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296555555550000000055555555555555553ef7a8e48d07df81a693439654210c705e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca215de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #350: extreme value for k and edgecase s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc169fb797325843faff2f7a5b5445da9e2fd6226f7ef90ef0bfe924104b02db8e7bbb8de662c7b9b1cf9b22f7a2e582bd46d581d68878efb2b861b131d8a1d667", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #351: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7271cd89c000143096b62d4e9e4ca885aef2f7023d18affdaf8b7b548981487540a1c6e954e32108435b55fa385b0f76481a609b9149ccb4b02b2ca47fe8e4da5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #352: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaa3d0bc7ed8f09d2cb7ddb46ebc1ed799ab1563a9ab84bf524587a220afe499c12e22dc3b3c103824a4f378d96adb0a408abf19ce7d68aa6244f78cb216fa3f8df", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #353: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29649249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b72e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #354: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050236b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29616a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb8d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #355: extreme value for k", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #356: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502344a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #357: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #358: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502344a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #359: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a0177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e204aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #360: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "dc1921946f4af96a2856e7be399007c9e807bdf4c5332f19f59ec9dd1bb8c7b3530bd6b0c9af2d69ba897f6b5fb59695cfbf33afe66dbadcf5b8d2a2a6538e23d85e489cb7a161fd55ededcedbf4cc0c0987e3e3f0f242cae934c72caa3f43e904aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #361: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b8604aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #362: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "de47c9b27eb8d300dbb5f2c353e632c393262cf06340c4fa7f1b40c4cbd36f90986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb713dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c04aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #363: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f19b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #364: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f910fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df557374f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #365: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e3541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb556774f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #366: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a59f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #367: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f914cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b439638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe33cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #368: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b553cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #369: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f911158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf3466830228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f2855193cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #370: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d3e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a12513363cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #371: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #372: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b43dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd1399292829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #373: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f915eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af782c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb52829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #374: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9196843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #375: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f6402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #376: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dbafffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #377: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #378: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb300000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #379: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f916b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f75939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #380: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #381: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9131230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb070f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beffbcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #382: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #383: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f917e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859459450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aabcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #384: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35689c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #385: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b3472b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #386: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_secp256r1_sha256_test.json EcdsaVerify SHA-256 #387: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd762927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1: signature malleability", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #2: Legacy:ASN encoding of s misses leading 0", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #3: valid", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca60502329a3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #118: modify first byte of integer", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e98b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #120: modify last byte of integer", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568475b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #121: modify last byte of integer", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1800b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568472927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #124: truncated integer", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #133: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #134: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #137: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f47aa2bbd0a4c384ee1493b1f518ada018ef05465583885980861905228a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #139: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b8252927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #143: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #177: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #178: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #179: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #180: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #181: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #187: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #188: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #189: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #190: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #191: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #197: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #198: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #199: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #200: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #201: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #207: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #208: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #209: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #210: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #211: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #217: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #218: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #219: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #220: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #221: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "70239dd877f7c944c422f44dea4ed1a52f2627416faf2f072fa50c772ed6f80764a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e6af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #230: Edge case for Shamir multiplication", + "NoBenchmark": false + }, + { + "Input": "00000000690ed426ccf17803ebe2bd0884bcd58a1bb5e7477ead3645f356e7a916aea964a2f6506d6f78c81c91fc7e8bded7d397738448de1e19a0ec580bf266252cd762130c6667cfe8b7bc47d27d78391e8e80c578d1cd38c3ff033be928e92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #231: special case hash", + "NoBenchmark": false + }, + { + "Input": "7300000000213f2a525c6035725235c2f696ad3ebb5ee47f140697ad25770d919cc98be2347d469bf476dfc26b9b733df2d26d6ef524af917c665baccb23c882093496459effe2d8d70727b82462f61d0ec1b7847929d10ea631dacb16b56c322927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #232: special case hash", + "NoBenchmark": false + }, + { + "Input": "ddf2000000005e0be0635b245f0b97978afd25daadeb3edb4a0161c27fe0604573b3c90ecd390028058164524dde892703dce3dea0d53fa8093999f07ab8aa432f67b0b8e20636695bb7d8bf0a651c802ed25a395387b5f4188c0c4075c886342927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #233: special case hash", + "NoBenchmark": false + }, + { + "Input": "67ab1900000000784769c4ecb9e164d6642b8499588b89855be1ec355d0841a0bfab3098252847b328fadf2f89b95c851a7f0eb390763378f37e90119d5ba3ddbdd64e234e832b1067c2d058ccb44d978195ccebb65c2aaf1e2da9b8b4987e3b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #234: special case hash", + "NoBenchmark": false + }, + { + "Input": "a2bf09460000000076d7dbeffe125eaf02095dff252ee905e296b6350fc311cf204a9784074b246d8bf8bf04a4ceb1c1f1c9aaab168b1596d17093c5cd21d2cd51cce41670636783dc06a759c8847868a406c2506fe17975582fe648d1d88b522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #235: special case hash", + "NoBenchmark": false + }, + { + "Input": "3554e827c700000000e1e75e624a06b3a0a353171160858129e15c544e4f0e65ed66dc34f551ac82f63d4aa4f81fe2cb0031a91d1314f835027bca0f1ceeaa0399ca123aa09b13cd194a422e18d5fda167623c3f6e5d4d6abb8953d67c0c48c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #236: special case hash", + "NoBenchmark": false + }, + { + "Input": "9b6cd3b812610000000026941a0f0bb53255ea4c9fd0cb3426e3a54b9fc6965c060b700bef665c68899d44f2356a578d126b062023ccc3c056bf0f60a237012b8d186c027832965f4fcc78a3366ca95dedbb410cbef3f26d6be5d581c11d36102927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #237: special case hash", + "NoBenchmark": false + }, + { + "Input": "883ae39f50bf0100000000e7561c26fc82a52baa51c71ca877162f93c4ae01869f6adfe8d5eb5b2c24d7aa7934b6cf29c93ea76cd313c9132bb0c8e38c96831db26a9c9e40e55ee0890c944cf271756c906a33e66b5bd15e051593883b5e99022927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #238: special case hash", + "NoBenchmark": false + }, + { + "Input": "a1ce5d6e5ecaf28b0000000000fa7cd010540f420fb4ff7401fe9fce011d0ba6a1af03ca91677b673ad2f33615e56174a1abf6da168cebfa8868f4ba273f16b720aa73ffe48afa6435cd258b173d0c2377d69022e7d098d75caf24c8c5e06b1c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #239: special case hash", + "NoBenchmark": false + }, + { + "Input": "8ea5f645f373f580930000000038345397330012a8ee836c5494cdffd5ee8054fdc70602766f8eed11a6c99a71c973d5659355507b843da6e327a28c11893db93df5349688a085b137b1eacf456a9e9e0f6d15ec0078ca60a7f83f2b10d213502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #240: special case hash", + "NoBenchmark": false + }, + { + "Input": "660570d323e9f75fa734000000008792d65ce93eabb7d60d8d9c1bbdcb5ef305b516a314f2fce530d6537f6a6c49966c23456f63c643cf8e0dc738f7b876e675d39ffd033c92b6d717dd536fbc5efdf1967c4bd80954479ba66b0120cd16fff22927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #241: special case hash", + "NoBenchmark": false + }, + { + "Input": "d0462673154cce587dde8800000000e98d35f1f45cf9c3bf46ada2de4c568c343b2cbf046eac45842ecb7984d475831582717bebb6492fd0a485c101e29ff0a84c9b7b47a98b0f82de512bc9313aaf51701099cac5f76e68c8595fc1c1d992582927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #242: special case hash", + "NoBenchmark": false + }, + { + "Input": "bd90640269a7822680cedfef000000000caef15a6171059ab83e7b4418d7278f30c87d35e636f540841f14af54e2f9edd79d0312cfa1ab656c3fb15bfde48dcf47c15a5a82d24b75c85a692bd6ecafeb71409ede23efd08e0db9abf6340677ed2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #243: special case hash", + "NoBenchmark": false + }, + { + "Input": "33239a52d72f1311512e41222a00000000d2dcceb301c54b4beae8e284788a7338686ff0fda2cef6bc43b58cfe6647b9e2e8176d168dec3c68ff262113760f52067ec3b651f422669601662167fa8717e976e2db5e6a4cf7c2ddabb3fde9d67d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #244: special case hash", + "NoBenchmark": false + }, + { + "Input": "b8d64fbcd4a1c10f1365d4e6d95c000000007ee4a21a1cbe1dc84c2d941ffaf144a3e23bf314f2b344fc25c7f2de8b6af3e17d27f5ee844b225985ab6e2775cf2d48e223205e98041ddc87be532abed584f0411f5729500493c9cc3f4dd15e862927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #245: special case hash", + "NoBenchmark": false + }, + { + "Input": "01603d3982bf77d7a3fef3183ed092000000003a227420db4088b20fe0e9d84a2ded5b7ec8e90e7bf11f967a3d95110c41b99db3b5aa8d330eb9d638781688e97d5792c53628155e1bfc46fb1a67e3088de049c328ae1f44ec69238a009808f92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #246: special case hash", + "NoBenchmark": false + }, + { + "Input": "9ea6994f1e0384c8599aa02e6cf66d9c000000004d89ef50b7e9eb0cfbff7363bdae7bcb580bf335efd3bc3d31870f923eaccafcd40ec2f605976f15137d8b8ff6dfa12f19e525270b0106eecfe257499f373a4fb318994f24838122ce7ec3c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #247: special case hash", + "NoBenchmark": false + }, + { + "Input": "d03215a8401bcf16693979371a01068a4700000000e2fa5bf692bc670905b18c50f9c4f0cd6940e162720957ffff513799209b78596956d21ece251c2401f1c6d7033a0a787d338e889defaaabb106b95a4355e411a59c32aa5167dfab2447262927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #248: special case hash", + "NoBenchmark": false + }, + { + "Input": "307bfaaffb650c889c84bf83f0300e5dc87e000000008408fd5f64b582e3bb14f612820687604fa01906066a378d67540982e29575d019aabe90924ead5c860d3f9367702dd7dd4f75ea98afd20e328a1a99f4857b316525328230ce294b0fef2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #249: special case hash", + "NoBenchmark": false + }, + { + "Input": "bab5c4f4df540d7b33324d36bb0c157551527c00000000e4af574bb4d54ea6b89505e407657d6e8bc93db5da7aa6f5081f61980c1949f56b0f2f507da5782a7ac60d31904e3669738ffbeccab6c3656c08e0ed5cb92b3cfa5e7f71784f9c50212927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #250: special case hash", + "NoBenchmark": false + }, + { + "Input": "d4ba47f6ae28f274e4f58d8036f9c36ec2456f5b00000000c3b869197ef5e15ebbd16fbbb656b6d0d83e6a7787cd691b08735aed371732723e1c68a40404517d9d8e35dba96028b7787d91315be675877d2d097be5e8ee34560e3e7fd25c0f002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #251: special case hash", + "NoBenchmark": false + }, + { + "Input": "79fd19c7235ea212f29f1fa00984342afe0f10aafd00000000801e47f8c184e12ec9760122db98fd06ea76848d35a6da442d2ceef7559a30cf57c61e92df327e7ab271da90859479701fccf86e462ee3393fb6814c27b760c4963625c0a198782927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #252: special case hash", + "NoBenchmark": false + }, + { + "Input": "8c291e8eeaa45adbaf9aba5c0583462d79cbeb7ac97300000000a37ea6700cda54e76b7683b6650baa6a7fc49b1c51eed9ba9dd463221f7a4f1005a89fe00c592ea076886c773eb937ec1cc8374b7915cfd11b1c1ae1166152f2f7806a31c8fd2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #253: special case hash", + "NoBenchmark": false + }, + { + "Input": "0eaae8641084fa979803efbfb8140732f4cdcf66c3f78a000000003c278a6b215291deaf24659ffbbce6e3c26f6021097a74abdbb69be4fb10419c0c496c946665d6fcf336d27cc7cdb982bb4e4ecef5827f84742f29f10abf83469270a03dc32927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #254: special case hash", + "NoBenchmark": false + }, + { + "Input": "e02716d01fb23a5a0068399bf01bab42ef17c6d96e13846c00000000afc0f89d207a3241812d75d947419dc58efb05e8003b33fc17eb50f9d15166a88479f107cdee749f2e492b213ce80b32d0574f62f1c5d70793cf55e382d5caadf75927672927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #255: special case hash", + "NoBenchmark": false + }, + { + "Input": "9eb0bf583a1a6b9a194e9a16bc7dab2a9061768af89d00659a00000000fc7de16554e49f82a855204328ac94913bf01bbe84437a355a0a37c0dee3cf81aa7728aea00de2507ddaf5c94e1e126980d3df16250a2eaebc8be486effe7f22b4f9292927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #256: special case hash", + "NoBenchmark": false + }, + { + "Input": "62aac98818b3b84a2c214f0d5e72ef286e1030cb53d9a82b690e00000000cd15a54c5062648339d2bff06f71c88216c26c6e19b4d80a8c602990ac82707efdfce99bbe7fcfafae3e69fd016777517aa01056317f467ad09aff09be73c9731b0d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #257: special case hash", + "NoBenchmark": false + }, + { + "Input": "3760a7f37cf96218f29ae43732e513efd2b6f552ea4b6895464b9300000000c8975bd7157a8d363b309f1f444012b1a1d23096593133e71b4ca8b059cff37eaf7faa7a28b1c822baa241793f2abc930bd4c69840fe090f2aacc46786bf9196222927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #258: special case hash", + "NoBenchmark": false + }, + { + "Input": "0da0a1d2851d33023834f2098c0880096b4320bea836cd9cbb6ff6c8000000005694a6f84b8f875c276afd2ebcfe4d61de9ec90305afb1357b95b3e0da43885e0dffad9ffd0b757d8051dec02ebdf70d8ee2dc5c7870c0823b6ccc7c679cbaa42927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #259: special case hash", + "NoBenchmark": false + }, + { + "Input": "ffffffff293886d3086fd567aafd598f0fe975f735887194a764a231e82d289aa0c30e8026fdb2b4b4968a27d16a6d08f7098f1a98d21620d7454ba9790f1ba65e470453a8a399f15baf463f9deceb53acc5ca64459149688bd2760c654243392927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #260: special case hash", + "NoBenchmark": false + }, + { + "Input": "7bffffffff2376d1e3c03445a072e24326acdc4ce127ec2e0e8d9ca99527e7b7614ea84acf736527dd73602cd4bb4eea1dfebebd5ad8aca52aa0228cf7b99a88737cc85f5f2d2f60d1b8183f3ed490e4de14368e96a9482c2a4dd193195c902f2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #261: special case hash", + "NoBenchmark": false + }, + { + "Input": "a2b5ffffffffebb251b085377605a224bc80872602a6e467fd016807e97fa395bead6734ebe44b810d3fb2ea00b1732945377338febfd439a8d74dfbd0f942fa6bb18eae36616a7d3cad35919fd21a8af4bbe7a10f73b3e036a46b103ef56e2a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #262: special case hash", + "NoBenchmark": false + }, + { + "Input": "641227ffffffff6f1b96fa5f097fcf3cc1a3c256870d45a67b83d0967d4b20c0499625479e161dacd4db9d9ce64854c98d922cbf212703e9654fae182df9bad242c177cf37b8193a0131108d97819edd9439936028864ac195b64fca76d9d6932927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #263: special case hash", + "NoBenchmark": false + }, + { + "Input": "958415d8ffffffffabad03e2fc662dc3ba203521177502298df56f36600e0f8b08f16b8093a8fb4d66a2c8065b541b3d31e3bfe694f6b89c50fb1aaa6ff6c9b29d6455e2d5d1779748573b611cb95d4a21f967410399b39b535ba3e5af81ca2e2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #264: special case hash", + "NoBenchmark": false + }, + { + "Input": "f1d8de4858ffffffff1281093536f47fe13deb04e1fbe8fb954521b6975420f8be26231b6191658a19dd72ddb99ed8f8c579b6938d19bce8eed8dc2b338cb5f8e1d9a32ee56cffed37f0f22b2dcb57d5c943c14f79694a03b9c5e96952575c892927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #265: special case hash", + "NoBenchmark": false + }, + { + "Input": "0927895f2802ffffffff10782dd14a3b32dc5d47c05ef6f1876b95c81fc31def15e76880898316b16204ac920a02d58045f36a229d4aa4f812638c455abe0443e74d357d3fcb5c8c5337bd6aba4178b455ca10e226e13f9638196506a19391232927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #266: special case hash", + "NoBenchmark": false + }, + { + "Input": "60907984aa7e8effffffff4f332862a10a57c3063fb5a30624cf6a0c3ac80589352ecb53f8df2c503a45f9846fc28d1d31e6307d3ddbffc1132315cc07f16dad1348dfa9c482c558e1d05c5242ca1c39436726ecd28258b1899792887dd0a3c62927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #267: special case hash", + "NoBenchmark": false + }, + { + "Input": "c6ff198484939170ffffffff0af42cda50f9a5f50636ea6942d6b9b8cd6ae1e24a40801a7e606ba78a0da9882ab23c7677b8642349ed3d652c5bfa5f2a9558fb3a49b64848d682ef7f605f2832f7384bdc24ed2925825bf8ea77dc59817257822927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #268: special case hash", + "NoBenchmark": false + }, + { + "Input": "de030419345ca15c75ffffffff8074799b9e0956cc43135d16dfbe4d27d7e68deacc5e1a8304a74d2be412b078924b3bb3511bac855c05c9e5e9e44df3d61e967451cd8e18d6ed1885dd827714847f96ec4bb0ed4c36ce9808db8f714204f6d12927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #269: special case hash", + "NoBenchmark": false + }, + { + "Input": "6f0e3eeaf42b28132b88fffffffff6c8665604d34acb19037e1ab78caaaac6ff2f7a5e9e5771d424f30f67fdab61e8ce4f8cd1214882adb65f7de94c31577052ac4e69808345809b44acb0b2bd889175fb75dd050c5a449ab9528f8f78daa10c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #270: special case hash", + "NoBenchmark": false + }, + { + "Input": "cdb549f773b3e62b3708d1ffffffffbe48f7c0591ddcae7d2cb222d1f8017ab9ffcda40f792ce4d93e7e0f0e95e1a2147dddd7f6487621c30a03d710b330021979938b55f8a17f7ed7ba9ade8f2065a1fa77618f0b67add8d58c422c2453a49a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #271: special case hash", + "NoBenchmark": false + }, + { + "Input": "2c3f26f96a3ac0051df4989bffffffff9fd64886c1dc4f9924d8fd6f0edb048481f2359c4faba6b53d3e8c8c3fcc16a948350f7ab3a588b28c17603a431e39a8cd6f6a5cc3b55ead0ff695d06c6860b509e46d99fccefb9f7f9e101857f743002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #272: special case hash", + "NoBenchmark": false + }, + { + "Input": "ac18f8418c55a2502cb7d53f9affffffff5c31d89fda6a6b8476397c04edf411dfc8bf520445cbb8ee1596fb073ea283ea130251a6fdffa5c3f5f2aaf75ca808048e33efce147c9dd92823640e338e68bfd7d0dc7a4905b3a7ac711e577e90e72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #273: special case hash", + "NoBenchmark": false + }, + { + "Input": "4f9618f98e2d3a15b24094f72bb5ffffffffa2fd3e2893683e5a6ab8cf0ee610ad019f74c6941d20efda70b46c53db166503a0e393e932f688227688ba6a576293320eb7ca0710255346bdbb3102cdcf7964ef2e0988e712bc05efe16c1993452927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #274: special case hash", + "NoBenchmark": false + }, + { + "Input": "422e82a3d56ed10a9cc21d31d37a25ffffffff67edf7c40204caae73ab0bc75aac8096842e8add68c34e78ce11dd71e4b54316bd3ebf7fffdeb7bd5a3ebc1883f5ca2f4f23d674502d4caf85d187215d36e3ce9f0ce219709f21a3aac003b7a82927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #275: special case hash", + "NoBenchmark": false + }, + { + "Input": "7075d245ccc3281b6e7b329ff738fbb417a5ffffffffa0842d9890b5cf95d018677b2d3a59b18a5ff939b70ea002250889ddcd7b7b9d776854b4943693fb92f76b4ba856ade7677bf30307b21f3ccda35d2f63aee81efd0bab6972cc0795db552927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #276: special case hash", + "NoBenchmark": false + }, + { + "Input": "3c80de54cd9226989443d593fa4fd6597e280ebeffffffffc1847eb76c217a95479e1ded14bcaed0379ba8e1b73d3115d84d31d4b7c30e1f05e1fc0d5957cfb0918f79e35b3d89487cf634a4f05b2e0c30857ca879f97c771e877027355b24432927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #277: special case hash", + "NoBenchmark": false + }, + { + "Input": "de21754e29b85601980bef3d697ea2770ce891a8cdffffffffc7906aa794b39b43dfccd0edb9e280d9a58f01164d55c3d711e14b12ac5cf3b64840ead512a0a31dbe33fa8ba84533cd5c4934365b3442ca1174899b78ef9a3199f495843897722927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #278: special case hash", + "NoBenchmark": false + }, + { + "Input": "8f65d92927cfb86a84dd59623fb531bb599e4d5f7289ffffffff2f1f2f57881c5b09ab637bd4caf0f4c7c7e4bca592fea20e9087c259d26a38bb4085f0bbff1145b7eb467b6748af618e9d80d6fdcd6aa24964e5a13f885bca8101de08eb0d752927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #279: special case hash", + "NoBenchmark": false + }, + { + "Input": "6b63e9a74e092120160bea3877dace8a2cc7cd0e8426cbfffffffffafc8c3ca85e9b1c5a028070df5728c5c8af9b74e0667afa570a6cfa0114a5039ed15ee06fb1360907e2d9785ead362bb8d7bd661b6c29eeffd3c5037744edaeb9ad990c202927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #280: special case hash", + "NoBenchmark": false + }, + { + "Input": "fc28259702a03845b6d75219444e8b43d094586e249c8699ffffffffe852512e0671a0a85c2b72d54a2fb0990e34538b4890050f5a5712f6d1a7a5fb8578f32edb1846bab6b7361479ab9c3285ca41291808f27fd5bd4fdac720e5854713694c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #281: special case hash", + "NoBenchmark": false + }, + { + "Input": "1273b4502ea4e3bccee044ee8e8db7f774ecbcd52e8ceb571757ffffffffe20a7673f8526748446477dbbb0590a45492c5d7d69859d301abbaedb35b2095103a3dc70ddf9c6b524d886bed9e6af02e0e4dec0d417a414fed3807ef4422913d7c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #282: special case hash", + "NoBenchmark": false + }, + { + "Input": "08fb565610a79baa0c566c66228d81814f8c53a15b96e602fb49ffffffffff6e7f085441070ecd2bb21285089ebb1aa6450d1a06c36d3ff39dfd657a796d12b5249712012029870a2459d18d47da9aa492a5e6cb4b2d8dafa9e4c5c54a2b9a8b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #283: special case hash", + "NoBenchmark": false + }, + { + "Input": "d59291cc2cf89f3087715fcb1aa4e79aa2403f748e97d7cd28ecaefeffffffff914c67fb61dd1e27c867398ea7322d5ab76df04bc5aa6683a8e0f30a5d287348fa07474031481dda4953e3ac1959ee8cea7e66ec412b38d6c96d28f6d37304ea2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #284: special case hash", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000001000000000000000000000000fffffffffffffffffffffffcffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254ed705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #636: r too large", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e3cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #637: r,s are large", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd48240cd81edd91cb6936133508c3915100e81f332c4545d41189b481196851378e05b06e72d4a1bff80ea5db514aa2f93ea6dd6d9c0ae27b7837dc432f9ce89d9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #638: r and s^-1 have a large Hamming weight", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5b062947356748b0fc17f1704c65aa1dca6e1bfe6779756fa616d91eaad13df2c0b38c17f3d0672e7409cfc5992a99fff12b84a4f8432293b431113f1b2fb579d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #639: r and s^-1 have a large Hamming weight", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d5555555550000000055555555555555553ef7a8e48d07df81a693439654210c707a736d8e326a9ca62bbe25a34ea4e3633b499a96afa7aaa3fcf3fd88f8e07edeb3e45879d8622b93e818443a686e869eeda7bf9ae46aa3eafcc48a5934864627", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #651: r and s^-1 are close to n", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8555555550000000055555555555555553ef7a8e48d07df81a693439654210c700203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de04503434383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #654: point at infinity during verify", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a878d844dc7f16b73b1f2a39730da5d8cd99fe2e70a18482384e37dcd2bfea02e1ed6572e01eb7a8d113d02c666c45ef22d3b9a6a6dea99aa43a8183c26e75d336", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #655: edge case for signature malleability", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a9dec6c8257dde94110eacc8c09d2e5789cc5beb81a958b02b4d62da9599a7401466fae1614174be63970b83f6524421067b06dd6f4e9c56baca4e344fdd690f1d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #656: edge case for signature malleability", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #657: u1 == 1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c04ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c31f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #658: u1 == n - 1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70555555550000000055555555555555553ef7a8e48d07df81a693439654210c70692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900efa1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #659: u2 == 1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e100cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #660: u2 == n - 1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd710f8e3edc7c2d5a3fd23de844002bb949d9f794f6d5405f6d97c1bb03dd2bd2b975183b42551cf52f291d5c1921fd5e12f50c8c85a4beb9de03efa3f0f244862243018e6866df922dc313612020311ff21e242ce3fb15bc78c406b25ab43091", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #661: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdedffbc270f722c243069a7e5f40335a61a58525c7b4db2e7a8e269274ffe4e1bc25f1d166f3e211cdf042a26f8abf6094d48b8d17191d74ed71714927446699965d06dd6a88abfa49e8b4c5da6bb922851969adf9604b5accfb52a114e77ccdb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #662: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda25adcae105ed7ff4f95d2344e24ee523314c3e178525d007904b68919ba4d538fe5e88243a76e41a004236218a3c3a2d6eee398a23c3a0b008d7f0164cbc0ca98a20d1bdcf573513c7cfd9b83c63e3a82d40127c897697c86b8cb387af7f240", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #663: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2e4348c645707dce6760d773de3f3e87346924b2f64bd3dd0297e766b5805ebb02148256b530fbc470c7b341970b38243ecee6d5a840a37beca2efb37e8dff2cc0adbea0882482a7489ca703a399864ba987eeb6ddb738af53a83573473cb30d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #664: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd348c673b07dce3920d773de3f3e87408869e916dbcf797d8f9684fb67753d1dca34db012ce6eda1e9c7375c5fcf3e54ed698e19615124273b3a621d021c76f8e777458d6f55a364c221e39e1205d5510bb4fbb7ddf08d8d8fdde13d1d6df7f14", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #665: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6918ce760fb9c7241aee7bc7e7d0e8110d3d22db79ef2fb1f2d09f6ceea7a3b8b97af3fe78be15f2912b6271dd8a43badb6dd2a1b315b2ce7ae37b4e7778041d930d71ee1992d2466495c42102d08e81154c305307d1dcd52d0fa4c479b278e7", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #666: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd73b3c694391d8eadde3f3e874089464715ac20e4c126bbf6d864d648969f5b5a81e7198a3c3f23901cedc7a1d6eff6e9bf81108e6c35cd8559139af3135dbcbb9ef1568530291a8061b90c9f4285eefcba990d4570a4e3b7b737525b5d580034", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #667: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb07ac7a86948c2c2989a16db1930ef1b89ce112595197656877e53c41457f28ab4d792ca121d1dba39cb9de645149c2ab573e8becc6ddff3cc9960f188ddf737f90ba23664153e93262ff73355415195858d7be1315a69456386de68285a3c8", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #668: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27e4d82cb6c061dd9337c69bf9332ed3d198662d6f2299443f62c861187db648518412b69af43aae084476a68d59bbde51fbfa9e5be80563f587c9c2652f88ef2d3b90d25baa6bdb7b0c55e5240a3a98fbc24afed8523edec1c70503fc10f233", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #669: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde7c5cf3aac2e88923b77850515fff6a12d13b356dfe9ec275c3dd81ae94609a4a08f14a644b9a935dffea4761ebaf592d1f66fe6cd373aa7f5d370af34f8352da54b5bc4025cf335900a914c2934ec2fec7a396d0a7affcad732a5741c7aaaf5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #670: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc77838df91c1e953e016e10bddffea2317f9fee32bacfe553cede9e57a748f68ccf2296a6a89b62b90739d38af4ae3a20e9f45715b90044639241061e33f8f8caace0046491eeaa1c6e9a472b96d88f4af83e7ff1bb84438c7e058034412ae08", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #671: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8ef071c02383d2a6c02dc217bbffd446730d0318b0425e2586220907f885f97f94b0fc1525bcabf82b1f34895e5819a06c02b23e04002276e165f962c86e3927be7c2ab4d0b25303204fb32a1f8292902792225e16a6d2dbfb29fbc89a9c3376", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #672: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5668aaa0b545bbf9a044a32399ffbe69ce20074e34d7bdf5cf56282a769763965351f37e1de0c88c508527d89882d183ccdcf2efca407edb0627cadfd16de6ec44b4b57cdf960d32ebcc4c97847eed218425853b5b675eb781b766a1a1300349", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #673: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd12d6e56882f6c0027cae91a27127728f7fddf478fb4fdc2b65f40a60b0eb952748bbafc320e6735cb64019710a269c6c2b5d147bdc831325cb2fb276ac971a69d655e9a755bc9d800ad21ee3fd4d980d93a7a49a8c5ccd37005177578f51163", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #674: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a14b3bbd75c5e1c0c36535a934d4ab85112410b3b90fa97a31c33038964fd85cc112f7d837f8f9c36b460d636c965a5f818f2b50c5d00fb3f9705561dd6631883", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #675: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2d823533c04cd8edc6d6f950a8e08ade04a9bafa2f14a590356935671ae9305bf43178d1f88b6a57a96924c265f0ddb75b58312907b195acb59d7797303123775", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #676: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851edb2b3408b3167d91030624c6328e8ce3ec108c105575c2f3d209b92e654bab69c34318139c50b0802c6e612f0fd3189d800df7c996d5d7b7c3d6be82836fa258", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #677: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd66755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf209179ce7c59225392216453b2ac1e9d178c24837dfae26bc1dd7ab60638527425556b42e330289f3b826b2db7a86d19d45c2860a59f2be1ddcc3b691f95a9255", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #678: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd55a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb366901959fb8deda56e5467b7e4b214ea4c2d0c2fb29d70ff19b6b1eccebd6568d7ed9dbd77a918297fd970bff01e1343f6925167db5a14d098a211c39cc3a413398", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #679: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2567f1fdc387e5350c852b4e8f8ba9d6d947e1c5dd7ccc61a5938245dd6bcab3a9960bebaf919514f9535c22eaaf0b5812857970e26662267b1f3eb1011130a11", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #680: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc86003499f974ff4ca6bbb2f51682fd5f51762f9dd6dd2855262660b36d46d3e4bec2f498fae2487807e220119152f0122476c64d4fa46ddce85c4546630f0d5c5e81", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #681: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad32c5c01662cf00c1929596257db13b26ecf30d0f3ec4b9f0351b0f27094473426e986a086060d086eee822ddd2fc744247a0154b57f7a69c51d9fdafa484e4ac7", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #682: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f491d4cba813a04d86dbae94c23be6f52c15774183be7ba5b2d9f3cf010b160501900b8adfea6491019a9ac080d516025a541bf4b952b0ad7be4b1874b02fd544a", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #683: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09ef7fd0a3a36386638330ecad41e1a3b302af36960831d0210c614b948e8aa124ef0d6d800e4047d6d3c1be0fdeaf11fcd8cab5ab59c730eb34116e35a8c7d098", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #684: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4a521dab13cc9152d8ca77035a607fea06c55cc3ca5dbeb868cea92eafe93df2a7bfb9b28531996635e6a5ccaa2826a406ce1111bdb9c2e0ca36500418a2f43de", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #685: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37474d58a4eec16e0d565f2187fe11d4e8e7a2683a12f38b4fc01d1237a81a10976e55f73bb7cdda46bdb67ef77f6fd2969df2b67920fb5945fde3a517a6ded4cd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #686: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa692da5cd4309d9a6e5cb525c37da8fa0879f7b57208cdabbf47d223a5b23a62140e0daa78cfdd207a7389aaed61738b17fc5fc3e6a5ed3397d2902e9125e6ab4", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #687: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f85689b3e0775c7718a90279f14a8082cfcd4d1f1679274f4e9b8805c570a0670167fcc5ca734552e09afa3640f4a034e15b9b7ca661ec7ff70d3f240ebe705b1", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #688: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed80158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #689: point duplication during verification", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed80158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237ed569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #690: duplication bug", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c703333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9664ce273320d918d8bdb2e61201b4549b36b7cdc54e33b84adb6f2c10aac831e49e68831f18bda2973ac3d76bfbc8c5ee1cceed2dd862e2dc7c915c736cef1f4", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #693: comparison with point at infinity ", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978555555550000000055555555555555553ef7a8e48d07df81a693439654210c70961691a5e960d07a301dbbad4d86247ec27d7089faeb3ddd1add395efff1e0fe7254622cc371866cdf990d2c5377790e37d1f1519817f09a231bd260a9e78aeb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #694: extreme value for k and edgecase s", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc5d283e13ce8ca60da868e3b0fb33e6b4f1074793274e2928250e71e2aca63e9c214dc74fa25371fb4d9e506d418ed9a1bfd6d0c8bb6591d3e0f44505a84886ce", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #695: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa70fc351da038ae0803bd1d86514ae0462f9f8216551d9315aa9d297f792eef6a341c74eed786f2d33da35360ca7aa925e753f00d6077a1e9e5fc339d634019c73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #696: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699783333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaa1e34c8f16d138673fee55c080547c2bfd4de7550065f638322bba9430ce4b60662be9bb512663aa4d7df8ab3f3b4181c5d44a7bdf42436620b7d8a6b81ac936", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #697: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997849249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c1857e1a8a8338d7fd8cf41d322a302d2078a87a23c7186150ed7cda6e52817c1bdfd0a9135a89d21ce821e29014b2898349254d748272b2d4eb8d59ee34c615377f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #698: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997816a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb5c19fe227a61abc65c61ee7a018cc9571b2c6f663ea33583f76a686f64be078b7b4a0d734940f613d52bc48673b457c2cf78492490a5cc5606c0541d17b24ddb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #699: extreme value for k", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296555555550000000055555555555555553ef7a8e48d07df81a693439654210c70db02d1f3421d600e9d9ef9e47419dba3208eed08c2d4189a5db63abeb2739666e0ed26967b9ada9ed7ffe480827f90a0d210d5fd8ec628e31715e6b24125512a", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #700: extreme value for k and edgecase s", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc6222d1962655501893c29e441395b6c05711bd3ed5a0ef72cfab338b88229c4baaae079cb44a1af070362aaa520ee24cac2626423b0bf81af1c54311d8e2fd23", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #701: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa74ccfa24c67f3def7fa81bc99c70bb0419c0952ba599f4c03361da184b04cdca5db76b797f7f41d9c729a2219478a7e629728df870800be8cf6ca7a0a82153bfa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #702: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaea1c72c91034036bac71402b6e9ecc4af3dbde7a99dc574061e99fefff9d84dab7dd057e75b78ac6f56e34eb048f0a9d29d5d055408c90d02bc2ea918c18cb63", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #703: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29649249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185c2879a66d86cb20b820b7795da2da62b38924f7817d1cd350d936988e90e79bc5431a7268ff6931c7a759de024eff90bcb0177216db6fd1f3aaaa11fa3b6a083", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #704: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29616a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bbab1c0f273f74abc2b848c75006f2ef3c54c26df27711b06558f455079aee0ba3df510f2ecef6d9a05997c776f14ad6456c179f0a13af1771e4d6c37fa48b47f2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #705: extreme value for k", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #706: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #707: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #708: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #709: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b8604aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1210: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2530e782f964b2e2ff065a051bc7adc20615d8c43a1365713c88268822c253bcce5b16df652aa1ecb2dc8b46c515f9604e2e84cacfa7c6eec30428d2d3f4e08ed504aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1211: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a0177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e204aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1212: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "de47c9b27eb8d300dbb5f2c353e632c393262cf06340c4fa7f1b40c4cbd36f90986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb713dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c04aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1213: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f19b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1303: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f910fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df557374f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1304: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e3541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb556774f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1305: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a59f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1306: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f914cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b439638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe33cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1307: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b553cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1308: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f911158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf3466830228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f2855193cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1309: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d3e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a12513363cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1310: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1311: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b43dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd1399292829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1312: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f915eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af782c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb52829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1313: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9196843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1314: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f6402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1315: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dbafffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1316: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1317: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb300000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1318: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f916b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f75939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1319: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1320: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9131230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb070f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beffbcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1321: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1322: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f917e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859459450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aabcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1323: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35689c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1324: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b3472b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1325: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_test.json EcdsaVerify SHA-256 #1326: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd762927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #1: signature malleability", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #3: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #5: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050232ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b8252927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #8: Modified r or s, e.g. by adding or subtracting the order of the group", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #9: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #10: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #11: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #12: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #13: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #14: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000000ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #15: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #16: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #17: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #18: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #19: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #20: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #21: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230000000000000000000000000000000000000000000000000000000000000001ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #22: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255100000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #23: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255100000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #24: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #25: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #26: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #27: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #28: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #29: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255000000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #30: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255000000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #31: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #32: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #33: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #34: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #35: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #36: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255200000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #37: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255200000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #38: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #39: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #40: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #41: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #42: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #43: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #44: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #45: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #46: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #47: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #48: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #49: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #50: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff0000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #51: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff0000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000012927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #52: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325512927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #53: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #54: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #55: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #56: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023ffffffff00000001000000000000000000000001000000000000000000000000ffffffff000000010000000000000000000000010000000000000000000000002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #57: Signature with special case values for r and s", + "NoBenchmark": false + }, + { + "Input": "70239dd877f7c944c422f44dea4ed1a52f2627416faf2f072fa50c772ed6f80764a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e6af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #58: Edge case for Shamir multiplication", + "NoBenchmark": false + }, + { + "Input": "00000000690ed426ccf17803ebe2bd0884bcd58a1bb5e7477ead3645f356e7a916aea964a2f6506d6f78c81c91fc7e8bded7d397738448de1e19a0ec580bf266252cd762130c6667cfe8b7bc47d27d78391e8e80c578d1cd38c3ff033be928e92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #59: special case hash", + "NoBenchmark": false + }, + { + "Input": "7300000000213f2a525c6035725235c2f696ad3ebb5ee47f140697ad25770d919cc98be2347d469bf476dfc26b9b733df2d26d6ef524af917c665baccb23c882093496459effe2d8d70727b82462f61d0ec1b7847929d10ea631dacb16b56c322927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #60: special case hash", + "NoBenchmark": false + }, + { + "Input": "ddf2000000005e0be0635b245f0b97978afd25daadeb3edb4a0161c27fe0604573b3c90ecd390028058164524dde892703dce3dea0d53fa8093999f07ab8aa432f67b0b8e20636695bb7d8bf0a651c802ed25a395387b5f4188c0c4075c886342927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #61: special case hash", + "NoBenchmark": false + }, + { + "Input": "67ab1900000000784769c4ecb9e164d6642b8499588b89855be1ec355d0841a0bfab3098252847b328fadf2f89b95c851a7f0eb390763378f37e90119d5ba3ddbdd64e234e832b1067c2d058ccb44d978195ccebb65c2aaf1e2da9b8b4987e3b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #62: special case hash", + "NoBenchmark": false + }, + { + "Input": "a2bf09460000000076d7dbeffe125eaf02095dff252ee905e296b6350fc311cf204a9784074b246d8bf8bf04a4ceb1c1f1c9aaab168b1596d17093c5cd21d2cd51cce41670636783dc06a759c8847868a406c2506fe17975582fe648d1d88b522927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #63: special case hash", + "NoBenchmark": false + }, + { + "Input": "3554e827c700000000e1e75e624a06b3a0a353171160858129e15c544e4f0e65ed66dc34f551ac82f63d4aa4f81fe2cb0031a91d1314f835027bca0f1ceeaa0399ca123aa09b13cd194a422e18d5fda167623c3f6e5d4d6abb8953d67c0c48c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #64: special case hash", + "NoBenchmark": false + }, + { + "Input": "9b6cd3b812610000000026941a0f0bb53255ea4c9fd0cb3426e3a54b9fc6965c060b700bef665c68899d44f2356a578d126b062023ccc3c056bf0f60a237012b8d186c027832965f4fcc78a3366ca95dedbb410cbef3f26d6be5d581c11d36102927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #65: special case hash", + "NoBenchmark": false + }, + { + "Input": "883ae39f50bf0100000000e7561c26fc82a52baa51c71ca877162f93c4ae01869f6adfe8d5eb5b2c24d7aa7934b6cf29c93ea76cd313c9132bb0c8e38c96831db26a9c9e40e55ee0890c944cf271756c906a33e66b5bd15e051593883b5e99022927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #66: special case hash", + "NoBenchmark": false + }, + { + "Input": "a1ce5d6e5ecaf28b0000000000fa7cd010540f420fb4ff7401fe9fce011d0ba6a1af03ca91677b673ad2f33615e56174a1abf6da168cebfa8868f4ba273f16b720aa73ffe48afa6435cd258b173d0c2377d69022e7d098d75caf24c8c5e06b1c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #67: special case hash", + "NoBenchmark": false + }, + { + "Input": "8ea5f645f373f580930000000038345397330012a8ee836c5494cdffd5ee8054fdc70602766f8eed11a6c99a71c973d5659355507b843da6e327a28c11893db93df5349688a085b137b1eacf456a9e9e0f6d15ec0078ca60a7f83f2b10d213502927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #68: special case hash", + "NoBenchmark": false + }, + { + "Input": "660570d323e9f75fa734000000008792d65ce93eabb7d60d8d9c1bbdcb5ef305b516a314f2fce530d6537f6a6c49966c23456f63c643cf8e0dc738f7b876e675d39ffd033c92b6d717dd536fbc5efdf1967c4bd80954479ba66b0120cd16fff22927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #69: special case hash", + "NoBenchmark": false + }, + { + "Input": "d0462673154cce587dde8800000000e98d35f1f45cf9c3bf46ada2de4c568c343b2cbf046eac45842ecb7984d475831582717bebb6492fd0a485c101e29ff0a84c9b7b47a98b0f82de512bc9313aaf51701099cac5f76e68c8595fc1c1d992582927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #70: special case hash", + "NoBenchmark": false + }, + { + "Input": "bd90640269a7822680cedfef000000000caef15a6171059ab83e7b4418d7278f30c87d35e636f540841f14af54e2f9edd79d0312cfa1ab656c3fb15bfde48dcf47c15a5a82d24b75c85a692bd6ecafeb71409ede23efd08e0db9abf6340677ed2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #71: special case hash", + "NoBenchmark": false + }, + { + "Input": "33239a52d72f1311512e41222a00000000d2dcceb301c54b4beae8e284788a7338686ff0fda2cef6bc43b58cfe6647b9e2e8176d168dec3c68ff262113760f52067ec3b651f422669601662167fa8717e976e2db5e6a4cf7c2ddabb3fde9d67d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #72: special case hash", + "NoBenchmark": false + }, + { + "Input": "b8d64fbcd4a1c10f1365d4e6d95c000000007ee4a21a1cbe1dc84c2d941ffaf144a3e23bf314f2b344fc25c7f2de8b6af3e17d27f5ee844b225985ab6e2775cf2d48e223205e98041ddc87be532abed584f0411f5729500493c9cc3f4dd15e862927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #73: special case hash", + "NoBenchmark": false + }, + { + "Input": "01603d3982bf77d7a3fef3183ed092000000003a227420db4088b20fe0e9d84a2ded5b7ec8e90e7bf11f967a3d95110c41b99db3b5aa8d330eb9d638781688e97d5792c53628155e1bfc46fb1a67e3088de049c328ae1f44ec69238a009808f92927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #74: special case hash", + "NoBenchmark": false + }, + { + "Input": "9ea6994f1e0384c8599aa02e6cf66d9c000000004d89ef50b7e9eb0cfbff7363bdae7bcb580bf335efd3bc3d31870f923eaccafcd40ec2f605976f15137d8b8ff6dfa12f19e525270b0106eecfe257499f373a4fb318994f24838122ce7ec3c72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #75: special case hash", + "NoBenchmark": false + }, + { + "Input": "d03215a8401bcf16693979371a01068a4700000000e2fa5bf692bc670905b18c50f9c4f0cd6940e162720957ffff513799209b78596956d21ece251c2401f1c6d7033a0a787d338e889defaaabb106b95a4355e411a59c32aa5167dfab2447262927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #76: special case hash", + "NoBenchmark": false + }, + { + "Input": "307bfaaffb650c889c84bf83f0300e5dc87e000000008408fd5f64b582e3bb14f612820687604fa01906066a378d67540982e29575d019aabe90924ead5c860d3f9367702dd7dd4f75ea98afd20e328a1a99f4857b316525328230ce294b0fef2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #77: special case hash", + "NoBenchmark": false + }, + { + "Input": "bab5c4f4df540d7b33324d36bb0c157551527c00000000e4af574bb4d54ea6b89505e407657d6e8bc93db5da7aa6f5081f61980c1949f56b0f2f507da5782a7ac60d31904e3669738ffbeccab6c3656c08e0ed5cb92b3cfa5e7f71784f9c50212927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #78: special case hash", + "NoBenchmark": false + }, + { + "Input": "d4ba47f6ae28f274e4f58d8036f9c36ec2456f5b00000000c3b869197ef5e15ebbd16fbbb656b6d0d83e6a7787cd691b08735aed371732723e1c68a40404517d9d8e35dba96028b7787d91315be675877d2d097be5e8ee34560e3e7fd25c0f002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #79: special case hash", + "NoBenchmark": false + }, + { + "Input": "79fd19c7235ea212f29f1fa00984342afe0f10aafd00000000801e47f8c184e12ec9760122db98fd06ea76848d35a6da442d2ceef7559a30cf57c61e92df327e7ab271da90859479701fccf86e462ee3393fb6814c27b760c4963625c0a198782927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #80: special case hash", + "NoBenchmark": false + }, + { + "Input": "8c291e8eeaa45adbaf9aba5c0583462d79cbeb7ac97300000000a37ea6700cda54e76b7683b6650baa6a7fc49b1c51eed9ba9dd463221f7a4f1005a89fe00c592ea076886c773eb937ec1cc8374b7915cfd11b1c1ae1166152f2f7806a31c8fd2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #81: special case hash", + "NoBenchmark": false + }, + { + "Input": "0eaae8641084fa979803efbfb8140732f4cdcf66c3f78a000000003c278a6b215291deaf24659ffbbce6e3c26f6021097a74abdbb69be4fb10419c0c496c946665d6fcf336d27cc7cdb982bb4e4ecef5827f84742f29f10abf83469270a03dc32927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #82: special case hash", + "NoBenchmark": false + }, + { + "Input": "e02716d01fb23a5a0068399bf01bab42ef17c6d96e13846c00000000afc0f89d207a3241812d75d947419dc58efb05e8003b33fc17eb50f9d15166a88479f107cdee749f2e492b213ce80b32d0574f62f1c5d70793cf55e382d5caadf75927672927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #83: special case hash", + "NoBenchmark": false + }, + { + "Input": "9eb0bf583a1a6b9a194e9a16bc7dab2a9061768af89d00659a00000000fc7de16554e49f82a855204328ac94913bf01bbe84437a355a0a37c0dee3cf81aa7728aea00de2507ddaf5c94e1e126980d3df16250a2eaebc8be486effe7f22b4f9292927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #84: special case hash", + "NoBenchmark": false + }, + { + "Input": "62aac98818b3b84a2c214f0d5e72ef286e1030cb53d9a82b690e00000000cd15a54c5062648339d2bff06f71c88216c26c6e19b4d80a8c602990ac82707efdfce99bbe7fcfafae3e69fd016777517aa01056317f467ad09aff09be73c9731b0d2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #85: special case hash", + "NoBenchmark": false + }, + { + "Input": "3760a7f37cf96218f29ae43732e513efd2b6f552ea4b6895464b9300000000c8975bd7157a8d363b309f1f444012b1a1d23096593133e71b4ca8b059cff37eaf7faa7a28b1c822baa241793f2abc930bd4c69840fe090f2aacc46786bf9196222927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #86: special case hash", + "NoBenchmark": false + }, + { + "Input": "0da0a1d2851d33023834f2098c0880096b4320bea836cd9cbb6ff6c8000000005694a6f84b8f875c276afd2ebcfe4d61de9ec90305afb1357b95b3e0da43885e0dffad9ffd0b757d8051dec02ebdf70d8ee2dc5c7870c0823b6ccc7c679cbaa42927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #87: special case hash", + "NoBenchmark": false + }, + { + "Input": "ffffffff293886d3086fd567aafd598f0fe975f735887194a764a231e82d289aa0c30e8026fdb2b4b4968a27d16a6d08f7098f1a98d21620d7454ba9790f1ba65e470453a8a399f15baf463f9deceb53acc5ca64459149688bd2760c654243392927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #88: special case hash", + "NoBenchmark": false + }, + { + "Input": "7bffffffff2376d1e3c03445a072e24326acdc4ce127ec2e0e8d9ca99527e7b7614ea84acf736527dd73602cd4bb4eea1dfebebd5ad8aca52aa0228cf7b99a88737cc85f5f2d2f60d1b8183f3ed490e4de14368e96a9482c2a4dd193195c902f2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #89: special case hash", + "NoBenchmark": false + }, + { + "Input": "a2b5ffffffffebb251b085377605a224bc80872602a6e467fd016807e97fa395bead6734ebe44b810d3fb2ea00b1732945377338febfd439a8d74dfbd0f942fa6bb18eae36616a7d3cad35919fd21a8af4bbe7a10f73b3e036a46b103ef56e2a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #90: special case hash", + "NoBenchmark": false + }, + { + "Input": "641227ffffffff6f1b96fa5f097fcf3cc1a3c256870d45a67b83d0967d4b20c0499625479e161dacd4db9d9ce64854c98d922cbf212703e9654fae182df9bad242c177cf37b8193a0131108d97819edd9439936028864ac195b64fca76d9d6932927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #91: special case hash", + "NoBenchmark": false + }, + { + "Input": "958415d8ffffffffabad03e2fc662dc3ba203521177502298df56f36600e0f8b08f16b8093a8fb4d66a2c8065b541b3d31e3bfe694f6b89c50fb1aaa6ff6c9b29d6455e2d5d1779748573b611cb95d4a21f967410399b39b535ba3e5af81ca2e2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #92: special case hash", + "NoBenchmark": false + }, + { + "Input": "f1d8de4858ffffffff1281093536f47fe13deb04e1fbe8fb954521b6975420f8be26231b6191658a19dd72ddb99ed8f8c579b6938d19bce8eed8dc2b338cb5f8e1d9a32ee56cffed37f0f22b2dcb57d5c943c14f79694a03b9c5e96952575c892927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #93: special case hash", + "NoBenchmark": false + }, + { + "Input": "0927895f2802ffffffff10782dd14a3b32dc5d47c05ef6f1876b95c81fc31def15e76880898316b16204ac920a02d58045f36a229d4aa4f812638c455abe0443e74d357d3fcb5c8c5337bd6aba4178b455ca10e226e13f9638196506a19391232927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #94: special case hash", + "NoBenchmark": false + }, + { + "Input": "60907984aa7e8effffffff4f332862a10a57c3063fb5a30624cf6a0c3ac80589352ecb53f8df2c503a45f9846fc28d1d31e6307d3ddbffc1132315cc07f16dad1348dfa9c482c558e1d05c5242ca1c39436726ecd28258b1899792887dd0a3c62927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #95: special case hash", + "NoBenchmark": false + }, + { + "Input": "c6ff198484939170ffffffff0af42cda50f9a5f50636ea6942d6b9b8cd6ae1e24a40801a7e606ba78a0da9882ab23c7677b8642349ed3d652c5bfa5f2a9558fb3a49b64848d682ef7f605f2832f7384bdc24ed2925825bf8ea77dc59817257822927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #96: special case hash", + "NoBenchmark": false + }, + { + "Input": "de030419345ca15c75ffffffff8074799b9e0956cc43135d16dfbe4d27d7e68deacc5e1a8304a74d2be412b078924b3bb3511bac855c05c9e5e9e44df3d61e967451cd8e18d6ed1885dd827714847f96ec4bb0ed4c36ce9808db8f714204f6d12927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #97: special case hash", + "NoBenchmark": false + }, + { + "Input": "6f0e3eeaf42b28132b88fffffffff6c8665604d34acb19037e1ab78caaaac6ff2f7a5e9e5771d424f30f67fdab61e8ce4f8cd1214882adb65f7de94c31577052ac4e69808345809b44acb0b2bd889175fb75dd050c5a449ab9528f8f78daa10c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #98: special case hash", + "NoBenchmark": false + }, + { + "Input": "cdb549f773b3e62b3708d1ffffffffbe48f7c0591ddcae7d2cb222d1f8017ab9ffcda40f792ce4d93e7e0f0e95e1a2147dddd7f6487621c30a03d710b330021979938b55f8a17f7ed7ba9ade8f2065a1fa77618f0b67add8d58c422c2453a49a2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #99: special case hash", + "NoBenchmark": false + }, + { + "Input": "2c3f26f96a3ac0051df4989bffffffff9fd64886c1dc4f9924d8fd6f0edb048481f2359c4faba6b53d3e8c8c3fcc16a948350f7ab3a588b28c17603a431e39a8cd6f6a5cc3b55ead0ff695d06c6860b509e46d99fccefb9f7f9e101857f743002927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #100: special case hash", + "NoBenchmark": false + }, + { + "Input": "ac18f8418c55a2502cb7d53f9affffffff5c31d89fda6a6b8476397c04edf411dfc8bf520445cbb8ee1596fb073ea283ea130251a6fdffa5c3f5f2aaf75ca808048e33efce147c9dd92823640e338e68bfd7d0dc7a4905b3a7ac711e577e90e72927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #101: special case hash", + "NoBenchmark": false + }, + { + "Input": "4f9618f98e2d3a15b24094f72bb5ffffffffa2fd3e2893683e5a6ab8cf0ee610ad019f74c6941d20efda70b46c53db166503a0e393e932f688227688ba6a576293320eb7ca0710255346bdbb3102cdcf7964ef2e0988e712bc05efe16c1993452927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #102: special case hash", + "NoBenchmark": false + }, + { + "Input": "422e82a3d56ed10a9cc21d31d37a25ffffffff67edf7c40204caae73ab0bc75aac8096842e8add68c34e78ce11dd71e4b54316bd3ebf7fffdeb7bd5a3ebc1883f5ca2f4f23d674502d4caf85d187215d36e3ce9f0ce219709f21a3aac003b7a82927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #103: special case hash", + "NoBenchmark": false + }, + { + "Input": "7075d245ccc3281b6e7b329ff738fbb417a5ffffffffa0842d9890b5cf95d018677b2d3a59b18a5ff939b70ea002250889ddcd7b7b9d776854b4943693fb92f76b4ba856ade7677bf30307b21f3ccda35d2f63aee81efd0bab6972cc0795db552927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #104: special case hash", + "NoBenchmark": false + }, + { + "Input": "3c80de54cd9226989443d593fa4fd6597e280ebeffffffffc1847eb76c217a95479e1ded14bcaed0379ba8e1b73d3115d84d31d4b7c30e1f05e1fc0d5957cfb0918f79e35b3d89487cf634a4f05b2e0c30857ca879f97c771e877027355b24432927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #105: special case hash", + "NoBenchmark": false + }, + { + "Input": "de21754e29b85601980bef3d697ea2770ce891a8cdffffffffc7906aa794b39b43dfccd0edb9e280d9a58f01164d55c3d711e14b12ac5cf3b64840ead512a0a31dbe33fa8ba84533cd5c4934365b3442ca1174899b78ef9a3199f495843897722927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #106: special case hash", + "NoBenchmark": false + }, + { + "Input": "8f65d92927cfb86a84dd59623fb531bb599e4d5f7289ffffffff2f1f2f57881c5b09ab637bd4caf0f4c7c7e4bca592fea20e9087c259d26a38bb4085f0bbff1145b7eb467b6748af618e9d80d6fdcd6aa24964e5a13f885bca8101de08eb0d752927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #107: special case hash", + "NoBenchmark": false + }, + { + "Input": "6b63e9a74e092120160bea3877dace8a2cc7cd0e8426cbfffffffffafc8c3ca85e9b1c5a028070df5728c5c8af9b74e0667afa570a6cfa0114a5039ed15ee06fb1360907e2d9785ead362bb8d7bd661b6c29eeffd3c5037744edaeb9ad990c202927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #108: special case hash", + "NoBenchmark": false + }, + { + "Input": "fc28259702a03845b6d75219444e8b43d094586e249c8699ffffffffe852512e0671a0a85c2b72d54a2fb0990e34538b4890050f5a5712f6d1a7a5fb8578f32edb1846bab6b7361479ab9c3285ca41291808f27fd5bd4fdac720e5854713694c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #109: special case hash", + "NoBenchmark": false + }, + { + "Input": "1273b4502ea4e3bccee044ee8e8db7f774ecbcd52e8ceb571757ffffffffe20a7673f8526748446477dbbb0590a45492c5d7d69859d301abbaedb35b2095103a3dc70ddf9c6b524d886bed9e6af02e0e4dec0d417a414fed3807ef4422913d7c2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #110: special case hash", + "NoBenchmark": false + }, + { + "Input": "08fb565610a79baa0c566c66228d81814f8c53a15b96e602fb49ffffffffff6e7f085441070ecd2bb21285089ebb1aa6450d1a06c36d3ff39dfd657a796d12b5249712012029870a2459d18d47da9aa492a5e6cb4b2d8dafa9e4c5c54a2b9a8b2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #111: special case hash", + "NoBenchmark": false + }, + { + "Input": "d59291cc2cf89f3087715fcb1aa4e79aa2403f748e97d7cd28ecaefeffffffff914c67fb61dd1e27c867398ea7322d5ab76df04bc5aa6683a8e0f30a5d287348fa07474031481dda4953e3ac1959ee8cea7e66ec412b38d6c96d28f6d37304ea2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #112: special case hash", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000004319055358e8617b0c46353d039cdaabffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254ed705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #113: k*G has a large x-coordinate", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000001000000000000000000000000fffffffffffffffffffffffcffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254ed705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #114: r too large", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e3cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #115: r,s are large", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd48240cd81edd91cb6936133508c3915100e81f332c4545d41189b481196851378e05b06e72d4a1bff80ea5db514aa2f93ea6dd6d9c0ae27b7837dc432f9ce89d9", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #116: r and s^-1 have a large Hamming weight", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5b062947356748b0fc17f1704c65aa1dca6e1bfe6779756fa616d91eaad13df2c0b38c17f3d0672e7409cfc5992a99fff12b84a4f8432293b431113f1b2fb579d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #117: r and s^-1 have a large Hamming weight", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000014a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #118: small r and s", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000003091194c1cba17f34e286b4833701606a41cef26177ada8850b601ea1f859e70127242fcec708828758403ce2fe501983a7984e6209f4d6b95db9ad77767f55eb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #120: small r and s", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005103c6ecceff59e71ea8f56fee3a4b2b148e81c2bdbdd39c195812c96dcfb41a72303a193dc591be150b883d770ec51ebb4ebce8b09042c2ecb16c448d8e57bf5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #122: small r and s", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000063b66b829fe604638bcb2bfe8c22228be67390c20111bd2b451468927e87fb6eabc8e59c009361758b274ba2cad36b58fde485a3ed09dade76712fa9e9c4ac212", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #124: small r and s", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255600000000000000000000000000000000000000000000000000000000000000063b66b829fe604638bcb2bfe8c22228be67390c20111bd2b451468927e87fb6eabc8e59c009361758b274ba2cad36b58fde485a3ed09dade76712fa9e9c4ac212", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #126: r is larger than n", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000000000000000000000000000000000000000000000000000000000000005ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd84ff2f6c24e4a33cd71c09fdcbc74a6233961b874b8c8e0eb94582092cbc50c3084fa9547afda5c66335f3f937d4c79afa120486b534139d59ae82d61ead26420", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #127: s is larger than n", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500000000000000000000000000000000000000000000000000000000000001008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea8884b959080bb30859cd53c2fb973cf14d60cdaa8ee00587889b5bc657ac588175a02ce5c1e53cb196113c78b4cb8dc7d360e5ea7850b0f6650b0c45af2c3cd7ca", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #128: small r and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000000000000000000000002d9b4d347952d6ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7adf4083bd6ecbda5a77ae578e5d835fa7f74a07ebb91e0570e1ff32a563354e9925af80b09a167d9ef647df28e2d9acd0d4bc4f2deec5723818edaf9071e311f8", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #129: smallish r and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25000000000000000000000000000000000000001033e67e37b32b445580bf4eff8b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4dc2569a3c9bf8c1838ca821f7ba6f000cc8679d278f3736b414a34a7c956a03770387ea85bc4f28804b4a91c9b7d65bc6434c975806795ab7d441a4e9683aeb09", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #130: 100-bit r and small s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000000000000000000000000000000000000000000000000000000000000100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b4a9f7da2a6c359a16540c271774a6bf1c586357c978256f44a6496d80670968ac496e73a44563f8d56fbd7bb9e4e3ae304c86f2c508eb777b03924755beb40d4", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #131: small r and 100 bit s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2500000000000000000000000000000000000000062522bbd3ecbe7c39e93e7c25ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b874146432b3cd2c9e26204c0a34136996067d466dde4917a8ff23a8e95ca106b709b3d50976ef8b385a813bc35f3a20710bdc6edd465e6f43ac4866703a6608c", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #132: 100-bit r and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d5555555550000000055555555555555553ef7a8e48d07df81a693439654210c707a736d8e326a9ca62bbe25a34ea4e3633b499a96afa7aaa3fcf3fd88f8e07edeb3e45879d8622b93e818443a686e869eeda7bf9ae46aa3eafcc48a5934864627", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #133: r and s^-1 are close to n", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c700000000000000000000000000000000000000000000000000000000000000001e84d9b232e971a43382630f99725e423ec1ecb41e55172e9c69748a03f0d5988618b15b427ad83363bd041ff75fac98ef2ee923714e7d1dfe31753793c7588d4", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #134: s == 1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c700000000000000000000000000000000000000000000000000000000000000000e84d9b232e971a43382630f99725e423ec1ecb41e55172e9c69748a03f0d5988618b15b427ad83363bd041ff75fac98ef2ee923714e7d1dfe31753793c7588d4", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #135: s == 0", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8555555550000000055555555555555553ef7a8e48d07df81a693439654210c700203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de04503434383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #136: point at infinity during verify", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a878d844dc7f16b73b1f2a39730da5d8cd99fe2e70a18482384e37dcd2bfea02e1ed6572e01eb7a8d113d02c666c45ef22d3b9a6a6dea99aa43a8183c26e75d336", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #137: edge case for signature malleability", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a97fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a9dec6c8257dde94110eacc8c09d2e5789cc5beb81a958b02b4d62da9599a7401466fae1614174be63970b83f6524421067b06dd6f4e9c56baca4e344fdd690f1d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #138: edge case for signature malleability", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #139: u1 == 1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c04ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c31f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #140: u1 == n - 1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70555555550000000055555555555555553ef7a8e48d07df81a693439654210c70692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900efa1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #141: u2 == 1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c70aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e100cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #142: u2 == n - 1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd710f8e3edc7c2d5a3fd23de844002bb949d9f794f6d5405f6d97c1bb03dd2bd2b975183b42551cf52f291d5c1921fd5e12f50c8c85a4beb9de03efa3f0f244862243018e6866df922dc313612020311ff21e242ce3fb15bc78c406b25ab43091", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #143: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdedffbc270f722c243069a7e5f40335a61a58525c7b4db2e7a8e269274ffe4e1bc25f1d166f3e211cdf042a26f8abf6094d48b8d17191d74ed71714927446699965d06dd6a88abfa49e8b4c5da6bb922851969adf9604b5accfb52a114e77ccdb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #144: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda25adcae105ed7ff4f95d2344e24ee523314c3e178525d007904b68919ba4d538fe5e88243a76e41a004236218a3c3a2d6eee398a23c3a0b008d7f0164cbc0ca98a20d1bdcf573513c7cfd9b83c63e3a82d40127c897697c86b8cb387af7f240", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #145: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2e4348c645707dce6760d773de3f3e87346924b2f64bd3dd0297e766b5805ebb02148256b530fbc470c7b341970b38243ecee6d5a840a37beca2efb37e8dff2cc0adbea0882482a7489ca703a399864ba987eeb6ddb738af53a83573473cb30d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #146: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd348c673b07dce3920d773de3f3e87408869e916dbcf797d8f9684fb67753d1dca34db012ce6eda1e9c7375c5fcf3e54ed698e19615124273b3a621d021c76f8e777458d6f55a364c221e39e1205d5510bb4fbb7ddf08d8d8fdde13d1d6df7f14", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #147: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6918ce760fb9c7241aee7bc7e7d0e8110d3d22db79ef2fb1f2d09f6ceea7a3b8b97af3fe78be15f2912b6271dd8a43badb6dd2a1b315b2ce7ae37b4e7778041d930d71ee1992d2466495c42102d08e81154c305307d1dcd52d0fa4c479b278e7", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #148: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd73b3c694391d8eadde3f3e874089464715ac20e4c126bbf6d864d648969f5b5a81e7198a3c3f23901cedc7a1d6eff6e9bf81108e6c35cd8559139af3135dbcbb9ef1568530291a8061b90c9f4285eefcba990d4570a4e3b7b737525b5d580034", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #149: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb07ac7a86948c2c2989a16db1930ef1b89ce112595197656877e53c41457f28ab4d792ca121d1dba39cb9de645149c2ab573e8becc6ddff3cc9960f188ddf737f90ba23664153e93262ff73355415195858d7be1315a69456386de68285a3c8", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #150: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd27e4d82cb6c061dd9337c69bf9332ed3d198662d6f2299443f62c861187db648518412b69af43aae084476a68d59bbde51fbfa9e5be80563f587c9c2652f88ef2d3b90d25baa6bdb7b0c55e5240a3a98fbc24afed8523edec1c70503fc10f233", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #151: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde7c5cf3aac2e88923b77850515fff6a12d13b356dfe9ec275c3dd81ae94609a4a08f14a644b9a935dffea4761ebaf592d1f66fe6cd373aa7f5d370af34f8352da54b5bc4025cf335900a914c2934ec2fec7a396d0a7affcad732a5741c7aaaf5", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #152: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc77838df91c1e953e016e10bddffea2317f9fee32bacfe553cede9e57a748f68ccf2296a6a89b62b90739d38af4ae3a20e9f45715b90044639241061e33f8f8caace0046491eeaa1c6e9a472b96d88f4af83e7ff1bb84438c7e058034412ae08", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #153: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8ef071c02383d2a6c02dc217bbffd446730d0318b0425e2586220907f885f97f94b0fc1525bcabf82b1f34895e5819a06c02b23e04002276e165f962c86e3927be7c2ab4d0b25303204fb32a1f8292902792225e16a6d2dbfb29fbc89a9c3376", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #154: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5668aaa0b545bbf9a044a32399ffbe69ce20074e34d7bdf5cf56282a769763965351f37e1de0c88c508527d89882d183ccdcf2efca407edb0627cadfd16de6ec44b4b57cdf960d32ebcc4c97847eed218425853b5b675eb781b766a1a1300349", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #155: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd12d6e56882f6c0027cae91a27127728f7fddf478fb4fdc2b65f40a60b0eb952748bbafc320e6735cb64019710a269c6c2b5d147bdc831325cb2fb276ac971a69d655e9a755bc9d800ad21ee3fd4d980d93a7a49a8c5ccd37005177578f51163", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #156: edge case for u1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a14b3bbd75c5e1c0c36535a934d4ab85112410b3b90fa97a31c33038964fd85cc112f7d837f8f9c36b460d636c965a5f818f2b50c5d00fb3f9705561dd6631883", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #157: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2d823533c04cd8edc6d6f950a8e08ade04a9bafa2f14a590356935671ae9305bf43178d1f88b6a57a96924c265f0ddb75b58312907b195acb59d7797303123775", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #158: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851edb2b3408b3167d91030624c6328e8ce3ec108c105575c2f3d209b92e654bab69c34318139c50b0802c6e612f0fd3189d800df7c996d5d7b7c3d6be82836fa258", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #159: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd66755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf209179ce7c59225392216453b2ac1e9d178c24837dfae26bc1dd7ab60638527425556b42e330289f3b826b2db7a86d19d45c2860a59f2be1ddcc3b691f95a9255", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #160: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd55a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb366901959fb8deda56e5467b7e4b214ea4c2d0c2fb29d70ff19b6b1eccebd6568d7ed9dbd77a918297fd970bff01e1343f6925167db5a14d098a211c39cc3a413398", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #161: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2567f1fdc387e5350c852b4e8f8ba9d6d947e1c5dd7ccc61a5938245dd6bcab3a9960bebaf919514f9535c22eaaf0b5812857970e26662267b1f3eb1011130a11", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #162: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc86003499f974ff4ca6bbb2f51682fd5f51762f9dd6dd2855262660b36d46d3e4bec2f498fae2487807e220119152f0122476c64d4fa46ddce85c4546630f0d5c5e81", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #163: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad32c5c01662cf00c1929596257db13b26ecf30d0f3ec4b9f0351b0f27094473426e986a086060d086eee822ddd2fc744247a0154b57f7a69c51d9fdafa484e4ac7", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #164: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f491d4cba813a04d86dbae94c23be6f52c15774183be7ba5b2d9f3cf010b160501900b8adfea6491019a9ac080d516025a541bf4b952b0ad7be4b1874b02fd544a", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #165: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09ef7fd0a3a36386638330ecad41e1a3b302af36960831d0210c614b948e8aa124ef0d6d800e4047d6d3c1be0fdeaf11fcd8cab5ab59c730eb34116e35a8c7d098", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #166: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4a521dab13cc9152d8ca77035a607fea06c55cc3ca5dbeb868cea92eafe93df2a7bfb9b28531996635e6a5ccaa2826a406ce1111bdb9c2e0ca36500418a2f43de", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #167: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37474d58a4eec16e0d565f2187fe11d4e8e7a2683a12f38b4fc01d1237a81a10976e55f73bb7cdda46bdb67ef77f6fd2969df2b67920fb5945fde3a517a6ded4cd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #168: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa692da5cd4309d9a6e5cb525c37da8fa0879f7b57208cdabbf47d223a5b23a62140e0daa78cfdd207a7389aaed61738b17fc5fc3e6a5ed3397d2902e9125e6ab4", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #169: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f85689b3e0775c7718a90279f14a8082cfcd4d1f1679274f4e9b8805c570a0670167fcc5ca734552e09afa3640f4a034e15b9b7ca661ec7ff70d3f240ebe705b1", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #170: edge case for u2", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed80158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #171: point duplication during verification", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed80158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237ed569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #172: duplication bug", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000000000000000000000000000000000000000000000000000000000000001555555550000000055555555555555553ef7a8e48d07df81a693439654210c7038a084ffccc4ae2f8204be2abca9fb8ad4ab283b2aa50f13b6bb2347adabc69ca699799b77b1cc6dad271e88b899c12931986e958e1f5cf5653dddf7389365e2", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #173: point with x-coordinate 0", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25555555550000000055555555555555553ef7a8e48d07df81a693439654210c703333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9664ce273320d918d8bdb2e61201b4549b36b7cdc54e33b84adb6f2c10aac831e49e68831f18bda2973ac3d76bfbc8c5ee1cceed2dd862e2dc7c915c736cef1f4", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #175: comparison with point at infinity ", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978555555550000000055555555555555553ef7a8e48d07df81a693439654210c70961691a5e960d07a301dbbad4d86247ec27d7089faeb3ddd1add395efff1e0fe7254622cc371866cdf990d2c5377790e37d1f1519817f09a231bd260a9e78aeb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #176: extreme value for k and edgecase s", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc5d283e13ce8ca60da868e3b0fb33e6b4f1074793274e2928250e71e2aca63e9c214dc74fa25371fb4d9e506d418ed9a1bfd6d0c8bb6591d3e0f44505a84886ce", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #177: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa70fc351da038ae0803bd1d86514ae0462f9f8216551d9315aa9d297f792eef6a341c74eed786f2d33da35360ca7aa925e753f00d6077a1e9e5fc339d634019c73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #178: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699783333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaa1e34c8f16d138673fee55c080547c2bfd4de7550065f638322bba9430ce4b60662be9bb512663aa4d7df8ab3f3b4181c5d44a7bdf42436620b7d8a6b81ac936", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #179: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997849249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c1857e1a8a8338d7fd8cf41d322a302d2078a87a23c7186150ed7cda6e52817c1bdfd0a9135a89d21ce821e29014b2898349254d748272b2d4eb8d59ee34c615377f", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #180: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e257cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997816a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb5c19fe227a61abc65c61ee7a018cc9571b2c6f663ea33583f76a686f64be078b7b4a0d734940f613d52bc48673b457c2cf78492490a5cc5606c0541d17b24ddb", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #181: extreme value for k", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296555555550000000055555555555555553ef7a8e48d07df81a693439654210c70db02d1f3421d600e9d9ef9e47419dba3208eed08c2d4189a5db63abeb2739666e0ed26967b9ada9ed7ffe480827f90a0d210d5fd8ec628e31715e6b24125512a", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #182: extreme value for k and edgecase s", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc6222d1962655501893c29e441395b6c05711bd3ed5a0ef72cfab338b88229c4baaae079cb44a1af070362aaa520ee24cac2626423b0bf81af1c54311d8e2fd23", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #183: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa74ccfa24c67f3def7fa81bc99c70bb0419c0952ba599f4c03361da184b04cdca5db76b797f7f41d9c729a2219478a7e629728df870800be8cf6ca7a0a82153bfa", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #184: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2963333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaaea1c72c91034036bac71402b6e9ecc4af3dbde7a99dc574061e99fefff9d84dab7dd057e75b78ac6f56e34eb048f0a9d29d5d055408c90d02bc2ea918c18cb63", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #185: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29649249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185c2879a66d86cb20b820b7795da2da62b38924f7817d1cd350d936988e90e79bc5431a7268ff6931c7a759de024eff90bcb0177216db6fd1f3aaaa11fa3b6a083", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #186: extreme value for k and s^-1", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e256b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29616a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bbab1c0f273f74abc2b848c75006f2ef3c54c26df27711b06558f455079aee0ba3df510f2ecef6d9a05997c776f14ad6456c179f0a13af1771e4d6c37fa48b47f2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #187: extreme value for k", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #188: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #189: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #190: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c26b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "Expected": "", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #191: testing point duplication", + "NoBenchmark": false + }, + { + "Input": "bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b8604aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #269: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e2530e782f964b2e2ff065a051bc7adc20615d8c43a1365713c88268822c253bcce5b16df652aa1ecb2dc8b46c515f9604e2e84cacfa7c6eec30428d2d3f4e08ed504aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #270: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a0177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e204aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #271: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "de47c9b27eb8d300dbb5f2c353e632c393262cf06340c4fa7f1b40c4cbd36f90986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb713dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c04aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #272: pseudorandom signature", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f19b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #288: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f910fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df557374f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #289: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e3541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb556774f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #290: x-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a59f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #291: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f914cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b439638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe33cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #292: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b553cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #293: y-coordinate of the public key has many trailing 0's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f911158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf3466830228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f2855193cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #294: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d3e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a12513363cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #295: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #296: y-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b43dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd1399292829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #297: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f915eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af782c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb52829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #298: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9196843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #299: x-coordinate of the public key has many trailing 1's", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f6402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #300: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dbafffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #301: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #302: x-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb300000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #303: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f916b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f75939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #304: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d00000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #305: x-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9131230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb070f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beffbcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #306: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #307: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f917e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859459450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aabcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #308: y-coordinate of the public key is small", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35689c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #309: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b3472b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #310: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "0000000000000000000000000000000000000000000000000000000000000001", + "Gas": 3450, + "Name": "wycheproof/ecdsa_webcrypto_test.json EcdsaP1363Verify SHA-256 #311: y-coordinate of the public key is large", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a90000000000000000000000000000000000000000000000000000000000000000fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "Expected": "", + "Gas": 3450, + "Name": "invalid public key x param errors", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af0150000000000000000000000000000000000000000000000000000000000000000", + "Expected": "", + "Gas": 3450, + "Name": "invalid public key y param errors", + "NoBenchmark": false + }, + { + "Input": "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f9170bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Expected": "", + "Gas": 3450, + "Name": "reference point errors", + "NoBenchmark": false + } +] \ No newline at end of file diff --git a/crypto/blake2b/blake2b_f_fuzz.go b/crypto/blake2b/blake2b_f_fuzz_test.go similarity index 55% rename from crypto/blake2b/blake2b_f_fuzz.go rename to crypto/blake2b/blake2b_f_fuzz_test.go index b2f4057074..1de9a62de9 100644 --- a/crypto/blake2b/blake2b_f_fuzz.go +++ b/crypto/blake2b/blake2b_f_fuzz_test.go @@ -1,16 +1,24 @@ -//go:build gofuzz -// +build gofuzz +// Only enable fuzzer on platforms with AVX enabled +//go:build go1.7 && amd64 && !gccgo && !appengine +// +build go1.7,amd64,!gccgo,!appengine package blake2b import ( "encoding/binary" + "testing" ) -func Fuzz(data []byte) int { +func Fuzz(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(data) + }) +} + +func fuzz(data []byte) { // Make sure the data confirms to the input model if len(data) != 211 { - return 0 + return } // Parse everything and call all the implementations var ( @@ -21,6 +29,7 @@ func Fuzz(data []byte) int { t [2]uint64 f uint64 ) + for i := 0; i < 8; i++ { offset := 2 + i*8 h[i] = binary.LittleEndian.Uint64(data[offset : offset+8]) @@ -35,24 +44,32 @@ func Fuzz(data []byte) int { if data[210]%2 == 1 { // Avoid spinning the fuzzer to hit 0/1 f = 0xFFFFFFFFFFFFFFFF } + // Run the blake2b compression on all instruction sets and cross reference want := h fGeneric(&want, &m, t[0], t[1], f, uint64(rounds)) have := h - fSSE4(&have, &m, t[0], t[1], f, uint64(rounds)) - if have != want { - panic("SSE4 mismatches generic algo") + if useSSE4 { + fSSE4(&have, &m, t[0], t[1], f, uint64(rounds)) + if have != want { + panic("SSE4 mismatches generic algo") + } } - have = h - fAVX(&have, &m, t[0], t[1], f, uint64(rounds)) - if have != want { - panic("AVX mismatches generic algo") + + if useAVX { + have = h + fAVX(&have, &m, t[0], t[1], f, uint64(rounds)) + if have != want { + panic("AVX mismatches generic algo") + } } - have = h - fAVX2(&have, &m, t[0], t[1], f, uint64(rounds)) - if have != want { - panic("AVX2 mismatches generic algo") + + if useAVX2 { + have = h + fAVX2(&have, &m, t[0], t[1], f, uint64(rounds)) + if have != want { + panic("AVX2 mismatches generic algo") + } } - return 1 } diff --git a/crypto/crypto.go b/crypto/crypto.go index 2492165d38..4d69768bc8 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -29,6 +29,7 @@ import ( "math/big" "os" + "github.com/VictoriaMetrics/fastcache" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/rlp" @@ -47,6 +48,8 @@ const DigestLength = 32 var ( secp256k1N, _ = new(big.Int).SetString("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", 16) secp256k1halfN = new(big.Int).Div(secp256k1N, big.NewInt(2)) + + keccakState256Cache = fastcache.New(100 * 1024 * 1024) ) var errInvalidPubkey = errors.New("invalid secp256k1 public key") @@ -66,31 +69,56 @@ func NewKeccakState() KeccakState { // HashData hashes the provided data using the KeccakState and returns a 32 byte hash func HashData(kh KeccakState, data []byte) (h common.Hash) { + if hash, ok := keccakState256Cache.HasGet(nil, data); ok { + return common.BytesToHash(hash) + } kh.Reset() kh.Write(data) kh.Read(h[:]) + keccakState256Cache.Set(data, h.Bytes()) return h } // Keccak256 calculates and returns the Keccak256 hash of the input data. func Keccak256(data ...[]byte) []byte { + // Only visit cache when input contains only one []byte to reduce cache overhead + // and avoid complexity of cache calculation. + if len(data) == 1 { + if hash, ok := keccakState256Cache.HasGet(nil, data[0]); ok { + return hash + } + } b := make([]byte, 32) d := NewKeccakState() for _, b := range data { d.Write(b) } d.Read(b) + if len(data) == 1 { + keccakState256Cache.Set(data[0], b) + } return b } // Keccak256Hash calculates and returns the Keccak256 hash of the input data, // converting it to an internal Hash data structure. func Keccak256Hash(data ...[]byte) (h common.Hash) { + // Only visit cache when input contains only one []byte to reduce cache overhead + // and avoid complexity of cache calculation. + if len(data) == 1 { + if hash, ok := keccakState256Cache.HasGet(nil, data[0]); ok { + return common.BytesToHash(hash) + } + } + d := NewKeccakState() for _, b := range data { d.Write(b) } d.Read(h[:]) + if len(data) == 1 { + keccakState256Cache.Set(data[0], h.Bytes()) + } return h } diff --git a/crypto/secp256k1/secp256_test.go b/crypto/secp256k1/secp256_test.go index ef2a3a3790..74408d06d2 100644 --- a/crypto/secp256k1/secp256_test.go +++ b/crypto/secp256k1/secp256_test.go @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be found in // the LICENSE file. +//go:build !gofuzz && cgo +// +build !gofuzz,cgo + package secp256k1 import ( diff --git a/crypto/secp256r1/publickey.go b/crypto/secp256r1/publickey.go new file mode 100644 index 0000000000..885a3e1a62 --- /dev/null +++ b/crypto/secp256r1/publickey.go @@ -0,0 +1,21 @@ +package secp256r1 + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "math/big" +) + +// Generates appropriate public key format from given coordinates +func newPublicKey(x, y *big.Int) *ecdsa.PublicKey { + // Check if the given coordinates are valid + if x == nil || y == nil || !elliptic.P256().IsOnCurve(x, y) { + return nil + } + + return &ecdsa.PublicKey{ + Curve: elliptic.P256(), + X: x, + Y: y, + } +} diff --git a/crypto/secp256r1/verifier.go b/crypto/secp256r1/verifier.go new file mode 100644 index 0000000000..ffb4839d8d --- /dev/null +++ b/crypto/secp256r1/verifier.go @@ -0,0 +1,22 @@ +package secp256r1 + +import ( + "crypto/ecdsa" + "math/big" +) + +// Verify verifies the given signature (r, s) for the given hash and public key (x, y). +// It returns true if the signature is valid, false otherwise. +func Verify(hash []byte, r, s, x, y *big.Int) bool { + // Create the public key format + publicKey := newPublicKey(x, y) + + // Check if they are invalid public key coordinates + if publicKey == nil { + return false + } + + // Verify the signature with the public key, + // then return true if it's valid, false otherwise + return ecdsa.Verify(publicKey, hash, r, s) +} diff --git a/crypto/signify/signify_test.go b/crypto/signify/signify_test.go index 9bac2c825f..56195649df 100644 --- a/crypto/signify/signify_test.go +++ b/crypto/signify/signify_test.go @@ -48,7 +48,7 @@ func TestSignify(t *testing.T) { t.Fatal(err) } - err = SignFile(tmpFile.Name(), tmpFile.Name()+".sig", testSecKey, "clé", "croissants") + err = SignFile(tmpFile.Name(), tmpFile.Name()+".sig", testSecKey, "clé", "croissants") //nolint:all if err != nil { t.Fatal(err) } diff --git a/eth/api_backend.go b/eth/api_backend.go index b109dd9a97..ee6b2db9b8 100644 --- a/eth/api_backend.go +++ b/eth/api_backend.go @@ -54,6 +54,10 @@ type EthAPIBackend struct { gpo *gasprice.Oracle } +func (b *EthAPIBackend) ProofKeeper() *core.ProofKeeper { + return b.eth.blockchain.ProofKeeper() +} + // ChainConfig returns the active chain configuration. func (b *EthAPIBackend) ChainConfig() *params.ChainConfig { return b.eth.blockchain.Config() @@ -210,7 +214,7 @@ func (b *EthAPIBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.B } stateDb, err := b.eth.BlockChain().StateAt(header.Root) if err != nil { - return nil, nil, err + return nil, header, err } return stateDb, header, nil } @@ -232,7 +236,7 @@ func (b *EthAPIBackend) StateAndHeaderByNumberOrHash(ctx context.Context, blockN } stateDb, err := b.eth.BlockChain().StateAt(header.Root) if err != nil { - return nil, nil, err + return nil, header, err } return stateDb, header, nil } @@ -254,7 +258,7 @@ func (b *EthAPIBackend) GetTd(ctx context.Context, hash common.Hash) *big.Int { return nil } -func (b *EthAPIBackend) GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockCtx *vm.BlockContext) (*vm.EVM, func() error) { +func (b *EthAPIBackend) GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockCtx *vm.BlockContext) *vm.EVM { if vmConfig == nil { vmConfig = b.eth.blockchain.GetVMConfig() } @@ -265,7 +269,7 @@ func (b *EthAPIBackend) GetEVM(ctx context.Context, msg *core.Message, state *st } else { context = core.NewEVMBlockContext(header, b.eth.BlockChain(), nil, b.eth.blockchain.Config(), state) } - return vm.NewEVM(context, txContext, state, b.eth.blockchain.Config(), *vmConfig), state.Error + return vm.NewEVM(context, txContext, state, b.eth.blockchain.Config(), *vmConfig) } func (b *EthAPIBackend) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { @@ -293,6 +297,9 @@ func (b *EthAPIBackend) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscri } func (b *EthAPIBackend) SendTx(ctx context.Context, signedTx *types.Transaction) error { + if b.ChainConfig().IsOptimism() && signedTx.Type() == types.BlobTxType { + return types.ErrTxTypeNotSupported + } if b.eth.seqRPCService != nil { data, err := signedTx.MarshalBinary() if err != nil { diff --git a/eth/api_debug.go b/eth/api_debug.go index 5dec47de79..7d98e1f98f 100644 --- a/eth/api_debug.go +++ b/eth/api_debug.go @@ -136,7 +136,7 @@ func (api *DebugAPI) GetBadBlocks(ctx context.Context) ([]*BadBlockArgs, error) const AccountRangeMaxResults = 256 // AccountRange enumerates all accounts in the given block and start point in paging request -func (api *DebugAPI) AccountRange(blockNrOrHash rpc.BlockNumberOrHash, start hexutil.Bytes, maxResults int, nocode, nostorage, incompletes bool) (state.IteratorDump, error) { +func (api *DebugAPI) AccountRange(blockNrOrHash rpc.BlockNumberOrHash, start hexutil.Bytes, maxResults int, nocode, nostorage, incompletes bool) (state.Dump, error) { var stateDb *state.StateDB var err error @@ -147,7 +147,7 @@ func (api *DebugAPI) AccountRange(blockNrOrHash rpc.BlockNumberOrHash, start hex // the miner and operate on those _, stateDb = api.eth.miner.Pending() if stateDb == nil { - return state.IteratorDump{}, errors.New("pending state is not available") + return state.Dump{}, errors.New("pending state is not available") } } else { var header *types.Header @@ -161,29 +161,29 @@ func (api *DebugAPI) AccountRange(blockNrOrHash rpc.BlockNumberOrHash, start hex default: block := api.eth.blockchain.GetBlockByNumber(uint64(number)) if block == nil { - return state.IteratorDump{}, fmt.Errorf("block #%d not found", number) + return state.Dump{}, fmt.Errorf("block #%d not found", number) } header = block.Header() } if header == nil { - return state.IteratorDump{}, fmt.Errorf("block #%d not found", number) + return state.Dump{}, fmt.Errorf("block #%d not found", number) } stateDb, err = api.eth.BlockChain().StateAt(header.Root) if err != nil { - return state.IteratorDump{}, err + return state.Dump{}, err } } } else if hash, ok := blockNrOrHash.Hash(); ok { block := api.eth.blockchain.GetBlockByHash(hash) if block == nil { - return state.IteratorDump{}, fmt.Errorf("block %s not found", hash.Hex()) + return state.Dump{}, fmt.Errorf("block %s not found", hash.Hex()) } stateDb, err = api.eth.BlockChain().StateAt(block.Root()) if err != nil { - return state.IteratorDump{}, err + return state.Dump{}, err } } else { - return state.IteratorDump{}, errors.New("either block number or block hash must be specified") + return state.Dump{}, errors.New("either block number or block hash must be specified") } opts := &state.DumpConfig{ @@ -196,7 +196,7 @@ func (api *DebugAPI) AccountRange(blockNrOrHash rpc.BlockNumberOrHash, start hex if maxResults > AccountRangeMaxResults || maxResults <= 0 { opts.Max = AccountRangeMaxResults } - return stateDb.IteratorDump(opts), nil + return stateDb.RawDump(opts), nil } // StorageRangeResult is the result of a debug_storageRangeAt API call. diff --git a/eth/api_debug_test.go b/eth/api_debug_test.go index 3d3444a871..184b90dd09 100644 --- a/eth/api_debug_test.go +++ b/eth/api_debug_test.go @@ -21,6 +21,7 @@ import ( "fmt" "math/big" "reflect" + "strings" "testing" "github.com/davecgh/go-spew/spew" @@ -35,8 +36,8 @@ import ( var dumper = spew.ConfigState{Indent: " "} -func accountRangeTest(t *testing.T, trie *state.Trie, statedb *state.StateDB, start common.Hash, requestedNum int, expectedNum int) state.IteratorDump { - result := statedb.IteratorDump(&state.DumpConfig{ +func accountRangeTest(t *testing.T, trie *state.Trie, statedb *state.StateDB, start common.Hash, requestedNum int, expectedNum int) state.Dump { + result := statedb.RawDump(&state.DumpConfig{ SkipCode: true, SkipStorage: true, OnlyWithAddresses: false, @@ -47,12 +48,12 @@ func accountRangeTest(t *testing.T, trie *state.Trie, statedb *state.StateDB, st if len(result.Accounts) != expectedNum { t.Fatalf("expected %d results, got %d", expectedNum, len(result.Accounts)) } - for address := range result.Accounts { - if address == (common.Address{}) { - t.Fatalf("empty address returned") + for addr, acc := range result.Accounts { + if strings.HasSuffix(addr, "pre") || acc.Address == nil { + t.Fatalf("account without prestate (address) returned: %v", addr) } - if !statedb.Exist(address) { - t.Fatalf("account not found in state %s", address.Hex()) + if !statedb.Exist(*acc.Address) { + t.Fatalf("account not found in state %s", acc.Address.Hex()) } } return result @@ -92,16 +93,16 @@ func TestAccountRange(t *testing.T) { secondResult := accountRangeTest(t, &trie, sdb, common.BytesToHash(firstResult.Next), AccountRangeMaxResults, AccountRangeMaxResults) hList := make([]common.Hash, 0) - for addr1 := range firstResult.Accounts { - // If address is empty, then it makes no sense to compare + for addr1, acc := range firstResult.Accounts { + // If address is non-available, then it makes no sense to compare // them as they might be two different accounts. - if addr1 == (common.Address{}) { + if acc.Address == nil { continue } if _, duplicate := secondResult.Accounts[addr1]; duplicate { t.Fatalf("pagination test failed: results should not overlap") } - hList = append(hList, crypto.Keccak256Hash(addr1.Bytes())) + hList = append(hList, crypto.Keccak256Hash(acc.Address.Bytes())) } // Test to see if it's possible to recover from the middle of the previous // set and get an even split between the first and second sets. @@ -140,7 +141,7 @@ func TestEmptyAccountRange(t *testing.T) { st.Commit(0, true) st, _ = state.New(types.EmptyRootHash, statedb, nil) - results := st.IteratorDump(&state.DumpConfig{ + results := st.RawDump(&state.DumpConfig{ SkipCode: true, SkipStorage: true, OnlyWithAddresses: true, diff --git a/eth/backend.go b/eth/backend.go index 68414efd2e..a1fac9d8b2 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -37,6 +37,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state/pruner" "github.com/ethereum/go-ethereum/core/txpool" + "github.com/ethereum/go-ethereum/core/txpool/blobpool" "github.com/ethereum/go-ethereum/core/txpool/legacypool" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" @@ -60,6 +61,12 @@ import ( "github.com/ethereum/go-ethereum/rpc" ) +const ( + ChainDBNamespace = "eth/db/chaindata/" + JournalFileName = "trie.journal" + ChainData = "chaindata" +) + // Config contains the configuration options of the ETH protocol. // Deprecated: use ethconfig.Config instead. type Config = ethconfig.Config @@ -114,7 +121,7 @@ type Ethereum struct { func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { // Ensure configuration values are compatible and sane if config.SyncMode == downloader.LightSync { - return nil, errors.New("can't run eth.Ethereum in light sync mode, use les.LightEthereum") + return nil, errors.New("can't run eth.Ethereum in light sync mode, light mode has been deprecated") } if !config.SyncMode.IsValid() { return nil, fmt.Errorf("invalid sync mode %d", config.SyncMode) @@ -135,7 +142,8 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { log.Info("Allocated trie memory caches", "clean", common.StorageSize(config.TrieCleanCache)*1024*1024, "dirty", common.StorageSize(config.TrieDirtyCache)*1024*1024) // Assemble the Ethereum object - chainDb, err := stack.OpenDatabaseWithFreezer("chaindata", config.DatabaseCache, config.DatabaseHandles, config.DatabaseFreezer, "eth/db/chaindata/", false) + chainDb, err := stack.OpenDatabaseWithFreezer(ChainData, config.DatabaseCache, config.DatabaseHandles, + config.DatabaseFreezer, ChainDBNamespace, false) if err != nil { return nil, err } @@ -158,6 +166,10 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { if err != nil { return nil, err } + networkID := config.NetworkId + if networkID == 0 { + networkID = chainConfig.ChainID.Uint64() + } eth := &Ethereum{ config: config, merger: consensus.NewMerger(chainDb), @@ -166,7 +178,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { accountManager: stack.AccountManager(), engine: engine, closeBloomHandler: make(chan struct{}), - networkID: config.NetworkId, + networkID: networkID, gasPrice: config.Miner.GasPrice, etherbase: config.Miner.Etherbase, bloomRequests: make(chan chan *bloombits.Retrieval), @@ -176,7 +188,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { nodeCloser: stack.Close, } bcVersion := rawdb.ReadDatabaseVersion(chainDb) - var dbVer = "" + dbVer := "" if bcVersion != nil { dbVer = fmt.Sprintf("%d", *bcVersion) } @@ -191,24 +203,33 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion) } } + + journalFilePath := fmt.Sprintf("%s/%s", stack.ResolvePath(ChainData), JournalFileName) var ( vmConfig = vm.Config{ - EnablePreimageRecording: config.EnablePreimageRecording, - EnableParallelExec: config.ParallelTxMode, - ParallelTxNum: config.ParallelTxNum, + EnablePreimageRecording: config.EnablePreimageRecording, + EnableParallelExec: config.ParallelTxMode, + ParallelTxNum: config.ParallelTxNum, + EnableOpcodeOptimizations: config.EnableOpcodeOptimizing, } cacheConfig = &core.CacheConfig{ - TrieCleanLimit: config.TrieCleanCache, - TrieCleanNoPrefetch: config.NoPrefetch, - TrieDirtyLimit: config.TrieDirtyCache, - TrieDirtyDisabled: config.NoPruning, - TrieTimeLimit: config.TrieTimeout, - SnapshotLimit: config.SnapshotCache, - Preimages: config.Preimages, - StateHistory: config.StateHistory, - StateScheme: scheme, - TrieCommitInterval: config.TrieCommitInterval, - PathSyncFlush: config.PathSyncFlush, + TrieCleanLimit: config.TrieCleanCache, + TrieCleanNoPrefetch: config.NoPrefetch, + TrieDirtyLimit: config.TrieDirtyCache, + TrieDirtyDisabled: config.NoPruning, + TrieTimeLimit: config.TrieTimeout, + SnapshotLimit: config.SnapshotCache, + Preimages: config.Preimages, + NoTries: config.NoTries, + StateHistory: config.StateHistory, + StateScheme: scheme, + TrieCommitInterval: config.TrieCommitInterval, + PathNodeBuffer: config.PathNodeBuffer, + ProposeBlockInterval: config.ProposeBlockInterval, + EnableProofKeeper: config.EnableProofKeeper, + KeepProofBlockSpan: config.KeepProofBlockSpan, + JournalFilePath: journalFilePath, + JournalFile: config.JournalFileEnabled, } ) // Override the chain config with provided settings. @@ -222,7 +243,12 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { if config.OverrideOptimismCanyon != nil { overrides.OverrideOptimismCanyon = config.OverrideOptimismCanyon } - + if config.OverrideOptimismEcotone != nil { + overrides.OverrideOptimismEcotone = config.OverrideOptimismEcotone + } + if config.OverrideOptimismInterop != nil { + overrides.OverrideOptimismInterop = config.OverrideOptimismInterop + } overrides.ApplySuperchainUpgrades = config.ApplySuperchainUpgrades eth.blockchain, err = core.NewBlockChain(chainDb, cacheConfig, config.Genesis, &overrides, eth.engine, vmConfig, eth.shouldPreserve, &config.TransactionHistory) if err != nil { @@ -243,14 +269,18 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { if config.BlobPool.Datadir != "" { config.BlobPool.Datadir = stack.ResolvePath(config.BlobPool.Datadir) } - // blobPool := blobpool.New(config.BlobPool, eth.blockchain) if config.TxPool.Journal != "" { config.TxPool.Journal = stack.ResolvePath(config.TxPool.Journal) } legacyPool := legacypool.New(config.TxPool, eth.blockchain) - eth.txPool, err = txpool.New(new(big.Int).SetUint64(config.TxPool.PriceLimit), eth.blockchain, []txpool.SubPool{legacyPool}) + txPools := []txpool.SubPool{legacyPool} + if !eth.BlockChain().Config().IsOptimism() { + blobPool := blobpool.New(config.BlobPool, eth.blockchain) + txPools = append(txPools, blobPool) + } + eth.txPool, err = txpool.New(new(big.Int).SetUint64(config.TxPool.PriceLimit), eth.blockchain, txPools) if err != nil { return nil, err } @@ -261,7 +291,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { Chain: eth.blockchain, TxPool: eth.txPool, Merger: eth.merger, - Network: config.NetworkId, + Network: networkID, Sync: config.SyncMode, BloomCache: uint64(cacheLimit), EventMux: eth.eventMux, @@ -316,7 +346,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { } // Start the RPC service - eth.netRPCService = ethapi.NewNetAPI(eth.p2pServer, config.NetworkId) + eth.netRPCService = ethapi.NewNetAPI(eth.p2pServer, networkID) // Register the backend on the node stack.RegisterAPIs(eth.APIs()) diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index 69599d8c6c..316d42df1e 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -32,11 +32,19 @@ import ( "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" ) +var ( + forkchoiceUpdateAttributesTimer = metrics.NewRegisteredTimer("api/engine/forkchoiceUpdate/attributes", nil) + forkchoiceUpdateHeadsTimer = metrics.NewRegisteredTimer("api/engine/forkchoiceUpdate/heads", nil) + getPayloadTimer = metrics.NewRegisteredTimer("api/engine/get/payload", nil) + newPayloadTimer = metrics.NewRegisteredTimer("api/engine/new/payload", nil) +) + // Register adds the engine API to the full node. func Register(stack *node.Node, backend *eth.Ethereum) error { log.Warn("Engine API enabled", "protocol", "eth") @@ -228,6 +236,8 @@ func checkAttribute(active func(*big.Int, uint64) bool, exists bool, block *big. } func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { + start := time.Now() + api.forkchoiceLock.Lock() defer api.forkchoiceLock.Unlock() @@ -398,8 +408,12 @@ func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payl return valid(nil), engine.InvalidPayloadAttributes.With(err) } api.localBlocks.put(id, payload) + forkchoiceUpdateAttributesTimer.UpdateSince(start) + log.Debug("forkchoiceUpdateAttributesTimer", "duration", common.PrettyDuration(time.Since(start)), "id", id) return valid(&id), nil } + forkchoiceUpdateHeadsTimer.UpdateSince(start) + log.Debug("forkchoiceUpdateAttributesTimer", "duration", common.PrettyDuration(time.Since(start)), "hash", update.HeadBlockHash) return valid(nil), nil } @@ -453,6 +467,11 @@ func (api *ConsensusAPI) GetPayloadV3(payloadID engine.PayloadID) (*engine.Execu } func (api *ConsensusAPI) getPayload(payloadID engine.PayloadID, full bool) (*engine.ExecutionPayloadEnvelope, error) { + start := time.Now() + defer func () { + getPayloadTimer.UpdateSince(start) + log.Debug("getPayloadTimer", "duration", common.PrettyDuration(time.Since(start)), "id", payloadID) + } () log.Trace("Engine API request received", "method", "GetPayload", "id", payloadID) data := api.localBlocks.get(payloadID, full) if data == nil { @@ -507,6 +526,12 @@ func (api *ConsensusAPI) NewPayloadV3(params engine.ExecutableData, versionedHas } func (api *ConsensusAPI) newPayload(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash) (engine.PayloadStatusV1, error) { + start := time.Now() + defer func () { + newPayloadTimer.UpdateSince(start) + log.Debug("newPayloadTimer", "duration", common.PrettyDuration(time.Since(start)), "parentHash", params.ParentHash) + } () + // The locking here is, strictly, not required. Without these locks, this can happen: // // 1. NewPayload( execdata-N ) is invoked from the CL. It goes all the way down to @@ -625,7 +650,8 @@ func (api *ConsensusAPI) delayPayloadImport(block *types.Block) (engine.PayloadS // Although we don't want to trigger a sync, if there is one already in // progress, try to extend if with the current payload request to relieve // some strain from the forkchoice update. - if err := api.eth.Downloader().BeaconExtend(api.eth.SyncMode(), block.Header()); err == nil { + err := api.eth.Downloader().BeaconExtend(api.eth.SyncMode(), block.Header()) + if err == nil { log.Debug("Payload accepted for sync extension", "number", block.NumberU64(), "hash", block.Hash()) return engine.PayloadStatusV1{Status: engine.SYNCING}, nil } @@ -637,12 +663,12 @@ func (api *ConsensusAPI) delayPayloadImport(block *types.Block) (engine.PayloadS // In full sync mode, failure to import a well-formed block can only mean // that the parent state is missing and the syncer rejected extending the // current cycle with the new payload. - log.Warn("Ignoring payload with missing parent", "number", block.NumberU64(), "hash", block.Hash(), "parent", block.ParentHash()) + log.Warn("Ignoring payload with missing parent", "number", block.NumberU64(), "hash", block.Hash(), "parent", block.ParentHash(), "reason", err) } else { // In non-full sync mode (i.e. snap sync) all payloads are rejected until // snap sync terminates as snap sync relies on direct database injections // and cannot afford concurrent out-if-band modifications via imports. - log.Warn("Ignoring payload while snap syncing", "number", block.NumberU64(), "hash", block.Hash()) + log.Warn("Ignoring payload while snap syncing", "number", block.NumberU64(), "hash", block.Hash(), "reason", err) } return engine.PayloadStatusV1{Status: engine.SYNCING}, nil } diff --git a/eth/catalyst/api_test.go b/eth/catalyst/api_test.go index 7a8330f4df..cbf744cd6d 100644 --- a/eth/catalyst/api_test.go +++ b/eth/catalyst/api_test.go @@ -115,6 +115,8 @@ func TestEth2AssembleBlock(t *testing.T) { t.Fatalf("error signing transaction, err=%v", err) } ethservice.TxPool().Add([]*types.Transaction{tx}, true, false) + // we wait for the tx to be promoted into pending list in the txpool + time.Sleep(500 * time.Millisecond) blockParams := engine.PayloadAttributes{ Timestamp: blocks[9].Time() + 5, } @@ -152,6 +154,8 @@ func TestEth2AssembleBlockWithAnotherBlocksTxs(t *testing.T) { // Put the 10th block's tx in the pool and produce a new block txs := blocks[9].Transactions() api.eth.TxPool().Add(txs, false, true) + // we wait for the tx to be promoted into pending list in the txpool + time.Sleep(500 * time.Millisecond) blockParams := engine.PayloadAttributes{ Timestamp: blocks[8].Time() + 5, } @@ -192,6 +196,8 @@ func TestEth2PrepareAndGetPayload(t *testing.T) { // Put the 10th block's tx in the pool and produce a new block txs := blocks[9].Transactions() ethservice.TxPool().Add(txs, true, false) + // we wait for the txs to be promoted into pending list in the txpool + time.Sleep(500 * time.Millisecond) blockParams := engine.PayloadAttributes{ Timestamp: blocks[8].Time() + 5, } @@ -316,6 +322,9 @@ func TestEth2NewBlock(t *testing.T) { tx, _ := types.SignTx(types.NewContractCreation(nonce, new(big.Int), 1000000, big.NewInt(2*params.InitialBaseFee), logCode), types.LatestSigner(ethservice.BlockChain().Config()), testKey) ethservice.TxPool().Add([]*types.Transaction{tx}, true, false) + //we wait for the tx to be promoted into pending list in the txpool + time.Sleep(500 * time.Millisecond) + execData, err := assembleWithTransactions(api, parent.Hash(), &engine.PayloadAttributes{ Timestamp: parent.Time() + 5, }, 1) @@ -489,6 +498,8 @@ func TestFullAPI(t *testing.T) { nonce := statedb.GetNonce(testAddr) tx, _ := types.SignTx(types.NewContractCreation(nonce, new(big.Int), 1000000, big.NewInt(2*params.InitialBaseFee), logCode), types.LatestSigner(ethservice.BlockChain().Config()), testKey) ethservice.TxPool().Add([]*types.Transaction{tx}, true, false) + // we wait for the tx to be promoted into pending list in the txpool + time.Sleep(500 * time.Millisecond) } setupBlocks(t, ethservice, 10, parent, callback, nil) @@ -615,6 +626,8 @@ func TestNewPayloadOnInvalidChain(t *testing.T) { Data: logCode, }) ethservice.TxPool().Add([]*types.Transaction{tx}, false, true) + // we wait for the tx to be promoted into pending list in the txpool + time.Sleep(500 * time.Millisecond) var ( params = engine.PayloadAttributes{ Timestamp: parent.Time + 1, @@ -1286,8 +1299,8 @@ func TestNilWithdrawals(t *testing.T) { func setupBodies(t *testing.T) (*node.Node, *eth.Ethereum, []*types.Block) { genesis, blocks := generateMergeChain(10, true) // enable shanghai on the last block - time := blocks[len(blocks)-1].Header().Time + 1 - genesis.Config.ShanghaiTime = &time + blocktime := blocks[len(blocks)-1].Header().Time + 1 + genesis.Config.ShanghaiTime = &blocktime n, ethservice := startEthService(t, genesis, blocks) var ( @@ -1301,6 +1314,8 @@ func setupBodies(t *testing.T) (*node.Node, *eth.Ethereum, []*types.Block) { nonce := statedb.GetNonce(testAddr) tx, _ := types.SignTx(types.NewContractCreation(nonce, new(big.Int), 1000000, big.NewInt(2*params.InitialBaseFee), logCode), types.LatestSigner(ethservice.BlockChain().Config()), testKey) ethservice.TxPool().Add([]*types.Transaction{tx}, false, false) + // we wait for the tx to be promoted into pending list in the txpool + time.Sleep(500 * time.Millisecond) } withdrawals := make([][]*types.Withdrawal, 10) @@ -1577,7 +1592,7 @@ func TestBlockToPayloadWithBlobs(t *testing.T) { // This checks that beaconRoot is applied to the state from the engine API. func TestParentBeaconBlockRoot(t *testing.T) { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(colorable.NewColorableStderr(), log.LevelTrace, true))) genesis, blocks := generateMergeChain(10, true) diff --git a/eth/catalyst/simulated_beacon.go b/eth/catalyst/simulated_beacon.go index dfbb42878c..b0b13d32cd 100644 --- a/eth/catalyst/simulated_beacon.go +++ b/eth/catalyst/simulated_beacon.go @@ -82,10 +82,6 @@ type SimulatedBeacon struct { } func NewSimulatedBeacon(period uint64, eth *eth.Ethereum) (*SimulatedBeacon, error) { - chainConfig := eth.APIBackend.ChainConfig() - if !chainConfig.IsDevMode { - return nil, errors.New("incompatible pre-existing chain configuration") - } block := eth.BlockChain().CurrentBlock() current := engine.ForkchoiceStateV1{ HeadBlockHash: block.Hash(), diff --git a/eth/catalyst/simulated_beacon_test.go b/eth/catalyst/simulated_beacon_test.go index 0df195fb9d..6fa97ad87a 100644 --- a/eth/catalyst/simulated_beacon_test.go +++ b/eth/catalyst/simulated_beacon_test.go @@ -85,7 +85,7 @@ func TestSimulatedBeaconSendWithdrawals(t *testing.T) { // short period (1 second) for testing purposes var gasLimit uint64 = 10_000_000 - genesis := core.DeveloperGenesisBlock(gasLimit, testAddr) + genesis := core.DeveloperGenesisBlock(gasLimit, &testAddr) node, ethService, mock := startSimulatedBeaconEthService(t, genesis) _ = mock defer node.Close() diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index 2ca7e328c6..3f39b19485 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -156,6 +156,9 @@ type Downloader struct { syncStartBlock uint64 // Head snap block when Geth was started syncStartTime time.Time // Time instance when chain sync started syncLogTime time.Time // Time instance when status was last reported + + // Chain ID for downloaders to reference + chainID uint64 } // LightChain encapsulates functions required to synchronise a light chain. @@ -216,7 +219,7 @@ type BlockChain interface { } // New creates a new downloader to fetch hashes and blocks from remote peers. -func New(stateDb ethdb.Database, mux *event.TypeMux, chain BlockChain, lightchain LightChain, dropPeer peerDropFn, success func()) *Downloader { +func New(stateDb ethdb.Database, mux *event.TypeMux, chain BlockChain, lightchain LightChain, dropPeer peerDropFn, success func(), chainID uint64) *Downloader { if lightchain == nil { lightchain = chain } @@ -233,6 +236,7 @@ func New(stateDb ethdb.Database, mux *event.TypeMux, chain BlockChain, lightchai SnapSyncer: snap.NewSyncer(stateDb, chain.TrieDB().Scheme()), stateSyncStart: make(chan *stateSync), syncStartBlock: chain.CurrentSnapBlock().Number.Uint64(), + chainID: chainID, } // Create the post-merge skeleton syncer and start the process dl.skeleton = newSkeleton(stateDb, dl.peers, dropPeer, newBeaconBackfiller(dl, success)) @@ -576,7 +580,7 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td, ttd * // For non-merged networks, if there is a checkpoint available, then calculate // the ancientLimit through that. Otherwise calculate the ancient limit through // the advertised height of the remote peer. This most is mostly a fallback for - // legacy networks, but should eventually be droppped. TODO(karalabe). + // legacy networks, but should eventually be dropped. TODO(karalabe). if beaconMode { // Beacon sync, use the latest finalized block as the ancient limit // or a reasonable height if no finalized block is yet announced. @@ -1718,7 +1722,7 @@ func (d *Downloader) commitSnapSyncData(results []*fetchResult, stateSync *state receipts := make([]types.Receipts, len(results)) for i, result := range results { blocks[i] = types.NewBlockWithHeader(result.Header).WithBody(result.Transactions, result.Uncles).WithWithdrawals(result.Withdrawals) - receipts[i] = result.Receipts + receipts[i] = correctReceipts(result.Receipts, result.Transactions, blocks[i].NumberU64(), d.chainID) } if index, err := d.blockchain.InsertReceiptChain(blocks, receipts, d.ancientLimit); err != nil { log.Debug("Downloaded item processing failed", "number", results[index].Header.Number, "hash", results[index].Header.Hash(), "err", err) diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index 092435a033..df086a09d5 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -81,7 +81,7 @@ func newTesterWithNotification(t *testing.T, success func()) *downloadTester { chain: chain, peers: make(map[string]*downloadTesterPeer), } - tester.downloader = New(db, new(event.TypeMux), tester.chain, nil, tester.dropPeer, success) + tester.downloader = New(db, new(event.TypeMux), tester.chain, nil, tester.dropPeer, success, 0) return tester } diff --git a/eth/downloader/queue_test.go b/eth/downloader/queue_test.go index a8b1b45e00..50b9031a27 100644 --- a/eth/downloader/queue_test.go +++ b/eth/downloader/queue_test.go @@ -20,6 +20,7 @@ import ( "fmt" "math/big" "math/rand" + "os" "sync" "testing" "time" @@ -31,6 +32,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" + "golang.org/x/exp/slog" ) // makeChain creates a chain of n blocks starting at and including parent. @@ -271,7 +273,7 @@ func XTestDelivery(t *testing.T) { world.chain = blo world.progress(10) if false { - log.Root().SetHandler(log.StdoutHandler) + log.SetDefault(log.NewLogger(slog.NewTextHandler(os.Stdout, nil))) } q := newQueue(10, 10) var wg sync.WaitGroup diff --git a/eth/downloader/receiptreference.go b/eth/downloader/receiptreference.go new file mode 100644 index 0000000000..b4c5623ddc --- /dev/null +++ b/eth/downloader/receiptreference.go @@ -0,0 +1,144 @@ +package downloader + +import ( + "bytes" + "embed" + "encoding/gob" + "fmt" + "path" + "strings" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" +) + +// userDepositNonces is a struct to hold the reference data for user deposits +// The reference data is used to correct the deposit nonce in the receipts +type userDepositNonces struct { + ChainID uint64 + First uint64 + Last uint64 // non inclusive + Results map[uint64][]uint64 +} + +var ( + systemAddress = common.HexToAddress("0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001") + receiptReferencePath = "userDepositData" + //go:embed userDepositData/*.gob + receiptReference embed.FS + userDepositNoncesAlreadySearched = map[uint64]bool{} + userDepositNoncesReference = map[uint64]userDepositNonces{} +) + +// lazy load the reference data for the requested chain +// if this chain data was already requested, returns early +func initReceiptReferences(chainID uint64) { + // if already loaded, return + if userDepositNoncesAlreadySearched[chainID] { + return + } + // look for a file prefixed by the chainID + fPrefix := fmt.Sprintf("%d.", chainID) + files, err := receiptReference.ReadDir(receiptReferencePath) + if err != nil { + log.Warn("Receipt Correction: Failed to read reference directory", "err", err) + return + } + // mark as loaded so we don't try again, even if no files match + userDepositNoncesAlreadySearched[chainID] = true + for _, file := range files { + // skip files which don't match the prefix + if !strings.HasPrefix(file.Name(), fPrefix) { + continue + } + fpath := path.Join(receiptReferencePath, file.Name()) + bs, err := receiptReference.ReadFile(fpath) + if err != nil { + log.Warn("Receipt Correction: Failed to read reference data", "err", err) + continue + } + udns := userDepositNonces{} + err = gob.NewDecoder(bytes.NewReader(bs)).Decode(&udns) + if err != nil { + log.Warn("Receipt Correction: Failed to decode reference data", "err", err) + continue + } + userDepositNoncesReference[udns.ChainID] = udns + return + } +} + +// correctReceipts corrects the deposit nonce in the receipts using the reference data +// prior to Canyon Hard Fork, DepositNonces were not cryptographically verifiable. +// As a consequence, the deposit nonces found during Snap Sync may be incorrect. +// This function inspects transaction data for user deposits, and if it is found to be incorrect, it is corrected. +// The data used to correct the deposit nonce is stored in the userDepositData directory, +// and was generated with the receipt reference tool in the optimism monorepo. +func correctReceipts(receipts types.Receipts, transactions types.Transactions, blockNumber uint64, chainID uint64) types.Receipts { + initReceiptReferences(chainID) + // if there is no data even after initialization, return the receipts as is + depositNoncesForChain, ok := userDepositNoncesReference[chainID] + if !ok { + log.Trace("Receipt Correction: No data source for chain", "chainID", chainID) + return receipts + } + + // check that the block number being examined is within the range of the reference data + if blockNumber < depositNoncesForChain.First || blockNumber > depositNoncesForChain.Last { + log.Trace("Receipt Correction: Block is out of range for receipt reference", + "blockNumber", blockNumber, + "start", depositNoncesForChain.First, + "end", depositNoncesForChain.Last) + return receipts + } + + // get the block nonces + blockNonces, ok := depositNoncesForChain.Results[blockNumber] + if !ok { + log.Trace("Receipt Correction: Block does not contain user deposits", "blockNumber", blockNumber) + return receipts + } + + // iterate through the receipts and transactions to correct the deposit nonce + // user deposits should always be at the front of the block, but we will check all transactions to be sure + udCount := 0 + for i := 0; i < len(receipts); i++ { + r := receipts[i] + tx := transactions[i] + from, err := types.Sender(types.LatestSignerForChainID(tx.ChainId()), tx) + if err != nil { + log.Warn("Receipt Correction: Failed to determine sender", "err", err) + continue + } + // break as soon as a non deposit is found + if r.Type != types.DepositTxType { + break + } + // ignore any transactions from the system address + if from != systemAddress { + // prevent index out of range (indicates a problem with the reference data or the block data) + if udCount >= len(blockNonces) { + log.Warn("Receipt Correction: More user deposits in block than included in reference data", "in_reference", len(blockNonces)) + break + } + nonce := blockNonces[udCount] + udCount++ + log.Trace("Receipt Correction: User Deposit detected", "address", from, "nonce", nonce) + if nonce != *r.DepositNonce { + // correct the deposit nonce + // warn because this should not happen unless the data was modified by corruption or a malicious peer + // by correcting the nonce, the entire block is still valid for use + log.Warn("Receipt Correction: Corrected deposit nonce", "nonce", *r.DepositNonce, "corrected", nonce) + r.DepositNonce = &nonce + } + } + } + // check for unused reference data (indicates a problem with the reference data or the block data) + if udCount < len(blockNonces) { + log.Warn("Receipt Correction: More user deposits in reference data than found in block", "in_reference", len(blockNonces), "in_block", udCount) + } + + log.Trace("Receipt Correction: Completed", "blockNumber", blockNumber, "userDeposits", udCount, "receipts", len(receipts), "transactions", len(transactions)) + return receipts +} diff --git a/eth/downloader/receiptreference_test.go b/eth/downloader/receiptreference_test.go new file mode 100644 index 0000000000..85bc4e1aaa --- /dev/null +++ b/eth/downloader/receiptreference_test.go @@ -0,0 +1,108 @@ +package downloader + +import ( + "testing" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/stretchr/testify/assert" +) + +// makeCorrection is a helper function to create a slice of receipts and a slice of corrected receipts +func makeCorrection(bn uint64, cid uint64, ns []uint64, ty []uint8) (types.Receipts, types.Receipts) { + receipts := make(types.Receipts, len(ns)) + correctedReceipts := make(types.Receipts, len(ns)) + transactions := make(types.Transactions, len(ns)) + for i := range ns { + receipts[i] = &types.Receipt{Type: ty[i], DepositNonce: &ns[i]} + correctedReceipts[i] = &types.Receipt{Type: ty[i], DepositNonce: &ns[i]} + transactions[i] = types.NewTx(&types.DepositTx{}) + } + + correctedReceipts = correctReceipts(correctedReceipts, transactions, bn, cid) + + return receipts, correctedReceipts +} + +func TestCorrectReceipts(t *testing.T) { + type testcase struct { + blockNum uint64 + chainID uint64 + nonces []uint64 + txTypes []uint8 + validate func(types.Receipts, types.Receipts) + } + + // Tests use the real reference data, so block numbers and chainIDs are selected for different test cases + testcases := []testcase{ + // Test case 1: No receipts + { + blockNum: 6825767, + chainID: 420, + nonces: []uint64{}, + txTypes: []uint8{}, + validate: func(receipts types.Receipts, correctedReceipts types.Receipts) { + assert.Empty(t, correctedReceipts) + }, + }, + // Test case 2: No deposits + { + blockNum: 6825767, + chainID: 420, + nonces: []uint64{1, 2, 3}, + txTypes: []uint8{1, 1, 1}, + validate: func(receipts types.Receipts, correctedReceipts types.Receipts) { + assert.Equal(t, receipts, correctedReceipts) + }, + }, + // Test case 3: all deposits with no correction + { + blockNum: 8835769, + chainID: 420, + nonces: []uint64{78756, 78757, 78758, 78759, 78760, 78761, 78762, 78763, 78764}, + txTypes: []uint8{126, 126, 126, 126, 126, 126, 126, 126, 126}, + validate: func(receipts types.Receipts, correctedReceipts types.Receipts) { + assert.Equal(t, receipts, correctedReceipts) + }, + }, + // Test case 4: all deposits with a correction + { + blockNum: 8835769, + chainID: 420, + nonces: []uint64{78756, 78757, 78758, 12345, 78760, 78761, 78762, 78763, 78764}, + txTypes: []uint8{126, 126, 126, 126, 126, 126, 126, 126, 126}, + validate: func(receipts types.Receipts, correctedReceipts types.Receipts) { + assert.NotEqual(t, receipts[3], correctedReceipts[3]) + for i := range receipts { + if i != 3 { + assert.Equal(t, receipts[i], correctedReceipts[i]) + } + } + }, + }, + // Test case 5: deposits with several corrections and non-deposits + { + blockNum: 8835769, + chainID: 420, + nonces: []uint64{0, 1, 2, 78759, 78760, 78761, 6, 78763, 78764, 9, 10, 11}, + txTypes: []uint8{126, 126, 126, 126, 126, 126, 126, 126, 126, 1, 1, 1}, + validate: func(receipts types.Receipts, correctedReceipts types.Receipts) { + // indexes 0, 1, 2, 6 were modified + // indexes 9, 10, 11 were added too, but they are not user deposits + assert.NotEqual(t, receipts[0], correctedReceipts[0]) + assert.NotEqual(t, receipts[1], correctedReceipts[1]) + assert.NotEqual(t, receipts[2], correctedReceipts[2]) + assert.NotEqual(t, receipts[6], correctedReceipts[6]) + for i := range receipts { + if i != 0 && i != 1 && i != 2 && i != 6 { + assert.Equal(t, receipts[i], correctedReceipts[i]) + } + } + }, + }, + } + + for _, tc := range testcases { + receipts, correctedReceipts := makeCorrection(tc.blockNum, tc.chainID, tc.nonces, tc.txTypes) + tc.validate(receipts, correctedReceipts) + } +} diff --git a/eth/downloader/resultstore.go b/eth/downloader/resultstore.go index 7f7f5a89e2..e4323c04eb 100644 --- a/eth/downloader/resultstore.go +++ b/eth/downloader/resultstore.go @@ -142,7 +142,7 @@ func (r *resultStore) HasCompletedItems() bool { // countCompleted returns the number of items ready for delivery, stopping at // the first non-complete item. // -// The mthod assumes (at least) rlock is held. +// The method assumes (at least) rlock is held. func (r *resultStore) countCompleted() int { // We iterate from the already known complete point, and see // if any more has completed since last count diff --git a/eth/downloader/skeleton.go b/eth/downloader/skeleton.go index b3edda7a0c..0962fd89f0 100644 --- a/eth/downloader/skeleton.go +++ b/eth/downloader/skeleton.go @@ -70,9 +70,17 @@ var errSyncReorged = errors.New("sync reorged") // might still be propagating. var errTerminated = errors.New("terminated") -// errReorgDenied is returned if an attempt is made to extend the beacon chain -// with a new header, but it does not link up to the existing sync. -var errReorgDenied = errors.New("non-forced head reorg denied") +// errChainReorged is an internal helper error to signal that the header chain +// of the current sync cycle was (partially) reorged. +var errChainReorged = errors.New("chain reorged") + +// errChainGapped is an internal helper error to signal that the header chain +// of the current sync cycle is gaped with the one advertised by consensus client. +var errChainGapped = errors.New("chain gapped") + +// errChainForked is an internal helper error to signal that the header chain +// of the current sync cycle is forked with the one advertised by consensus client. +var errChainForked = errors.New("chain forked") // maxBlockNumGapTolerance is the max gap tolerance by peer var maxBlockNumGapTolerance = uint64(30) @@ -275,9 +283,9 @@ func (s *skeleton) startup() { newhead, err := s.sync(head) switch { case err == errSyncLinked: - // Sync cycle linked up to the genesis block. Tear down the loop - // and restart it so, it can properly notify the backfiller. Don't - // account a new head. + // Sync cycle linked up to the genesis block, or the existent chain + // segment. Tear down the loop and restart it so, it can properly + // notify the backfiller. Don't account a new head. head = nil case err == errSyncMerged: @@ -461,15 +469,16 @@ func (s *skeleton) sync(head *types.Header) (*types.Header, error) { // we don't seamlessly integrate reorgs to keep things simple. If the // network starts doing many mini reorgs, it might be worthwhile handling // a limited depth without an error. - if reorged := s.processNewHead(event.header, event.final, event.force); reorged { + if err := s.processNewHead(event.header, event.final); err != nil { // If a reorg is needed, and we're forcing the new head, signal // the syncer to tear down and start over. Otherwise, drop the // non-force reorg. if event.force { event.errc <- nil // forced head reorg accepted + log.Info("Restarting sync cycle", "reason", err) return event.header, errSyncReorged } - event.errc <- errReorgDenied + event.errc <- err continue } event.errc <- nil // head extension accepted @@ -614,7 +623,7 @@ func (s *skeleton) saveSyncStatus(db ethdb.KeyValueWriter) { // accepts and integrates it into the skeleton or requests a reorg. Upon reorg, // the syncer will tear itself down and restart with a fresh head. It is simpler // to reconstruct the sync state than to mutate it and hope for the best. -func (s *skeleton) processNewHead(head *types.Header, final *types.Header, force bool) bool { +func (s *skeleton) processNewHead(head *types.Header, final *types.Header) error { // If a new finalized block was announced, update the sync process independent // of what happens with the sync head below if final != nil { @@ -635,26 +644,17 @@ func (s *skeleton) processNewHead(head *types.Header, final *types.Header, force // once more, ignore it instead of tearing down sync for a noop. if lastchain.Head == lastchain.Tail { if current := rawdb.ReadSkeletonHeader(s.db, number); current.Hash() == head.Hash() { - return false + return nil } } // Not a noop / double head announce, abort with a reorg - if force { - log.Warn("Beacon chain reorged", "tail", lastchain.Tail, "head", lastchain.Head, "newHead", number) - } - return true + return fmt.Errorf("%w, tail: %d, head: %d, newHead: %d", errChainReorged, lastchain.Tail, lastchain.Head, number) } if lastchain.Head+1 < number { - if force { - log.Warn("Beacon chain gapped", "head", lastchain.Head, "newHead", number) - } - return true + return fmt.Errorf("%w, head: %d, newHead: %d", errChainGapped, lastchain.Head, number) } if parent := rawdb.ReadSkeletonHeader(s.db, number-1); parent.Hash() != head.ParentHash { - if force { - log.Warn("Beacon chain forked", "ancestor", number-1, "hash", parent.Hash(), "want", head.ParentHash) - } - return true + return fmt.Errorf("%w, ancestor: %d, hash: %s, want: %s", errChainForked, number-1, parent.Hash(), head.ParentHash) } // New header seems to be in the last subchain range. Unwind any extra headers // from the chain tip and insert the new head. We won't delete any trimmed @@ -670,7 +670,7 @@ func (s *skeleton) processNewHead(head *types.Header, final *types.Header, force if err := batch.Write(); err != nil { log.Crit("Failed to write skeleton sync status", "err", err) } - return false + return nil } // assignTasks attempts to match idle peers to pending header retrievals. diff --git a/eth/downloader/skeleton_test.go b/eth/downloader/skeleton_test.go index c31007765a..aceadd00d3 100644 --- a/eth/downloader/skeleton_test.go +++ b/eth/downloader/skeleton_test.go @@ -434,7 +434,7 @@ func TestSkeletonSyncExtend(t *testing.T) { newstate: []*subchain{ {Head: 49, Tail: 49}, }, - err: errReorgDenied, + err: errChainReorged, }, // Initialize a sync and try to extend it with a number-wise sequential // header, but a hash wise non-linking one. @@ -444,7 +444,7 @@ func TestSkeletonSyncExtend(t *testing.T) { newstate: []*subchain{ {Head: 49, Tail: 49}, }, - err: errReorgDenied, + err: errChainForked, }, // Initialize a sync and try to extend it with a non-linking future block. { @@ -453,7 +453,7 @@ func TestSkeletonSyncExtend(t *testing.T) { newstate: []*subchain{ {Head: 49, Tail: 49}, }, - err: errReorgDenied, + err: errChainGapped, }, // Initialize a sync and try to extend it with a past canonical block. { @@ -462,7 +462,7 @@ func TestSkeletonSyncExtend(t *testing.T) { newstate: []*subchain{ {Head: 50, Tail: 50}, }, - err: errReorgDenied, + err: errChainReorged, }, // Initialize a sync and try to extend it with a past sidechain block. { @@ -471,7 +471,7 @@ func TestSkeletonSyncExtend(t *testing.T) { newstate: []*subchain{ {Head: 50, Tail: 50}, }, - err: errReorgDenied, + err: errChainReorged, }, } for i, tt := range tests { @@ -487,7 +487,7 @@ func TestSkeletonSyncExtend(t *testing.T) { skeleton.Sync(tt.head, nil, true) <-wait - if err := skeleton.Sync(tt.extend, nil, false); err != tt.err { + if err := skeleton.Sync(tt.extend, nil, false); !errors.Is(err, tt.err) { t.Errorf("test %d: extension failure mismatch: have %v, want %v", i, err, tt.err) } skeleton.Terminate() diff --git a/eth/downloader/userDepositData/10.105235063-114696812.gob b/eth/downloader/userDepositData/10.105235063-114696812.gob new file mode 100644 index 0000000000000000000000000000000000000000..f26643825f272cf945fc71c953265bac6336f40a GIT binary patch literal 833023 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�Dfh#uc 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�QYG?dDo2V1foZ#HYo}j{?SfpwxD=N*n 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 FSZj@ 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Ħ>uJ*END>j43u+@hh+1xyYiXq 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

LDPSM*VhK8iM6MsJl*86OU2>T7ff}GjU$OX9 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 z zhKKNeqM;M<_O=6GK~qoyL(N~zNI*}Ft}Ob5gx(N=9R z+&oYZq=L40wFYVD;HRoET-8NWPdBU!N@7=*?ZoewUxHlcg061lIVI#Gy{Ygr+>K18 z8t#M518xbM7jYT#9PpcHP{YizVL%zPz7PW|e!UuU;5cw9+%!s-9F9(0(jVm@^~ z=wvJSHNk`a5_SPk-l+cOhJbY+Bp_z2p^7jYF+^$wD36S$q+|3}UgHx4HB zIK~?1*olok3aY$nMoeyN4Qqb(=NiCE)03kZ>vI6@T!9iQAFFZBrjmQU!n)!rm%3>8s=_4iQW1?1%<9)Jy#+{IZFH{?WoQ;Cvr-W z4H2LQr!&qmi{72u>|mEJ=pgL!`Xrv~f1j-TOc>WpgIxRkG)SvC3jC0NR;jG_RQ_|C(f&Ca^{wj!xv;;ukf5IMSU& z+qhrUzqn)x8TdQtvY3SV#OkOPKWX z5BGR0d2iHEYT%)JXxqX5%$k;h4y#mB4~Np*nCukXQ}UVKU8;b7ZlH}vc>z=Tw{6?- z_R1=O%=k*oxDK8{Z>Kusv#IAmVZ=ej2iZ&RWcYnV#>EbYUjqw3KNjH=wFFdr1vMNx z9dwiZS#2R}EBEp7vOS{j?^tE!XtDFRhOqxKxk_zYogJ*splzETRqI^gU>wXX-#mxj z4103FQ#z=a*bkYz8Z@^9Rq)to(Bdz|`Ia(fTumc#D*qNogK-WMCE{yWftRh(Cbct~ zpW?!vRhL0jdLges9+~8yDN_5o_@H4|BzNUK;*?R2^yb*Y{fTWsp4r4rk$BYy54wyv z3~C+9D(-_p9)8rMpWiY!{u!!wNQbuOzd7$KR9$)R3iqQ`+6EJ;+2vP2K3K!B@FBf> zjqy>HVW2~J%f;WC_-yUebOezSWs2=-3tE!wR(R$mAiQ7pd}%od>#jfjw@R1iHEw zKUWU}eZ@X@E9Npo`5*7N8dQKrah84YqS%`@QJu|R#<*x*R(UKH%O#%D<{#@1iiyNN zPT`=V3hPN#sC+jfzE6&2Za?%mqS^$I(FvYs!o|GPd4~8hyL`Gea$N9#rr^K+bLBGeK$ZotYOw?tZJ-gCPWygwt z2ketepeq^3k7FxDR@EfX=O(tIE&L-zjj9PsWT)X7Q|UFrX1i?`a7G)xvco2cOQ=*K zv?&6ub|ZZ#e;PxUY)KWxv^iG3(rwHsPGpM!ClJoFS4oI&BUG09zX9DkL(+B?0r@zd z8H@ffu2FBeHhL{>_Q=a@eZoT7`j^skrz8l=4G6!(XOJta%+3`*1~6m$OMlv?Pvo`C z7bH<#a1}Yd(E(JeoYx{+5+Jh>bZc*smZzL{+Wh}OPNYjSH|(Pv?L!JM9t|ons{aYzU+CBM9@1xH#4B?XXj|`OYuQoBReHe2>4hdongsAO8>N54tjeBFXnTy+L)bt1A+% z7LO%t$J)_*z7x?GJ(#vJoIbS1Esy~#NBd_HX-oL9>ymktb|e4M9znuec;y`T-=lIN zpDwy9X>Wa=bZReX&N5zkWLkn2;U(i#1X9U>_15*@fgU-t6Kx}U1M%xD&BnBO6CDfY zh@kBrhlnT0S3a!j#?>9}%O8lU{>ypcq%Wzc55+|Ez}F!2eUuRCaiD;W6vstwpz3xc z>+4@You^PD<>j;HP7;uH_+rpgJb%g_ZBP^O_t_Vu5;Y6o&d{DnuLmdF*tiF6?b)sI z<>j{4ho}gaG_vK5?u-A-f$ z6OQR^@p5V;?eo}K%uUf)>lM5lGTjAQ2QRFB<#)wTcW|Kyw%_FbHBg;3k7|Odl3?90 zUIz7^P3ky+{-}ByXre9lR`+j{-J#`5WCa>Bt2!t~3nrfX1-kZz^=8gvT(zP6`o&Ke zV|o;yR(|P%1&VG~Q zp*68Yu9BjMo{Yh}N1D}~;=QABeEE31?8cyXgGdOx)g8&-J_TAKocO7Xpt zNkmySMmv#0A>8d8b;kf)zDje6H%p_SYuIB@w0qMqLm5xO}Y01 z_BE3S(D|k$`Z@_9Blee8Ms%xg*uJ0>c2)!Jd6ZZx)(AAli|6t{&u5|-U5Gd(dnyrM znGw&eVdc@5`1oEsuJ%0YWfd~w3k-}j6rC`|n#DR2dm;C*O?Vl-4#d>dN3B7Ql&;Hy zQ$g>D!oBe*9bb1yJSGW00*Jy2$C;p<>g1C#CmH8D28$eh3d%%Rle?jps&hT^?VViE zZan5ZtuCl}6$-V(O+gd-!MAS`^HmMmm417WDc-JV11r>QYvQ&+BI~)A!ME0ElM?X( zzV*Dusdn*?$aeiEt}aiZy#oKO7&#U68H@Vsz!7y^5_;9JGe{3#g=$-j-gn9vqwJG3KsNBkI#N#h ztO0p#S2k^p3b@-ddX@YkoHGA0=cOyXCFA7Q|+rJBBhGsLWsf!;#t#*>H z^k`F@USYY0;*$uX%~k(6y`6@mBPMe}2dSydO{o-=lY#7@`7F?*R95LNn%fc$iAfU; zv91rB8;MQRE%C`w*^4JJYgk66R`wpm+YKbjohV05%|!7E_VQ5OdmwECW)lC8Qfg8G^KrERny_i)@wTS6?mvXbo7GK7^Y z|83hqUzEvK&O19C{+irkoIUrQ<7WU0#s=Cw?}J=m+1v>dso`jkeb_!`)Pm>RhJ=77 zvvSdzFi>zY+E5-XuI+HQF zZ2{TVghQM5fI`QjR^LP$(3;*7?VD9sySn`VavK8luo)-l&=WIsuV++2^n?_r$^~Cz3 zf3$suZ;K8d0mb`EH71{7D>3FWK?D91+m7oFgDStQFA@D&ZOMI<-=*wxwM6tsm=@{& zh;gRru;7+GC!5DIoGKx{;NXbJKX}Y%~<~;uL6=d}-*bSgtsp7i`GT$~W%lDgUxr z?Yp14XtEW^?>M@0Ll_w3LbQ5P%POb1_c5Cn^u{HS^R{__{=*jj^~C05BjCi9DxftE zJmT#n*Q)#Q!;D*pnCs~Vi-wB74(GtO%^CF0LL17;(F=7S%(AT^cBtx1jrUbD*rFX& zhFi%AY6O;Zb9@5ovXmz({}~`NPhR~T6c6{0CLS|ugJ%EZ%%>f>$ECTbPG2qBI{syU z^%Fp28Mjb>C%tjl#$*ROP;yJiZ&$IB8sx~mLQ zWf;nlyb5Nh&RE@4ZOSV7Pr0uxOjRzB1U?@*g3x)@s+`Yb1@#5(Il|rQH(-_hs=qMQ3tS|#XDbmFW2Y374TZQqhhNM+4T0mitRNes%JhS(%oeTbJxQE zrlKJmY7ucS_JjP!@Z7jf&YQkr?a$m#g^I0Xqgn01#4*IwRn~q&TuQT^8*O8b{ z|4haVpFpqeNxZd}^_09;L|_9d0_D>KR4iV0TJJahz4iw*!4e+$N$#9|1|>RK0a`)K z?ya*4|Qvac6@sA85Ao?Y zC15TW99+BjI_>pPRqG%l)_e+QtRLC-g>_ao3aI`MT|Zt_E^eU98vAmYE&Ys3*McWaYw?TSd zur>{aRqOPicbc$v5VnrXCeV zkP{Z!;lT4O-%@rh5)eb6xSiCzJUssuG5$9T$9&cR-&Vr~E^?mDN4 zTLij>&8&h}fgYd;jw>cIw~;=p%=-%ZZ#=okp$*717;Zaq55@H%dG*^nP|PhV(+FYU z{?BB-Dk-%6vH}gW0sZd6J@&+duED!ij>MVrvj$H&1(TRDZ8zEQtW;nj|0B2gWq`ta z6I1yuK^a(S?qT9viNJqmO(g~nEBHSA3%&h_i|88qAae_59MhH=ugE?{4;bf(J}zu> z9ux~3=LYa$7A2g2&>EhPzn+oZl?q$V{9-leVGceBAY)_m4XbpVb*sdJZ{v^Ave*o0&2Ml@!bJc06-ck9Oo*DeLiF@b&=)Gl1oJM0g;J>1eO58!F>FfM=1-eF+2P=4A5i2NswK}mpgpHzE!@9~P1LLq zl&$?{(0({QcMI%M!V~cJ+vlK%SIGu7$SF!9_qM8c4|Er=EE^9mmACkP&6?(*f3M+I zhApcs2}Tzpet|6A$nH(P)4LYN&zC<=Q+C}aS6EZ6 z&)J;5wgNR9fFG;HD0uWU*B7p@T;I69)1xo>bGfL^M>Id#YThPV5)XJ&{3^eG9z9^BXkLjp)GWQqn64K7l+t8WVpL-6}Z!k0F zNzV6}#FPAAiNRpv=(K|{TK+{@MWu4(+ObOIuZs5*Z>AyEtXJqNA4A3i>O!KXq>dXX zY$IOQY5`8;k<@36brYWq#lidsZN3(>^&sLC17i=b5YJpK7B zX1KFIqdR>-sS)V5i^NnQajUaP_~VLo=bWO-RYI_asbOnSfj=r$`R?Qcmh_P)Ds?ED zz51O!y?-a*$5#VrYu20$^RhE&tR}x=)j+EebOwHot#-rK2vX5vAnkn~~wUlS$zX2ePxn!4DhsZVNL%4>* zU6<{&TXCvG!-)Vj>Ix@ydCB}_Uvh52I?&lKJe%L<1d6u_y$$?8i8nwC-9bs%a8(Oz zt^6RDI>antmD=xM`xVif>79u1dMK%4cb$xU52h%do@hr-3wn$9!GIkFpoJAwD<4F+ z7vtH|mcj-3u$oco5oV-p<%z#rW7^zG(1Xf%DpFS;Zx}+`o~iJy^c^T!b~SDYdXi+# zWrObCZp-{PPf$1)S<{DzynHPjbTE|jwS}+B893tdNm$?3jEcp%E^S9O==BlJEB{Aa zkB~fW_nfmNin2Obp_3MKKrY0;zWj3}CFCG1eJ{BspA%Sh>jb(R&kok!0=OZQT@w~Hd`2`xd|}*GRL#yHkhU71$n7bOK!Z{8111YV zJBh**ZP|qy&(0PFqR>h_dE8#-9BnnRyu-AGFs3%YZ>?RM_x>NR(%w4&R#y`i4(*8b zwL5^4zGB-G=AeTv*m13>?2!-HanNZ{*&2MaZ3rm&5s~OCOgK0mjm!VZ3|Bl?P$E$h zG@p~+T?vX>MkG!Yey057IjyJU@-<%MqBtT#N#InL=QBaqxQFlabjFQhFMGCUgVt2% z&GH<1Vu*=CQNA4j#liP0eXfB@>r)$Sc44lwEllnBkT&gPtiEssUm!#^bv^#V0oKefc^RTKU+O-tK6Ny3~WrkUF0>N6GL{MQ`GXq{DuqE%KEgmZMzo z?v?di*v9KIDxmg1g_TUjlSfbs+ah?PR(HViwmm^LIbXsNv9LY9O0$gzxlYC+72>PZ zOQ_yqVQ;_!l=`bCC@O)RwL^TrWHJ04!o3w2LsVdypdG}siOoQIbFPu6 zJyStXv4j1Z{q)vE*Vc_~2x?%24WCW{?dJ4;=5;`$gJJKX^`JSd;%?Cw)N2l!QyCW- z>|mXCYuXy%?I;tmjoAoduUk22OFmUvg;bILTZoI^tgO6T2saDc(Wdq$tGDa{nh49H zjiW$Ih{BR&VQ%T^}#}6;@PLL z+i{IBsu4D|DXC4{8~EWc2E9-<-tt?SmT!p@BXY43W8?ZuJgy|OPwOEpb%KYp|BeC$ z5QSE|D#>^&kodjU&#uJuNJl5f?goMvD~YUmfULtA4T~n zA7GiehYO9_uP^P}@!_fS;{Qa6eQn}Oxq@CUeQ5}~lgQccKWEmCk6i3w?Inru`YWkc zUQGvegqaI6XD~LlAs;rLF@UiNrCf)os2a$Kd?L-b8BA2tV2QV04cZ2z5iP6uP>5>F zAFkWt2~Uk++WQt_|I(MBk$Z@k(+imOiTDiD^P_FyYHa=YImn-Q+Mgn|_Vyd-LUnD% z6;tt8j@t>kLhP)lHA&{4q1K%$YA}wrpg+Swy2p54%!h+Y+#TZ1MzlU2_PCtgLT?++ zxMP9vXto`i()BYal1zRkAqbR8b+q!`NM?M`!xkkcX{$eo`}z_i%2jrs+|!sgXH8C| z&92mb>^}G!3dWx>c!OBfCKwq)GrG@zXDtvQrB+}H{ zWCxd-5;v`n;_r{Br0Us?9gMaD)y*Z+-Yo)+?atkH`Ge*hA>$91nDfMv27|t{UgSV* zwSOk4v?&UELfR@|&F1Vf#`Rc_cIb-j?W>_oHwx%=XB^+dsFo~b_iETnxUow1ybznF zO%+CO{7kK!+zeD0!~0SLsW;9uqbzYfPh|V}T*5v+fW425;nkjfs#-*Au)`YA99W(C z(i7x$5BzVUF*XH7-v+zzSHK9VY z5bk8M|C!5#9bT^3Bk=$zoO3RFc?I-dVz9LdQ;bR?>T53|aj6 zXwWb$ceL&W(C%N3bAFxkKgSUOyHE z=xNHen0;TGM*C@0-oii=bpAYJ-HSlC{IO&2Nuaw}-sJ)yq2%0Ukgud_leq8MLT+04tiA`*lA=VdrXGUOZPnm-NxQty2P@m+#W`=bqBJ=_|Q*}a{_Ic}qHq9Z&WG`l% z&rI~-v2ZS{4%M}Mjj-zdje6|jLXiA}h~kv3pwKl$qkOtaEi{5ly(E7>rUr7cx2CO4 zXWCv@q3!t}tUKfx=->ayRPETGI=u)*vgK~7{ZQ<@^c}s)?LbBAKq=&_bx*I-t681< zo<9VV-)9+q98YiJ66})d0Xl}lIm$mwQX4IRb1fwQ^jyb@^v{Dfab9ChL&l}SO`C>C zKri6G-w5&6Xnel2jj(L~QnK?kPgL#oSop5w=}19j>?PE;TNs)1-g zMY-57hxlB++=&?<+4HIa#G>*86?2XBrMDCJP1e7L!Z{mr@z?Iorp#<|k-lscWzk(P z#>byP_bavF>`gSePU=Gc@OJ?Bn%Y$EwV9e@h%w_< zTcg;C*i21Lrqby48HMxR$CZvPe{W)J7O}s6=x|1~9KjB&i7t06q|*P80y=n@7&t$P zao%W&QQ=Wg%02co8=Y6XmY~9ovO%6il12OL^qzx@PBkQ+8#A{=XAmfi7?^WApWYBN zo=|?mEOjVMC_YTIs`8x#2UBW+BA&z9pZHMmg+;-2|Int#NmJX3zc!!>)>W?1`=}53 zRNIlZx@g1p`Rq#7X+l*wrzObzGf$#*$T^Dp5tRDBEubsxuiS+ls2S!&YfU(z4kw5B zPtXI6BbHY!dd0XO`{`YlK-&mx?VHmFG!h10oVWv2bQaDQMPb9eOSml9&)isMJ&`<+ z`XA`v1L9@bW5%{=fcEB!Dhx9u-(6^fnz^;&YE9L>vjOcf4|%fck_Ae_H&fq?X1?QZ zGE#}0F^n2yk4-arS91#MKIXJN9)xXc{idxkJK5So_%~4lzdVpX|4hx{%0(x-o?`6X zJy`#Uu8>J+oA+&=hHlgXi6?v|CoKZL`jv9zeMiXAbNWeHy0+#`3h(= z{aH?LaTF_$f)mQU7BH}35-6>LC=GA`<;Ig0?h4yZ7o(6jgq2!EPa25T&hKtIs) zn%2PJBpRsiD$EUX7IQRcx&>k+!s0;_t{e+J^K)2koRrbNt3C>m*nC!k%Iy$*-X`vBBl4pcLk6 zUkGOIhFdW0z*g7S3B|0D8&O6+t?qn{*0vMp|H6Z(}#7}AiytDspZBQWlGu5gF zm-Z)cp)sLv$W-cl{A{yOto&*evo>&VwZR8wwf@7&w(}>7+p*iBDc5O_dO;*F*anJ8 zlKOc*vm*asqb#zil9D0M2E9R7+wlbUel_Dd2H^i?`#}Rag|TW!ZyH=&(g#Z`WmA}2 zE~iMHMrQv{7`XI0x#F+vc)cBUQq>lq%n|6@?iKkKhUbf z4Hm@1iGJ*_{h4s|ljmhGc z65Vrj$)TY+pkiA%()AryacR$mZrLQlN9FZB>fedtn}q$Siz2a}RvUK7=dzU3L{n@z zJL9Xaslk53e%0j}{<>uWO8iS!N!MZAgGf9aWJTK;P03-R4)=_C8m%E7u0dW~*K-S~ zL3e(4wt&;C&9R)rrzwUQch`aa6svr+}t! zLED-V#cD80wYc&hL>-#Jp0mA}aSGe4S`Y^M!OA;-h!QWjgYw0?gDibvplue&OXW@C z=BFU}#}I;GoCjI*}Hyc(imOoNe4mx4O9wX^3isI>8Gm*Bfi_noI(Tt1~m|8v# zRD?gxn+pR^pjFIC^rm9O9eT4vc#l!}TSJXq zy!X+mOPlRfB57YNIAA-0?Tq?lydPJmfX6S88dF6P%#%ko8ZTpI2Ep^@~_2HIqBI?;^QoQ zJj+5(wI!I-*OjQ*I*B{hKSgi;Th9EWn6@+8-0}1T(8HGS(BcZcy-=RyE9Ri}V~EqG z4M47a;oBmyNWx{jeeVe~Hj?!$|BAw0$4^H8L;=!>>|Gz*GHxknE@`z96c)}CX^0P~ z+Ap+o*F?}@+UE9+XNJ7#D84Nb76KMw9%7i-Kvuqcb%MVGd&IT5`|cH>>21imC2Uzg^U}-$%7g+2hF_7`+--Y z5J9JzF|l&SNt8tY54{F>;e^RPyc5rNr^dsybC2b#BJxwXQn7caH=}x8p*o#`H`Iwl zNbKJ3pcTYfL9D2CkQVXX)fJRBmihBqfbtAsN9Egw3NP$ajPfYY*vU$Va?m$yyXMsq z##Lp;+NJXC|%Ncj@ zEBo$+&6P5gVugDZ(3b`1&0x{a8d;ogSQJP;GiSI*_?f_rr6!v}H{pb}x3KLgS!=}? z;lx*SY*_gvu)V6Fy8}@V{(O<&Yg8)F!FQ;4dSk{pI1)p1@w#%pf>kO%)Bda(`6hc8 zZGU{oOAm+;@-?hH+ncrs6w0W!87T1#XS3T)@4$BCnrF*Ei#X-}`J&I;S-Gh44?sgu zP=^V%Y15!Wbm}5iUK2PwB}SK39Oj^)UPZJuC$jx7#egOl@s7=;A87JVEL^JzNG}rf zxfw{`lt1;oUyiPZz^aMk4muBd?W6lG1+g01RWR3&NGHIUOFSg=>B{_lJR z?)O?`|Ch$JJ7~a8y?V@gRh!-Q5q35iM$EL)1})x)mVcHr`jL68vbHepK_>SJc+E;r z4|0_KI*{Wqt0`A4-gyA zmB2+EdeK}Ws2D9>^x+?Sjeo@Tn03t7^3(4uE|kGcdBduQ3PC=xpra=6@H0xNRG{GN z65p{#L%b1@!#-4#k!V-@(H!Y=i^f{E}qyfkkCCJ);60`+x9-Sm{5la-8O=<;7BZ_T~NnE|5_IX3? zV^=6~uEL)X7g4pjHqufq-Y%%Oq?;kawj7|f5k7J_;sHA zeqM>jR_iuM)@*>XnOUL^%8_)?rNf|O_qfknDgxC2d&eEw1X^XrX&3&YH|ZhS^^pfC zANBOf^rUy#G$Q5ucG@D)Oq-WCL2s+V0(mc>*6vM2Ie!Hi?je_$q1vi5Dw`WHi{1M3 zT;Si2+&%vm?Yl-}g;{div~Y5kMtfHB&LQg0=Yj4JrOtL5^fos}8w1&`x&j8rURo_E z3_pf;WZYTw#Cga$+M1o%2l&h0)q`MEPFjCh^vItCQZ{tUv=CnfSFcK9nXG#q>79IycS!RI5ZR|i_KKH7G!XlUTL+NePpM3t0^Qtr9=#I+Y=+9PoyVJc6 zZ4oWu$&J0BI3iBJLNZ?%(Ya&>EKI-M5!E)v0ZS=CN z1?am4yGXjr{7#>+*NOwopTZlcDXmdHr-!tgEv5$2llFvDT&MXhym?z@+G) zcGO6VH0W*VjV>Kd1dV|Q>F?yM?uYq}tQDS7oa@7~4_`S&STxrzGF;nUjMzSaJq^Fa zh~GqY%8x~~xu6IR8s9(~sLr-0a>l9fKWJ<`Xx2#B^Pj}d31ZQDAwE%_V2h=B#HVtb zomqb><32C?aBh_dpDBnZWDzQbN zk7;OCkjz;5hdWL`ULzuQr^9PscR*@-Rd&{DKW!h#%3I%lp=}bob@|Q{o7&a^-?Wy<9CZdO zuM-}-z^hZmV$sB6a?61(%>8l=zN*Bs@-+}9RsSEoDNgA4GhNz_PoUmAg8$X}quFVb z$MC1)HLmNhMt+Z`cHKbLtJ52#brFA^>I~8~KnYW)fYx?|7dtXR?wzoMdsEij23L%o zN`8gd!Ikae(0`Hdgk+lf_rqAv&Q&j*EnKwS+)(Tbj%ro|3qZj{qR9&3N)A3;U2z)pr-C_kODLRwK$Pys3FQbGh3LHC;&T5+g_Po`Mh=ZbXU*@>}@3fn?%VVQkHCym^)8Y zSO%fO%Ju!^$>iV6T}6H_OPLGGW84DctMn!rGj}pOP|~q$cyl*;b>?s?H;K@x+wevo z8<6~D>5S%bj$m*0H=S|H#jTvp9u_HC)H>$z|3GKgqLs(5IR%U3a=$KVHXt*P2m#}oiWYFG;cx=Q{u4Tm4 z9wJO}{LJ}sB|1alcVd|E*en=rw1jiY8~hn+gzwa`cw$bRFeq*l_x`sRl!=!3H!-2N z_X&3U;W%jB3wl>Qq&I`Ox6l^9ml0P}YD=tnv$DZjv1UR6`?lu)kSJOF%~IAHo@eHX zUKb69mAyx?QaX&*?GZqmGgi?XGZ5tZlc+7_WXiW{pfXwMTOCwD{?EPgS@McsFXo!9 zqTWoa53(w9R;84el3&5;rpO-y-9 zD1WV|wj~4kz93@Np6)Q?GM?n856Ibndw@JwpjXy|K|v_KZWMDB7cEXY3jZnc*T`1~ z4xzUQb+u|JRrD<#E?u&9t1h%Rggem}f{mr7f{mmY0S6VK)qLMC~W};$XoO7fKpHkw{dV(ZTOt?ScpEgoy3gg znIPMJoTq?Xq`FgCl~hRv?ZoRk&&=4T6JLz!#O};=5?JXNHge1#!-%T3%-

w!=52 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 JIsd&aegSgATR#8* literal 0 HcmV?d00001 diff --git a/eth/downloader/userDepositData/34443.0-2412409.gob b/eth/downloader/userDepositData/34443.0-2412409.gob new file mode 100644 index 0000000000000000000000000000000000000000..750e6669594db72e1ce3d5d779651a56e3166cb2 GIT binary patch literal 4875 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

sD)SyOX2l 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 z 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

BC~mkfsYp&b4OGNNQ;|;};!qLAVcjjG$R(x? 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 literal 0 HcmV?d00001 diff --git a/eth/downloader/userDepositData/7777777.0-9149281.gob b/eth/downloader/userDepositData/7777777.0-9149281.gob new file mode 100644 index 0000000000000000000000000000000000000000..ee63497b9c874cffc6435d680be8dc67958456c9 GIT binary patch literal 2264929 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 vzr2Ck>9PE@aQ&N=h2cWIV0i8n#~bW%aBlD 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[+$akOf{wM0?Ze;6l;FK*7r&rV*Dd-1JhG= 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%0A6e7v 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

4C_J)(rx#3TmuKC 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 z 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

Ns`O^$8C%pOLCP?h!1UWj2S*plC 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%0A2DdBp%I|ibsjjx!xWhD%VHr5ed1fP=e4?$ z15exS(|`^oJ%FmaSe?iFvRygNrwtNDztita5fu9B7O>+QH(-e8F-Fsh)tvOfyqhb( zIki`DPCVqvFXCIcb8nacTb`t#2W4>^Y0wS@+|JL)>R#Vdy@c5>6B$a+(J@1%{w#Ct zw*J6@OYP8Ky6A>qqwZ3F*9JRKF*CSu0jTU9`c3J1YW7v8Hk7U2hlk?}uio#Skr~CX zw(wD$gNcXA=qdw|`^f+~Q`U0Or@Z|@%(;8CW4GgVjz)m?S9f5nWtO3ZKkA{x22@Vl zVFq88=|*mxXAq;S$<&|-qxZ6ywntgnoZvzH@EJkQpHl;q+f*h6Qhu$$(=XyslS=$%*{4I7e4C=&m zdrXK&3`N6wV4p`rf%#L_K-W4dS=EO|z#zjbVBYZA^Uxz?)#kz{C#eqkcA3(Jmmr01 zVT)%pz5sM{rnU}PPwt6oiJ}-`NmvR((QPcy;REl?b$;3&ZqIL_M8L9rzg|Km{b9O( zS|4HE>;J*nt$I}!IL>5Y1boKcuLoLwqVZ`zunTd9yXYQW97joL-9Nl*D2L|uDx>yv z**pu16%JRcF~CT-Sj=4}y;y>2%8EAEILjV7hr$!S*~ieLaRhER*UxCB`=?1%sM}>P z5NLPgH=xIIs)TH8IK)W!=rlpA z-imiej27ensN>rZzezv<(Aoq$g0O$b@tzoG_hEgfcBZrzcA~VF*&P&*+UuHvQtnx- z?+U$gIm3)8`mu5F&UTGwVRCE3L5%nw5{)IH4y<^$rFT(_-pkh*+F_SR+C_8tWng%M z9xp2zs9ZY*s5w84kHj|%1=05Viz4Z|0V+_V+fGIT*7pa&?XoKY=)MUDIQec(s>QNux55ygc~;pLlW?==NhE(0|ZbWZFU( z+L}7IVjJbpcN-O5L=#2C-|`GLJM$6^YhfT@(UT@08ED? zi`4`B!N+60JJ8pc`~%bU-Y!t3%_6wtro8MjH-0or^?;w%<+Z@F45YX`jt5qhr=(DlY_ zGC}$e)KaT^9-(xu~Yr(de#DNFV*3vlI$+6#1Wy;oyiXJ@F4a`U z0hTI0nDZ^0U}g0R}{#A_- zGX$+8!Vn`QXc@4}j#=1=)N|uaxE*HYp(Al>z$3Wr>A+sj@kZwFqjoAAIt~%!1CIb* z1Gh1;lslKvS=7ez3k2o($N;>o8@B`dJ4qQ=wP!d`ddCWxmOWnqcX5+VK+m|hU%PBy zw=SUlMoa+)Y@P>fdN2go{#*~pxvKkLkXN7Y+rURXr#IPO+WZ`dq{DKc$^J+NeBRIZ z#;&E7Ph7W�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%0DP@PsA;pdHOF~G#g9>9o{dkjx}BY~)!9*E@K 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

Y%z#NmoCbB<5>8H>ia=M&o{wgm6QX@n%*y-xU4g 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

b7Po%_x;_~V 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

VF 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 z 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

-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 O*z%W5nzg(~v;PC#ZcSJK literal 0 HcmV?d00001 diff --git a/eth/downloader/userDepositData/8453.0-9101527.gob b/eth/downloader/userDepositData/8453.0-9101527.gob new file mode 100644 index 0000000000000000000000000000000000000000..88f825e01ad52bbb543527b50d88ee5640728a2d GIT binary patch literal 3143206 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
Ca8#Q+xh8i6z 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 yXe34 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 z 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 L0Y> z&N=t}0is1Xf;{!vK3>vmMgubA@!mYL9`~eG6?b~01O|teDo2DdS4?<`#@S7VP$2Gp z5=vPgMA^jtOn;-v%I#oiA*E;hT1o8j(@^_SAw`DP3j@+zmZ9NWlpXxJN4I|SQ6ewd2lF@M_~gxBVo!~YCMS$ zsUMWW{|{ep0UTxW{14}Ob|ZwKaoc1ywsCj&5G6Q)APJH{f)hMwa69~PcRAeM-MNFq z-5u`w$^X;KeXD*|Z`GS(heu}S8R_Zn>F(*q&}LgBRjl4(Y!t&1xTKgrQAB(CJ|gtK zvs01V$+Q2hpXlW?xO0W+*lFOuA3R{%P4#6)^`!LiPEEyC( z+kshY{^~pWp~#7pn?o5!uCHF2hDyc@Kp7a}9Mu`P4H0VV;ez=6~W~91YDb7 z{+$APbzuY<-<4N{c0p%jDfxqx{Lx5C{)BTQ*9@%x+$y{q_3Ri@TRVff=gofk#zGyz;3$$~Vm>u!=<43%CJT)Dt8Y z@?vjnE2W1QDaif+Ml#@SPbS#5-;q7NhFQT!J@LcwzVs;ugkST}&{5|v>sj{%7MB#m zonV8CPhBoS>UV=zQ(}E^Ey5;vux&0!AVT4A86`#VGETR=DJUtk2X{Dg%18{OOU*|S z)YbJyh0Iu1m(){!H zZ%I+DnJem&g6E*)^s9V{GtZ zR9GO=+_86&7Ol&{E32WTit8-5GHRfp(2!+#-X%B^=Nh&3+WaCggX;~%LyZIjexGd= z^HwQq2-ClT^{L24g%{e*>jf$OGHG1OXkg;TUg5?blOz`w@WK$bb06 zYx@N_Y6JH{7Vr@av&NB(*Yuxk;7f3bk#ut?`E0ohTJs^8nv8h~#ay}57179>I<*Qy zK9|aA%#El!zB9mu?#Tc=jJVnr)n>jWpGg^_^scv>V%{W*Mjff=(|vgDp2|a?@U{zv ze8YBZ-0ma0h!a4%7FXcf1}?2vZDPk}dOePqZhu6+E-?N4+7iI(UuuR^gPOv4l-I0f z;-4P#82v~uVAaS&YbqVT5f2B(@mAf{+%W2kJcSe*xA1oqEZKY*`o0aM{PKb;c!#aC zca`Klh}>>iK+>^DDp?GPOVke~D(e$Yu^soIh0_29)8Je(vC2d;PXxbco+Oz=_O10W zg0#WoQW2{1I~W3km2Ph)3K~k@qeAgx-$@;b=+n+(Y0-IU(FM>7Y0*VWa_NZDJ0S|Z%^aNTQ<4iZ$v6tayP>!0NGC5yCt+bN zon!}5CofAUuh5v1(-2P%BFob}Z<^N{c|#+~8`jF6SFwQ_+?#@~MdC$^stO^H>>l>T zwO8L!XlT)xa*T=l!1=IVc})r3H;a)_jGZ9IdS|g>l=YtD%#jHYItr+--DbOUw}?T& z86q{C!jwWEvKm8QK6w~ey=1xv16M1bVmwz>MzVA&;6f65VzUJSGWrQpZ5b(-uzcOK z_+OTOro1Z`-5_3Glfa9#Fqq+@x`-Wm=zOMw1$Jv&0Ew6jS>&PJfPz+2@S93w zj`jM<|s(BmQYH|JE-yWTgV7)fm|?bs=dZ>hH(t5 z_b2#{k*#K6;55gTSXJ&h4fPg=sItZVbS~a!HEjqxq2A0AyiA=I8JO4Uy?6af=-;wq2*J zShg8`r=d{HF)(Oj)}Mx&Q=HSkVmxf;0w{I1ow2bA{*m3&M?7qfw^|{m>g`%Ixs`{n z3@s7sZ=r6xLNPDuAJoyOxtNKqPsw zeVrzAspCpv4xXqgW8ou={|g+uLSQJ^g&uxv4BDWO>UTlpAl68Govf0{rN!IeRp0^h zisp!0Z(WE_+UDLy>QZqDsn#SLS+!{fuJk(Fl9*HcK^?L$x2Ci~-Er~Pa`-`MfD5T3 zDH@jWS`MR20HfSQpmtEq+*RnYP}-cLhSVZk_iD0QJjgKpj~LGMVDCgWylf<^}2Jd4`Z zv7~762RJIc4yx%Yc7-ptQ9D)(wJ%9+!XeIlN6f-2>jwvsYOa~{S3J*vqk@>I8uUx( z{u5FjHi-AG`Ye|oE|nfGgJdk&uLk*p=TE>AiyK{peDh~fY3?2j{;-qjAOc?FI?3hI z9E~(b3wZMF3qT4zsu4oTWsfT=^SH-wPc_3-ucGS?EvdOK}Ex z#e?`MJo4=-4`Jf1=fcL0HzRN{?BJG}CJoQrpHnP;P;(MVK{rC}DJ}q`DdU(>{vfijD#s-_lbXEwRrV!BI_vqwo3YK zHF-DvgmdVrKw-6`&{-RE{;uL4Po47WrvG6T&5K@m;MQs-N+*2KqvfMtpBHKul6nj5 z5oI(oX9V7dt=P^jm`IUg2UO zUDgN`DE3Jl^3KYng3T}?5XHR`Y$4rqvqXryJrBccNYyc^>Ns`z;)&tbJ^jc#&`TEh zNc`L1(3-rz#^YMscP;E;{f66NGy-Z_s%uw+-*_B!n*lTCNYy|1MotDr{cUa7w;7XS zkl!yJvXw7v_r&@KDe5ooiOZpmJb3!u7oiv&DqR`|0a%2YlpcZ@Z$?sjsFWUty(4|c z>9j4B*}xT_die#?@aBy%K#_Zw3bp$vPI(5Oo6~_Z^3J2mVROpSUn@se-(YO_j5Yah z@925t9jvRX9+*-7@_M4ZD`otf1q7$?X^RZt8pw6jUX<5NVxW>VFvnim6h7tsr3C?$ z)w>M1$EroquU^>9K7^beyDUUOM;Sk%6hgapk;B%%@z`nhHSUwnj%98kEtzgKcjP@$ zyNWXqt}LVQ!*bjuxUu4ERWg1ll$g4cPlUA5K`1RYs-&8COwOGzr9v3Tm3e)AB#Q;1 z?EZQhp8KV5KpI_r6lrWpW1;p4B}X{oX8efNNP7+}K`kB)$aW(80aj-8he0F-R5I*a zIZ)AbR*hH{Q2M4Vc=9+DV#WyGH+!8KYbq^)fJj>6&=?;LwC{`B;s>~c3(QLRPsP^F zRzjVLKX;)hINjXenK5A37_LnV6F|d&X3VUmnEeK6bN9g!Xk@>)N<6XLJ()l28#D<92KE#O$re22 zcv6!dm++N>66WJvS53Dtvc%lV>)`|SA%Ja^ElPI?+sn^v9PMw4sL8M=IZ4(LJgwG!P9jx>9yF;E zBm}N)%&0W9?`42s&y&lzk3+tNBZo~dn3=+SWT+=@a#9;2E$?{_HMw;nU(?Hi^u?J1 zXg(gtzjMJ?SM;XzGFDMMTmsc>U1Y4Y1qTt2unt34VP;UIWISz!3@?i){Bb@;B5^5x z%P20K&-l!>!q1wl>%ZkTc*_o>X5|}uSZ3om!O_uV#XI@`)qO>+yTAMy8Npl1dfZQJP3P@Xe z5fA!*mMwGh0tnSL5J*NPY$Jeymu=3&O&jQS!$tnHq4hz#U5&kvPwhE z9UkNN#D$c5w_zM$0)gyW4~^VH3dltL{dW)^jEvffG+R{xDNA&n!OEsRQSTV^EfpRpZksAAo-9i zMjC$xXyIWzaz@-@I_$iQtv|GDT;bBVr<7J9rBxa=kkX*q^-kM|5Dr5qVAnWsjxN^2 zaCpUYoeJ<89(@ztjI4{F1!bk1aq!fVPG?Y$%4HE!-M(rWkpBHJ3U`SW^(2J3Qd+?qv3$r-NQni@`Vxgp2{y0mgA zoa#O4Pqyt3@K_GK<%r{6UT0y+v?Q5A+Gz3Zgx#MZJ;~Lv$o9t_Ds0H?rt9l{G8-K5 zD-U6rNSt;yYIc6S4M*_Vo{s%G!7^JlbhAMP`f-%dg%np~3@g_47Lc|%_3^^H-OC>HEmF~J_oG#DREf53T_ z?gJVE@bTva;U4&VV+cfa(V2X9-?M240Kij9+_w!q_#>D){J@e2$2@Nt?i(6YtUeEm zbddEnKMJ)|DRKpCxSH3(eQIC+wDJ#TQhi!i z%B43G(E~oh_8IW zNuT`#5KL?htRa}aX}$3V>@dqp*y7pkxg-DaOOvNXV!hP3l`IWyrJB=@p(1?1((kw@ZG>eye(2>P*9!oxNtc}!z=T#v9Ou< zjkCI5JtM29kYuk(Uk1IjbhMI!*D}s5ZJ35s=`hgQ5a9%4@&Eb52^A34j%&Cc>*ufe zKXu+)^wO)vQ26%WLoK%@FcaLhGgAXUvt_8z@++eYyT-gLP#pPF)Hb4|lTU$H(+4G@ zd5=uVZn@!Te8>|84ELS8<0)qmTSi1G<|2)oumq{)=gmm13N%cEY;BL=X2@=) zAd1sz+!W2ze+5aulH69k1x4vpZcILjiv;QQSt|U~9Z+VvgLF$50}E)g3s5RV&Gvlm zdMb2!fVbG8wCa}1kp#M5$00+A4tm`fglxXe>cJb$RKQE(1fg~eS=VXGA9LwtfU5k_ zW~c;_$V<=pBD3DZjg3(P+pfV=$EK7JuoF+6n`^{*4V7r+^llAtV{F7A9gaJ99~5t7lE&7fhY17kPE- z0N<<$(#%9@W)j6!u7rCnkH)h_$N{1rw1&KL+`6;iMfKNlB>CzO=+BO_ip?eQHQ4yb zjUC0>4Twj&gJSkGPiI+VZCC=T0g^%Qrw`;Q@LjY*lm%0lfD|lz*L$%tnU5K%#?1Z| zlOyXqE5qLJg~V(4Xtd06?+KLgT+I^Gm}yG{B_+D?jBYv!3%v_?m^OnKM8-GXwJ9wA zY9N5Khcp8bg`wiEi)ZJ->dC0Ou`#A1xGwLcqrWqM>=9auwEAUZq`n8U0B6>Sf6hom z8If)xn3(g(d#;^>!Lr}C0FOQ6!hy@m$TuIB%s=v^ANf?$grUZ6DW`4EvAVBEL#%(% z?G7orSmQQyhYu{-GRD6^lV5<>HT@fXvMpk?sVkWek&+C?cJI|PBY0!<9Xn7a{X2}; zf=OeB38iX5y#Ii7gk-im#t*T0Z^OrX5P*{CM(EAym&MLGC_F(MPFN8lp4 zmiiuGCc$HqG19hB+9G6wQgh7Q1l1Yg8MY%HGur|jQvPO+)oP5vz$VA10XoF9? z0GWM56SCQL9Y9c*l)l%oRFYqmv6L;^hXttpeJJ_fXvCB3yE+)}I?PNWj**Ldu`{Yvl^-}u{ z-ky}!wI>Sxh4ajJC(4a7a;4m66gWBO|Jcf=mOo)5R#kH&U?@y>>cX}taeWNszlp*} zj5bphqOSoFJh}^$oJ>=SgtK_Ck@Lwt?1|_kbwf}UQx~48EQC1+mnRPZ#>ua#fo@Bn z;!P{TGKzLELn+_aAK(=@G#sU!ext|<48hIvD0*uKiX~siY@1Q$x8A?DwnG)iv6>2d zFT^{?JSO;_wR_lsw|~G?A&$nJGGfl-DlDg${v|EFi#=Mno&hSp_ij|Xv@Uh%!0bhj z!)?KdE9zYOpRYJx7w}1UbR1p={G5z4Us=UBum)|@yWxq;=`BcgI^GX>q_Nio>s^C! zowxl6S~L1ncjVNI@8G!U7Mvo$_U3&)dGF`NS>OU|0x%h+jw5k5Ry|a-SCjR94qd4G zo53&P(0NQ{G5IH0V{O-ix;(H0+r~LU2)1C;uTE<&VyEu`TJLuElOUBmr;>hGQPlFO zfhyQH`-vO3D#Yn2J_Sz8?QuLnZ0NNkLJO*~Wl4l}Aj7IAk4c&KFhY-7faD`*$~SIe z%MY_K79;!j7iy=G;+Yj!re17pEK2-}04KLgP>)eL4GbjOa0VqJ<7E6|~0B~_1rZ)SNBv`eq?wu$k0_DngvZx`?v z8z`o>IdVok?#334tlpdr)S9bZ%=a86mt&y9NwnK zPG+=aSrKVKsxFQWKxNALzo98nlVdQjWmoaLM#YQ6&=0#-l#lZW=x4z-gxZE5qIw>J zG%}BT+CSumIbR1N$?oBba$g2xio)LFX=q|TzN@c8x&f@|2HJGr?vCdH_L)f4mq+2u zA0$|*a^|a@zb?h(;*Ww(k4Fc*&$YqRq7UXHB5ZzX=K$bJdetT_(-i+j4{o`HY} zu$A+iO*&Z*5oR~;`$1F76De+%Ie0$J&=TJ2B?UianzeHUX+F-DN#6S&n;A?Yf2%_b|MaxVCtePlFifHUaM|Og3$4d&_ITw{FEU3_Vsn{74 zaE@6I*K@5!jU;PNnJLY=mbMV6OBjWS#~H|-wF;+r9FR>Nvdl1BQA;2Y5_*JEl*GJI z{>m#{sPD&5@Gd3#_`o5J3f6RZ#(x61fmjG&RbCaahHbPIh8Pc0MB_TJ%_%`Qg6G1; zg6t6Ln>e3Ri|XOx%1kPLv;&Y3abh)cWVXYvJ;m+}0G}4W&H?MA+&2>6)tG&NWA;as zX~q)%myh6KCkw%%y0;*&HM3!^w^CZLsz6$>n(P*SL3UOD$0m~HAnd*&7}BOX;*nQ$ zgsiSKzCs#bNg3NTc;e`p3NR-9gD!IE`fwvx>G}u=ETPO1#w*Ci@^55OI^5>X3EYC? z&=Dk2IQPj`_7;yRI+F2r{_1&PWyYQ=f)SvTNrDWphv0U1Wb8msGaAt?*nO^LnFN<0 zxCrzeh{E=tsn>$8D4f^w+%FVjTkwhpRrS|W2(O&Ubi2i-5mALn{a|hU^M4UpEr;W+p@h}iey75xn-XBH*PoprXj>+lVL$|NnMN`;9 zJ3NH=-(jdJ*EX&X&X^t`g?j+o-N*I^VXmR9A&iAwj$0y)?%o6SJGW#M>%N!eW6=|b zVu}WVk~A9^hx?K;4wM_RWh>0~n!f8V;!$A*b2E3GPIwBTW7jOj`UOXc1t=Il1U-e1x0gO5y zJHyKbZ~R@D-LzOv5kEt4(WHvvA3<#_tblxG1zcI3cr2WuGZ|D%xmICpesMqcDy|=U33Oz z1{Eb@li|5PfxGN8{J1E+1y|rQR)u$(-qGL(A$@AP^Bc&IvSt#xoOkm!#xn6^JLI=~ z#hWRQnY93%1e;b+0habN*ly?@_Z!1T#Yo!Hg^Iq^M<%b4?L=vI9!7pWtf_?|u#Zcr z*~Au)1u4^T6u=h7iR)>QL4c~YX)D$)16uF@kbB~qw-aPCvMxk&LbjR`1Cw#FSxwcN ziKuvVcZR==mFr;1ou}A@32K3v0R$dfFJnN}RWhly*|7l&2oo6@DN4#?lJYoZ{oW6m z+xhdbT7GYiRAF6UCc+dEhJp#$Z{US_l|2 zTee3{uT802D3k@FdLZ1%90FW0Inz41i;{nikU2~VpBANltN7q0=1A*Gh zuXq>qDjsRrxgn@G5Xj&ggy1+Y-k%C)z5y!G-cW-`70zfTt0xCTH1-=RGWkKRB5YAg zQSXX50EF3mFtkvtV~GOdC$bM8lPgsE&pBio)yx5$M<+_X&+9KY`6z-Jc3r^4w5CZc zzppxq??jY`;@WBo&z8>CO6-Ou)Hn_!mLj+Uuu@9*VYaM8S@Z7}!ArYq9p=gg9(Upb zI4~qNlPJ^WEbgp2sge3boHjIOu{|1NdWfR>uf;`o1en;HD3^&&5ItoYh9Tp?U1aa~ zc`-gSatw0})(bIrpt#>~%*q^Q2$dXW2@hiTfjbdqE~jDFnYna1vjmxwZ(hQ~<7eS7 z*Fee?mi{=$$=DD8<5G1JSrQ}@q`rPrvA=^?*z`$@4D=}RRs|lX6|3Qa1{U}CDKL#; z++ho~mh*lpTggN&cSZ-KgSc z5ss0i^!@3UK6ubWzp3dA@mlD3*1aW}Ya0-LuBb;n#fHS1vP{YEM zDBfomx8D7C96N*ANYdbPjF|Ui=!B(5x8eDhH`BRs6r0}}7gOO+_C@1g6vQ$32FiJ! zd4q^xgT_dM#!@iOKf>yG%@_b;)MMV`WCRcAZZ;{Kiozc+kfMjF)cH2cYJJUkr3P>tP^Gys*~$TZYqQb~5}hU1}Q3)DjT zxA4t#vo1NUGz_T5e=`PD*&aiCA_+KDw_~TV0?V`xMgGOab9CL~_+XOzD%7+yj@*}Q z!^1$h#%)a5&DoQVy1WWcv~LS#QvNd#uqJVF2ERi+y?AB1U!>~DR6g9P3Ww=bV{1~? zh6<8xZ;0Zd;FmN}q%F%~nO{Q36x5@fHx_l4d~oMphW&#lim)c~I(0GlR?C0s1>8G+ z6Q%AQaj2lgAWib^<$-MBE7)|eOKBxARONy3fOx%iPeB4U4V>Q)6BN>f(T8GfJ?zlT z!M?L=B)6=yGPwzCM26Rs3AJx1PQd;iveZ?;mE_qEtaks46xf_a*uG`XfG`W3p|yR* z8%5_02Mmy|>pX)$K8U&Hh*9O3hxGPSU|#sJ9j_}OYa{rHk&)V>1+uBN64HUNQw8{T zW})kuHk7^=F}tfNBl162xPIjUcs<;n1vJf{v}R~<-P{w#$HxUrILTNsNeq{I%_PfG z0|`+oV(a5*nPk?%+3-OVbPw)kXQHrX=_xeIW4IDD+3zSv39mC2zi~KL4Z8H;mh|8@ zWjWs!9c0vW?qC$qeJeHeDP*QQn&xqa3iRpd(5N{lVS%FVFjtTqa!5NZ4NknmhDN|9 zDctQEGKM{+(j>Ss8%J5s+G6yryH7=BKJmQpk{f1mOXLMOSfDsZ9$mm7Ry?9sKj#59 z8r-Djck1H{?V-E}%r3V;s^~YJjcf1+eW3otRJn8o#$#6+$*K3Gui%W-kykLA9?KbB z#yw~5bYU~fHsX~vX3ip{<1KtxGF{fM44=@!#b?bHG)k!{Y9N{Yj?rX9&Ws+Tb+z7D zCfO?_dl%60=@2^2oxvKlGcp;b@Y^~n?sph9YReeYpYS8KlR5ZrqOfk z%Dw$vWYRq+>7KK6PeECKbi!+&InyBNjo-l7ec47z)HBW5^n|?H+`)pGwvu|ZImozj z<7*)vzVg{wMA{ZGLmC=%r3cCvxt9pF3rH6q!c3!AceF>ESwKii=Ll4kz4rpJP4|hX(G=&q*UT}0ri_oFC(zz3N3fR~DQCPB05fLWEQnuI zUh{V8!n*p@FB23-^yy8BM%~2PjWE3KIvIq~tyvqHRJ2(t+9DNgCC{f&hYl^H=)usQ z2vx5s{hw%%`qDq!U=+OD^^r;UCFy=`Iz^;C6*F;U0%GiE#b{RdEliwT1eSE9S*%7H z=$DBq?Ej(I31w)pvVMCsv!1LDDb>w>K^-$eUdbzD(!@SS(!{=`SU7*t?4L5IWU@i*#{H~_yk3Vv4WyNh9C&A zq{4)ahJDP?9neXOfp00#-Wx;PHe?lYTmAH4v=LR&2${Qepr8Vl&8JLyh%}=2cM*Oi z(|SYS6B*U?*y+i)$}PsY?(pXtuGDHCqR`Oqd4FTor@kDUAbQ7-avRyHwH69*rBU z_yO|c`gAr}Q!u|2)aV{KcO?w=uzH&2{l^NVk7Fy9M2>gHefVj|!ZUP?_7y zrG_xhkENhLoDjDmE@Xj-Y;%56PBhp^;oCe?Jl%t^EEL=PEkVsGby^fM+vX1B zhIq9LuOm%&MLaa6Oq#ATs*6-jzQOZh-jHX)ykEBgA2_4!HQxM`x8O&8hjajC%O3ay zZE00!5T?HV1V~#hG7L6pIuB{yGv@jHgug@pm+&tIF7Al+FMOi3#3Q^q{!~+XZZX%} z2B&(>$YIw+EPgP2fA5Au9yUC`q2ueJ!97Bl>(dmrGN8z4yDE%PKQ+be z1z%}QS@YlH{=Ex?a?r7e&i&w9uhTDNTDp!+xpi0O;N0a9N<7QF)gRMId4U;2@9kj- zj?spE!V_Vc)uMO`3fFxBXKfJemQAL}=CC*x3hLokA3{;yP%GveLegU2qI;Ah0?P8C zh(&0Zom{lxZkTRa;9=HcrtsP76G*#kb`in4T75R>;)72C74XHLx^iPv6C7MYV6GgT zk$+@pu9p#96iFk_Nh8jK(`dUW#<(w^5b#`mQ|T>Vv767ccwPNWFh<7Nr+kK?EiSuqk-z zVVz@|1T_YuBX+KxPV6;f{f zX@C&n$3m+4#%H)J4`5%8>7TY3FC!m>LcyAHexPBL20U2=xU2fY{DHz`i#Z&2fmWC> z2z#zLgVaZ#B1o?uk?Msv?gBTq!8AJGL~Of#ZHy(|eo1#gl20|NAicvfaB<*Xx9E67 z?nV)3*ycWS8g=#giISRZr5FV+Z>PT?bq*l!MRCac_^0&vABqgQiJZCnsr9suf)};D zJQlKoL6aY#)cCm(SX?a^bQZ<>RNiMdlo-~xF5!jl_6BAwd@|R{q&H?p9&m=g4wWc+ zBb3muBPhDSLRsyox-v@ofG}Ue{?8Dr* z05?z=E4Vx#0cjG3F{_^?@ccsRlF$>QZugG&&G^GHFy0>d+qD9aX23|kFXj5i^DvK+ zaRXg;TOf5^5`#45%vGdObwbg?;v*Du;tg(9HV!hW5zbVQF13}+1pJBa=MF(?Q%qLt zpL0Ed9fu*m(fh-7Ue8KT58)Bz~G^Ojce~5p4{etC&Dj+qVeE5f+^rTlJ}CXj~y|Q zB?5*QAmPB?b}$NxkL9?{J2xC@$z?Q*eVDaasKat_`Lh)_*X`p5v2GAt>wG~|3J^qn z8>1Zv&YOX^V_1VRhy|u(^Ix09o57IJN8zv9<1gH!d(n%(SgZ4WTO&U%4PS4 zmykN58``Zc%9TmsN2KthQus0QTKpKKVm@S~nLAhGgKvhAzEuOcbg-v%umY8ZE#C&J zly~MWN^0JwFg^8dA$hkXmuaQ^v4k?__}5&ZLGbwr+f=Aj)T00**k!?_p3<%=Az8V9dqYb1s7OSqr(&t{R|Tk6U&pGaF}I8S+jN^Z6h(W>b;ea zh79AA4jz3e^}~8x+^WPuPnJTY?O-)bsr)nc1d5y~|G|~6Nwk6SuxfZ$2H6%xya`0E zD18Q6*Xba!!${*@@Uz+AqeE_A6x;WaHJV=hUH#CnGs; zDrwOM1EG8cxvgM}35D;$LuhwTc&aj^;R|2l#Gcz=7TyOR-i(ZW5)wf8iVeZkx~@+X zYOhgx(3oEv=ca20Vz;67+t0#XUFcl)-3%J1Lew@vHUL4PCm`bVfEaQe?u_TIlMS#O z%A zcI`c3DMDiT zH?~8V1byIt178|^1S74jP8Fp1^*9pr0korU zhX%-_?(&@dE2C3^8)1F~s_-ZIK7ESZC1tx{H=z1GkvrqJ=_vri42r-ce@_-jU+eu} z)ir(k30P9QaVq9g7xIqnjcw_@M-+5054E@J>JP&~(Rvzn5A#B8iF3#DH?{@QD93@I zqUw1IVCeeV+LpAHo^mPX z5C%QwF!}tG#YVhAt(xJp${>pV^pOQV2?v^k(_60x<6t>!0czG9ekGIKa9)wB`)M)0 zDQ+uK;8X{)lBaMx0p5Bx2f-j)D}ZB>#5ZFm>4} zmi$%U*%AC-vb(>`7o;M6`gb(q(Ha`PI$Wrt%+~O~Dtb{_v-=!ex3tSv5t;_KtGreU z-?rhcbkrB7Wxd~$yFNjz7e&5cf5Bk<&H`)iWfV5)77v>LXNsHK5Wq^pf;dW4Lof-? z$;GXa)y=~PsgFMvu;CAMqb14~+@jKC6O5D9A{V^Z_iYJyifO~xGHKFy0Mee`Sg$$G z$eNl$mcPll8#b;?%d}q`i&9fR6lxB_df>V!9k@YV1WPP4*J%{~o!z(x%o>S0tp3Cg z?zW$N;?i+&kB?IhJ81aeanRiEL_mbesLt~FzetmNS;$}WjD2O~7-&d# zXG5QnH-O$5Snhi`566F0RgsLx1=;t|XyGU+y|WMu)|HaG%;lDrdv6kkkgpTGUw-wc z9`~BOYt}U3 zm@>LS{K?Ex3jm+pbe5`XQ?Db9xzz}>*xiSRa#VR7%uu!am+=~leD)gSP;`w(mGSWo z@A-*vLcTrf~!3p)uvAN7;C)V(mUW^^79hsO6|MNb?D4 z^k%Fg=y@thXPw2nlU)DiATQyXSEwp%K1I(nxUaFD$t`n!b`zdydEd{cNCEe5?^FHLT9MJ)|ri1psi5FWxXe7|H}|Jlev&C=s}UzCkouo6JB zpc%#yu0%0{N1K_X2o3m9KxTChJZMt7OjaL4h|*ghL87cPm~HS4gEh>z5j65f4ulc6 z$$9TO16Y9|y52{`bbDTE7n!Zk+xrx0epxaaR6CY5&ER4X5294esC6QT1Z(LIDb$( znOdCZ&06?dFKhv=FTCN^2`0|>6J}9u>4jJN?+cM;sA`Z}eojK_y*Ur3?;(NlaoCK> z$Vhm^yhzufi1N4)5uzQ^&||gzNkOu!rc7HC12TD4hho-uK;guSe}QhdGMkj#;S<_& z_&nMDfRGo1IPZ5@E6>Kc-Q+psejJ>2c{_?c-3a+xPsDGMKuzBdL>(h)%it9@pqo2; z_zqfd7`3R{!INGa8HBi`7>W%MxmGYWjh%5syioV|VUf(pa9wdHdyL5K5a<)RbtR{EJ0hp0%u4{fr)4*_IU zX;YN$I*!uE;V>gGaz_eSTY!?`Pi`@BPuz(k;EB5^B?$;ZK$IBgx0dw`4(AL8bu1WD zSlS`<2*a5mcVVq6{&?wfOZSFuR_}&yfRXdQ^^UgA9RZnSEg(+ot^hR~hk|@C& z7M37b`+_iP)n|B#E3#5C70k2Ybj4i5yt^jZiAGMO(e;Jz7gzGTKx^U3AtK~&+_td!h_`jSQ^#?S zF_D^2yxofq91OaVGbma#wLl=j)`n3~O<=K=CS@Ftn0BHSh(_Lw2dIk{lTTGO+zuY1 zuqQk5Am}tXc3CbcVJg#)Gdql9vAJSGUlX=P$AhrOW3W*_j^I7aV3bd<7HUV6T~P|x ze-^#~J<^RNj||eUT88lU?$QMh3for>2oFp$r_}F>TxY2xM{3J=;E_`2+(VkCa{>2h zeVD)Hfrz%q%gkvC+a&?;;q$3gM9_cZ<@NPXQ91=DcKz5NppjD&3! z1&uMtV1kwp1%8YEmwPmP4JCBwfr~XQAqG5&raY*{4CxfiCfTp1BEm$S~5B=}me$W0d9ja2iH zA+35rumI!Z^$EBxdBnyM!6Cfx!awgr8X3l9Di@*8Tixf)UE(`-o@`~ajYrQAf#&^Lm!7-UlJIR+F^G+`9ju;OJrBrU$DAsw^z7VwPg zUNdxVCwkxU+NAsNYqoev0;zJ2A+J>0RjN=ep~kMqDCGw9LjWINrg2(dQ)5#pU?n#% ze7u{`ocxby(XFJ_tO42Enk?Jr{6ebwIZ1&l*4$6;ZKadrDG&icLE>;? zqW))GgzP2Fd;}@dj0T(s)-aI>_dSO+9%=@#zc~|;dYjCF#}VoF9{Bg&OFl!VVrm{y z6BAb!`;BbC!l)?Y(|4lseIif^hBT6UH60bu|cD3y#jf(8bWeKWE@w#I!gxJ3W?~7B|LV zAU;cB+)2!cyA!wFtKlJ7TmAtlpDXTK#dP2aQEaI;;5X%XW7#mwf!l;&nbhI1)ZvIV zg$;&OM(`g?{jZqAYt1@Jd^QUYwqsSSDU(SH7NH$JzAdn|OW(mO!+rG{K9TR${gNQf zETPiRR(Mz~w?&7Ct)B~YVzZp_yej=17Phut!2gVZvAkiL6a8BuUS{6i0jW*W9vtTf z#C<2tT&4iJ0Tw1~JBttM|JnsFtBCRw|AG$@X$D}xfFJ-xS0U|y)iiwTG{wSF?^fZv zp8c+&xZk!Hc+&LDSuq{6-s&wL)m(>M7TwSN4p#+;YDkKgX2|dNse~Wf8%#f{sDV?iErfN;L@Q5ZH%z)7fuMAnkmj1yZXG;|-AULuIh^N<@en@SN#1{LplR zb3B_JoXc5Zkb?RL&jN-VK9{4xkDO2sFD$R*{>LX-l{j)mRv&Nif9WwCvJyCd4YfC6 zJ11vVMiExX10n{bs3nR4pg2QIU_F$dS7=L66lpK+8_ zg@B5Z&E z4cUq&*;3i&B8#bGRL@0YS5kI5D0YIJe!VXip2KYFxeI!4(W5E3oQ(WG=KV=i)}y@R zrglh^w%XzFO5|P^3%9bRCi_N0r>ZwDfmL|GiNVM)WN{)=o4IjF74|NM*@2CBwZZ&~ zoX`5>xzZoIRbYi%okS?kHE}H9b0{5-H1x?hZu?gnY9hj5&+#*3}w?X z$YWKO&!trlOVJ;%3@8vLwWg4(JU-21yCW^V9tu{{)jWjyb+^R5>N?J3AasQzOCkdY zF?WFdueUSrmVyRU2ziv0vJekcB{ zQOyyAm#7FpP_nWb^&PCDybP>yNj@6rbuD%;VuO)zAG8_oY_^lve#mzhc~I&omQ)7aXU}~x zd8~UHRZ4lmENuYjxvsI`<S6qjP?K&u08&ON5WdaUJ8|%&>)K(K|52gU>Qa(I^c<;M!9R z!~s3{0|C_x2Whv=u+TF?c{BEGHud`0SAcI8`?dxI=~j7DkcvGiIj$$NCiiM8Hb;p) zyA9Q5)ojH>_bM+;tSQBKv(&SCJEiPuhl_LLagyP+D5xM+`i)70)&y`1Sak`13&fah z&$cX0-hV|uKC8^&J+nmgMoR}i;EiSAx_wO3oX=DEq2KY1sD7;c==P3Mzc%|d=oyoT z8Nk$>^cQE#j9N=qQz^bdDt3)tCq@a<;>i>=Jp%q;#vb@CG2^buVPo$I`LYg%KE}SWQF6$k?Jfg~;bpV;3KPb2XyKf3ES&Td(Cfo7W z?J^jK!+;H|Z{6^)N&gop7~O@>@`lbo1gLYl$RtGh+X2xG0UmbE5{+~eifA*yHr|+i z!Rsh~$Effut8+{zl55penUPB#v^eZ0D6*LbIR|dqh0j{~e)`pEmH!PWs4hUT7bW`_ zZ79x!54qF0m@tA08$Ab*Xa~Vm|7 z)lcz6VRY2e$eKeALH3Ch0%>qJz(t+UV}PSmS*tZ*6t&E~g}&Cyq5KgGP^!4-C~oZ< zQQ7*wus0es<~bg^ty(WLaug`E4X<+jNGOUou)0R}irT#22XJz`yj+ZtN_x?_tue@N z^NJC_-8m1Wnn>qJ#%c^3eit0(fW=+2rc8-@;lm5t0(38tEDB)%^yl?rkmWO|&j(e@H zn}HVjR(F(xw8C`@#TMH_D-uH>)fl>OHz>QHOEO8(%?+X^_YkIX|m#t}2Y%HlZV4lE$UOp?6md=Lw zcn)<~cpY`x4{tdr0+-fR(B!$k_rC-;_7>1kP!|3vk?$;>iaqv zugt}(km-$0QB3>?ScXlRt3FuG~cGx4|82#WyMxQy+18 zJ_={vqgUPTP%#9#wV3AgMBjto9hT5t{s9dF?bw)e`;D_wOmM-6Eav z0D%jc+#K{V?~xmK)cV476t#Y3#y2kY7GV{u)HQG>+@7MItVjELeW19)shIOb^&Sj^ zVk-m$2rPKzRVI=cN_y9iQ1)%DmbQ*GA)lS`IJ?l_ z=rKN)yR<%rrc2N+ROjAc3S3d_LEJxYteAx63=a`jV?dY+JD1~Hm(?Ah*rGM5Zo|c- zjU(b<_JtFi+0^Zh4_+&L@4`sTs6I}q{IOeXwZ>ADB(P00J78Q?da`_`!h5~A z1m_vg(9o*8V(n#sR~ieRT;^^RZD3WA$LwRJF)O9}c4nI6ZB&d9MwpPaz5ml!S{GXJ z3^`wibr$~DO+#1|;JcR$j)`xn$%uU{bd+bHxBh2$U}OV^w*k)?8roGzpy(OEU&3G+ zg^J5?;iVwwHwQsD}}zM z%($Qsl}tM%q|-==Sz6b>=i_{YnIu1q^Ea_;KxEA+bN55=WUBV(xYeq?9nq`U(_0 zEPpDkeF}hd^I~q-{Yx3ra9A7y>FY+8+aDr>dqN$go-5)Y z-Az0F0nixGk6H3~1RX7+obBtuueE@cDUP?d(wqZH)Ylvrq%%&Gbe*l%?3)}#s{G!I z>($NKjvJ4I;2U~}gXO#QMv#`aqYigoLE&YuOac&ix7`X)WY4AhFDNyonhSaNu8%?i zy?E%NwY$;VersVV5^a!BJPk9Fp2D^0?d76T8&YrE%ED6LZR?OX?*3M=0t>AHqJGSh zhS$@h@BIf=%*fYCi`G(njMOizsF3{H7ekM@Bg%{7o82lQaP920jzsC`VSA4_mErp0nBEbEg7okE$wJAcJ9=8&T+ z{}hE`lwiai)xzPfl)RU`I?l&k+SegG)Gp&aFuyT>+y?$uuHGy+Hv-?N8_<-u0s)sD zkul18E&A6HHk2Lfl4>4r{j|d>jivYuDIPw3kbBvCJagL(+w{)KxNnkYuu@VTT4)Gp zmbHSxA^Nu*bboLo($6{~Nas{k+714pal$wp0~nc9eC<8YftJ|R zP-&+sut)9a3Eu|O$h5{-vfVw-;#N~bUQ_4DYQGvaqN1k*z@}K~Mi?-U;WF4MO_N3MAYGh?KzzDpLQVT&kaMl+~7d#q!Y*1Zc=v^;@Qn)t6s{bwB)jiRV! z{KH?^*7+su!UR6r6!M{*o8w%3G5>HZhjPv{ezVn`HUOF1zy`P* zxd)C*Mo~n-5adZ2Odjocs}VGQDQ=auq_y4yw8z^#D8C1`Ho1O5H1Z5{#Be?Oi&ZnlEcp+5WNfErsI@Pc)?H0N4rqFKxSr#Bf zl?*~dyY{0n2&in7+78InNuAl)Ie4uTOV$H{psm=xA>AN(NzF*b;o$vlH_(6)o6gK|A#)$U-BY ze~;BW`DIi#(&2hJ7M1lmg8@ru&lkLB9=dl295_4gu9OLYlfpgQQG02FzM`umbyvAE zr5(TR1Tc`tXgG_hT%#bb-?V}>_X8yqH^LS){R&W$@Wcjjv3|+HGz;Jh2`=(VAEI|l zj$l~Q4Q9b!FaH#zRo^J#krFi3dd54{tT}%KY0Q0=HI9EqnKCAeapQa-h73;0#C02~ zm`$_ud-3j4UC+YI2%!1Q9S{lcMNd4-U*;wnZh;vnKJni&5PGz*WcL7Y|Oks@oVAIw-HV zD~cgEmfB>A+8G^ zKynnch%uC^5^C+Ku;_8V(THik339nVx{TEG+EQUKMc!P3Ty4IULuDyrOLjo72 zHb|{f_pzw%#!2e%X$Q)8v>Sx9%P{6MobvTZT{3+k8d7zHpaC&NBSUJ?`k0Q3QD`)R z!rm~nDA3#i`&_~9K7}I?6bv95P~60;C|sDBgETmv&ntLsYaoMn(ckZr&Hi7~NNon@ zEU32>)CZ2VmH;CNwtwTKc$DX7&`hDza{N|M;)fBaA|-t*>OEaS15dZdI&lG$+ZaN- zEr9+gi@nGYy%_Bh2G6C^h3sL~1=FOoJ&*WgIxPQAQ(g+SSIPQW0?&iudMUs^vNa3x z3OeG~iTa86QODR``wimLwyWW|L2UehbZrgJ6|D+?>2Nd?!nu4auUe4q>OUBswF54| zqBsuNA+E8U!mhN#R@x_wXRzY`vGpBbQ6160+`9`ZU}fn73+yhvOYgl(M?p|gR8&y0 zcSOWqV~@SYme`Fo_MTXx#@>66C9$93{mz>A|K5Aw<8#M*=T4t9r_Gr&L9Di^c+v(t zOMSl8pg^~o*dCvR76%(eV?4@Nd_w|@5QY;M_dNiI$g|9vRo|c(y`$4?T@F4uX;CSB zQ?6oil(H@eDQ;sIpkFt-_%K?JMWjiM>W zfSJRBoD)0(ZN_5$<%YkK`MdMHlrRpZj}#(ofe2fO0zxtXF{%2?Z*#6(xWpBY?L-^WnWkbUynMo?uyU14Y#LP_VFpp4c&wUAlM!Z%@(we2d6csz6>cm$k} z41@BxO+!Zt>aYz7Q+7igBHbQG1)~!1s``az!m4c>&{VslF?crb{)~I;S@^ds4)}@# zepG-%m@O!|grOzJ;3%ipn?2ZHp9sFp@$C&m(X276u}D|Vl3!L2R`PuOmz(a8w~|p3FIn67{TC z^i`(2bM8^@_&q?`&a)p#!WQ=h-h7E@%N$sO@3cQ!>TL&w=`&^Mnr%{HDlnrq(aR-IG(ZaupT~@Fj z=O#Ac(Y9U7)X;t18{mIzV%}+u+^tecmzjvw>>WB(ilhwFj>v!;5{FUWTn!IZyU~`& zq?uIAkd@eUICv}^6@QGuOJ0d=qk^WxfCAS-|hLQ_TC)CA4T_V)& zg}Q@KcNFSUq3$HqorStgsJjStSE24E)a63mo!TzGjl#MuJdfseteb%Ln6IbqjeOC` zu?=w=2LNK}*O2RLqrc}fk=_92)91ZLRN>H**er4#+d|P!DJnxKar`}W>_{Z3E(P$+ z*f;-V!bpR+b`g@xhDnm>GK&)I`y+SpV-}@c{!~eWsH$l^o+B>~;duWxz`o9Ha}`oE zVPi(B-F$eLk{1Ilz#+s)%HLrF)!djn=Xw9%@&!Xnn{gNPGaj)w6Z6#PUsH-qOhJ59 z+HRmxPt{~uZ2BZNeWq3qryx4_h#C6j*euCS-!cwR1s{6^-&#L~Lqj%x|6PT6d=U-) zKpzyin{U@ph#Q!yo@2O89tNLKTIIj2HZ&{Z8H%4+fv|gYXM~pN{8g8TodK43d|;o4 z$$y*0IZNJ^Vh^p?;T4Fo`&!65A_mR43lde_vPA!rM$N_)c*Zo5#Gc+T9?)|rA-~(8 zdjYrsI^Y_O`r3{mIh!(%LLDG|s4%5Ivvg2gnWybUsm@IYDGWSOM75PHPAn5AmQ#e~ zB$Sza^= zv&%!PFr@Z1TV(@#7#=;7M5jV(ootUX-=)y-qgph|KZ|Oeu~P;%xYO>#u!&H6CUdc= zJXe9!zoEH0Ukur^Y#s~uY&c~cbeh!j=J2cM+M|*C zbEz|5*x~95JI)@}%_;n2Aj&Gu!Y`Y84|GP7;YRrYW&8E>fs-ZhIi%Z;xiTTI`+H>Z z^tU8P{YHFL!|L)`J;-Pqtu^XmV4!MdLaHN2F+TmhS?{MC_#C0ze&*5hPBMp~^3We` zMhg?;tTP zEAEHki|)^U2;)oBSb1&{wiPcy_D?X1u68uoaXVhU`~Ij9uLp_O@OhzY`xBO3bbrPi zKm0=J3;vX1Xv{rpm~?!hzz9CPrFl%=mNQ|<`~UpG>#?DJIhs{-i|nFO5k~t#3m{Ef zg5!|!jPJ5%VX&xWK?&A{HY^{{Jq<2kCY|9R9X{F}NK@HbA)KS35b}=dsBB|kTz?Dp z*h7)f#dwfq9g|G>gnVr<;3=1ZdYBdTcg z9OHt+HTO$-=7*UxO4dx{>#kapX7()h^cokvv}#6qY)41NhDR|JvA)?}a2q z3brt_oLHQ)s%3g)GnX-}Hu3`8ii3eJIn69g;i3f$+f}a@;>GL;_h0inEMkRQN8wgV z?Qdw%Q!^dtJ`+HfOZ#L8?7rnrL1Uc87UA?ZumQC`bPQZp)-@Te`D{tvhbNcfW}!C~$@i((3%FqUn37{wIp88pW}{{fRIwy8_>yno&-G zx9kA4V8fco;Jp+N7i}Qe_1u}N!YYIrUwEqCrju=iJCBlmvvw`8X^cOkW_bVa4}95B zy^<)b-wc3aN-lnRG%#!(y5_Z-(#P-REqu@1maxeG?IQ9eK=a<=IN&Fal3OK8^?N8~ zD?GZRIC8%FUJtIez4oAfd(ClUINFE7o3bfLlG86OWjTx@gX}RJv8&V2ww3+KVo+1P zl;Uz`qHJUY%_a+SpLRl_=647n)vq5PR4{)6G>U@;KkHj>AR1}0l*@v#K*Hm^Zr!;t7KOwat`_V6CLlvA;@xHX_dI~hkMxv~bi?Eve#du))M!jK` zgLAWdxiLu4tkGb3USkIz`Z!)C>b=>PsB*J>B$%lxK(k?jDB z%OX&i-{@1Qt!V*#^kiWq%+Gb<8a9CI1E>eWlubDH0f){b6LKO2NdtCJOvOz+EVw~+ za{xke;8RL*@`h5v3<_i5%jdX_tNJbZG(N!7g~4e3VJzb9n~VcM=vi}S?_jA4pw~|9 zq!jTjMZ6ufKyHUH`~6cf2W^M3=0fLStv{Myu|ElJpJi{l02+;Db+pgK1PDa;F2>4C>$fSdk*FSpTh zlDJid13T>DHE^q*E^q3L4o>)k?B+2FNo?{5CNr%wYTkec!wO*#jTS{r&|`%%F-L^vPjy^|-C-k)8xuRu=$_VBVG13PQ}?f^cwF~uk`DHPJazs0w}l?u zW+e}=`sz!ifl2*&@LZGi+8|dmXbZbvrGQ4P532O}6`^+MGNp(KHo$!@?j5thlcdeu zh0%GYCf_|L@ZJ2F8P{*V;~sz{_?A1&7%Xik;Db}VhE|`d+^cQC!wvX7x^jr0@1J{<5 zF`xIFaH?`TuWQn1<)?492*6KXd|P zwgC4!u_(C8iVA`lr?p@7Csd;j6Zhd+XO07`ZI&s?TM0|g=e`tiiua!STH}zB;5MhJ z9-sxPXRMaAytf}&obKO2n5Vdju!LA;>O1j~j9x~&D-}fz!K`GFl|>-pt+pg0bWXp4 zux<7jNLS^HYyqBjBc`J?2jeDkcO%l|ZeuRG@HozmNvH0^&1wsUDVh+nom^9PAzf(8 z9(WCYOsY(rVB$7q?q@Af!R-A&FU50?;n@e4*1#9Hh9UHJz~1PK4iq1~o$vm#-pNL} z+NslkU0?Btr$1>1G$OsiX@cY_FF>y@t-x<3*{AgQPVSJ#c^;RS-scONR;{}srBlRs zW}GYAPvU}fs!Vx!1kV+H@&W9cr!?X~1uP;gDxM2@1TCX#kLikb{V5t5hcz!)<1|wh+0T->4ak^h)CmA(>OQ2{R?VVC6rWDCyN;{PD#ab2{T8Ry~J9Yjl zVDH$=UTmR|*U4CRbfICFn#<``RB_Z0BRk^P;ZiKwb%;Xa+?DAVDxU%qY=l%(WaHoP z)>D3p&}{Z9gzj^X;56SD5c97oXi|?oZiwvt0DO_`I*%-yeL$oiw0^Lti=|ZC(|EZ1 zkyK{C>$|8u909#k1{kjL?%0xpax#Eg=LRb5bP&sM+x%TBd+L=qiRIbeTF(5}hB=pvM*<_wjCw!p+WSAk<#y^L@)CYOpI* z&{;)Bl?n3Oolddatkrp z3|2B|6l@FnKQ%_G#5`++4!`W?1OElrVgIk7QMtDer!n-y0tpz-Tf{Bv0&$->uYdLH zd_!S)DvfDlfbt^-#cCfsB7K%&BT^c~`e+NtILFUm0=(a4T5uRJAqX2eUDr3_a_k2zW20_q zFZn0&v^y`Y!ZG_?a(>=YhMALxd%hw-jE@rIqp7N29J=goOyxN}K)4;9HbSL>GO)|Q zhh=a)X9o%hzcv~qyS)oQq&<|-?cFHz`h4Jo;#Dkp)$XhU8ErL)VKTUqZ#M+59y%0v zno{aNv!(hol;+3+LE>9*gpj*@6-b`dV?Ua$E9xvavZc^CClnoC29kXK5mNT;)tdWZ z_PI4)EF5@rEfVi>RNT(v7@`edX`JN@AU@mc%=Cr-#ml#39d(|y8r-%P1u?m^e@fY99|GDWP?&F7}|-^ zmeFN$v|rsoH0%j7$D@+9;3EEqEZLsA^-h%3qzmP_^mySciM4RWw_$-Sgh9O^3qu{^ zwZ*HjR6{z6kj^5cOoViyfX&L%uTZ*lAFkG{z z=#@Y>@N6@ZQdhpjXXoYmZ2-;oU2LpL(d$`8opl3_)F4SqDa90caW#^KPVdd58uPpq zu}gZB{Ul=9&SlMgseV5$IRAy+{D6dSDa4VH`xJib8@SE(KcS}fYhVzegC9h2sqkOT z9Y#Wrq5&v%z~^NkcWrJPVp*1VS_d1->fj`-tIE(f`06}8?X=B2=| z5ubLTm;pXCAao=I&V=Nrn5JF0{cRMx)|hVKCtPSxG@nAUsU1;DU<#_u4KPGwA!otrn&e;NCLCuXAmZh%>m zcQKxOne;^^E+7u2Rd{uLu~V<0X_s4rwNTrl$r{U<><5P*G`~g_Sx1-+>&8K z9o@k#%jVIfEty~_LcU;8ea#Ue-^kZ24)7~qQM80JVU}jB{$PQsXx zZXeSWRGmH@{ju*7p)gZekmu853URqmTrR@pAKf0JM3>s9`pXTY;R$lmM=|LWVDeHi z19SPu0Hz=gy)poKj>%3+Vcf^S$cdsRuwrH0XY%dYM8QM|{j;p?c z8*5w#tgwWS*DNZdyof3pd&bf%vX7}!HZm}RFNj{a-CUv$niyn>8QTg87tW!w%awRd z*j>XI+v8$AR*+h(R8j@*?J}SVwmos;I@Ihj5(m4GdgF3%O;{jnfenPT4qbOXl?ZVL z*RW{c;8u&g9FdpnMAoW6hU?^v7>3^C_HqNrn?DXV6p7s++a;FcG-FbY|27% z?7$mXf-7v56uTUz@zTlys`$edA0p4PPP6(fC2!UM3@)d^({j5(eEE23FEzf~p6-Ou z{XOfAv?%YG5m2ZxHGYcR4w=-GX< zp*UPA4)+p=dmD(uQ1m_gf_T;7G%n;3ZeT=_QE&Y4mfY0~#Yh*fQ+!<}-cv8VLMtBO zcxmm%&3K=f$j73hI^05R-P;Ca-k!w-E5%!cjtx_ktoNhxi?8r%X`q9E8Ey_xl`@Cp zH-gd{Dsgr*8;&}VN}c*gVyhC=SP#EiCDLRtIAAbZGC>@-RKJ;>~07ra{N{zd3~wh~JS zaFE*>CKyk#UI(TEnqhkAG!th<&>QcxgGiTLRs{&~EV-tzgip1X9lqf1P1l@`->+;)GkFHYkhwMkm42|I=rD*f(saxEsg(H!Is;&%?Y&`ZVBb@J z^9`h~#3kT5gMv)Jika&@kh|U-C;Ns{aN%?`ApD}IEW=&tC>U1C&4!buc?ZPWy-fpG zW2Cna(^`ZYsi6SA)j;^(7QT0IGczN$);}^jd7nX1PiEj@au8_;!)`tLu_39hF%`Fc z%8SO*ZahNma;TG&K2vr>drUh{N*6Q1hZ*M(R$Ew&V>okoHH4e*tiZ`h6Y}2S0n?n^ zCD$nm zp=wJc5Amba{^vkRG>h&+;`8nL6P^QlZbi*W7xf0`*>}Ei0}2MWM_il5tSfZ0K8-NS zj<ZFF9eCM!|>tT42x0d7=k%a`f3QWiNP<*kKO z2X00fHK9UlK439%F_X&RYO*qA81|S`&f!1ba5-p{SRYNPqYv|vdJsUF!B#l-1`j|m z@ey~XVS^}$OV>?Z!a!eMzE8%51~?a7HTMS;q1pR~Lg<#@e8*A>F#dk>K{Y=DU##O| z5IWsteXUF}S2NIxmBKHU0 zjv_l!;6N#FCG&WAN1ns=Z__CDLk#m+?VEyMm0Pq1o@m0D!Ew?7tOuusWky2P8R>-z z0!Y@xtN7&86KMa-JMrZ``4YP+aoKbd>)idRy`&~D^NOP*IQn(olHxuDziq0K_juxB0X@Toefx}ECLbZy~ivP`Qbks6~ zLU6XqoZ?pBM`YNMAlCYIg9$5~DNmfm!x~oI4GB|Dk$UA^&;cjYXI#<|{WsrmQ@o7t z?TZH5e@n-+Cgm|kF)Y{x%JKMT%NS*+4PSr)p8i3qdC{C=cs1B9uZ!%v(D~0HykDt3 zR?7BBkZlS}SxMP-K@vi3@Ie`Di|?pGpdm&{Knh056va*jr19q{>en?={bpP%Y0AD9 z7!vspd=UO9I%+rApM>1D*y^a#G)G|(rgykAaqV*OQgajsy`ca-V9F%htiw*0*}$>} zdc%)gBt#aXHUGN;@8Z0k|^x*GJo-4%lgF1+BiO_9G2e(oBO(sR- z+pNbJYi4uy@ty8Uok(NE!|G{pCc?7>j@V{_^{nu$d2Kq&a2Lh7|{ zJKh}j<;%XE$l=Wk$m7W7^XwBw)L@WCA6$ZR@`Eq;m1r*#?PfJh73GE77fhqA-YWR=aHQ$AhDlSPDYJ;qA1Hj&7(5i7rNnQ>csNefW+bZ&;tx&Z$xXWc481yw zJs!JuD>%Ys9u#<@tcHSpc_%*(*QMc@bvSvq{ZR%7tFH9XFBnc~&s5&yi zsf5Z7=d{;T$kTeB=vHqi+cA%yKA$1yAI~dHfY@~Xf~0sdpBRE#!%Lq4P!cQ`anBR} z$V7{^YxPPJ7t^V5R<{WdPp;lA`E&pFy)dz!L&^HIA+ox{gS`WJM>N2*DwU@ixU=M` z{(p5NAaX4KU3%S_`xq8~B4U37eCGBq#dF7vs}S}p`-;%gJ{FpYHTN>?c{{!h!RxEqOw*qm>8!-wFip5{s_OvP*QCCg=^@l0K+cZ zLP74;dOLWJ)3{U-`ZX!Efa2{V(UKao^O7Su=JRR~(c8cKfot+>M4hXjBg$##A=w1N zT3G|72rm}lB^YV14SBM$4Rs##GZcd9^~|K@`Yp2pa=*Ca%x#SlH{{;rE_8 zu4E$Cso{0ZvgJOqwt{Gjxmpk_i3Lk2*SAbRnAHP*#twRlS5IWT9*tiNWmTu5v7a1h zM0cGugnT3S<5d|)VauAMz|^d+c)j=Vs-X(P((2RDUMJj6dkQlI^k2eLY{4%G%6 zC$mWAp>zeYyo0Mduare`Wh3gdZyglS>2I7+)N8oETGD})J7b)8N%b}4)d1jxme2D; z5mq_mRF%l5jMKIxaC9CH=#dOY z_OfP|4&ugDaRc-7KM2FRi-b8ZdBM$)&Q8dq5vHXd+_mHbbY6G%4M! z(bb#Yr0xk^2GKF1AD5o8n@N(>skZtf5ec~F>LaSpzpbPwWu#mI7hcb(R|aE*$VuZ6 z<}Q4J(6KKJj!{U^{UD@vKLNY-XA=;g_JHNG5&M{*u%x$GBpOE+%H7tC0*4d!aU+`0 zx+7KJ;shf?4~{%!@=b8tA`9Acxn^Ffbhpwz0~ zoXM_x9$M%b!e&imeQgh3(!cb_2hD4=PG)DvyoC24#uS#7 zOxU{R7lE&sKmoUzblShg4QG={ZiY?M+d3@h;H|L79F_00SM;l$Yu5&B*}h%oYSJJe9!h7uIV@S1xy2bPhA zQP>8SO*YZ+1I!zlwTDw@l;J%blFRE8lok9A{dF>C&l$QM7nRLLyEE8X4_RPnX-_sjEc(W2Som{nsy0TyMT5g=DlR*s z*af!8mZ%Gmo5OwEsvlUrUq8(NdhgKVo6(lIR@Az%o8(VLzIyW!m%LT~W8xQh>I2k4 znWsvS?!$1Z$nT8?YT$I(XrZJb=eT`}NK~o)qYeBCMzMa_v&lh_jE$Elq@@$SWEa1L z($1nu8T0vWcM1_z*T@M+i3^HgzbzZp*;470b9~mqr6V+o9XHhDitx_Zls!m50fAuv z&p%xtY)$TpoOyxs&|7$dHs?2g4_+Dpo0g$zc6TW}?<(^Kxkt%D1+4~hrzc{e6tusN z9JTqkxaMz%Io~C)oeIj!K8hDJczXx45O5xa?3@ZqhQ548=J8+D%Af^Un9$N0*zJq< z3dHAWRg`?AFH{e?KP^I@(&SkP$7C=tTb+spF4D@cW#QAvoLrVoM$H}go>bZF4%x@Y z{KqOezI2mB(-Y)j7cGmieZ<%*^6r8wZC~BbrPSGb(78Bj^W#=SBO@b2*bf9TnRbb6 zg&GQb&tzZfj^?h$db<<@z9$N2Ah0Pa-MvfJd4F-2D_8LSKX!N80qZz`6Vc6t?$*@~l-Sh5+PRFipW`z+=2ept;z*)zLa0Z{O# zD;SIkU)VQaeyeMkI0cB}pr5}0uFT#*j>mdg!MHN}PGlW)G^ZR~YJm*+2Z%Ueuzan+g?zauQ!@0{s{IGHG$71}J z;I|aNW%w<}<=DKGq7L#>j=IC-d(s(FyZ1*?!Rr7AP(ZZu!qV}YXUB8h@>Uwg#okQs zSfUZROi9Io<<95H6_nJBQpf0-#JFC}8LYcO;}=bX^W<^lFy#pP=dlqU%om4~XK$f| z+5v3K~u0D8mj#$M`pM3vZk62?T%AK+eY@*kJuhFEQO02fV8i;CXGo@f@(-4< z$hio=?IPzA4R=_K*nx^PgqCGsZ)NJS17jjPU7)B(htZVDUS#9k5}%VN+2ZvQ`ZjMY zmlQo4Vaw{%oX6ET0gVm&s)IBZJE$5ToW2z!^ti1y602iT7x^+qal$EV?HQ-J!Z?yKxBZJSMHDcC zw|a|0yyz)jR6rE2;oCM2zec?`P8;&p1JHD*Qlw6HZUjAu=hb0KajB!YR4OiYf=uMg zOpDo;vj`m?pGTN^;V;Z`o)iK2Gy@z`4*BYsr6%Cvt}F&|4fClV#9JyteLiLSInTm0et+r&x`Rt)>*)n&HwS z-V$N>iN8myY!2M zt4dQ|z_*9=Vjrw?+9P&^(ga=fuO-hcrbMAlpkI`Nwvt+Z!IJLU97MJY|A;U^=A%f# z%lT}Z*RNFmYboD3Y42&t4b_dx0VE=ot1WgQ8sg%`a9La?aaoX0$rRZC{7vKC$8!ar zzX6!Sw7lSwaOc%xGtTZ#zrq@}bFWym#X5|-MZH1N?(s~H+&!OQPwxx%j0&atWn>$< zSwAp0FXLP5(VY<%#Mv?XT$BO^xeN8)GXrtX+bd;56S!M)!At7%axj2S?_T3MV0v5h zBD)uZ=9kq}JBc|8yPY^ah2`n2go_o+b;5Ez#V%Tj6f3pVZ)H2A@K%&y3*UcI7X>c3 zmQ=IJe$5#}n2DlZ&#_Gu;*^It^9L*;UAwnNf?SiI5RQ7l%hK+8&3AQ1 zBhr|;bNcYbe=$98+mkYng#*=RSsq8lAEPPfPpD-j;nsjA`Pcx+>^r;xxp1BviefzX z9D^&R1?21YGZHJdQk2_JJk(CbRx&Fl3mzpPbo5WxZzmXIPvjpDt}JS#A>u=uzlJvo zDd;N>spO+%?*Z7?gc|T1Gx+9N4xIJoBOYHwgF9u57Yu=Rg_}Yo>ns6qJ{CyhmS=)+ z;HwdU8*eupgxP~vvx7Sjns@4hFuw2=bhYl+B||aNRE%saMm7;6n_}}IC|+TW(bOJ> z8Jx(tNN!Wt$p$f$cd!YHlCM#nKNET9U43A5hjnDq0B^D5Z|T7#{p){Dz`A!_glNx6 zcM*>Mg-L0TwF3E_j*~0=bOCI7V31zply;b-0=~sH&_!x)(~uS2F+b)@yCH>kNE?NS z{?f~kqH34{8TT`dF@lYj@)~q0nMmN_$_OU07jK*a@w=1X0&Yu!J*!`LLK~bq%o+La zf1`4THqa#X`1c_YfhJYYq`JpGlTGX2kzc}fG%j?1IzHKt4K;-Eq$zG0j$V$Ed~=q; z2rOG!i#FATyh6I*zQck19G7&&SI7I=u+yOYe_5epc3UsNB>#OIHD2vPneBQZRy9cv zMIMtaBr*R7h}LYMA>P436!w#`1K~5_23%cCrLp?UB7&Mi$(qBHt@;H9eE458Xng6J$t_`Sl<8_(Ty#=^US-sbUCfOF_@{+z3;h2uX%brmF zp+P`Vp1!bs{q-&~d1q9iu%z?x-}UyTC*sg7%RDM`*C4(inpH-+{8qyWox8o%GM#rk5NQfY*#663KY+r-I!dfyHH!7(uL>aSET$%>1kmZ0*NpP_;aJ<$c<;-bI;j_8LvpI)FsLk1&_>pMv}2E&rr6b`@OgEHTC z3D#Ry^O5*CV&@e+d*7Oe=eV|M$hYVG9&j4#B*F&|vP`k2*>Lke?imK$`B z8zL-@W>#<1Fn%5hXNgKu&G7vXfLcEMirAd8qo#Uvs)s6cH#gLRePDJykO|097q!81 zgfhavktB9nzzpyoV1#j9>j11iUhZJZQ@?G12hr2W=sZI&NyRsLjRtN~lFg!8mLRkf z%TZ1Is9`8Bx%oAa^tMJ1F|lr0^|%T*k`iMB*;005m@$$$?zDxOaT8qP3mMGoFf$s- zd$?0p(>xhc!k6ICv(&bh5>N3`J=Tvp^(f=x^%K@i!7!L5_Cs2yAA+z+gXEsbp_{o~ z!CMQi3ugnVSMDN@y)$L8_Qv zd-6>v_EnGg6rR(ZHj+>UlHb|UsJ?kPjrd?8S7MucK4VS0e8!HcgLzzSmVt<1P?ldZ ztlxtX#~yywMsOSfQJVn)HkJ7GqQLV!RxS-Gb_+~drIjaX_||DawstwsP();X8NzZ) z=4w3LV7xQFi5TD1Sd4E*p1s-`i6e(_IQPh5EVJ;L%%`>AQH#*s)DyB?YSuPhBK~qT zYHK08QTC=fMg1IXOD8}67pd&~uWArr06+I=qecEmJ}`C{d_N8ViH}&pl2XV%6zK60 ztC8Yl9#$hXo55v!-oPMT+D}pSIY>FB zGfk|$0)pH2@n=q7GlNlTx?f|6xKZnIIfgW05PpLxX~6IJkg}PlTe}Fip(MT*iGRmY z)Lgb0PaS(1g+0h6%k$C9*|}DFAYJT-LfJ^7q+BLmDs2|z9ss)BMiR;w`)?#T>R#d#pYU|v5G4#F&*AUOJwmpQ9Mtg zfYB^#M$XXlc(y)e0FVfOCRtrws62+nD95o4m?3ai`N?A75G{Ax5`S%{f_Y;wU=3`jeL{2K6T3ZkU|oiJ^lNr+3w0 z(XlNGvHTQ;FnH)br13JRG1HGAuWIK_hAPM7JVxj)J5)l6Z4K}&oc0C7sm=k5AW+hIujaD^0STj zeATP|CZ&()4?>{Y!1Jb#nuO40D$Y4|z6qGlKB8n5BNbgPLA?7eczPPNIH3cVPgJ3x8DN93gH#Y-Ypc zJm@UtEe6h#<*AfERmcr-1YU6uCw^eh1dJ=Oi7!t1lbiA`O7%_&fkDR`vN~v}*DJcM zyTx`U?)!C;7`A|-y|v7<`RDzFtFK8in@ZV>Cm@^E_(?q6_7&$?zw6?!H(2#}wima) z>=$befKQ2S_MLy}cYg9z4q@4Pld=)_E&I*n0gKk5<^sIKp_wXYDc`d7GtQ5Er(m zBV?j9Y;C1s<)=NNBoh;sxVo+X0J_$1Y9`XeW}L-TFZaREm*P_yExIg+uBMAU_;UBp zl}b_bLDYN{HJ?B#+SQ`v(3I8Bfuqb+@(fQ>bQimG#O_>*b2*Q!wNJ1Rlt;+d+!z>m zg329O&8cAkAjm1b6~24c{h$=5OvEWuajLO6)r680>JUBd z8Z$w|WmuS?+t&K)rL-^2xp@oh0Vy8tdlX`Pp%`Bz#nFF(M3iag$Bbsh>4z}K1g)(b;lYMz z$wT!MlVMniL4I9?AJ(AzHb-z@JE6q7yaBBY zH++CrwEml-HV?+bguCQCHUsodGdhKt4IiV=3fPg8>N+pKu2)zdoOtUpnBr{m%<0Tv zrIJ}b>plx$L2ak>L*BT1(^0vue>NY=@~y4K4#ZaM53r&kr3qs%`_qhFJzGIk-+2hj zv;f*rXd9{3EZ&JKw`s>x&614+yUlFvPgw&t#&uDI|4 zs<|pgs}66spjMxqaJnNpQR3MRh|5dggSaHwm@#&Ta34hZ_J{*~w)*uuCMpit1%Fh< zBS4qsWOkFKp57~6e}TO?kH5-tAaEk50D^48G~1!fs_{+ zr=Nx>TQwp^zow|9^*l1MeHa?tSA_9MmcO#YOGfHD4!3Ifd+X=yLDF~ZH$;*6n829>0`XMy%&y9 zb%>i{aU9@|8S7)LfKDeL$i}YOSdMY&epDe!8C{RnJ1_G(*Bj6NL46R~CUC#i1O8## zApIZo!$46{4Me~u@;Qi8DB^?=Cn@2F-dMSwgBCORyKhIPAi;P=)nfI3d_&kzf1qh; zDvDU3z(cQJXk3q-NMU(56QSJ=I5R{fu+#l~0% zEXT+mdSTWI#vNrqNO=eGJ49(qaYHxmxFDyWZNSNHAx(RpNVhfCe4mK-9bClqzRZC_ z?K=TU44hbqIr75E0(@G&1L4r1c4)e;6*M65)}UI~^S@?$>b=kPasCD1+q(^>Sax+H ztB1inays2=1^}12RSHqY(=(=}AHwn_1CZEm7sFhH4lJA0C4utdx=K;xF=4+f=6i|x z-c&WXE50XwJq(+O{x{y>+2^-|STP&O|G`(h#eEzPL?q!D6nWn1f;PwC#5_s!aM6(K zAbc+`eu&7*-roSZs@zLCrU3mlG*BqKqLN8v zY-ebh9f{0NfwuwQfrG!GecA`uSha2{49nQGmNi<2R#Ho-_2bRD7>|<@u3j9`*gSRuH@-Ks1m6?%A zSiz<$dwr=g4-c{~oKiZkW08As<84?wDxdG}mHoEWp$tg4QnPvFcmNlmqD6&%i~=Ki zpFjyc({P0cizC+Av-ns5Y2IM>NqGGzycST%=K;taxJ)LSDLl>gC7+B~HGmy6)o}*0 z;-gcLMQ(PU{3-&m4pO#_=5frd-3QUl^GZ7i4Z##YnWfj{5|(l=)X+#f6WkQoZBkpg zF;0IirWoTYe3-WY%J@}Cr@DQCi?BHQ6JG3YnqpuuwZX73o>)bRTSAcb=xXY4Y9T&5 ztPDYz^=DIrmDW$t`=Y-ifg9}JzSB=2tEw^kms_F`;JlI{z_dA8tC4!x;C=|rI^_HZ z?cT{VklQ!>AdUxW*T5-33Z@W3vc+^sY;I3&{<#mb+kQ(q>^XXM$1;{(ipi_`t%8pU zd9~P}5I5A8;)WynbXx{U4A^{IR^oielV1(pS{fMGl5-Ok7%D5Ai{#ChNq2y4O%u5R zM_6=e^Vd^^e>DYHr@XBA1qQ}-}(@@ zY&?WLysi5f^uT>ri2|IMgBYeJ-_g7wYE(v}3K-JEw#iuN2{#7FPFQ}pJ{AY{e}g}L z+?C{?UB8|wBh%k&1(Xgyol%qnALcO7Ye?43FYCw8=U9c@P>6r2=xJ9}6*}1s-=iB- z+=Mc`x>WB2%i9d5?^S9L3)oOC3`MP07dNn|(egT@H*Lf&g$Sqxed*%<1nt~ z!%s5@SbUni-KNUo#cm8eG^|uvjxAhhl=Xdv_X%^g3@Dsw2vI z&GKoNy*_Y67%Y z38=MQz_FU0r(ye}#g-)bw+h6lwCll!i;n$p{L|zPjhfDf%InVEMmg?xAvlfPMqY-~ zd4M7cT+oB^o#YZS5@|d;k3yPOa{}c+GfGzSNM;s=V}+S59l{maCO<%wU3vy{-|Cf> z$l~NXQ|Z|Nb!ro_g$qyh5-fOe{Mh^C0c>UZJYWpne!mqUxYeC7Jm(z-Hb7Bh5Bo}@ z!3Rprnu8V`a;0J~22BssEx3;>hC(xVCnzGGLQkRN&~(93!1Z%r=eB>v4?48+w@`n` z>N5PgknY1AK7Lg+a~KA*@gL+=fvY4S5d_!oN16T~nG@SUkqyV-E&Ce-|3unj8>>2n1|9Op65ayf_4ZF3WZ0gYMYv;X=QVbtvk?9Igf`4gns2?vh=*Xfq;LwuV< zTTu=S4hmC;;ni7nM6ar<$$}?{3Sf{KP)Ld&6R7rrz-Jfp{XC30#~%Y-6uk3BRQ4@a zso77;`YtKqUb6Eiq&!mnd>Ya2GdlAurQY{P8y{^Tzs9i7l1v*@#1#wPRO$Pg?4CL_ z!FU?sQgi$V19;4YvyoB)H6h=UCrD)27$p_$x~!1gnUSuk)VdprE>sg-C3Z0~kQzm*x2 z&4}g4my|wfvZThrXXe^%b^R-)uvZ!B+(ESZl1K+tV5k@WJW~RH{<*unbxp-X|jND+W zmbVu#8Eu|{3fTSio@WUyf@#Tt2K?D|VKa_OpK#BgTOHPeg~a6*BDcFuiTU`RAe6EGz3vGm*v zMQ3JiN74W4sAgm}S|71>n{1FtNh5s``@0!+*vc1qsXy$;0{H%iHd9D-5~^(7jEQbQ z>n%uXbCc8`^O>6Q;U4^vrv7gLylhH!vv*7I!R8tQ&mb_^^!$e1+N-n0)j5=^Ie=~y z4r>XBG;K=lKUUzuEE*RLj9`rC{&=P&s{2q9E-?nKJ2*>D0Br2Uj0{szc+WkkHh(y^ z>-7h|hNrPbUdBXTM6q|$5!RVQqh|!KEKL_9;nW<8KFAu}**B;|ioj6WADbnq$#F(C z()xXd-wvtyC5k)n0Mq|-5Ps0~PnyL8=)Lm_bH`d~vr>3}W0(wt7kDMLbzzz}@L&wW zJ{y=j_3RDL%SX+`Q3wa6CA@UIpCxQ57T=y_2xMZ@r=g0O-ZeU2-gDSq4HX~PL zE+nQeG& z^oj!OZ16Sk_i1QFPN(L0E^|mhsP(!57Sexq7m7Z~bQyZB?6hIP*8{FPgH(8Rs9!;L zlNTYSy)*|n5r5oU+@A`>Z1q+4Y($0RvgFuLueT zx8w=H-C=`RcbGDRMjqdW>~<~IC=7xz>m`f@3gYIVKizHK%B~G4(+o?&g!10+gLQlB zRc*2I?G8WZigC#^xo(657c3kdn{mb1)S%G$Hk5Mr2hdP&$}!uFh;PNDn%jw+z4s1M zO)Pnc4X?mlUgDJl8$k^`%BQg$VMWF^Pdr0Fi@k<)n+ULQ>b?;F1_z z>DXC#@w`3*%H*Uu^&B-yynvq1u6~t%N$5S+!KV~>Sn@nABynLkMV{d^tJQx{=I}Lg zx4Yxu3N3|;M4Q~SG6T*zjg zG`2lcR#l}d!fYQ_@HlyQVV4TQ=aXPi(5CJr&|CgEJ-1;oNxzdDK43IzFHqy;Ng>iZ z6I0TF<=cS$tKULh%=%zWmJdj>$LnfYtcBcLbd~w)^m~kkZ9g)`cI=&inDQe%;oZn# zMI~4o^`^Z_AT3;*ZP~wxXxLITw1a*@{|8kBihLbrD7*?Fl(Z3EZ6UFWNYtpg2#u+G zG=+CbmYuP%Wr}j;t%2HM6usau52xqm!?;N&S)5CORjVn-MAo+F|MH7^!?UI5Nmq<% zG4^Cmfhk!)NvHOpGS^XGm4*^@#$kIQEK;QTC(N`(zek+UhxTD6C2W<(x0(o;iGMy; zswSraGrljQBJIC&U>FrAFvHN#WCaGqqaRL!ngaFtOnZu9$$w*wPhHoxMmV$$OGUb1 zw#)Pl)myuyoiapJY_&1Eu_Bq053x?;@@LZYhms9nJSR+*#HmNn4r%ehc|0Y|!X^R4 z!)cUe_zx0v)ZW3=jWghjY0Or5AjV}s^W9dT>JX~`-pmee{3*L<7rd%6CnF3F-iZ=C z?vr_Wx}F`hR5O9Lebf}8_GMe{_t@Iq;0%1bW4jF^%jF9G&wS%GBv5zJ4~+9U=D<86 zlUSM(llq}w>s7Mah@!`i#D_6MpsEIkp_z4^aZ;xr7BHs3U%Y_&w;!jt$R)Br z{K61bg-*eu>r4)_ZX;ck7l5{V*IVh2noXsT$~yuj%IH>09qx za20uyg4vJ7$y;P^K}_a>V&FE)^f#r{${>vbhOyfj&qsr?aq%y8x_lFFju&DX6EqM_ z8A~>Twi@b<-?DL<+Kk+OybE|6G<7&iZnY68-j>RbKZ7Z=!}?>0vi0VX@H)o6rjfvI z22f77e_|0=e)%^vHT^ffP&T1)W66=?|K;%r^k;mk*+rr5{xZDchiWM6ML4oKT2E{$ z8n)86_`6`Lz>Trm={9wK?ZQrjLT61wi=%tPPGTFDz`n=euyT0L$Nk2aHMU8IpIhk`bshlz z6E~`USdZ3YQDBFQ7k;l@&=aB>ZM?#umvA&EZ6`0K2-_yYwgcq`@7jy9y&Wk3JUpYa4SCc5mX0 z8bjR#lpAx5VYtI~9eSpkOKum_QA(W08APT;euQgE>H2M|Gb66yPzb_0*DDxM?N)H) zz6K(#nMi|%A--)q+O;K>!puHMP86~DCSH3zrle~sJYaLetZO@c2mB0XAp$1)&Sz%x zkjI_;hWe6Q+`zM=^d4*lA3+2!=eS3|`kZpc;IP>$Y-|1qc}8~kCcpD@aV9IxJsRaa zNvG1#Mhr&Qd5o+QHuJuJkAB%01CP^vB(dC*JiTrqF8uOqfJMno{9wjV#$2h{_7V;c zu0-g&uNuWQ0v&a^j@zNk7BlE%ZhRoyd6H(+7=?h-8e<9xe}YuL)zs1RJQ`yjk3*^0 zW@4D|hKx0MD648mTf%Bw5lXGDokC*gB+8k|O4r<(d>E|$4LOQ@J;S4Gt#|4j(Rh|r zMw7f|BTZ%gX;{vVQNO}%M;67_h;bn1XtUz=YG7 z%#5pZ-Ain%P9yI{F0k`-AoKmM-x0rK{wOJqEOx-j4xs#$n=D|y<_7kBrnv-_M%}71 z&^pWHZ~7@}`7>+VyhgN@#Qpu`Gh+aZrtVNwj|_BcGlie(3eYN^i-J=7F4SkRA2bYP z!6+CX|Cxd^q%=OFX8N~Eeo zPIwJ2HO2~x-*6C9we2VT){vd%1fWe<+aBe5%*ug){4))4$F7j9)9cbfxSrOCr&{=ET@R80R?2{-DN`F>{z<>@L|td9 zKo92kmqa^L3g7b@jc?b8++%)J^b&*mfcbdw0~)8=RKx)5n6%1B822#L8<#sB&>+g$ z;tY2$f5|&AB!ise5v8566^?NedIG;y8}UW-Cl-kliz#*qYou0slWLF#J$2p)`{S1I zfT^)dm!U-Wr?1GH7;z1W4nn5~(FbH$Zvg9bb1j~OaVLu%{QZCv7s=Pj`>7RItlILM zo=L=`Z*LzQ6$|bB1-*(a#;*kT7`S5lReR2nle+E?M=@z94oU$Ob14<|EWS$R*OCx9 zDtZqLP$G7p#EscfpQ}__9*>dF+{2_WJCs?m;R(!&wOqt8x+kpt^h^yg@Dupe z13VFVZxeq@I>k3P)U-&G>St1|_7_lr9u%Odk#rP3pa({&z#cybifR231two(ma1jy zS%m+KtgnubB6;G?%x;vR*%%?Z65F`DyO2PD1W0fKB*EP!NU-3C!{OZFhih;-;NWmO z;BYzIp*rtd%kRB^UOr5-Gt=GEQeEEFUSHpsh%vGl0~p8I9~EP!p$95g9s=(H_zr3PROMJ&fIHEv{ z1UB##&K!>R*>&rOL3gZ4{=Y!vmj-Lcmw6Oe*j6@ipqOo}>#x|63=HUGZj4+QSafBU z!9X|m&}Yfm5tkPL_yE9Kai#ko(U$i?S(e%nGzf+iO&TT zsC34VIIUfYkPXm2c#jx_p%(Kx;Yg+ilKA~A*%(YWP9^0A%TL)G78D!<3}lo%abP$M zmZ}500ciY3_Sbm1xGnp`5JSPkcooJk_6T!Zna;gd3+{_bDY6 zrcXEA;AEMSFc?p5+ZbeujLW|RJ|6kv@}mK*c-V7J0`E)jk5KX;{#N!R2HpIBHz6$w zI*zgQu^J}_I#B*DFFY#kvYXZ8akiBxG;JvbK79gb{D__jxQ%&BSrvmZR8>g@$l7?w zB%~gRh@aJ?HKeW6xXU=pY`UsJwE@YhR(Hgm+V_bJda3n+n4qHUFAeZ4s43Il#t$g; z$-msSumQX_+TDGM)F~y|80gNzn1bsipf}DBgh?{_&W0xZ^#<{JBWb^;D@4II6zhHe zEeg2&YWU2+tsKfJ_$ZuLB)5;08&?f(()Phg3Xsf2fhYG5mi`j-xH1*%+HcmjG35hy5lcP;f#v zN(BGi1|4jgzY}to*7gBH1tPR1JOy?;%W$EaLA`5vw1-sO0sJEv%xG)|XhNDwo;UYr z@scR*N^!qvA@wBx!6Nd$jqqnI!H>`I!%TAmU*K6$2_L{8r0@TiLL6TxjxQ3&7gP9B zN8Sq*E7$VjmZR@bJ{*;>?tUC1)$A}HR`-8bVj_YO{;o-1X-HYTTJRh zZ97<@MGbdRp8^gsoB4JTKKi_xoIiFksCh>aoWBwfAweXtH_bu>U|6^TL1&qBj2rC_ zbwTd(i+m7Qn|tl?DCrIqMiR9eIu2yPJGhuHbd|W;D6_ z!4ndz+shpOI2SCyAhKj4tOmh0U*vg7h9S_g_d?X~w0E3|k>qM*@*T7rba8gI_R(JCWOeO4iv@Wq2H zT?%BmZ2vJBP4__?omHSA&?HapW#)dbovhz4zd0mxhaw zI_lc74cevlSsm!F8HkLGTrfyS52E|nWU)00Hi3vSLG15`;B~OE+$@nGV{VGU@3axX z>`)2(ut9?~5uX9TC@)<1KqT(f8`SYw26?OIL&~c37L|JJU%7-*Y8NHgIt$6j6?pl~ zen8Jyazq8Hv5)aKWg>HRM`Ow3SqOt`ki$&KWK{=?F_>XfC?JdDi`2aUo?kZu+52^j z#tZ#0a+1qhHB^@(Xq`&5ZKyts=3+Rt!bE$EK@rR}k1lFzfD zYd;*V2Q#Y_n01X$e~H(zPu2V}uG18kegrjDZ$iw*wk-JL$OEf&gf~AIf}e3yh4?^TaHaQ4z$|JODiyU00JWhA z>jHM>k*zHHw-EhXQqwyYa%sBE6F`-2jeTgqQ~4X2!Et@~x1sHYOA5G~ z_Dvk{P;(iPLxficDjU5XrWx1v6IdhVSN)I?sthD0bwJF=Q7i*bScpJsqW}Vam!7io zWx}Z|h|K_*%XwFS)Rft(6q%kTP~Lf_;+01)z}gFNx4enRzigpaO`-FUExd8=Nr=Lf zq(RehRZ};EUsg*0c$9J4<;#jgM0PJ=VluMy1dw2&g%5@_X?c|dg@lp=@^wI5ue2Y` zTQ%#;qNpZ|-QltheL%x>hTB8kN zFH%PZqiipa3ji#ujn&BLBwedxgu%nY!!g7dyn}lX=CNK9evZKb%n13uG#uHoW^MyC zNH3qlp{Wq}+8z$ZBF4c;#IQ$B$oAV9#)y6SXmmokM6N5b1HJBW$ajr4fQ3w3$LiIq z@G<&QfPCYwyhaT+)4Q;UWD>9DUN=Xx=k;OT89a4u(#u&kIpOC8E zog`r|(U8=EQX5J>^)JXq+KS^SbY&m8+#7-{;m6itep}i-$L|rfzr)QSQw6S!!6SM~ zV>GaQHW=gAPkDHpd|3F^|L1^cp|{1=JHTCMSuba^lA_NVoFhDkoWqcZlQEu#T%tr7 z)_07<8e19=(jO!sXzNzIaePJH58p#oeOh>9?!9gxFjNt4ZDzJc>TsUdt?t8HfP7$+ zEBKw$Zi@tyO`Fr)Km8LN(|t8mTn!_is%RM|aNm9P*sC|};-4Ud$&*hYle&GC!n_U~ zVa9#I_nMrfxc(t{oOo_IQk!u#NbP28kordL!3+ncPT~GlSa-(&g>NX45S;bf7ocpg zBjrCJ_PZ~$RY0vn`e7F(angx0^RYz>9eZj`En;7RmyJ3}_)wcNvTk)2)jCYHM5?Z2 zJ|Z%!7YLy)aSKK!XxR`9spAxU#fI7F$d(uYDQzU>KYYLix-ttG^Hhh`l()PAUVX>j z)x*prs*~?3*bRD=Tn-ZNMEdRba9U6PT*b!n8GVodqJ|B0J%S{J+vsi1P>OX!*7dWc-qwdr`-2jCvh zv_pHmKoU9eaM!qxyX1LGkfFcM2#SC{>-M3CLsB|QF;sXjAH_$${S_2DFZB+5E1YdZ zWE9YRz6S2s1;ZR2>c)PwF}cji)*;9Dt?K|njlpw(S}7><75wSo!D~S-WxW729)m2E zqU@HCIva_y+f>kcIU1^r!LiQlq0uM>`-D27e$Ry^a!fOtU}o@CwSB>ZraM0a1DJUy z0l)K77?m_H8G|iq(tl|#Wc`9Egl=Y}EIZ=3s;N>3DkzLb>!A5XLE|UnaIqN*dmfx3qcvl#!ZFg7)}eAzBT|2K$MzD9V769YgGs-b zOwoOM;v+pKP}Uy?$t7it3-Eq3O4a_uSpHNRu=LrNQ0ck#4^=8{QPTAb;~?GW90Ng& zDr=0p7T+e~W3uU6ocl5c_eJUZkh;}v`txj}m^2ISKwRz>d}{{KZtzO%KOz?&EpoYb za=~0ijN5_E#a?lzRDCaiSc^HwFk>BN7b2Z_b)jrrM9ys(K7&K|pc0qW6!S}S{1~pM z!v^n?mFq$4cWQaEGZ}PAc4B6y{Z)u3F1-_M5W{%oCf8B(f;a$e_{=v9u%P|InEhIb| zbvPQxG`s2>8VQsBKco+UEm4l4f(8bOX)=2$;~%-7Q}a}6f6GQG?^#O}V!<4-V6FuP ztYrOEr1L1b_Ap5)w_&<1gc^JX*VDTO!qV6!o*w~x7!7!Q44&I0) zX6lX~&u>%e{*1cVqPrW{9$b5I?ZdSn*8yAyaUH@{gA1KKdjw)?w`!J}tX*dr+G2gp zz^Lf9Op{%4@?!H}6yjc>nYb53feUzTM`)iySsMO3t_`?0;@U)kH})Ae97e3iVNM9W zQuq);vNd_v%aFymZl+|l*0B5f#Jx*>d?Gye z2hzy2z35V!F~Ytp!1m<%gaZ6Z7u^6*1*foYNz@i+WGK7|>rXMTLvHeY+RPNxixu&#-@WT?YD8>^MZv2UGKYxlo3?tYkjMTXP5U;Dqj2;q9B?zMrEB z=2#y?F-n$5`ahu*hu#v*kGARW&`!TS%OU*-`A@@#hCH5#0Bup5+cPvcBojMbexOkm zQP|BbyTeaJ?fSP;*qxIwcA(FRKbTZSR-WRsR zb1lfglIERYRBAP_3sT3&=5UvCV&xF}j8*uk2Etta81hIOiPz1PPCOJnPCk`tw*nKV zpf9=$q;^o_WsGhL+AwfCA}jII4G@noUNINj;&;OSd!QegTiWBd+qV?1!!H3l7ruBy zDfpum5Ex!~T1`afLr$~CLidVBEn`iS!@2VSj{=J$3IGLly~Ql8_4u<$Bf5Ykkzz(s z?7&m_F#(71Tsa7YnzOhNi!|pugP!Z>?iij73RqChj)lROf@Juirte>ackZP+;DY2O z%u_izL$PFD1S8w|Mdb8pBIDi8S(k5O1H1j=TXN>T(BaLME=6k&65l>mY7{!mp1Y=)-vjRcH;AZy%PvlC7a2JOI z3`d9W!2G!7+CZy-BSnn{g0s}nsCzTzHrRuNb3m{ca)v?L!A|UaQ0UG zJMvHu-p3@uwR|hU-kAz3J1}J&xq@wT9yf;Kx3^~lrInayiPohDvzGAY44iwJ2(8ag z`sF(Kwk#~MMX_vG=?Sc6%BuD5 z!_@$N<1_hJ;c+jjy>NMpYQ2$cLs|RJfDTQzYJt3QA!E_?>F06%MQsB7@eRj^cmC)4 z2PTqX5s;=!JpZ#<-t+q@#KO*X)a3hawJbh_q6(`?X#TWel%TjEJ0Rjh5hb-?$F;3d zQkGR1}v+ z5c}sV4spoloV}*(VpFNduYj1&y>MaQ$MqVt=lB(}j*sRny0GpXt|TD0GalFdhoToT z7oO}m*Wffq_BAZ*IlubCc{P=G09(u^c|W&SinSNS+KWbF?cbDg`7?bSq<7FXr9s3^f)E%cW%-bH>jZz+#Wk4U9Q40Va zew$$%2d2DWP*`O(*#rMTceqH2_5q@OAO)@CNWdXBw!oK8`f(8_9Q?(3k5(o#wxv+5qkE=XgBhx2a{0DV!|1<48NcVyV%^tRuT2hD?G55n^prdms@6MN*Sn!a@o*SSw~32I)ajp(aD(Yi1D7B z%j%ecy*#^&Z#=5Mq58}bqcJJ@ogW|_(y9)gxb@=!bPsKVH2M`ga2b=^m;qcQ&37lV zdCa<{P@2S3Gm}aDFfMZ?+Esmp)LRS!nt$#FltH|b*}3>1n0WgmMLikbGbhd)L-MU= zkWT$~xZzzulL@lgghFR|;bSd2wgCK@EG5T69wDFg{eXeRqfO+O8;8$E?OY1LC>n!n zEO}-v!9w%;VvUUYa}E;Xm)yL}@tVDH)R~w)5!%5C{~-R?GirWwD`Vg0cXuL9ww?hU zA#AlpJ#gpLj%7_P`B*mQj`(c=6gR=fsP~Nc-Ikgw!Em7Z!8nQfM3FerTAXM@VNNV; zde6lHG)GW{tMt`Wn1-^%jjWz&ow3Z}^DFO#QCvfVk1asMqrKRG+Ic0F-uW9~VjUER zf{xeSfZUAScr+Y`8W^u{GwTZzL_gp^VY2<_4}i!t-tMJyHK+W>#^4#tYo>z(a`ekZ zEout{q5^5$(h@flzwHKSdYWrx(Q_DP)|`E#O4SeWs^jfN|05FG-*aV={tpOY4^vco zq`sD7h}BH49k3A+b*WSSVu;i%Isx~XK<|rqm36=$n7cb7B_q1hLQ1-O68+iXLE0_1 zarjln)qIh04a`Awg|RgpnMAAq$YVqYS-=WME~aO(xV)EbWh$20Z6<2VetnA1K5O3M zFWfk)KN^(x1GUUTsIajM9MwK%lj4W7bg(Fw60>gLHtKzMv?2fADvUsLn|F9p8W@1~ zI4z*E@!*nVZ9U3q$^5AEyeOo>ip41Iyp&vn_nF~z1f2dnfXQ^K7bEyn{VA!!VDN4p zu9ss?;L4#e#u0!(kkOV<8b}=*LOR6mwuWgG@*5vs5b=rYORm7_WGg{F$_6W`pj9zG zq@S@*7JueJ0_c>( zjM=ZK0e}Zp+MoqZP9fqo4k(nRzZ%iV5nj>&?0s#C4<;q=LL=PLnYoNxxf4%{H;uyY zlFgmDaqkC0@AecEwEme`|6HtpLHdh*@FMICf*PRqivGv(UH2YjpF0UrTYWP6`|KbO1tk6-FH%^;|e_Pv7RAPU7f_J$l(~J=L1Jcx5iQa zS?piNX2POO&@ikmUOJl0$+B?MKwRtd5xLGBrw*MD^5&9^OEWQ=k6dxN;n40esM2-m z2=;7u{bL4WC-o(R15wKf>FBE29%#Wjat{(CccPxP4=L|a3k+L8Jme**ZWR@0+=o8P zDw0YD>_7pPj>=B^U}5wr0Oggvu2FRG4AdI?nRk686~y49{D2G%Rph9EbN9Cu2&A>pb9sm zfhLsj!wp4NKcqpggU|@Sfuvg9pG&!Qc**}+ce{oH&hM%)mmM~P&y(%?!N575-}zPj z!K`A{YVbvJ*chByG#t%x+1Jz9RLB!p*`Pn)ToRYu$Y%q10O&CPxr>iIhuLM~2-NE4 z#iP;cQ&Xfd>mPG^o6Qyaj(25o*cm$e-3h2f3UVfmsV#=VC-1W)?wOLW!z&!l8%HiX zPU6@bA!~re1HYVw-v)BqB~t18O=yuzcN{%C6yxYV{ST@36{TC5<9)812hymfJfJzf zSdw&K{~I8E1$pi|2ql)6V4-y63pc6u3)$4LJgVt`l)IZb4M2_qu`MWg>l4|ub}c6K*;(8BiJ@zvA=#bx=poO}jl#~Jp zgFfpwYWDj}f=Qm_kyfZqL_6r%e9(fuGK{8`U&YDw)6>Nb55GizQMtkI1;&)6v?aG+E>o*dlX z;6}6cIFIM3Z&&360e|_bM8NT~>{tqv_-a+*_ z+LvP`BpgY#OckFXxTQT{Hn0!@Cz6K&Xtrz;g=mGV*HkgZ4KZKEEa0g1I!>IJH za$FS@?Y*5_Z?g=$QNR}J`K<0FXZ91^JOwWPzccrenMO&Le@OAzX|+jdkS*0s8$uCl z|CsEayx^&I($=eMWE5c}nIfi`;cPmmVJi%tHK4lc@r6ok7!VFU$zvA>RT;I5Np;U{ z8uZAc7ftMxfuYje8Hb0F5B4$;#%$BWxQSCqGgrdd8BpH|iZp{NuIO?DWGjv~k&S%F zNv`<0sT{E^%qaD!FXugHN15eg(1E85lc{Kh1{+56Bd}RX`mvi-b1$NF*W+`gJ~Udv z5{5%M8-8Jnh;4`{Ix}eC342g6-@CZ(k){yGeJCW}+iXS^iW=m%`+C}tf6PkAjEe1) zZWDn|-Ixi0sdWL08y*VPupIa+dCs@R5uBdnx#={IQ0fW>^^%FTc&myb%|po63W~qD z9t~UaC#khxn64>tj1#o8Qo}53YM#UaN0Q}J3UlZJ1~_a&`C%U$OSLzs>eNbv`s#O; zL3x}-5K@nPFPv@*K09=n+!QAl_kVp|4~TbLHIRo_o1l_J&}|&F zF`R`7eWTR~d$^v)FV&z2s@C@mJ#4;YI+keX(k<}TuB<$Pjd&YrV$lJq_BFLTZvlIo z)d}&DWo(@wLCNR`#ZegPZ7)<|NCyhxm`-JN=1YlBiTaU7? zu465Q**NAHVa+oLDY}^#6!w^#)DMuG00+J&cFuS3j_ajZ- zi+IrR{d-NmrLB>p(ya+n??l5Mrl83mB^`B+F2eBiS^gF;RM>(7nT6cfy}>-j_S%Rk z82>M>2e=+0;BPiu44poFREA>>Bizp}rTAFiNPKKyLFtphcuRNcBmCGyeAw-JGt{SV zj(|%CZLGyXTL`*a4=7~kdgSN)v5lF30 zT{FOm=G6v;@aZgky4X_I)bH$|=yGSD+z1*%IJaApqo=_<=U8}!9y2V#*=Bp;Wh3UPawxIJ9l9)WX`PGjIys|%=n! z(3=J;#KtjV<5&}lImQQ?jO>YbNld-niaW^gUeOIi3ivB#7ONZBoUL1b0+vUGtL!4m zR#Mz0w#&~wL>`^)!dBY>!AdA*acA@``)D-ITeAK)hN0YMIdjiJDjs&b?YEG6XO35j zX@kYIA##1ptUKq@HpkwD;2#w5Pc*yEH0((+V;E>Nx5fe#Tpvwf_o_}Id}vbJsB%zW z_mj*Tc<%WPssGfK0JYY`t+30|d$ze!ELZ|JuBE6I$9^c2sh~!OTwNbGMC#JE9?}Rg z3F*+KRzPk6J4oBrTNcrIB08V^!{4B;==ZL8pTB^0TM13Sutm)3+*91xJ91%R$jt`hh z9ml>zM|8$_jdcx;)B%V|*H#h}|DzzUWdH|zNXVVTJ4+oXz|;;i8gZQ+C9PjG7nncA z8fbR-!^22j{kyOR3Jw9376Im7x|l!#!5rr#<onK)R$V-YKkW5mJP7y9Spb0~2c)A)TI<=687|isSCj}K zj+lhCLy;w2lMi)@`Z2S^s&-6YoN{ZG97KWA#@|MZE+>-enPCxXceODWnTO%QlX-;A zBuZ-Dc>{bEe6FnrSjF6C#MW&Xa~`9wW80}5ypc+vV~0P`1}G_-96}rSu7z;i2MTh? zEw3o+ZXfvFjLN-_tr{KIvUpgjU}-6NJ2N5s_K|JIa2A{Lq+SM|qp+(f_NJq02w`Bx zU-KB0jx=^w42Wa&acp=dsW;s8dY^_nSe`=M_ZRmA;>rIzGp=(VQIBr1Oj@lg}bv{xl^AXZ_?0c5G)guJFkOJZ;$`CKq?n|_^|NaEWF8mYIzX9in9Z6W*p zLfPTagJD~{4FrDKd=Fd&x5`4Di}r0`?VeYw(}17g`G@e^>QD$$$KXPwZe2DQn@@Ic(Oa*e*}XET#Y1-5ZlAUcq-XEp{)CL1YzmA8G@46R5<~`QgIwcIkVEf-Pg(umDJm# z1#Wu89fLoi<_h%f!fQA+AF>V)V@_W|n%zgEc#ZuYf z<#H|9_E9ga&_(YtqaY~wkNt-Il6lcnLA0CS;JJ$n=kCV!aFOjunwdqz8*YOH>^M0X zPaV&`SF+ZfocBHbe~}XS-pApJY-CSy8D}sW)ki4&SqSf~NqKCE`xCL0yO}`$& zqYfWZJ>@+(pfg#28MYWDRC3(Q6&0ZrqRE)*i!e-^Z}Wi}#?4 zfxpfHAL(1*BekON&pZdZp|*w&c~nA2S{_WEjw9uIqL&FJ&3K3YZ2Ll^r$0g+x$V+< z)qc#!)r?9qAn3_f|5257Ccx3AVk@%PU1!yN(Y-;KX1D1-co32l!!bOYhC(S({~=yB z{hY|YzV_$XkgH#`T^46ginFK4|3k7=OB8W85#LPe2~`nu-;2%3>e>>+U|zV50_r7= zlt2dPP?!1qU*z1ua_zX_B65mRS#&n89Ez&;z*?1Bj-YbYKoFGjE`uaBIlHhShCwZ+(PLyDa6&Sm0PwCRGvQWQf!T*+%x+g^+YCF?2Xz009F9jXBkd718l$7`Pos}AuCO)viqt#p zu+mygz3+kDT`ZIqsXy+ z5^g(AEtf4#C>#zJ0QxNxKyJnbyu#R&dc=d})7JgUltkNX3(kywBZA*jt31{>biZ)| zspe*p8N3C&JuyDMfP)JY@lbz=wfd?pY{y2+LVyaP;%>4T_Nno0#Q3(5L!wzz>-i7$ zES$xWBCtBu|EW>bdsjnav9zyP+K(;I1%=E%wFu+Eu2|j~lOwxVQlt+b>lAyCt>#sI zV2ExAbI{oO*k$hBa}C^~5$GW9jRV58N%K}x<)(ge?FloA_b&%7N%QH7LKogr%1)45 z>DVneAc~*3ApK$vVisajec!?`=GyE%6af~uDCGpg*TRO^K~GumJ%)BZ#UDUXP?7_L z*}CNibfbO)vbyca%fRWbIgeGS4@(xq59*NWE`eKbGY0;L9#KPN(L;*`tY9Xt7W2@L1J7_tKJd)#7fY+_7 zX69yqaP~`9-$*dH(P=B=fI7mCvv?WbyeG0Qw6UZlH+Fv;`bQ$FaVs5wcPZ0gw}9rW z^|zmcI3&{>ngRdg@Yk6L5Bu^|8_I}578uC>Sj2}6>KnJgappE+tF72-XC$`bxRED? zl6d-ws!S`eIo@i{5mc_a`%}T$a1HO&(Y!2R6|&N(F-V7YBb>U~>K$I6%@BUeXnfsW za1l(St`k6OWXCx)X!bocUO$9&cdZ((MOsqT5ozO!mfU2cFqAvkpRzadLJBxH1Gf!B zDOj}^Rt%SiTP=-j0Jj(r-XcMoCzmCmKR{6q3y?1tTfiQU1A7u*cpZgP+b)GRJq@Y> zc*kF9j3@4a%&ez9U;r5V%onMX_UEDUzMJ96_!eiPIB~uT#M}fhdy{9e8Fn+py#CHm zHd=?v9f8xPAxr*>r}!e>q4JFhxb57oKGLYIW6+0^jgujh7M7RbiK+*5o&bgbJwB`( zyBcR$!q zohWHcC1+^XCmhAFGhO?pxv^*-A(}@@V0hdc>SaYeivKtWO-grPh(g$GI_u{_gf0h0 zf;`F_K%VsH@U4Nv=1H|jD5lbzYfQGf3GJfw_Ro0ZJ@GLj*g@yxR{{$2&4o(8lwn{- z+l&Aa%-rOHEG`Y*k;cVB2$HIsQqr6a%)Z8yrr~L7ts|cPHJY3UFbnE7twa_o9A>9B z_2(~nLSK%x_SFUvoP5P~2+j4o0R*wW4El-JPw}>33#)#7BBuh?52N-vH_WHaSn4*_ zz#A0v>Ii-F?B}v5o>POjjSfZCw?;%IBRzPPx6A{QX&i=`UjjOLQF z>phl(z3c`cuXkt%g{X=%5>@eJ-Ih6DY(-;nC4PDzaGKw6>ZBF!ii_dMHi1U8e1e-v zUu==O8kNc_VXCIW0f(?CEwSk|VwoCpq4U_k@!A`adBLw5lzmQ3Oid8_4KPo!eMewq zCYX`k3MOlg_5b9m9^k_`D*5I!-1M$~g3fqp;H1HBES-KQkEaVHQE`z%pYe)H-|2wI z|Ma2BM-XtJ&Lh&kX7}=>>+yKJ{UJ3k?tt>rGYWdo5S?Ig7wBc#B42V>O+b(ADDXa1 z!QiYkUu0{@g_{v^5AIx`^3g1wJ1u!_W@HRpX{5pq!rL=|G^LGtPJCd8+sQqJ7R}LO z9p{Zohnp$;3?UXX>DwK~vy?sukrw__ghp5*w8gAJSOZx%{P0lQ8?H>TztH%?PPnt% z=Y>_^Y?h7RYNsf4!Rz!%Fx|s?Q;VAM+@Q?3wX8>ba*SG}|E*vHS6&vtK>F5}9DUmI z9C{S6P|)%%&!lZ3FJpWAATH_>#6;cgAY+Iz50i1=*c+jEOPYV5a53-1Sqd>_gP5`r znuhV?P^HOKvTx89nLR@uGZfPJYQ_bXKVoVRp ztM>@fKv6iuMM=dySOD7K948a<*o)IDswlF8dFAvFiXFZMKPL2}%%*M8RU3B(Jwie_+rww$w-Fx9Xg_oChJ7O(-_B3VFskQ%Z3vejHv#S!pBK-RT8F zJ4GDAyt+{S<1w;qMS;ilAm5QsbC56lA~jPtS3D+?C13g&UvFI ziBVOg&n@O}__z72h{gZiUL8e~-Q1ac#(iS$Y~E9{tv3p{>VNmjI0?f2HX|9&XLS`R zqJMt?P1yymAa&v{xppSbyuMH$Jc4#vky51g6RG`0>Hsfte_vO|$R+BtP~qBAN{LNl zt5DA!Vd#Nh!~Hz533FMt3Ru9cOkKJL_(=NmCAGOS1R5y0!FPChAH|!h)o_NYmph2b!y3dY9PPG(v5ZWTeQv{otYB0iHe~;FNv}M8&{h=Z9 z^t*#|$gklxybFipAJ}>ygpAT*sSMOsxw&|uu7RGylH6->q@(EaJDdoqr`JHV%<9Z- z!`dm1;szQc9Acvl9HX<%joX04yy4dsbuEDM4pQsN?HJ|OOALF=+`8gHnf!Gy;K0 zU^706xXVw9jKq`H6j;H|HY!u>p7WCx2+J`kLKdeli_>rxtBVkwRur-OG;$oY zh^$_MU_c>Mx}*SV6i8@$nTn{F=OXTmXwsUpc6P>ntL!mI^$)^ikVTi%{S<6O(R%%5 zECM?jiNMb2lCNik3>THaeXIetzD0?dui-BN#yD%%JY_Q&mtNxfuMVYN=N?RK$6{k_ z8Uv8EGi%lTQgvpqHA$7dI96P*0b}j1}OSpF{;1HSktk-mo z2cP%X5gyh`*KPoj;2M@DA}$|BYVXMt)_CzZpi#$N&axa1_m3JpavuZ=(qRr|AVdwk z)*Cefs_$3t6(&m`M4J02Ig4Kp_JVY~x)(Rv&)~`m`jKu)0t;0+N%0^+9^}%i5mq16 zxH$`vDdOx@5bwmv680N{L6X)$9ipmhkmFo#VHclrB6i0Z+(@lH{9>TFJ?=rfC2Rc2 zK7~0z$9ET$h;pMKrxVYaJh@G}h-?;Q^=~xZ+Wg)Zspjww0PG?efwQR{~ocH^j6onw#Xg4TPSk}uAOl2dagrX&(Fd& zo6-v21OBb+G8FY`8_5e}>{%^ts!HKFDu?wZ`@;rq-y2ILlLrx90*XQ+yKLmDX<_iR%<7hMzVO=`=E9zkeavlE!VrZ&d ziEkB@@?uwO-@!PmfO>B_?nX8WM8n*>yhkal!^P)i(HC34+$!19X?1~;n(l`h+~MXP zSvWd&I}=wHx$msQXw1zBxF*qRIH-NgbJ%wwn`>}sDI>8Zh_Q5k2VD24 zDQkl@j~6Qv(a^Z-f6EmxG5t$P4nt5Z$TCq@Hm2C6dN`hVx4oS|oYT<+;g@@yCt( zljrEIXA^Ax#k%cS0WyX76#7f(&*m4nUQ${YYv5Mf$ljbo{k8&VB<}P#d~R+g<$N_o z9fe&wAoYC*m*futRMCSqh59w$C2`&kK0b&jb;(6sa;46_nKX=B{|1KnXVmUrjE`)C z5M6OykW30+I%NXqKg75c*=cu5$*eQ6EbO^ z_h?DMSMuGULGkjrFF-a_PCSpA^}izZ-8LSgZvr`-VU5?gznRFpUu}e3k?p?VckAA8 zXlMyfafWA)In0(tORV$k(2$(o{Kt9&-3;t9EyBn2y8gyudvdtas4g&4yo@upy)VsH z8tI@e%7~eWqHelAaHp1GEL*|L+Vq~1CKO?Rjad)sojy+*P9rWSAe(!CI5TueAeEOR z`*Zjeo%F4m|=Cf`ZP1}Luf$O+n?UrRqa#YH>a93f#<~U_&DT_ zOCO5VFN^&l)7_8Zw`*0c(plkv_*UN{F=?6;BOu^<%t8k*Z9xb7tftEM>qKZ~S56ISX1a>22)qJVdQ&eHtu@bGh^x9ARYT8#{CAXZfl^suN0Ta z>$!R~1=mCDvUI_k%)MakY;Kcnce=kU_;$^na?r(PH)Q2S?lpc|3v z1VLyab~O!NVhnX>jVwD+4vq#Q>D>*o8rg&ko(5%LJ*I0x1yWtzB3ZQT0a_8p+yCAH z$vT;Jvt%k}_yZ77>a^)l*+-x1gjF9n!>=qtFjkGqOg zJMoG_B%TB6bdNSQsAIz3v(r?`We*U^`1_Wai)LGxg?7Hp;-OdSY0QMT@esII4=6R^1x6h7?$QWyVlU>uF- z8vJ&@{z^7-rbyp=h)Uy%6U;z7l^HTDtdnxv;KpyspD?~VMU7;v&k=E*vbuw`sU;CT@Uw`01^3z<LOW+uyde8fB|JKhG(v+8ozu-x?1;ZAYpy*Ts1 zNSyfyu_yw_BD2R_6xS9kMnR9E>j9x2S8vGXR@9;>7cbm$n8AeqP8-5mKkz zWd`b-aA+1oh%FVpy9s%*-T*se>fGgDSy_iBF2ul7|B(u`%*UBVrVqlc)sAM|9mjmu zNoKC~#G^Fxose9!%+l~%y*YzlYiFeX+!h_@6ol%h{X<=@*28PB!w`*zo)AM%Qc)yx z=-%6pE5uS4vD6jl=eR%eZtqH}^A32WH5!a`wB-~`lfGY5ph|H(LL83-sO?@QLud$d zdIoJ-zEcOe_Oumz8e5~C^{i;{=EY1xM>j|5jLBay(hs11>ak!2?!E5Jl$)ahoTb(R z0f9>(6(!V0BFpNp@NItZ3^nL+4#iCg*2!>(m(b$4ZtJZu2SjUAzN5T;_az(w-G+u0 z-vMkFR|nu(Z`}Z(C1|V+QH(u0F(D0@)fUW4@@8A?M3eSallo8@e|glJJ>BNsX9;vDG}_;q;i22xu>FM`^zrM&>pjN?kb! zHcUC>3Qf#_jn^FBXTJY*lEnL#6jq1ri;0@!vJO(;85RdVji4f#k*K<1W2Bm#w_LBj z*;OE#`q&~BUKdXb=i}%v*h4JCfx=!!DGh4-xGOa%KldzUPrHkL9;X3|%_SGoI55WZ z+b3gooKLjE!f`riKmcmzo3P@8AM-tl<5%8U)7UQDn$#5r1)Q~D0p0!(Pp$UcAz&XE zjqN#VL)MJZc$PQSAQ=YDRVrXzbBs|Sj6e$TN#!~mVIB9MFS3+OHwb0x&C#r51(Y_e zlOdvV#uI0}?D&9*zi$acZU*)U13iwWMxQ$2R;P?&o+Hrg8*YNlnKn8frc$HL=*_qu zGl7|$jxqYz=D^bscB%C=>KK#jp?jWVw6(5V@H^6aH-IH&46d;hmA)P~`3P3fra6=y zQeV=^?3?A^Vg@GC+4UxV`?c7Equ{G3YUFmwl``%;m0b}dc*-`+oY_HY^xPDcsxJPt zI;VC#fHs{;rA&8dL!~DXl=I~cn{jp@fsSD``E2G%Dl1}UTJ<0VsY_-6zM=lJ#@NVQ z1OG?QGxzY+dnUvdv7j%7xmL0V?Km%H+-yVo@RU3Ci~UJkA}c@RBk9lJo?U?-&*Ld~ z{9{aG`?%f6t-d*hbI1M7lK$Ma5X))+(5=)>(QxzY@G-jxr)A{8A36D-v^0Z1$j_+5 zOjd3}HG|N4dMgzE+?`5Ss8MB07>Phq>hrR9)9gd4rKRxQXweH-Z`9L73dF;#cTB0A z7WFme6Uf1{w%v|?73Ex-hnu|HKtj^@9hB!<&HB%q-!ZeQ{!0y{sYlIQ%wurrA_=hp%4(Sa=uTgf zMVoBwxXIfNXlfm_3Z$&~^Ei;XibH*Y;M~fX)9{;&o!UPZQ>;N9ob$m4YvlvBoRZDN zX?WeZ&K)ADJ}Smw{_O|JPB3J4x(#^#`y#wQzsExq zipD+)*h{`|M%r527&BjQ19{ZzB#Um_FzUB{LGI&Efj5UT=I>q1eb#J%1wk7_&du)0 zN_%oYKi&`{(y>`cf64;BOjp2K5kO!^rBbX?rQ)k~*VGq9x zcORBxS{y0EhfN2PTNqwrU;^t-g-tKvF?{`{)mXWgZs2^vOO2@)lvr+2?)lJ%x z4HWCtVG~b_deLL{)QB*gTM&lR-@0zbAjMRHM~InB5q}ooE4@xxBektzwBa=Lpp5^* z^=xbM52B==v%r%V6GN}g>k}qQ@4rzNJ1>i!S14i$4AS^WQ;CtB<`ROdd8Lwn6(bV$ zX_#MyV^`7}jaP^b{ltd;3d*|9!=&9^Z0M`IiMhfEVL}35&c$rRj^IvB7(t`0cnwD4 zpk^=1oa%$f>ll}WUCcL?eIA7tSbei%$k*;nFcq1rjYQ@e=wlG=wf!Ad8nkW*K}W7P zk4BuC&mqebn!%wWgbF(DHtqjpPR!-{ zETycd{R`pVON+7A(j-Qze=UT6Ei*0N6FVZVz%TGh$pZTZR}Eik^M?xg58%? z-eitJ>ctmY-OHHDO!y?wlCn9NA5{~wZNcg4 zh!s$D{W{Ehnu})u*!JX6$6D6bB_E50va1mdnhyF6Oym{>KFsf2KFTGJV}v*=tv%An zl;6;j)GyS>0%ATM*cU|tcKy0`mc_U2Fj=G@!~42_kghftPQ-&=uSOoH@@u^M+zJs9 z9y{VrRwB#83(&!JHDgr=1`6jHzIH*Du{-uDnPE!%T<}38%U(xU2YpfSg$5K)y zjy9y;FVPFxt1qRr<$#@8GgARQ#f=^zXP`a|Y53FG$RGR+n~pp1Acr<$QQ!Ry*{XiS zYjr8JEBZ#z9&MgZ_B+4h&UNEwq)tIi74;E$-}`|T2xc84v8FjCOg@A+iE*1)->+mq z9GN!B8sAh}PuZYq2Ccz>@Rh9kTR$#z@&Voq0a@u=<8E@#`@J;Ppd% zBZ?{k?U0%;q=cQ|TcnkbsmZ$>WOY>q+9`x7G57NS|53t;Dr6dAoesnlo@k8UU6)M2 zA{gwz-EwvN0oQtCGldN08;~8?9tj>Ydm%~$uQ-CGvtv1Xp}4B{v`BthJ97mX>R`798YM zJI7LKZ7f?*n{!#v99Ct0l!V1`m@IE9g{BN0AO5t+|+@DVkdA)Upt@5cD^^EkH ze=3CRs1*B4$);)vPnHiniNxc}aASf0nXHP#6;I>0UPEI;GbnCyZ}enVDXwmme*6sD z*Zvc%a~u^>DUGOdPIE+TwDXl8rY}<@{V!FjyOd;4z0Muj&*td8=e;kTjx*HadJXx|VDTo}rlQnaPlIf5r+|P}e+mfO1SAD<6hvwQ3soH6>{*iqtHp zq`JxQgVwB3D}`2R)IdiOQS8zkc^KCbid;PmTu-T)9gxvTbr8xoddh5pZqRh3$^Ui2 zgrxlVhS+G?PyRy~#<7<=%ZU($Gg%>`DfYlN)O}!?dz`{;QrTtZ#1LGxx)D;f-Vv!LeG43IQb}7h$xMW)MVLl}X^ljf4pCsk5H##e z8`&FUxS_o)&TkUuH&e6dHK?)H4#%PGWG`lLa-G}aiE#p@zhpgK&&>rG4v%tDr5TJ4 zjt-w#GFi01( z?wq2$@_UT-bky-8BU*=v*O59O+sI819P%BrtjYlY(&Rf+XjflDBU znOMCWM<=vKSnob)d-S$y%x0_S&(X&^UZgK)b!vTav`ic=rwr>4sH1s1R#Q2g<&e)g zH(|h$RzZ2g%h&@ZX1wn-9|O|$SMcVt<1U&ohk0GUo29a-y$1rd;|$1lgVnyUt|qU9 z-UG6HD5(;sV8~QB><}&T+%{6?149$v^}q-ul(3Xy)n3c=+;3_Zg=szU<9ABixe<@^ z_U%&`6@srVN?}`{*RLJ%&^td~7S(X0@vUErgP1CEw&7t?QzqeC>rz_(VE#z4bqjb1 z>(BiwyTa6c9l;bYmtu2A$s$w>_v>21s zQfB+LV!4@Uu|c%hC|YcS+_l*Z-}b^GEMmYX8n*hGq=%f3LelF;P`+KqiF?2+Fk(eL z4aV%0+{SeW+{c9}7%mH)2!8n+i!nj#m^a`o|avf|4 zK1GqYPNC}TY(&8yh{x_D5!$_D9nld?=BvX%R%6ijjAXn?nbj6pRXX|$uKDEntdkj= zeE5$Btz_EMqV%F%f^%|St3iFo?pXz0^RIA&jc?T2B`V@ESTJ7EpQPi7G>|3?y1-BE9aU5ptqf!@ zDNrMWY&LiJ0;DNH6{VlA0k%DxL#bVkqP{cj$^E}iJS46?>&o`V)HfvxFdCaO8MPPK zFd8WRyQ^%1ZCnjspq1=&Xfrd~K)Bp;^dSF@;8N|kX7Nv37w|*18OmhsWcK5~fzblfuXN=A120}VTt%n%gFKoiNeIb8qL2^RdF+8PTp7&E(;CQ$YEmHEl`bo@o zm0riO6v)?SHP5oE`x;xG95zw^zdu7siN>}38{AgJwtDz_{B7#;f0%j;xGI&}iKLYgrNRyKAT(8Or4bA&+vDf7UShv&SuOPP4}*a}rsNAm8YJvIcNZ-TgZc(sT7 zm9{ZVhmKnK7bdH^`mAgy2)qK+3N+-mhz|paeQIP*lpLLp$P4|bEV?5i6DEgoKX(tH zF8X|6SD*V^CYIuALx-1`#O6?oY2FZ8N6e8^`#`s5%t!K@zYA|I_BX`3H8LUF3Z}?? zS5Goz^D4ZV$mP2wqMF=4gL7Z!4-fIIIjKY&y(cnAFJJ8eg_dEHhvIqUc`n&w%wXj7 zyUDQ0cpRnNa?~zc$I}o9%JV44j;ATJQ!}1-W`;S!^c|Md%z+3UN4T+r3eTW_09(8= znYCFE#kjSX%nsUlzHiT>A2O_yxTc?R^vvFjeJA_AhK6o=gG}l+fs&Y}6w@5YCv*=Y zk_;Jr)P9|bFv4()T&DtZy{(iGSq8|gYKNPDqRnIK)Q%zEpfAjxZBHZIKH#k^W;RxB zSrNMxEju|`RyTv3KEIK4T`4iL3ue2*xRb2zISrU%0dBhO$p0)`Hg47%-@49thA?T% zP+lC#p)mFI1_z^&Qr#ut)qs3q%L2#yn#GW$xHqikJeoVR;8zU`G9yXS6K`-e)A<}q zP&&5eF@m$9Ob5vr7dBwC6o>YJrLwxmY31pzK!GkRmH_eNYxlf6y0{31DUMkLt9BL*s9m3I#E)(hBCDH4mMd^?90M5* zRtOfl>J*B~o=wq7mUx&vopM*iK&8l5?>iu)cS8u%ZoUUb-obQfq(cz$^e?2&=4?yT zdt7_%#wNv>kw~>1&9sE&k}+D43#xf`K2G2%n_$oc`kImWMN#VaKTyKcVk(*wi_Dd8 z&%r{Q8HGkL;I)c+fjM)&_(?7lm+g#5^}d@V$~Ib1aGes#7Ts{a8cnv`9Dq0FE#{N? zd+Fos?zC=sjQ!Pgi6? zD`p#17Ls}UdD;_-;=}I^(J^8y7XiNqz&qZ2TxvCsNuuFONPVOxZPDkr?s!*P?lF+d z%yk%g`*^&9X^U-e;mI1;6|J8FZ2P%j@5letr{O!>lWcP z^yVRCjrWG3$56z}UQ&tUMVx-R4(Cn`YR!Aj?fy-<$T=x;PKlh;-~c?wB8kIwte^?@ ztky>XFKWbaiZ0d_s0j%K3rpaRr*pAt_69y)~3+_{nsgvvB zj&^=81~`_>nPPWz{0W`{l)yJI_-X@&t{b^s9iS_+`|vUdcVxJj?M|t8t&yH}b|+rH zj-=dIYqYEgx4j+ZB7F&RhAm*ub?PRvwBmawsy_Rq037|jHo%C+Z7OWYOFLsZ>rNHz zw+FM(Wtt6djewQYK`IWn9)vyE-04pYhI}uTWgbN7Fnjcx%%9xFhwj53APjAO3{^zz zpxjw(B#YL^Q^LI@e4f5@FKD@(eVn!W2wZFG9VXY(p9aGDr-7axE*(&EE4H_Gv40~N zDSi*^*Fsz<5Elw*WD(Ovjcv7v!|vxCytJRN6k-2kl?V%m7$dZp1g0U{s(AB@n{0P$ zC4j2^z6rdZVGEp;ZC9cZ?o;++Gw1rWL87~dz@46g6d*Cb{@#EdQAW&Z9N|dO1)uRS zWe_PpJ@~z^HUEa9bPvjYQ-_ovY1HReCMxw`^d2ZHD3_aL{o^U|r_C-_P~oMhvFMWL_TUg5l$5sM<{?4snnYd~`Oz8ksygI{DJ z@2Gic80?@oRH4a173Sx|xTk-@`3ACB1^KW-Q^;7#0<&t_e+LTi$T|RtJR*H>SK~G8O(>GOYzh^QuGlp=4CTYDP{RaSUk25guno)PEDWTUO)DZrq#ca0!wj} z9G7=JTzICeo)jT;eBWOy7IRB+g)A#mG|7TniD}FrY!<-nP#598z*MsyVrnBQo)pY_ z+g9&)A|ZYlD0qHh4$4HM)NYk@ zY$|StPJWxq$^t5x9>?{6V+9HTm)W-ja+h(8Oo+jNO7P!igY;%1cc4iEQ$|L1+TUP zfplu$h)3VaI0KBtde~IX@Cpp7&H&CB`49ceem7q0m@w?~bvVRR_S}Z$2=LCET{eOaCs@aU^isvVk}8Y~Z&< zHAQTP#Y`O`A4_>7TqT^~T12OxaF^aiX^vX~2 z8ZzGXIE}k2-FlK&OI$`9U`A!Gtq@y1kp&Z8KHX$t6jnbMi$Ip>4(1ZJiL87c#l*2L z=A0H7hjaa)q|9n-I&i1gk4x+{xIMRWXaVktqjmMUJda&Z@M&xeZsJ1?01`{=t82^9 zz3vfAHn_PQL+Ab9!jGl!e@7`xKA@gE7btwt6g=ejBh_~^On`dQPVL%rY26CQz<;h* z3naB&$p6&fG<{6q1WnZnRPo+^k~n`(oIg*A&w2hk-{d2|^XNM~C(s*smZv8^?H8X8 z#E4G^B}#0_xN83=a(q4${9>Vp%LM$_5R{XoWK;+}^yL3ft2?Nb8H%etwS>FUqOY-J zs7Hk`M}V&0JA_r@zx^)CYq*voGSU!PbjwW&hq0ui?>N7v?6IymgsV}9Vt|L=X^-;0 z0W0A}5cc{`-2`o4W895#k@H!tvSsjtLKNn8h?GkY>+<23lz)!Y{dz)00nz-Z!9^fSXAD>>=At+}#6Fu{!JU(V_sddbxs? zjXmYZu*R~l_C=aa;t_<7i?lM+_%SV!aq})pn5R_=+kKx(CXB}|Q_vsE)}!^I#-{Dn z%ZVV}tNTRbOZTS}fQ-g&I0$so?94i>U`1L3&J^hViEn8)tt$ouh&{{Dz`Wb@|LA&` zXZ<;kNB_5=bqxseDSoxEJ@K1p@K?E^9rbTg`mZlQ|9Qn1@mdGtDT@!G7@w@QGV#WN z+C1XZWX+BN2y;U{5cY3ogk|UKwgVzVcZ&YJ3UN(dm_Q{?QOdk^a;p9$bEd$4x**Z4 zm+*-|eTUIc^7wxd`p&6CzZ|M>;@Q2=cILXZl>^mCmT^>hX(gaa?QSi)ygWvG4_AGI zH6xZMQUchsN=jeIcITQczrn>S=jn>kvm`P44=j4!&Rn_M(f5+bEI|hjL+$6ocN(pX zL009|4m>J=Z!Xy#(XQmOONcd}!<}>Y=97cU`4WGxnX?ubL57Mm!*HwmmA;tpvXPj; z|6k+Sdh-#6s5e*#xtp|8yrG1lR=|o>Sq$#fT|i>=XBd@tmkh&b)UZ@s=w3!epLh*v zUd_WL{;R7Y;2y=Ef6$^4@xS#)!`HB(ox&(RO1kB)XUB@kD&cxI1)F* z{J6eo3v-&98$hIQ)?*!HHg|&fBIoag*vZ`%?w0CyVQinppl?otm4FUDiz8pP zd)#A`F;-1z%)d{~cz_^DQ4CCg*uUsGQx6Vc2fP=8 zqbP*3Pgt@S4+`f&JLIg00o;cYRkM^@)aUfQo|Ya{N5#qIV%$10ZatK~I-}OEx=zUL z+;=EDOma~(gvu{&1W&YuWspTk^*)dyk0Wg~+GZro{RHO30&>R%dmbqDav>M`Pl z(V3&jZyG@3R{cbN-%>^(5r=`VWIg9lyc;C6vW;+A=mdR+SG_2DNfK6Ciw&&b<1_{K zY@t=68vI#1bBBE;V>^m!U5j#Jtt&A9aap#QhSlTon?Oz-SY+tx$BeQ;#}42$u!n|K zOvA7@Z8!#<-bZfFr^-d{Ymxg#6_}J^18Xv1O?nq+dcc2Ql zzwug-##>-);bvq=|6#8^gL*7`06Py)NOR>6U2*AO9dYTGEj11Og3kC2AbX8HgD%aV zO~7dUr#66s%hS+nyNZPEs#`9DojEKg*h8<& zP0+X58Z^ZlB#17ARkB5GVTqbadDUKMk^>u@-~+0QF$J43s#Cq9vJt!Rfdd30 z!M)L~oe^SZB=jK|h{vz9K%OnD$){+TcE5+}vd&h3EA(Mxjs5~k{u2$&^dEt|7Tue2 zw`{hK#!KIZUMN#@jaS^`8fsudJadMR%}3vXdF#;QQY#Q^`md1oBCoX!=xB#Hlhs zie4`Gxl+zO-1!0Rdyi>=7FUe<3}Z2u&lCK!IPIfc3U3ckIg~?NOij|4Bc@(oa0h#7kP`Q6YM0b1@jQ-l4rh$effb#Z7 zjO%IVp64GuZ8~NiTIGKdzf+`nkN_^`F!C+K1&^Pn;4J(pT9N-epO@yek$6sQtKGF@ zwlf~Ie>)XYBa9cyar_>@4wr#~@dwgZEAW7Hh=PCeDG}1l=svfAMW${<=6?AVybun8 zV^hGxt$g|wO-o0e0=p=u67jhI*07m}zP+wFi4?v3Vx zqv7{}k%{qb3V8nk3KwbH)eJXbKUVf)9Tvr+KV-tBlw89gL2%kb5p)o_`wpR!X|FJ_ z_SKc#Rr^!7c^{cDoKYM5a!_3LY;qKG^8}khe)*E#OGi88?(T`V2Tq>4;UQ` zhEdbACP)Z7GoO3VDVBGceIVR10-sPb^Jy5S{PZj|xq6oeiuF`(NA6~?U+~JEGFdK4 z8;VjhJ-9b-iFosY+zu!8F;iVRy2-jgCa4Si(zSDC!IV^agmKAf*xnt$=u%mk!+aPt z#kuWXEsR=ez;9tC=IKw?B$M>KiJPbSGCPBJ5?7dB;DIpD|MLJHc!$Fz`qD=cqK zfiX^C4xN9~%8?s27`q{`SktZfcjOto`xnBr&jYk`lmF8j5Jtc$-Q%~yRB zL)ljoiD&Z*TFj1g;fG^@Ts>yW1OAW3NJ8Bsw;baUF$%xY*lfAH z<$Au*E{Bij@jPxzTmEdLRjV4Sdvs64un>VNWTgZ>T4WC7ZCJ zSRjsHCxOe?Ug($Vq-wR7^gDpwVT?V-nd~0kLl$*6fan?HDQZI#TyXk61aeQ1L3tNVWdXZA_%nKgH2MH7;>MY9N!~D z>SF_hCB0@q`Z&n)1)lBKGg+f-<7jB5gUu#`5l*+l7IG2XUq=KFpv zR-F`8r^ut{Bxu&dCFkJVXvoyh_Du6kaXI_0TrhuOJL>{<76btha^i+GzpifzxoxY)6rXr;(Ua-5QCvuR*hNBDS4H zdJA{+3**+tQjv=sK_tdmAPr{2WVu&D9Gn;WXTA5k0owC z`3isD_^REhs6GEHTvCI$k!#xk-IZ^O!zUh)R3UTVWgoocEZGR!VRW-{ zJZGk|Q}PZiC!x~D0c3G11d)FA-yke|5{%ug?ool~{*lb4D7oK(O)5HE*F(avEl{4E zNKO$KT>10fNPDnEqi)K{fo6Ud(Y3?-*$yU`A} zwqF--R2X4;}S=NIWE%?Cb_*we@~=S(H$J_aPG{ez{i)7 z5VdwCR^Hel_zfkCWp5Fs^xdUhR1P1(7pl8Qs+oV`4Ahx4Tlu^Y|J#XuwlSW=8}`Kf zb*fDBaY!`$@z?2uB&H7-WO6ND<$PD>xHWR zwWU_Y?*R{rj2>f}>OZH>8`q;OZ{=c~4{j%j+liEXlGSsrg;Cl9fh2dMF}Ru;2)y15 zN@0`7Q{&=j9Sc1?TovE-LN3(@`E(IxA-YYXh{X&yyE~E1yer78avdn) zU)o=1z%MhO6^v)Uup|s~Wg<_!?>INP_%&Pnnu8^>tQB}s!&d7=5huDmO` zuvI2GZp_^6g_(3+myE?{H-H`bVky3@!JE3L07dCtZ?{}lU)*d-f%B)J@Z@*AF%ysT zne}KXCGG1WtE;A_c1xIaS&@j?J1;1wl%c)n18!yPkjuXjQ1Ye)I3Ze2<&|rHzdJM8 zc&pM-*&gP|JBO6ZMI$}YNFUb98-JGz|1=Yf%cyKLC2>j^ich+{AH|z(FL$H)x66IoEijxcRriE{B34c5F4I!LfHJV1g48T+?CF z$b{VAFvStpg0D8@)w=NbjLK>PIOleUjW;Hp&DV~IdwYd$-9;Xo#M#d^EVy$eAg4wM17b}k|vSMiyCf4nYCW1&X5}T?jR%wAOMtbH; zkVspUi70J;HOjfti6R>=!b88slwx3u@|}t!G5H;yjRK8Ek&~x8c;S*Te2lfBFASdmMs$7k1I@2+Z-w(xA89s987;3y z*feu7BuOLxWRKI$zO+S*Gp=R;3R_%Y;y}ICS}yA$Kp49WVGZZTK2#J`z$^l_ud^hN zr=F)`F|A%5DCT<*4BM1=_rzD>tr_SPTx0A}wupgdVyHjDEf%Hg3>aH+Eygjn%!yI*z+vECNWNbw zX~{YidiocYov8+_w8%(AstvBGpu9_bGo{M93Dj)L@7}7_y#kBsvcdPs88M+NwdKo+3oSQXhQ3gJ8YSj4uZuxSXAt}Wc8t;shc$X|p z)W+o!)$U!2ZD78u1Apc`*F;ZPv;bUzpd&;fmm3M2j^sMJGd}TI*IX{%zZ35vO)n0Z zhnRsghRNzKl5^7#9$i--tvF3>|Cgx10JKpB-De~Y%;?jq%bV!0Q5 zkK{%?;tz*AJwhJ8{+}==dY`DoLMxDQeNZVE8Y7`G27eJcnBw7Aa&Hc{m?>4vXp4f} zM^oCds~CiVE7s!GPf78;PGHxzFRg@RX#nj&p$@ZZ0X&1MGx3~o${k@u1z0e$uJ%Bm z%eNWoIKdzi&!*=;cKFnK@n>XF-o3#b0H4b|(^ys^clTnkJB8fi5$f5fJrgKV_oqWQ zGIswc6t=t}erA+PyJRX-PB7C473GSot^>~T2sh{r8!HVEF`Fr5+7x+ZBNyE8 zw?amjt#^U>(jTtE;UG%^4wNyaZ@d8l_c&$$NJ0klE)x(sdt2z?G>j+B5(r1dSzI)`kNfXXn*4`8b7Zclsojrd7v%{ZOvOtHTIg!Wiyp!nR{o z0<4xE;iV8ed>RU0T1e`ANLZ%mizx==AJQLjCJ_{}oaNo#2XTEZ7fMa7!$s=|*sj`! z)WNUFdewZC=iK|ZJ!fp_VV#hWzk)iq$iQLFl#)MWAmVy=Dtea>I?OW^1QssrB=p7k zDSWk#gnQlvfJ&`z;quZ0x#&E{8z-;UT~MgHDX#I=E*7;*Nd0Pvu2^krY$#SYrf9`p zldie&#%6{rQoiPR+za?NbV5qv0}}JPPUPi2DcOOa3V4&F5vtQ#PlnO>2Cho*9Tb1l)P>w%Eb_GF$9+ZyEol} ztcfAtCAl$Wg*$R}pKaxqI90nG0{a)H_FP{`elDaQ3nM7A)zEVp3^QhrHi$J zlK3}R{2M~4FOOqxpM1sY*z$^3Ld>a^C@i^yHGq8jk2YxQTVJw2gcWJ3uiddtH*ZFU zr1~4N_WcL3x_E=eRQ$vno#}s_nSd&TI6a*LGd#H-N|FiH9da8z4|E=^I>#lG+mbQB zGf6*baI_P)VtPKGc^m?;F)&LhOR%|JX_q8?RtTS!)M6sK(nkNaRgnkBQkcxR(yU;sqsG7q}anDTFRz}{804v~pA6RBy~S(G#Eayf*wshfBL z9;Z@Svt>AnrqtUH^ipJ^0fVY_qnlVg=6xYM9>AiOcnEqxTqW$djcH)}MUzpHZH*FT zB`;Wm(7f1;+wJOX0?BX}74LE7@Ue0>1D3vtC4_G}l8X^|q5xc~T)dC$0sp)U@vwdw z4eVt=P2Znf?4u=NjXUwaQwt^W z>z$kuEED+3eY1<3xnvWndBi9o_Ini;W%>h#!%Ch6ASGn*KczfI**8{h7g{loGv9^G1?=!&RS`#ML zgoDWy{|zN)|6)?8Y2)r_r|(nzp23lC3zRi*0p*_<$8~Ro7LT4tD;H@MGG=`1f8fO(6Q_c(skNLZ~Fwec|kUj*vEXM$Os3{}r zuy*NLPIJ`$54p+H;d6op*ty}OB3OLEgfC*2Xu>!zhIENDnj^>IjTF`MIOZ>B(@&Jw zwrU`T$npaO(&Kn%#Qf@pOp6RC>niUIhh^?4p!Q}Vo?QnvL+EwBgG>yzf-k~7d>VGV zlaJMr)|dBU%86CLHO?o|TL6rmZ}8IN@MpN$ZGXcG$wB(FF<>qauma__+BT;;G?MC` zgKOo_?CY>+B}mVJVob(KN-g?eBgWPRO>Zbew}J%rL=a8UPeLWdSaK(}41N~G?E3n?@8sZhhL!g>=Z=;KFp z(PO9+3R4?`s5K+|>|uDx9m2g1E$WBwBi>L{AOrhWZbzB!aR})RcBfP9O3WLEHqLw` zGOe6X@w&mh=QmVS(!rJJzsd)KOW6~+W39x;{XPr>{Pu1+LK64)iu?OuFm)QDGXQlQtRSRG*sePe!4EoiIiwzfe(PFs1K{Lk8dTKXEav7bg1V z4U9tm^5N){K@9jd=aK4Sx?C6X2B@-zGj-4 zQa1&g!CkYqe zx;8t8GoB>9r;a@jdBw(_14!(VqqL881g-+Ej0bLOFjHE^Ed@ zQY|kh)q`Z9kTMI>3K zfKXYKz#Gw&0z0u3wDCchcnRo%CQMpM&bJ}wFrb*PukgO`D%GB!f`US(QPfW##7uCZ zxJyB@Owyd#53e&Bi!Wf0S$h{TZ^^o<0Hiu8cf)idn3BO(YtWFmtrzjxpO49M(05eb z*pZclUB(?o(ue?GAR7CrAg3tPEgsoET&D1&CD;qCz-?@$!Vi9T{h=TRPUft!5KC2| zCjll;Wojx|z-(gURTR2#4obAtVZN4gMLUS*a4O5c_yACN;%$rFSo_JHCZEUvb+Le%6wiy8Pa?HDa+w4 z?#X_hE2|qDZ%P&up-F+g{nV8IDK9iM2+~Sj0WTdK&?WUeYH0-qpJciaw()+UpaCQK zIO6cKK0^0WdxlxzPnn_AdJARRtma~Trtk?P_C^ncNnYj5zmc672qbc+KdvFmnhd9m z8E_bnKPvKY0g0pj>w%tFFrzIL&&YNO?=}}d)?syu-;Q-+oI*_|e8#XkLjlzpq>r)< zY$hU;^RPl)@R6bZS?Fjef=l2NM<#+>i{Lh33nymE20^9aBiPA9Er!b4kyG?RePh4@ zNf;}r$?D6%?t^w8K{4jmsR$F+T>#&7JEiCh!CS$!Y@VOdJp z&`0VdnTeNXRDDv8wGe)VdHBWq$tex4+JJ3*f^^}Zuqg!;4hJx?ztKpGY*BDH1@IXU^5TB27xR=@wqsUlPo^)`X* z_)-qJORzpA-?K%F92RJ4oiabHXw6q#+AyLFXYi#!D*rG91E!4lzg%zwU@-Qv&Se(4hzLZE)&gK&!UtOn0?Em(3k{#50jM z>mLAb1%>(ZqH{=`jCpm)vp~8}yc4^)uU0O>0lwRo#_R*wEBuH|^iL<>EqwM=pI)Ua zmgI;fxjJGAPEwEA+(N_&1uE|O1HYe?oYe!h#`W8Uo~{jm38q?n=Gs7xP&J{Oo@jqr zw7;UG5bdv$pP3^Q%x+g_{$AR-Wo^)~fn;$95=lAC6tVLKSOQv`W6-8Cq}?c@#X!c$ zWnceB*u76XgyDM_&N&VnqeZ<*TfSm(S+<{nIES``u&)=(h&+0F@WgmFX$0OzU~xF2 zvWS^TUq4db+Z<3rt;h9;Nom((^MIe-*Bi-2%ju%!3`a`n&qJT*2i6l*6RAV`G)%qQ zxAwZCc~>3Lyc~P_MVd?$o0I>{#+bK&IbO&gaAzIDq|J*lJUI(D;JI+hAz5>(X!{Zj z74>B+xmac>mKlj<#$-Q(p@iy*p@bC|*Bi%bfS@}jn3d)ikDxb6hk*WMXU)h-ZwM>5 zm};2{*j;N!a#jzgZE({QP3n!%2Z4q`Cl1Px90@)Uoca#3))Noch=*&f#X|_4F_;0h2@l{2n46ZK*n@~`?1+uyYQp&|NJlqSTveipuC8T-?pL=DFqRa{I3u`2C zd!V>oNeQdiG}xZz_~nD|P>RZjI81_)P@q440W{)JbKuX*q&mfvzt1A*0ltr?{)!K1 zg-;sAnx?}{vux2GvK!Aw46m(F8?3xTp8NjA!23tuVQ65|n`|ChAl3f;8AA*)PIn+P zQg#xQBXIAon#zKjBGoU0DOKGy6uu@14}~F=UVR?eJu|J979OIvDuo9i6M2PfM|^5q z9PojDYH;c5S8rbELH1f%Wj?OQtHZ^JVGV&ebLfJ|4{hF>nOH( z0Epk^Lon&_-<1C~SY#-lYhof!Q1Cwxa1lSLH&bq$wQvy&+b z+vWct^jX;(!`bAII+-&iQzr6VKTlabXCW!VAQUyVn~L8wvX5DUD9xS)auacWt2n=n zQtL_((|;cycoUwfz&MrdtHo~|e&fk~Y=3ksD$5N;j0y(9KAnMIznNMa*-pofLT?hF z;O%A%McmhJ62>Wacphq}E)?qf5)Yxfsqw$OeU5=UPoa`WDxwTPWu~kq?o7G zZdbgYk0iJHqYQ-a7q*}b{ozz`iBU=UNv7FypNAlHpWq6@0z2Ph6yD;z79*^7O~Ke% z57n~z)cK9%V)9Ed`IVUb8fGqf$l-|bQZWS@ZrnD?Ui zlN=Ac)$@Xf_6vygv3U$c?6cGxRr})V2>RVF3!zuLt&&;{h=r>0Q80NYz84ceh>0J? z#7~%q4H^j`(6vvtk&YX1o^a`?-IvzJkj$DQQ;{lag9Dr3P8Cq*x3=PE=TOF~bvDjiKw%Cg;O0mU3Y;lCO zBIa6T7O_nE;~1FkF*MQF=>SVQG97*XgCf0)+(ajW@~1~}Nh1Zq;8hT2;!tcg3}2m3 zp{~z)M|+qm5M~X{0@${{@~4)N1BR!ttiwRDULT-kCx$&GpXaNQ&G*1!E#`J#3Py?? z9ZzV}7KQCHq+!o_iQA67s^w>vH^gq7dkH7XxtGaat<`pLzUGM0Q`8Ad9V0+$tK#+(TyhqTA%YOv8aBj`?>Ls##b^nG2R8!REwNY<|rk zE%uE{+qrf~) zYdy&-o+V(aJ1bU@H&ea63P0Ui1W!x?w^pCDotY!pJdL zPPj=4J#7jd?L z7*goRVYZ#3n00SJK9`s{O^tqvu+~2jx2iW$@_nx8+6U^ie>*^pYqM>7Hd-X(4mldS z?=|QcFl6*tCL*WhQxA`a__$BMuV_djJcMJ#jbfDRR6Z49^p6>=Iu~Es9WR=hkRqPJ z#yF!-Wuf3AO3JO2VcZ9`*dL#vbv*=XadRYGZh*DoQE~P^lD>sL>qU;b)Bt5f>a9eW z_}mz^AIqj@Va<7w4>_?9u%&jxV3Zj$ngZrZGA|51vtcxOFjdDq?DkRNNVSnunPntb zT}VzZ-lD81czJ-%#xMK`KSAkT{SZAmu$`@2b#*77AVFHJDmmy5LwM~-48Ia>mXt<9g zU)R&r@rNDARt^S%je( z5g44pA(nV{jezZq-mui(f%Wl8SNLM+f-8Lg(j*sVd90va__ihGG+Tk3ni(_nZ3D#V zJ9^^uU2*yzg@q|FR!O_z4qygs)g`!blN9bL2wgTG;??8%)J87)wjLr;)0ALD=eRs$ z2Z5`Y=&>8fWV*LCgdh4eWbRfh40Q}lVT>=pn0&qhu;oJEk)z-GQou&2#NT8>IdS%MH1F^Y%8i0y0okupaKp{?iudN_ zV2(VEqo7eY0Ghz&=nk>16nF(5c}F2ac#Q{ZAPQ&kmcvVU+*Hef6?AY((&3}(M+dpM9^Oz~k0AdlePqyVpDwFAPq{0<;v5(CHkSt_ zZY$^u*`IgF_k_I^1gVYB04WXBWfyYW<_&Sc5Ro?27!WhaD-*%wgJN(8-@IKZ_r`HEyeG+CHYAV6UTEYP@7u`fTMfMYD?|Lsq<|_+Fjmdb znzjQ_WwvB-#q~tK(Emt`qj9Rl6Vb7{yOt_b@1NkFHOa}=>z9mO= z#n1XW;wNZ_CJ$Jg;{x;KyWEi0>60aNP8w^Hv|_yERdZ4B6%dM;gi2B?EyTqv-KpIW}-rCY$09>CzPg5+0BaERh4N3pp+DE1Zo?Y`AvrCW@yM3#h| zN~vxIG_yy%Vhp8HA427tjV*yF&RIE8LNV~IY$s8!6Z$0kH4wi_s!C9RjPZreFV4sv zJIKw@?WiVvNbqRGR8mwAdz=KY*~%wD)VZf2bkUnkzYAts#AvphRS}9`7{%Rdj@G4* zUXCxqAMM7S1WGaKjPx5Bn4I`9E_^7+m$b~_~aZBOFE zW2ebfahs(*{_sbRrZyZ+<)0aTT3ndU>%#5w0^TqpJC(fp-I3LOC-;y*Gf{9<0$lq4 z|B<@&ak+rU!D+bi2R~`1$NBSAn`5Zt{#z=pfflYk)#$C&YU;=3OX6OAanFPboR2`* ztSncsQVhQEfA%-VH)ut)R31bF6W1|CW&i6Q_9@q<4S>{t{z4Ng&TWK!T$hO_Wuoy0 z3VwHzJK*(_T3L=jj|UqaKpwZ7|G*wKT)!+dXF!^&<4rR-6=d4+ zAaOic91ju4o6?}ti@*gV1A0hyFbY!?f(Dt>_WvVfR92lKC~g4OOLTKRO!Sl_{E{g@ zu{k()CEY^c!8zz}bII3>;)e9Zrv+*A0DApDcES`TTv~)L_THAmIWsP-2|2F!X~x1) z-^m-)2X3aJYcies`R%|1q(K!~e}Yxlcf%dD(t6No-b3Nj`B2hgI~8^5h}g0B_dpsz zO7%i!k7x(bYt$Z?O0y)j*Il_7(?N{s=m`gPU{sxH>;#uxsO!~E3YY@=P-d}*hHvGS z(rxP$>@8=@77Q7}Qx+gC_Z?1}{dlrejjr-k#_U~!=moyivi3PX>2%>9KCxW)8qXfz z%n-Uxi~S8-hx{zWYl5zU+)o2kKfVv(gL}pnnFmFE*?^SLk?&Aa)Je)(`yJ@sd4X2a z=~C7nX`Tjabw&4nSaIF^llK%T0YCaqzMTW);^#%QB`;OWI3CU`*8ag*aKU&*v;)xa z-itC94iJi*P7$=SZ*Izi>wE527o_mJNI6aUE zh;;nSm;SUWJH-w4bTagD4>P>kKumYuF8p@WXgKV~=*n-vW@60hqhOFEn(%dq{a5h2 zN;d5lVX@eU@&a|~SRfO&?Wm~A9&f6tP}nPV#O%j>wLzN~o}rMKXe7kvHNfj8J4%UU za;kB{DxR;@n8A2aH?)?C>Xj7L=`He%E+Iv$Y1||C-JSTK_3^*8dL7E?h6eD@tRu5S zl4B{rXlUn0>}f7?IYq2w#$NYXRFFCdP0R2&CCB^QM>4WvP+d5ql`9(y2ty^YD zA$vL1$Df> zfW0s~G(eVkfYQGIh1^-+cQGC7xf8Yr;fMO8HfKa{W(t`PW^TA|b6A6@n=O8nQ=<1H z6folWdPK+0J%z9>tQ)3LyxCjaC~4;M5;2y;8M1kH2tw$!Y8rrqn}wO7jxh#A_-zn= z8x1IQ_D8fJdMORMz7lgB(27zXKo|?aa&JCmdiTbcno+M1CLgy#=wx}#R8JU!@ zjVlN)uh)CQmxvO>qN%#zFC39vudS5$4>D$Lb4tn~suP#LdkV z7yA>ZU-!;$7$-*eJ%Hq?+u?fAgBvP%ygch2MGn_r0A4a9h#g5Cx{*cI(V+*Cd9n%F zEYd@^_*Vf4bH0V*>UwW-4qhZ@3fZ-)r=$b8GT;U4+l4QNTWwV1c?e%l${>$ZLuGNK z4jeBRV=w85v6pH1H0bN0aH~C)z;CX-dod$7;vp@qUSek_Y?^EzBj>%A~8M8Tcu>>1O4c}|xPnZ+T zz3s(EcGshu0EUDI2+=OeRdC~A{zp^oM~$~N!bhG%c0g$`eY+)!e}l_XXN)9`jB=q2 z>y7bGGm)?=dJ1Q@Koi=?3z>rJC|qmjIt%wjVW(DDwSX3Mwge^qBF{Z2QMsK(RvsmH z@tp2)9iP04rkEZ75t<4mFX7h19eCF{xaZ>~Igwcq-CsK3GYeB0o*h>`HEaMOhmcw7 z8R(H}>A#Zbpn+<`P>K@U^dytAsL9NK~8?PI`eKiPM_Gv3OhH2Q5P!AEhRk%ui3MkE|)ltlXx0MNU zD88x@x}L3(3(uLzsnl;!PYV^bI|KAkB{O(a1~YME7qAzztx6sU93H;+5CCDz5d4}_ zvicIbb^Z}_v{|MOLkir46w5_y7|OMJEU#{N`$3#!adkNVE4U1`JaApxDQ_a@C}$sp zQF|aq0E{W5G?P*(3iVCPMYQAlo(O%d?jsDocaXo1{^E%GW?dqijg9%;NudHD=N*kV zz9emCgzIY4v25cWT)_4$_(9tBRP!c{m*nNyD9UH47FD_#wFS3%v9`C3DCxcn3jQaG z`hEN%Ye#YKRx*&Fgc~LJ!eZPkuFN6z6(V)XeLhZjpiDequLRWUG*~0I#tZ~{(uj3f z0kBEuW2Azi<_^>}@H0No^xumS`|vNud~+aw=@n4{C8>z7M^I&76H4#PAUmgVPn=?N zi~OL|7Ot?scX=_`h1mE}eYuq6bu8!~*@{henWu%~Is6-}YRK9aP}`2YNSky~U|f?& zd!Vw*-uU@YnEeX8B%Xm}D0Uq%yUjo5sL644Yds-zfgMm+A#=lNcr*iC3%T|X?mFTa z_MBVCnYfA@5g;OP4vOD79QAB%MAeEnsNCORD6$9q`i`Q4O5fr+`4kHau0@lJM-(^V z`W-}C*Kn)7om+zR2&vA)bMzoas*X9#$H>g$Bd3PGZ>|Q)l-vm`eZNY2z#nTZE_}&$R?mM2$>zH$#J!&sL&*^^@&x*@Y2)!SS zgu`N=uDBB=-Ud(^yscqOFV*5JouM?;q%mF{PvM5FyeVmZfqx~g&!%MY4bk@d8~!Gb z!fvQ|jx(B4(!CLA!#^R^cC|5b*lv1IJ&YIqmydimR;)*IyO+b6f zV(z0l~@#u*j!9S9@n!$m*_AX;%ncB-^f}Y;e_-7cA6(OyzJd3=+?E zrc%Cx7yK!6$4SdEjvoOeW!z}Pqki*{Il1@kRp2ZtKq1{7hF_rIQ zu+bBa7O_hGqyJO&#unJS5o4)%h~Fc)*0bc2(t*lk={+gzayT>C-41n<*8|{)sT_XNCm2 zQ8jiI%CMd8jVP~QN|_i@NQol^-p09IMg2C7w;?_1-#GMaf(Actif?@$^R{U`S?t-M zZH;9wCg~kcJkh=ln96&5Z?8&sG(Iu7ExLO!v>xS+2j2z8vF?&KGXc zG&i`B1u9j&MOR;K0x0e6dj`ExPlQ@ccN7qC>>>JZi3?Mj71|++KQji=sW+Vv{iK{) zId|ZGbsaYY-n6up4CSJO3AyNkC}>L4{51+7S! z6YvHr2ha9v8I?PCf>CmAm`}4ll6aFP-oTmA=hdJ+yv&!#>h@4(+ee%{v|=9Em{K6b za;FVA!t3l+NentK23?@mRoB5NQQo^Aax9 z({{Xb=zqNZ==*%U>-^dZ1iQ~KKPH7^+$x#HGkX9<4!I3JdVb0{sI^&=^I%I!m`?}Z z{00J>qV5jBms#6)a$^$4HAjmx>(UT4Vk<)uhr^$AbsFFy_=XEYpU#F-J@FRGw#(8m zE|31D^zfb7=ZdRC`FrbTllh+n+&A_ZH`%K^zmv+loSu}9ndBioj z=_^?kQkSa9DA~9AIc}!rh+nyK8n?NpOw_wgWwSwLNe(M%oE^`L^L7U8u0aQ|>fA^AGby2>a(?gQ4lX3CPX#eRlA5xyIkfT6y zpTTE}rps<&Ek}P3K$cnGC~3$jL^?laVnVUEJ`bDvCGJ^J+^(x~4Zcd-S&fNvteJ%j z?SI-KES31Et&%4q^c`!YYh?kI1(%2kT4^#ocaxVbGd-KNX5{7Yo-w9lHRGI^b;amK zRQ=spDI*f_OQiH${gI%F3d2~5-7vZz-V-oK=E35L8*ACWR+HwWD!n5YZEZwbThX>L z3?M&2)3bfyk)QIYxh>Q49aG@mtmCm7@AQDBR7=`$Zg|4dID~IIk)QQ0(J$ic~*du zUGt`3YFx*y;qu+P{Q<7F=jN7xm*5X%*XVOQyr51X)f-DiuYzFWQZnsA7A1RsFSYyi z!75t;yT6)`Y#JTgt0BvM9Nv=oZ|&D`(E?+WA$`?OXvr2yOuZ;poyF4ozX7$QE#EqH+`nCN(WmU`Ji#4WZAB{@2U7D1!Pt6Hz2EU(I_iO~pLfX$ z)NX4t2H_S5?X>MkJa!&XCFOJwT60%WzBC43>m8>SiLBIPi0f~&o=G-hZWB^&@X%#L zIpnZyu&j{WRVmn11tH{dU=ME+)kZ_P0jf%p3Q@dOP-}!uynjN0F*mq_+`!0)O6s(* zd362=Ty@QZlK{8}3h@Nx5|FeEVc@YMv_UzTs$R~NC6mvM^(Y~zq8=I^+3qOM&^7$7 zQ~%9O%;rDV0}rCeniuXcVtU!iXCcB2!x21Q8JCN&X>t~A$NDY5wipTaX;BEBt2!C| z28zZI_IX{)l8eC?#Ndl!@FiGU?t%8V+VENCOa(8T*|21hsvnoup_>Zd_N!)6u11&l zpD!^GaO?J5S40_zC=i?!Y_Lf((xdEaW6_NtP~tzOE1AKN*Y{C4wnnT!j##KeMYagX zjE&P;J4({SfKsev0cO>rIQ-)AOTcbgl*j>?vWt=_U4IQSDKgJ-t)&g&C#q8XtRjD0 zjY6gdw{XsA)(xX`(HTD%SY;oEE;q4dm0(9VO1?V|s%!=Mr!bku;qcP!sGaq(>zJ6; z`~@z}xg-F%tG)56{BnsEcO9SJ0K+Er&2a4Hr|5v}X(O_pTf+3wS{B>8Zie-5x8XX% zZ3JxMHq{fR#|DD^Moj`^F{5$GW~g~}F13i6DvPDuWL^z%xO#>QUQX2BhIJde!DJ5m zy}=z&O0N1BRa{z+Dbu(i)7#h7dPE?WL(cLws7(C@dvt9UTtC_VKeFBeuBzmXALg73 z2x8L$_rkqgx=XrCx)e|`FtA%x6i`CNT|3vcJJ!y%yVhJ|?e30s&1ZPO&-M3zYVC^t;B2KMua};Lvf}uy4u@_If;pu zZm8|VUNFDzx2ITd&oiHe|u59WgV1L3WuuES&b)= z-G|8rjU;mnt;0$%q(tMH2qlh)Zh@qn__;A65yC#GB@9o{qZAd*tivgtDdI0iSQR@c zUGzmWRGo4G;j8@dw5D&ZLLL;+nvS03+3aW(bkCXUCOS@dLiVsV<&FB z-(5u4NGc4}fzyzz1d->m7QF5ilre{?OV`zmup?eQ1Wby03}|Uz59p|x0~mMbr&G1~ zmj_VIK7<3lUPJltYQ*M) zzz8u79SU*pZUgPgT5q8JS|2L(Pe)Sr%>5`q%Sk<>Pea`{h}Plb90{BYNHi@ag5S8D9+zr-50eq0R@oowj&}Fo& z21`U2AZ5btU?kP8^adT$+T}W4e%~Jf%8lSxmxlv?01Et|0MZzxOK|QmR&I1b%^ZHXc=<3Xa<3q7Fn^K%>~B+ zvtMh6Y-SUg_VMTnLGvNlyd83fVpH%8pk2wYC1qwE#6wL*CI;3fuzn)hS?SdNa=m78 zpV&Xd-h+UG`RCbdlWV~QNet{u*cVYKwNZaruRm#qeh2IP0eR1DA?t&~x;;c^#BrPF zV2`I1mBa$6DN8A6G*b<(eR0%(!BfgSFAtSC8vEnJ%Tu39B~a+TCgZfyt|dh-cgEzO z5P)AGenIe&{EolD5pfN-RzYrQGX!;64%%^hxg|)jxpO%|Q)C1GZZ<(lcTMEsu&v zvN&<2IVBIcg}2@60+nZ`YC5G+QoGR#)+MRFzDaT*rx_^;Jlr6N8uBag_humk5h{-!pM}*`{Q*i<2KD6NG?yJ3V{Phq0pvIL0(+e{ zdrir~`%n>h&FNjV+-u!+_H`4tGFI1i)*7&*fza+~Y#I~|#NMqm3PIGGlHDI|kwJNn zr+tSWJaCf`jKF$mA1+XYgpQJNR`Mpr-^S%P$Ueg#_jaxZZ)w zrXYvPcfE|`t-TZPa_)4O>0a$0a}}aBTO2uExhF&F-1|#wpd!aS(%ip=#weRn;BOwt z-==gU6DETu+X7#Wp8?+(#^q%9F-Z5x5*Q@-qw)WpL)NsNOvou$ag=OKZU0Hk(6fVX z_|amdM^uKm@QZWjl+=3Ck-Z9hy&E6ehj2uR)*VI?Mt1smKSsD z3V2J%wGN49-D^B1BgsM2Ld61zxUPFB=c)*S93aKq<839nl>=bB#s_F*rxw#^4!oD!nhRSC zpv9aCknq)SrtE|}$mH5$B%oVAohqN%=2N+q)Y$HO2Un!(S3-e|sR% zoC?N#nrr_v74z?VPSMa2T+9Vf8!(|*16W$2b65J4&yFd0xzS?^?$8}%i)r_%{~J|@ z$0s3l!g;Jo9y%No)kZ8wm0>;w$e-mwqmMAoPxK#*uJdkWqYr1r;!{WR9B>f~@9-D) z$TcLAhSqzdHP&`-k=Nq}h@Z=|P)Ak`p5}}opOi~Tk6y2j6JPe_ez^8r&{qq#tAkP>^kaqm<^ zT90=|J1NBO!D9Civ3n?V50}WsFqVJ62A`U#{R6MaS{jUNO>>U;Xk}x-ig(!8!Zn~m zV?TXD2JdIHp#ZA~8%{?`Uckbo+v}+H&01VM9!WXX4=@qxPvHP@k(t_2v+eL;`g3Rk zb;WI6+;PD0{_VLf<7#^1#z*f1pzrO756DcbR2HV8$jf|`NO0lv zjC11YpUcg^eLT*5k&ZYZNmYduKlKpu*f-e+s97=w(EImFS5VFVAFtMliBZC$3OArnzs~l zAO*E8w}6j;jCc&SzM8D&tl)YaO*i1pt}8yG>MCUkj>B*zcH@(5BvI807Vas719hv& zecVAw%y~>c=dYm7h6dE@$TSEhJq+f<4n0h)hxe1z8sO^46BqHk?i7vdz6YlPb4_Q| z?D6*k1952?f@>}pmsY?z&bN+8buV57RhxQ40cKO-?n$yg1mx)#_(2_%1?HxUxfx<^ zCV82hfY9hy^7Y+?Pfn92{2Yxa!@>BbUr*w9iaPztWMN4)b96^NzQ8ARkH;`jyz)_8 z`4`&W{n4gh*HU45vTWP~(p2V-dB5Ze^e*9d8IJ8*A}K%#trf{Wma0b1g$pmUaB$Z6 z55k5p1IU`uZzC$MBV!F5l3|GFfzc}YB~sLNEFfvtBltFbC5bOvDXsLHR6m~bKQ#w= zq%GfQAYvNnL23z~7e|_)WJvp#AQ{4;!yHcd3F={g?OnIFP+3oXUc8ti)^jap8xC{r%<3u%rTEiwX!(9 z6IzfvUgKMxR^hjrqHP+YwR2U}p&|jL%u|^H(VV&m=znk*V8B^S5=mo8?(5zdi1{z{ z#Qc}WV*V@g-VQ%#B9~GNz{{3iL7*|ZEz91+doKb0$(v??!pa>d(FkB?b>H`Jdxw7h zf{l^7wweHFwxc!Ay1G3&cA~}NLwx76JsY(dAw0)LTl7kYB>a-`YYmUciFh*h8;yLz zY^+3gC&2DMwo6?ozz*x6IraF)=%Knj9Kac*0Po}sIgZtnTWAUFV{gWrytYHBfe3yp zg5T+h;P)c<19@uSVQ0IofPK*;n6Ry)!O2Y2`;2C6mK<;pue>pZ>}+CjJJ6#P>&5jf zIc&3+;YdEV>uJfE+PA-oXOY<-khP{4skTgzWnc2&%43xgd;`-oQ7poBMRGM-WA@|# zf2O7Jeg4P6qlqkxjp5+@YZ9^q=e`B5^>_p?Bv)>VD~L6@o!4TYevE*|R*Z+1Peco> zLuuGHN*?*EiW4^eKVWyaz1z#7)Ic6RG|jX=*%}gH;rcgPI4KCHvu#vZe%D?$~Pc&dCk1 z*Ip%6BMIIrHFdEdL;bunk*Dl0K5cs=WIPtlS3V;r^kovKV##cbd(6;jxbAU=kNz$V zcyIQJKZnlCYsSmYIVlf)1z%Z5jWN6<9u7j9<5Dm=KsncJHW0B*j6^Ji_>}T%kphM% zl>JeM`877jaIm!c9oBUtrl3rWbP!8>Q3P0o0Zk#xJVCj3F~B;eKbV5D)Gr5AiW?v) zBAfF`phR<9)=QzR-d^w?J;Wyn4N}h!R0uP+-}kE@h03hP)_ zp?Vod2VYo6VfUnW9Il>Fg7+`NLCL#F`1KZ@S1e(5QKIPoFE3)k(YLl zY|@xY?NL4@Ohu zo6SU4(PM#5r<+hQS1=#<@9s;;Jt1A~7% z37C2FGah|aQrn95cx3fzJreEUA5X`=(Cs%&u7Yy{im?qZq{K5z`FwqLBz|R-3P&o;0NuV5=Y9023@t(X<23h;k6l@11GNXPwLiysCi=T0N5SI28Vxx+UXcO&>Dt z3!^dJA2csd0;gy{U)DF)6M5jM_=LT~BIsAZ6+1*rL3^#ua%znq1^P-+~UHHu28RT+zoQOV_bpqj}5SDVx0m<3#iVkh@yXe%uU=@ zjF&{@V??EqxfD^e9g}ucE?6lY3vp<-f0{2Nm)YnDz?4Hi3elh|zvm{I_hD}Y4pBdh zU<3YhCbWuOBe_x3zyZjc^%P`&GF)K})mNg8@_6#EW_nt+;t9SBQv@fIOga-C~A>HsTr++N!ta2Pb)V$M-F2l z9K@!)<-IK4CxueH0=!vi2aBiNZR!jRM6Dl=eH8EubSQz4)eR`v{M#{!$dN8D%?`9c@+<4fv<|c^T zL~@?|4~hguFuwLKE{4K!KfI;SDJH6mgAPiOr1aXUV^cVfO~qNpc^s5ykfZ%aHM*d= zGY!9jAtZM-TxyAN)|rr2bYx0zcn z#MLkQpsw%Kp($prOki95@X-I0Kdq8))pX<_y)^l%<_RRqR=n)kN|+7|04)q^*oi) z3UMnGJSnI2){-dbOy*B^0-M<#`Bh(`k8I_OqA{NSqiG_Hs+v;F;46sbVg7n49;s58 zWN`>`HL%v#gP&-1B%@KygBpCU&Br2KJHH>mnxkgRn8sE9a$etF4?XKXYmP$9|RlZ=keGOwo8} z17sdQidT`JlNIK2ZU$2wqdZ&z)Bi1!vF9g!JBEf_+esGHkC5t^77FNW-;2>qQ0L8f zeNOUfss07^ozL5Bk3D>-v)i?ZxnypeFuzBZiIJnItm`VIn`t5Vg$yU$4maICJx8-_ zPEfDML&45WpuT$z__jN2k(}b`%?g^lnBo>So4-n6d;`c393q3$V&XT@qaU-rn9QdiK1mX9|_^45*o$!v8E?@v?i(8*A(f zJrI^o9na{{h^y5&sL@70T!HEqdQ;5QN4Qw}7c6#PN&_hM&LrHvzE6FwFdeFKoDEE5 zOzAI|Gm2G5zeQqHiwHT3q)AW>h~bHxxxO5IS@Rg52U_nz3CCfY@DHK`HEd7uO`>$C zb9h&H)Kdnp!SUn@S-5;|NY3SMlITK+^2i4c>sJAQsu_IksCtZ*;M?&qTGAwh!VmKt zGw-&KtJj#q5DOH=%2AjY!?v$?j`S1Ds4)yM&z2VPou3U`Fi`K>|dscNaj9j>lwiFijjx zr>OZlb;1%y<|?|nbHs(XjZe^!t!F4hdkga+>i{nRyA82ueB$Pwcyy*C4YnTzd_M4( zji7yo-GhS(*-I&RrNW?cGv|7cGxZwR1_jC*>_e06^LVq+c4HSq@W?ukXJW;1BiII; zQkgFJuT3O}|8cZuQat4|yauA73{dtbp{!%`sc^#_*S!8~)U!&^Y|}lY%uO50CNs zV*6gPeV^FAAC${^oNPfVz|T+O4jznF9pD^xu#>YCjN=H1jxxKfJ@++q^aig_BSR&v60c zenU4G{T7NrHtV3<&Ivo+x+7xUQL*kAMTC4p`L4b@c6 zKrV`VRM^}by*@mQ83|R9eWV=nzQi~`t;P^o=IwE?I_BXhih}K1`TzkBR56kbgts4k zN_TyL?Kx?n5vEq!ie5GLi0C4Nakk&f=kqc<4&rb^pMo zDE`;evLPbY*%~1;g6X25>n?T$)3V|{ifGmaa&t>oXe58~a(arS?(6>mEU_)aTN6wW ze+1@8hzVf=l|N(BXzle8!5kGv=R&9zX!8wS=NLiCMfo}=hfho+tX=&A{0e~)!z)U4=89XS6==M}L_#SE=b7BfqHye_jlL^0c?qc-5o8b`I zR7+`RTJVV>d*U(zE+BINMl95=ripBTJpcC}B4Wp)8vA+OF|bWZ zyCaEv+Ids8B)XlZ&cBa9`z@`hd*l)1()QR6>8c3tOHS*a8@L+iHGuMMdUt%N{p@}G zeA!ujkyI>_y6TCfZq#oNul&*tOe(nj*p1VL7&{b9%T=KB;LoZt4Jz)ANA3R}0$BS8 z_hDM@dKd&0Js6K`)Ak?#$BYf_Yk+P`cA@aL9PzE>GJaRc(zG+T)y;uLlJ1e)5Q6hm z17k|L5e7XVv${m2YX0#B)UJJIB$AJdPLtNk&Cq}k z>H75->*qk0mx*5%ToF{_Y4kout7f@>1FE0DmW0JY@~DR5*vS`KihZ8X-MW4%W&O<< z$9FiwrLUp5keTSRP573A8TBBjZIgH;D{`Ns70OQi^&7w+7qwCV1xW7p6qmulq8$>y z7>b7d^cpadYd6gq1xj}e1uQz+2~c&Fo9guhJk^g|$ae|vwn_a)0{x7?^e^TMjE_7& z8O!2%sdzq|e9oap$@o2f9}LNC4IDuO_pM%}ua#iu?BMe5|9`xG-Ux=e-7E z0F<+5-heB%F0y#A5f-#otRJj>K^Z4A6pc_>%`o0{9mXHfS6IWk%YDcb+=jb(Dh5E= zq}yDIiWraah_AH9H|}mgNliDSK^M&M1A#UE)CQna&3R@H84J7V6nd=|`O-Y8%jXq% zkJWJ+8$Jw*^X*HukjMt;rLgAsweY6W zznY_oUXRJ_&^vBctdRk-txTZ77A6oykJ-Saj+J8$po4cb?~V;gJ;aO^kqdc%R78I2y!0Z_s(v#;twTcNr0+jBG& zK4>nIAtOf=a8g9#Yq}c$q<6m}B-lDhtdl9!VkzDkH36D8kSXSp>MQR#KIvJ2kv`3E z43VnN<97kw{yR@xE6htFmSd#~g67<|t!iI=ow)}HGNU&usLzwZ?Dc{UU0EB2A^-7+LKA4=|>%wcD4 zDyEx>>E>d(1$mb4fCC7`xLCUkavnDn&&(eu*^_$b5TJbMWqDj_13B79aS6PZX5`st zku2`-5chYI)kQuRI9wQlUT}Kf3O$aQ@8X1t+j`VGuO%3-Z%*Pv7EZx$ zDp^z&=mu;aqQ;^=(tcZRAo8Aq6$FVwW+%+F%mIT?OWg^EW(i$%+Bmv)*e`k`#gX=5 zTTqzp2btpu{g1{60V8^9@v1UIihZ(9hVPinE)bx=vymvl!dB@3bknHN=c@S%`bRUzr!_n;B|f>%EUg7;C7p>e~F}k z+LuxvNamP+95LhrVEP9;g&uUIOR6MHy$B6YfYO=dP#UWvQQh_H^xZ{OCw!#Gr(b39 z&k3x=`w$+$+KZ@fx>kY;gUcMA@4=%cqpWW&MHBOo%&#yB-m)wSP}@r@iSWCWXO5ng z6)Q+N^RyvLbMY)t;SLxvnZ5I8P5h4Ghd0S8-xEk2a-MOBdUC9Zk@ZjICdSL!>F10@ z{J4g?F~)*8l?ef`((+?Nn8`w+$c!~u9KhT_0P5o-nc~%lyx&Xa-9GGJ0}N=VZ}@$u z#D8)yS<)-m6#c_Ta-yF4K&luSr!B~8-p&fp?i^H4A?9(a8HuSR8^SQ}AR@j=?JDsb zLphV7I0Y7&+Xt9|%%i9^o=iv2xCjo~wm-4DFgYmOh>=X?wO~0EocefbHFKU^iDT55 zfAPWEssmtSh?oQ9@;w5?dYhEx&k&)@alJGLdT)tR2Ee!Bw( zCs4=vM%bsUY^%Av<}}uaJ_VXhW2Jz^pppO!%2ufIdtx-aBu`M80yAi)3%F8pf=ZLH<88j!8RsTV-5G9CHaptxv!EB zf0LUxKp5#PeMF=%prqG08-taSOX}ip%pU38Wg?mtc9D($I~3#Bl}dJSQc&_^>_CZs z96>A2M3Cz(@Slgagk{8EaxV~;C6E&S?~l~&2I=VU+$@mkSc}8v>GmI=zJH@qgIeHe z*F@A6vq6EnmTjY?-*$nvY_ms!*Z8eu7#^0&)TVhIm)G`%EKtDaKds_B3cNi)ws$um zQ^wv0GW^{YZ_CC_x`!=b=)r^7StHUq@TbJUG6^d511c~tb$_H~2M$u4@P_UWrKOGI zPk)e&K=i4#x6R|C;v@6D}#z58^^8{+_pKo*4!WpY1*66uFNtH zBA2G#xNV)r%YNdr$BO2Sg~=sIg!vkf{0PA>g?EnBzdGzqdxezk{&l3~#RLsk+rPY%osGkfSL7!V$1b@*+Gb zzrx$@NI0Ltn%u^;YuJO)lA5ezx1h&-7dbML5Akft`(#L8GOIp*x8}XVoSJ*`l$>Z zv1A6G=M+T(7M_m*4AmZz>i?wlAG)u}&nZQkO94|vF+(@HJ|c#p=ocCv1#+sisUb zQ-DQg!Mj5JYV!O2DCTd@g12aRUUOJr$cnjC4N?>u0j@g~Vmmw0%#n+?X^tuTZO6!_KYN1~q){pu;>$~x}c$ga%$iMDb;H_kPN z*Re3&T9fA~9Pu<{g(c|LXdg^bO7UKcJWu;j_fN0E!%p4D&SIReJzzuCMx|0=mv8SsvT_;Z-FwmfwUkGSv-Tx;DNF#hH}Y!|9i#<+H~ zaKmvYW*9F~o0WY4J?_Cy>q-Z4rHI0;>rhF?KJvTs1Fy5m$-#5i1>bNT=5i3%-3l-$ zvW+*5yZBhDpH7KhIMquh7f{BCKC($8#Pkl4q1)~-kj-OE&XYQDH>P5_ph}+!25syX!wpWiv9YyDvcjLHo zCG2|2o_0jeK2PIiHynQub$JsEy78U0klIMQTa)RApF#PocjcpustKRy;d|iRK=?IS zD_qyLMC6nbUfS^P5@QAd z+Fw#*v&XB>pGcx+E8(_W&@&sF4nH5pDmmykAEuXtlf_F z$ZvP`A#ke%#dPeG&tq9dMD_d`_)l&}79iN}Crh$8!idnZa-pv8e5{!>VSbj$%aUXw?bX)KkJq%VOYIG!dTV3ET7M}zKtqDg<+^lKjkxux0 zU--=(-=_fP}TBvel{3DfZeqdSfS7MwR4zjDgz<_to*|GOF34I`%U`iPoz z6fi^88&ErPKVadsMyR#%A#%QXOyP+H-xX6aPI>#fz=2H7Sg;O-;cA2sJ+DxLN$C35 zGwzM#CwK9dyN7^VwY+=@& zXC?QxCnFe{+Tv$Nn#meu&@PIRMdCm(9+ymjvX8^s4f=et!I5Eh0_h zQ&znP^j`X!I~v&h@)C4&>USC+e;er`c5pi*wfaI)Z!2*z8{thvOD zs;paeINN^TfrP^3bJ*cG*ZtB;``Z+ktpA{>E8ObY0&HH{CZ6h7M@26?<`= zvStOW`qB>sartSG(c<{h!4d4c_#-@HYx8*V_!N%?^gmw%vjxvhOrpg9+8bT6y9b#~ zJE>c}+L>K|6$|H?;-OO!Bj4b_G05W65z>%$(2?dpOa_j;Mt(`DY&@O3a<{B!1<~Dk zg&styj>$lM7-XOO!!ZI4@4!DpFP@2ZHxqU222NOT%HB2*0o(09*sG81CvH;XQjhSzEFl8z!ZT`@ELAF&_kZ7Zt#OYJC*NS zkNgci_yBCY>H;Px!g}8U4vJs@9=Z0^Qo@dR@O+b|xQ7u_E$c7mLiA&81A}lq;cH1Q z7b-CWJ9mF2J4080&2*GcU3mx4W6uytT-ZqdNl~b$2Hp~7~HT0H89 zd>a1-fbL1{W$`OGG(lOcDIakK5@D&*i7a-Xz*C21ivT_KmMN?h;yOHQ`?!FPjZbFl zf?b(HKb2Y|k|Gen8;mGLrNtn9$}>nzIy{p_h_^YpKmJD{Rz3r+9Mo(XvUn7qfR6kj zEAq+yxA9M25I0S)z8a>SXK{K8C(Ez{$e1)e1u!-63Yzn>A9>h4!CVoW&r!rSW(1Y5 zhkJ46lw_&!v!~2HJoZucBk^p~CmJzh3T`b!dBmNLFF>z`O<=A^TP-{_a96olK9fYx z@049*h-4Z@ahGCovF$J^n=QrM*VnUeq-Tou_Wy!O2APE8jTpK94!X&ck3TNyRAgzV zU`vLI#Z^-M7K%>fP11SeCJc&48AM&juR+NN@n3oW$qHih_|2Rup99lUaoh8NHZ6II zx+_7s*4BvHTFNr9k{jXFIfn}0gWK*#8NcLX;E<{3LOv5&-xvd^%sOG14)P6XY48MV zB>2Za1q^$%1HI94Jbn`>v+Y47t0uiFA|DAjX$?X|*o>UA1EF+T)TP||Q&&xY(bnku3Vwba|Bg=|f- zCYqGFH^7r?2-4`7qkdCE^i06xS*RnwIg^8Bs=Ew>x?&sjEx`{FG>>`wpM`BZll#!@ z>wRvWw!57IB9|s2yeUPc9OfkR_t>-W8P(-b$jK9P+8|WJ?~=HhLy^0$gBDRu9tql2 z>(G-?SVD8wqTTRmX~Jtqr(A16ziG$5##}diav!%&_Zv_ zfQHZGIor`#h5j(@N*bqbxb-gnfJcd|Rk9vj@T+`bBDzAUcG{I9%2k;J#H_&YpXN3)Q|s|}1cUw0!*%}(xU?a}{5%=K=&M;2dyYd|Rl zA8}rjAhOW>$Y733^yTe*sBmkD=4KwGc5#hB>ZHCnimEl|+;sfMR=P-9PJUik4WTJG zAlFZVPZHh?wC27F;d30lWd3RE36>N@n1{Sn|ZY--s$8UiD;cu zD4<8Gq@hrwN_!WOTMyi7 zn?5$sGh|{QuB#JZcG*qfe(O-y*_kf3z_}+%RuijFm=)oMx8X-*hu|pLk z9HtcV+!#fR9{s{C$vin8WM6lv5(&wbVoukhZ95$HS*UW&d`i{W<2JZ1 z0k^(aNqMpgw+?gvl||z~(Kv|I<9<;ngy~&SGW{Gmr^$NwaR~Q5iTvG&!YA#x{&4+Cd0iodl8Rc_=BgOBg5{n^5RxeY`AX6ovJhjhs$Rz(|I;!D+!;UY*V> z5gb)?%T+?daZm^{mUSmHv&TO>*=5N;+;f3@C-Fa_&v-jcyGG`XgHe(F%hkNi8%zUr z_f}yjj;X{kdy2hx1<%qF1{nZT!L}3SifrdWH$d}nxk4z-Va4rTw+caif6Sn~O=;k9 zSDM{KgMvtPkNd*&A?TiGr^v@=4({Blh5-hIMFF}D>yK6?LznnyUn!H+rfadIdv3p{ z5Kp>@C&eH@R?kHHUPn^#lt#$!^ldr>2ui0oR|7L^M^MojaJ{_GQWpEH;1%cs-d%8wIjfyFF&kKuyB7P5<9=rH zI@>^oHwMQI)o|WW)ED_Ml6{{Qkg9tn0oopHijev1ywhc#AM}7+x5AU~;5U@K z_Ohaxo{G%(2mC+0bjP|S+(u_Trt#Gew_qJw)Zp9`%Iwe3rO?Sd25$pW(rD`OC#yna zKYa+OtXjdPLVaq`wWH6owBElNyn1~y5=QBIf_=}kATc0`2P58yDTai9+o8te`^m=0 z5Vx*3f>1QOS2P%VCH4WRKslJ~F67GC|6@kXL)N9PRMjyR-x9rm>DT!k;GlgaKGNd| z5XA1UNb(OR%RjrKGF8)l7(166FjDA;GqV4BN$i|MUPG*9ep6l?V9#B%F&EP9he`F9 z5yWdIs4B6`80S`p26$?14N(Zb-?AGUsXD*xfHbdFAm`t$!GfrKDv8-g$o<-KNi4Ua zS_g2x8x)f=Cf0z7OyK5R1O^Wv3VL16)uiEU1{M8lxtJOdb}c@rFWQB&VAJvZL0Pz7 z#I*V3k2h#y?@7XX4S57#mBg;or1=hEjb1uM%(vxgVide>)b-xT@CgnO!X%#@#=VwB zBkDg7}oJVxV;eIka!a*m-xa+XoAk@dV&C#acebfAg~dbdDvj~=&hH2H2yrT>mb zhmW)Tghcz5vk}0x{)2%*{YOgQ!xP`?A6~g;FPowr$S}o<+mTSq=OFt%k%}Pj{Uh%@ zm$FIY#ds@tIUlL~su6N=Aa2`C-2pa7`|qPLn$3aLZJ)4{H~cB|U?3Ko*Pk_@hID*@ z1)}u5k2$Dmit`Anes&wEiqGBso8z0pf|y*+`jecSE=GiAWN_(~iS*Xz%ve9`(Kp!R z*yG-GQ66{mQ~1Vi1Uy4Nce|hwiKjo~S~}aCG=b@|u+GQuOkJt4$D$2sxJH%{OH}!S zh5qWhXFx4D_dNrB-Oi9PW+%C@RLA~IKZK>}DiqzQe~|9`y{^G;_{S!c;n1I>N%T0{ z6@s|ZT_fHMXDs-)L|8h@2O&W{*@g^ZxHi|zq>B~D<+ zBw>cdSe@xnOqC^Dg4@4^N@C^#i;k%o2sX3BMfSaHK*gmSWWAPTcem!JzcB7GpAE;c z5{#-1$*ZUxh0^+VcKkY-yDPrkVJ+X9}SUO!Sok2bb{0D??Vo?)#7+5u{(#ouj8$x}4F&>< z+50ORupB`{@BV>Av#6#2+lrrSm_r!0V+@d2VL5&k_*D+jQ&L&KeaKnp@D#AU=8TNV z+6)n88(l$f!!n}dLVXc}T{7gp2zfvri>^rGY${dz7D)ADVUo>^hhF_C5zYqDEX{RL z1?Z+I5UXT1#fxv0DNl4KFsv1)Uk367hA&Bk6T_^m`4Ei}k1^Sa+{F{y0$MF#{H1(6 z8c@}#Ib*RQe5|g9<9*cI89OlkwfxQ{hTUO;(94c2KEB1R=TjJUJo`=o&H0?KdPgZs z0+H+%{x_((#51m#;%R0)NY0rCKz*K<5@qoWePUJ5TwbU7izLxbP0_<2qV(^c6deAY zk51u!tfki7m%_7d}vDjcPHdw&-=LjQlSR)QQnux<%ao9-~hn>Y?7YhB? z4Kq1C7&6PeYLs!wX4aFJEsiEHV=27F6WOpMRlkdpy525{EkG_&rOcKBF!0@mh&SkI6&%*!~be zN^5RY%ef19_i`~1tX&ZQl&QUb+c_z6RzKz=kFO=wm#w(hZhFu_w7#Y%T3;8fZ&+f7 z&zdp;8NMMpnBAub*rOESjA;L94^qLf5xJj%LB^6Av7|PIJXJr~rDH*_EvUzI2xw%+ zE*>A@7v`U_RFMIdIcXv}EV9OAa{h6W51(!`OJOfOlKRc_2eR*Tu`BdT`t5;+zU(}Y zY-ccALba$7Hkrg#kgh|PZ$r5eeeqbDOPZ!?g|LDfDJ#(BA6Fu4_me|$2Jz@uBZ(tt zDWU!i+I_+jKb)G3R?78rvBvD-Y2WIAusVo-aJ=`sp>Ti0tX3oHSWztXCi`G?G|WQg zcSXm!K7{OgAGXTDd&qN!CnHWTw@#2`1kLjTPOUre7hdYzzY0N4-qimEY!ffRiM^9eG0+J9G!g- zDJ_e5`x>DKjv@KkGJc6lW*Ro(O-C-Q*4~t}p(vscV&Mh6;5SnvM_gWOIUY2UZw=(3 zI}vFcQ>d##uAh%!xa&qDgXU2V7xox=Ru;$M>@4`jA@or|J@h$&7G)Rg7wUrcikA2m z^*r;K{h9+cLz_`Rc z4fbG@p1`T)Q;bA|mO*S_0bM--jzq}9Tk1z;chTn4X%*j=Vdo9I18*$H;+JACJz0EzzKH&qmH!6d> zDz=olRi)>y;hEP<@{HjX9R9BX-ZSJDx%geflyZ8T&wlp@GP_51^P^N-4Kg{6Xs>g6 z>FhPvKrhk&{!-jWH-$-^3t~0xt3+qT{8E5GjRE>{16yCxT24WkuKPBiik2&=HVP3` z8X(l-a`wufmaW9s)pb-$u~Z(G0|zzsPtS83bBlS%d*w0Jm@d)n8VOa4ann5{8Zhnw zOER~oP@6Zr#K%>R!pU?VdAsQ$?Adh+-`@g{2f9;dD#qhpQ{ow^jGC!1L#2gPILOJ3 zSCMsh?z51MuP|YwYc}D_f1iX+^A*#Y4pv1?g^}z3c!Rvm^}u^dn{oE%lFyFQu>|an z1RLowO~ym%FiDBsCzO%~?dOGj3E_XM!$G_G<-|kl&3TUn<8F_<5Fu zyXRi`8N82?3w?|hcRvBAAY0K^r)m@KM*GhrjM%NbFvPz=&28IogD1a}>X%U1rpLHZ z@3)YIxeGKM!qEQR3o#`cGTYEAnyi()C#v^hCj}DpfYzQ=wTjxn2nkjKJs1PIc#(7O zg&^lZwFf9>11a~p)EZBfr8^Mr9LN5*wOB6g@-mROsS$N}hrLd2;YAj{^N>sXn*p>T z67n#8JD))1Hq{h+md7jW$$7Ag^ER?Wbkol}`1N*ftrc(@O*!-P6%te`^Bp5~8)H@; zW8}8?AUuOqGM$D@`WtkZ^Cbic?=hyaJGp&9T!}H)sifo{P=({uU|D#q7akknt`{~) zqfWtI&gqR@Kh2pU8(&6EVVBt2ro&i@)$G7+-8s;ka;s@HaRyVGG4Gg2bG`ykzdh!g zQb7K%xD78!LXlqMseK@CoShR6u=ZM?Q8%F1m(ZJKo`st)%LX>&*wIby4jr;2TaX9t z-zVXTW~(ji7vVKt$39Go;Iz1HweUs+YoM2uof?D$^BpySR{Ps2ST!xdhWpMwXe~rJ z5%VhWRSt;)eE~JnFqpTOrclP34L>JYN%wBZ>abN$#=*-u`kOA2vAd#JU$1eKXmYk* zz&-18KMAC4!|ND*s7zHoD?^bi3IQ}dln-duWEy949lZ=#eozJ#d|(8gxa_2yg^ZW5 znM&VhQAkcJT!bTxPzy#8&W+R2B*@(d41{do+@JA$!E)WoZdVqCN4{hp$oMCu*cLC2 z$iy!TV!IRU+{kJ~GhS`cFpx%Ur!n}bA1cz`!s2km{NIJ+!i8*cA%`Zq4C29ALA^F) zbCdq~2$=20$StVp4)khn*cV*430#P5hThaZ8f}!Dg+M7j5*J<<;I_9M8Coqf0c;(@ z917J&b6#a`JI=$Xki8f@^M&k@@!(R^r|`ac?}0k3}pA;}oju*#*eZ zYzUKKmifpAwnAAnimokeMxkXL(Y48IsqJPydbmgC8H$OUjU_R03l#Ca2Ypq9i|<3k z_o0X>f6PE+mh0p^$yIYv{?^}cin}>S66f1dRCDmgrAfu4b>tW#&dV1uhV(mSfl34X z%RzaZq{wJQ)5F}WuElR09ANlEJX!sIDzf-y@JKbj0XghGJ{y!Itp}XAZ~&}Y+S5=I zgouzmF6&d9S+Pj(lFV}_p$#KQpNBgEQ}6n)PE^(Dd|=CQ(U8LcO*=Z}bDwC3&sT`3 z>murgh`LEmhBmSS8ji7Umbu$F7^`iygpNEzm43>8aP_PYSlLqQL@Wkd2- zc*x@4hY&d}D8$P;oJ7zpa-Gm0j5O~)z!+pPhpD~L=@q=RTIWzNgF4)smGOes%%z<2mG{*$j6cz!1A0>s#rWi-j8~W>G)n&n)_?GxREQb7AYC(hJ@2 zVUF|nVu3i$qyAIYvSP{ED24c2h`;NB-d=cuOs{*FZT{UAc@c8DAS_^ckwHn6cD3I zd*Z15=QuPY>(~J#5Apa7h@teiPPnelt_6%bI|uKYHI%xB@gCs#2LiTe!^yqq6Z{w7 z64P!&Sjs)*lFaVldY!7o3Q@nLp8dj+Xx8i@IvaSs#bRtDXc6CdwCXR5U1eg|DDquD zMJGy$hh=?0V-pH-=SkJ()KEZW)TW=|erR6U2#7Fe%6v1qJW}bsV3dcZF)VF^{Fyj{@9!w{cv;K73e9%3!aH29LprG-|6@jIbi|n3Kn>C;kjta2;A)%+FR%QuIKmehc=3u# z!bf0%UhtH~Qh%`&J_sj4-2ppkw?Til=|}nc^`#) zcRd8}==0|wc4*b#cL(S&Mp|Ib@C|(Q}|4{s(4rs-n zGs%1UL15b-6uvkb3H>pRw`pW=WF57cY5sJNG+iHc+%*MDv)>9vwT=(#aL&PnbICct zHX%o`0o%m);SUcpTZ*LCAO7a|JP9E;{V3eWwEu_^SOO-&k_w9VS&4?jpr>`Up-vIC zV`3@t#K$~Eo?TX%R2XtVH}~9YCqrzyN6gtv-c#K05yQw68C5H~$RM^ICmrI261a{J zRv~e#Q8;WWi1*vfa}TJ3wGYRD7*t0w25X@*D)BROrWF z3?xy!huq&_#}lh}Vb1ukM)t~6%>hen`$Jk$rtN?RdOW$L>l&|}@Syg7cr=;UaNpIr zGVYDgYVfks#ngJ+4O~3xNl~vl<6?FVG~@VG<`n-QGazz1*5fAQLLHv{S4VLpx8q_< z1`Yai4bq*rF9Iz1i>yiP{QKR zQHGyaTFmeBg{V z;bB9Gzw|&G{^~-yHH*T#D+f2DKs5hO+a&1PW} zLn)yplS1A6VJ1T^WBF7Syo@&=ze;$r)`Icg=RKu=&*0u1sydGbCmdLS$H%lZ(c~Uz z6NfJ~%vEPkn&tqys z`v_ctrj+^qIc|!suLaBwX2z3|}LDSUL?Fic$Tr(MMgsR^)@ zTW1t?nlKX+5W>O9i)Hcf5ytA$ZX8#tkujpv50o8w7{4QwFp~v0?ea5lkZ|9$0-9m& zO~=ck8j2x%N7yy5l0~~Jbi?t%vf7GDPVYf()4QK^D_y(MqoHUGHU#X< zT2F1J`-E1&>i!7mXYw8y&2_%??6g1}I4@;JG4EL0Y!O5uJWiR#=g={ZX&TuAE?jY>m`zcI4bvl9HNs6~mMt_W2 z%lIf_^9GbJ$LK}xzlo~_aFLhj&u5+7kWfI^GkooKq`f4{-cv}+zffVT-IQXyfw?RC z@O0BY5}HSHGk8Q^@?16r!M&2H2fH2E4BCIfrYzKJz#s}ez$iH81P+ilIEW2uvKt)F=}}z&=ym%rP<|h1Y}F?j>$XQ`CcN^*P`eKp zRJkdl@whLP>SvPKNgd8IvxaLzv|!X}BNVRM$Wyv@=Tfx4(}_x4X9lbWf6V8`7daN& z-x&uCq1ti_xbGlnns9{4AyEs_GaZI-JcE=M0!7s7Nm4R-=&w+S^-aY3reb|Fityo` zeRwFedwx2K_xQl$m3rm`KCaytCcY+E7_e&!a5z8BL*Dpa2(HB2z`*~Dtha!RDtrIO zxpxK-3y~IvVPJ-#8>G8SQb7zv5mB%kl~4g|ZP!?Hb?xq0yF1qIwOwmnV~ywXe?Q}X zzOUcw_2=ar?>+b2b5A~Xo{%*|!(HZ**}_U5bfpW^gH`)h3x0^z!Rt1=72A18Td2%5 z2e*0gi~=lnLkj?2%Qo}+R=;j3NFJfo>Ej+a{&G8*B*VI<;O!oGFB<2#Blv`9O%7sK zJwfR)!%M;1DsDCTAzH-t)3WMsk0SiKQOuzuD7>y6#h1*(#i1t@JCnJvoKwbt{^Cdc zKH*ThDY6t77qB)K_Sb_s7@iSJe2_VM?Qo>y8ky?zIh~7&P3%J8f-MQ-oaPjUWnsR8 zJy5AeF!$qI9|e950(YSU)8JVbk>{1{jI@9GC2$^A{dojb7j&oegU3|zaQ0q+tbzSN z0toLY>|#r_azH;y^l%kYDdn;y9*zx;M4I01<`3kVK42Fe1Y<(%thhmuGHzd4K7-1$!-}4LG0_WH)-3PIAlp z0Rp+F8UvhwG6Cg1y+rgT!LT(&z0)0SsBT>qC1Xe!G=9%S$yYL=5wnH~X*6yktY-{% zP++!B@DO?g@(ZEkYy93&lo5wtE#1Ex?QoggAKwd1_d+_f>^1u0IgXs{#)_3@hzF<< zr8m*|YFi_jI~rp7L^s;@`ZL5X(6a6f1`!II%^A%&wB~b#x&ge$?V_?<3h<~1icTL! z$BgIvhUpIH!i`KZAVYj;*g2k!+S|OXM_+A%$P?R$|Vml zLm@lwViANL=HgX3`*3F85PlHXfo5T-Px}c$p?M_++A%my2|a?epw1M&P0glE<5{uk z&=NgXbl{IVO&=w1ypH*&u08MJzOZL7dfloEWnP^kvxUSFU@^X;8s&p?*8|){+`G=v z3WrR8EvTpl-sT%?sXi}Pu%~R}W1#XzT;bO z&ASnnTA72qu-M&peTHT8qRn_MVzoOu(9nxgPIC-DyT`@c+?*z$7Lv%^cO#0p?R_9h zi&3}l=1sWGebonPVH#){u~i~@KVf{M*munEKR%oaf|z+|;Y!NeYCH+%8e3RI z#!}ds8e9zUCe_#u2ycP_q%ZsN zJ3t}jp?E#Xg;FDz;o`6P z1II95j4A!IPCaPUhFN%Me)E7Idzir0>aCAdeijU`=(HcYT`zl98w3~~mj{3%>^ehk2ROt5{>UXB-mdyRCdcw$ zP)yT(wZ0U(Knndu3SB6L;#5WR{FMksIElIj|B3=ZS9p{81CQ_Q%?)-ieFYTi4OIzC z%FW$`7RmkKgA6hubffD+nRIZBbg)V~SWV7;hvCS#OV4+xCHCSafRUm9oRrC+xHvAC zA#e9ZU6J1cC3sQ4Pf;!yA0aJphi6XM8j6(uDmBRXuKzF3BiH(E)=s<7#lW+6+SPYq}hSU z@m%NydTMw_KE?8SNMp;x1V?hbHAo*0N`Z4dybqv|&3oRqUFKa!swsR5CuKpCq@c-C z&=e`?C!^+4&{VK*JE4#cgtx3G3aMOr88LB-?_e8tjJ+)SV*C%E1$hzwxKuQR;(qKs zT@Qm|LDGCA-<_FwEuqgAbn0{+4LM+lEoklGflTY%Frq;S04Li$m;;7x+O-J_B0v8L!A< z_$?IlAMDOAs%FAZnI8tidp`W|-iPFUteqFcS6|7jWcz=>2<`D=k+7YWm)rpTBfAqV z5mphtm>fR+x43PG74oTwJypmhgJ*mWr@qCUj9uMsIhuvhX>*^QPhk7}*f-=@5dl!? zdL|KvY?GzRDG1cS@kRP(^kE#)ik*me>{ZArL)|Xx4yDJ|js=5j^#w?YZ2aqxsz$M0 zq;}c|9IhieUdTosUDJD=e^3S5jZkGtC(rGrf<1ikp2j)~UXI@i3T<@8kQcqA()#gY zFMX;WZ3iaDz4a7P+W2cvgt|JcFWu&CE8Sj6k)qxZ2xFy9GF^QA#hN+se{_z4-`|1`s;3jhjbFp7H zkk|QDLL{XwS_t|jc;s+2G-7}al{*=NKvG{i3UQaKh2(09|EwteUEY5~KE4zx8ixDG zAryMFXjON_f|2VRlGm%rJOBW1_b6KDvdCP)Q{g@R7c50jcoUJ{d&28)D)Qp9z98-L zw+j}4IlMecRakJEdF$m;JSH-}FDRLHe3fRwJ(c_n@Bf%G z%jjt+68K~r_G8!>0CJ&E9kiAHl5u2$fH75g7;^t7qz+D@039ZMsoR#7TxsYT#^(Vm z>VchuEsw%YpxZ1QU(CBe(fO>sv$O}r7Di$D#P=J6skRDaAA;WL)_7NQ%1qx-u$9u! zVo&@WiJWXl=GLU^G<^CY+?tv&0yA6rQa8%2dl*Chh#(z$Fqg)kD3IINLm)Fko(;iU zX{RY~^{=?C{JSU8acdwg7Rd53hum`>Mhq=H$A+T5*u$;yJf&$%Mx>$PzPuN+!l~ED z7kFr~#*;s${=GkV=zk=q4?s=ceL}EbDrZGus(hWP+M^UgAFsbU;-h+(C{j$t#pJOR zzfJ{eM>YC2JGBcr$8xFE%@p+oC`?%NlG1-+6P16m5HK%ZMBAzm`ae2-34S<|H>8~ zZTc~Ut{TeqdF=R#`b?;JMk@;GxR0#V?nI-v7$e^zgL&AnUU_Im z*)qy#s1&-9_K}SsmAXRd@(+j;hP+#kB5pl2sJ!N^KF9)(&{oiSid#vTmA&wMSg?FP zN;sap2hj$*3-TIn0F5gjO&M~d7xO-9_nKoBsCK~dCB%+l!Mnv$eDz-?Dj4jHp9_WO zt8g=-XC9eeWdhQ#S8Eo}*j%!pgj58e#-Y?`xRbHsqfNzuZSWP3(eN0hg|1`#P;1z_ z_`lhN4jvD7=RWn=cde(=kkPC?ShvX#-0339>%e`gceTYKeGr+wFu|Suf^HZQ&Gycs zl+s`fS$;=kX8+vd|Bz{$hAqe$AiO~unY05aEK-^&4uWv&uQll2qM;Pm<}RLPg{~Ei z0w^q{2XcE}B=z45P_eT?8jMLhk#opWQRgz)wq7Dd!XkWzMoc@5k=j5%%Gg!i1}13<~6O7EGv?XeLAJ9Q0* zJRZ0upDgXZ;oh!|%viTlRO~xSE+EPs6)b|YX<-AIj^X#RG6X?QqxST~c>96Xuk=Ny z&Ar_C9`V(9%p3?TK{cW?wd8BP^&Ml21&fp|f@ z6L+9RBqc4eWF@lPbvy7;t7faXK^rd0^ja9>Xco#A)h#JuIzA+vnMtX743}S?AyrWX z)?%|5ijni?j<4+j?3dDHm*|Lty6t!V<1*Q)7c>%h)hmuo#JTqW{;;$D`Ocu3vp`0f z>Ogblo1LWzb$8`ePyKo>|^&GH0uzbk@OnA_iLe}%zwpe7uFZ$(*lB$=aDkHBw zpTG)FrRaEG>_Lv7@l|gt3fri_ML$cjKFO@C`pQXtGs(3BuZQTIraD#I#A$cX`SOjY z_`M4DGUfwF;{(;`%E4e7F>nUdacEDk< zrHX;f4lCZjX|AU7z0w8b4fQhQy*R##UXf`fbAh?<;5P`~ChcxNv9 z;iNponcBZ1;EX1)qX)X<`~)7IZ=46!R%NjeOFD$AYf?o?JYWeH^%!bY9r=LNzdN%= z@xz$2u+J;UHympEAx5U@?@g#YVLlUD`AISVqpH;NdyA5Kv@N+@*(tNMl?L60)Jdmx z9H{IG0c&{BKN$F7n}K)cL>EV zjLh0^;10yE--^;$ImL2mYPB@AMw(hHO&v>quz1My zBkGX-8~WJP2hJ)-u&lP@v0S0?Bz5ZlCqA#f%-ha)!7ib3I{AI?ft%uQSg2He(iExP z)-|w*g+NL>H-#z0$SJ$fp&51f)lxd`QlGD!9!o&&1{NNX@Ks zxo>Wp-{B^ph6DH&xJ|@$x#_Ryt@Yz^Sg@px0MR9NUV{_+jd)fv*%r;UEg-v$uT2b% zvA*I#5UYGyEd-UR28Hpoy7d;}lr@n0&0x23PXF{2-K9>k6jF5?BcF7Q3Li7a;G}n6 zC?n4jv|W0QU}84w*zvnt&96|vuo5YG;XxR z4IHvb7RKZ;2b9<2bm?&hWf-}G@+ z@qPz51f3VNXS`rfb{D~tfE?bRsk5~nR(}JphP9lE`ie6tvw@Z896WA8G6mJo_FCVRPm?`D4S93p}l~r6(@OZ_l71bRzWudq`~0>*%LzSc+PTz+j*emFe`m& zcb&AmUfSIt?VbSSzrh>%)(3L2PnE`1;7`(M6VGyS?R!v9{`vl*4G6WY`{+~Y05WsA z`eWYI{R?@Ab(zo5%%a;Xq_GoBF#W=oBb1`=`J+_YZ_#)#vHl5&MYlunbGi5ssPdY* z$aMVqlPJL=gVaOP1=L|?I&qVF zonY;zN0ed~GMGIhKdZlxohzN?uPPMlz^KGMkwgA9_^;pa zpnlLWv1wCsj~FUSdu*jW3RvvB0iZ=*!xTndC&$8bD3zSh6pPLL7SkTy*BJ(6dd2W2 z&vkOg&A6Xo7h-UpDz=#NS4{tSj7-g(Y?%~yNQyfw#T}uV&TH}Iv1V=YBxU9{9U+C) zUV9Gm<9?=41w20uPr_&X%}b~93nd0L2#wX`@mrBmQ_rUGSBF1}I?0YKD^5H@QRQUj zF`WHtK`E8pjf2jWov3F)U0gO}!W|NZqqxslb{kWmY+$R8syHT79Myc*A7KvxayV7& zW6_9Z))0O$o{yZuCA=V1?*w5wK#uM0E!}0%sxd!jpeK1>m4uF3^e;qx24&maIEmD* zuZKSKULw``SVLtri=0RQ1q>7mlYO|yo=UOv8PVo72}aGfe{{!n$J%P7W$$(Xbvd1% z2yhQgsr)FYnwaQG2U<%9Oews$bQpOscX+iYC zT8v2I1eT9k*fLd8RKyf@k54?%?zZ3MklSot3NZa}21dj@=QOg_jvh#zUXFqcfwYTD z06SdQCO`(1WR%1YMl{L$c}DD)(N=5t5o%;%ulH3tO#I zn9S8!379S)DB;52m|c7mkdS)z7(S5Cp)c%Ez{j-|lhgbaIh;B6*->hV1t>jZ>Fi4)iIgC(1>hTI0h%xrcDE^Z~srRBq<<-?`rBbrgz zd>g@;I<8;}*L97A>SISu7o4cH^%ekCvpL1caoBTTCO}r?vAz=GNN{U9f5J|G4`O2$ zx3U0qK6OTG5&oKnKEff72-kluW8fj*ip;Y9#ry8Vz6jFs1oF5x0TzGJq$#j9lmg#N zf&WN>AEdyKdTJ@~6D5wS#Nb@PVou)Q2Q5w!$>Pn;c59OMNlyiM<+`G`{?;IimiAp^*1NX!i()3lTn+(NVB7h!7#@E2VF9 zL$&_^gXK>CE;LSsk@rJ9SCwdfL`G=V4R@iB4x)6IVpzW{2Qu`b!pXmZW(%GT1$ZHH z9GUGm_zy5B!=7Uhf{V6^t(%eK!a2-5yUqWGz(HFZ>!tbI5G3xED8fL{EI?mRD|v55 zFTA#N18d-qcu%8vg=BgR6!m(M)x%_b*?!YAS#wFa(3D(rL17GiME0k5f&`ESQ|P~j zkmy8)twtNB`cnMgmil~hYe=3=CV`eV^H{*O1wF+99t1ZxC}Bollsq$+f;#{K31KJ6 zY!AXepv-75M9i#)L^xlRx;K})w;<<*uQ2Jp&Am~uwLfL8frSBN46jMK=pvSXXwha2 zTFwb?X#96VE46!`%3*I`(goTi&<+4o*O?Ngj>MCiFP7Yjl8Mtm*texYrJ;=bMpI25 zP#8AZzDqweHk2|}s7;y10Lt2B4$>hOdjWV6$5B8i#t8;Xg#>t7K#_<}JC=I^bY6vNY=&+dknWpR` zHg}v-)&uV<9*)w@w)!Up5O;R zC*|Y517@n?Mj5n_nx;c}9}(nyJM{MGp(r82#8@slXEmO^DQbb zZT|!WXlb_*sMLOMCzwZ$!(>R}c#0`3K%N#yy-g|qz9C*}KA$>Qvp}Vn%VMnV*rA(P z8z=c`06<_#L@GA7nevzamf%P;9~5-i#KRw*vJL~VR0ZE?wPNFTeaij_n+H+vAXUkk ztF#xq(ThIqKQaE-Zs`nO@d4#;Ur_=#qu5eib0w!C|EbxmP1h#mQ9ZWSVp`T{@YeC!K7EUncnvJc`oUW40o# z6`$bP1v1jVI4^Rq0`1H0$-J_M3xt1nbE$LFVxbX{-F@C7vv)nuf#V)h&+W-@TRX5+ zgaU_q*h^8`y-(WxI~>Z*{z3b7ycLI{#;|4orAF)_rvcJ=h(v@aQWvo-JvxPT?3X&= z=SXeWh#1FoWj7(8hHTmoDn)s&C(nLFzmGEb`5FJrf>N|s@mkf8tKcR5Jtbj2sT|H4 zz!H`5sN1Rguw}*cFNNCHMn1e7-5YCq24hCQB#>wDP_-TQmoISd5O5h%w{HdpRDF+O zgyr#VNLA(!jlk3EOHG>Sqe_Y!#uScO;d7+w5~go`nn!`24}X}8>yZfJJ5C zL0PJ&B6SYE0x6`M{}7qf@CAURFqBbXmlcep%_vc+viZab`3`$a6J@bzG7EL#5$%=O}- zlsM%J*2^Co@Pm*{`IOPU*4hwhz~ll(XR(?Pe7W@AZLAQ}5+-*eTz|*AwTmda>Lo6g zwI};+3x0fCy?!-}Fxr9lpM`>cDOrFmp}U`=RKW`b^pgu+DEgm&@W^qk7tfOGzi3}8 zO18bv1N{)VU`hngpu!vH3qZ@;Z}Wd)M~<fM)-nhxguYd)w8QuotP zR=B(sMay>LTV;o->zSkIv2yPnuE6m&g4!w`85nj08FJ+fUa)rcMH(C?2Ovm}`YJ+T zu#?;iry?_96YmI*ErOBs)I)meDLwU)o_b49eWa(p(o;X_slW6zfGl$QqLgLMAg*7r zX*O=`_V5~UoVJ1mIGvsk#T>PEChN}JWV>iP1JDDASPVt|<~pkY=N5)QC%sluu=z5q zy0%G}>ObRk-M$o#F$n!ujqIYOI0yK}izR9@I0=(Cq1Zk5*&n^)%2*6J$dxpU_So4f zk6QL%@qd5hUeZ@C9a=3NS|c4=D;-)#o{bv>>BCVP>i%3%Ayx_q7lA^qm0`TnT2X4d ze)!s7SCwRcem74^n$Q-0wzPM#R2ernm{HX4K%fg~37kn|(+#vYE(r80!NF>Wb=W zSGkE6l6)Gu-G&19a+q!>O`3uR-i0>d0uLV0v*ew27di4ZF8b>;WwS)!O%l@{VSy&@Wku+Pi6p?HUG^90f0ZE2EUH1Z)y{U zUpNKN$iz)#S3sgotmf7};$cPCLZpt( zB!1|z3N{?r4v|dxo^q$U-8Oir)oa5CfL{71aMQ7Fz7AihzBc7G@6jq7nZE0F?A$(Z?&b7~KKEz80QspjScQECTD!RZN;oN4#-f8f!P zTAZv_wXqPwD11>9JZUE%f$l4fTI0;o@koWvQZ?Y(6j3aLNW3osb|5n~ioHuBRLaX8Wv`;m8Kd?u#)x5zsdhY1OE|bVn?HLmE*axr}!s zjzDmn0D`{34{vYTN7*L*@O`_m6n()8G$T39Ud_nR&*>M`&?91(P)T)9qlLyzr0ET( zGU1j|xD~Y@*&Jo^zZsz8%}pb4e&E0^|ET%__6dR z2yb<4G6)~+thmQ!eWgoYB1_X|^nV14IqX8f!Y*V4(=gp05eA&eq57tbH*3zqYgjvD zbDs+E`=@M~D8NNu@?Hycyijo!kVmMD>fpp$FX;aOk4S#0CJ3vY)BRuYilWfy zjJ8?W_?zoKA(xErZswl@%U zk`^*p;TFQ}jJ%37?hZk(0fBwfIP$A+zo#e`^94brA*;b@S9)6(^dwj}!y(at#xzvz zRzeQ+S|(YRN|wD)<2hSmQw{St)K8ON8OvgNr{XAV9G>9x)@ziM# zz|f;)5hVnIzkvsO*A5s3qn7}jldGUX9eODW?dp_H?OKoF=jM;M;w4q>cCqobhSc|} zOn!6{sjP{PuLkOD@fCX^G;X+%LoOYci&Fn8sed)O8^z(((60lrxQgI6wWtBV36%N= zm~O}z_fenkH&DRrpKAV)SGPIvbWuQl2N*HfB{KIj8(02U@cV<3G^}82dg4d?-|)yY z{7(2)UQAU=N>E?J#mPv@Sn~kvq}gBppyIq@mLheB+`*NGd)7hG#Np;Del4Iu#xCxY zR`ayymX}}va(-%y%2j;&)cb)Iy{j`-;$S`}26DCwP6GA3Hwzk8Omw2xu(lAXZ`q#q) zb1na!X_w!eD04=LP>e$YZn^fUEdnb8!@3PVE%uXU_a?V{K*%fFfzn)&NnV5F1r=FZ zGL`A11u2ABg_fS^!J8$NRXqx-5CZif^W+NtuFrOct8u@cW?sSmA{*&BJ1~%m)^ors zi`{Sx_!z{1k9`k~Mp&k-G{6zE-}6Kz$-IGmr2YDs0sY z&X(X-nKl`z{m^RewMcn+9=PpheU)o*hFlVxYTR8coxD%@eWt`~EFHPNn$o+p<|47M zSOesHip}lY60JA-Ld9+nl!#WJQMcY%yzdaIMC!FFN|flKB+Q|}caL=43)y@L5BjVf zh7swRZU$@=NTW||L$3;U&s@y*g zH$#RLgMYBS#|unZ%a1)ToP;(QylAOfp;6r*k-uUhF6=|#HEAZECvRZQD&5%~k3GJ+2~lL3$bC~ljSCd>@PoRI6njndwkPdi zFMX+7oYXCzr$S>i4Ypzn5w~|AKp6&W{8qeSxtaH?lj9e*!VZRVAsCy3rf5X;9{4?d zjEnMN0nq5T0DaL(52hvB`9Nviw~)JU zB_PkvU}GgA8!sAExT&MI8Di)Hl`>-3on+|@3;aIz4`4lC39 zH=*$wjeWs@OKnm9V@0Ypf@ljf{H?b!0=CpYdkUV`J_Djr(|EI&I4Cg8kqmRm|4$3- zO2;nvA;9d;Ak|FIl?$xxhlil*C4_03+oQ5wb0B}X#p8eew0a#2y{;#%bJQ1iTQuzB^^79 zS6Sy(+qjmzoMZmw+1}8a z3eNb6jSrzhG_5P12EP0zx&x1-ti;XO#-2!>+OVuLbMZdR%Qryqg4{o_s~on#>Al$% z*1j|g1LoyXP%m!6xHWv03yQ+U3EBNTU#?^r5^NR%0f1xFEFPtS{dqxX--gIq=xM3% zsZAJa=Q`5Dxr;zaKaWDY?hd5Nk|>m#aCSd8-MRomRvd=E!T~vd$uonYRK(IFV*jSp zXA%q6y*`h?QVP{H!|Uw^lG&XZ|EJo67pyeDaMNu3XP~I!R2Bd?=jv@@Ea0vW^AjUSp2HlPljF`J+&MiI1<;WX77N}RejuJ^;est4mx)!VI5kjD;gSL%&hN81q`gb50)6#W4JOh1--TJHqi z=0;Ut;X*<5#(>|A1D(@x0?sf++PRv?;eAaUq22*;of_xud#wb}1qPE)+dQ0$xzb;Qx ziqG)lv98cd$9On2oZ+R8NmcB`tD)IU%Vp1nVZ8xv%hy&RHQNVA{M=QK2dhzkP~%dm z$#e>xWQIE1N8uMuYR?oDbQ?EPkbbTwzXkn8@N|lDDu2eq;xKrkA)+HS!O&39BVINB zd($XB5rPZh;3@o0lU11x7^zcrw3e%#C-85@vhElZEx5MhPCSKx*Qm@ZWg8fxRLU#j z@X*#Ci;?F#t^%p&qASRWJ)jfNrS8l?mh%j`D3#a2-$O1aVF?<^DK(zR@AobS%b*?} zG}(_t>D#Nw(^_qXmvOdBC|%A_&Ml<7Oq%dSngE){%jkFHWIJC3qAiW+Cp11Mv(KO^ zK>rOrBBl!z+Ki9kGqjWpZ^CV$Br*`?YuZm^*sZy^KwrwZC}mvYK@6+lJs0~=AqsbMep-?q_k?u=?O2S@vm>O zK&^AxbzroSL*h{XMe@1;HND0XikZ<<7&Bp;~I}w6sOMvZnp>r@_L;?hwSMA zyyYLyXN^g}cSMWttqZ0Cuk$=MR&yUATVtDVB>8mEE8%FTuoRCxs6~rrU7_S&OCS`^ zQY=6rGj9$x2amzIHM&5KkHjd-% zroQnRg{R5j#R(%$GIszDsZ-qeu?k>5Ws74WkflubFv<8#|kM}OB(7&@1;-d#3^T&!n<%tw7T2L*{v~N?ir_$5 zTev=@n?9_X!Zgf|_3)zjCQR7x--0@oJ#?K3U0aDqh$Yx=nvB1dV7edoCzg}BoJE$l zbJIB2J(g*b&<~8zix5KM*-~IG&9tF9li+c>xR)BCmx1K@FZN|A?+nlBO@$~RZ8N-) z(x2i!Zvc8#>G`nIH~$&_uxJ7GpehdIPsHEO<(WP9jK-LRVJDZ9$DjxJXoM-Ru$mc^ zyLu9CU8~{Meb{$ktmxMwyx=NM?9$;3GxP?J1GAX87&Fjvh)TR+NwIT6ps-`4`onayG*((G7!q;{JYVRj;BPC@DVe&luI7H+$0 zj{zifFlSQA{m45}y0lTcw29i9wiXKk!KSh}JXOK+)b=m)09#Tjy5KEE{C*sGV;N-+ zhBAfgwXxU+iBD8NFo;7vLsr`Wj;Cbj&B#T2_`A$76n5ovHMsNHz#BPe=1Zh5CwSRg zw@XH9XKvC$&j9`t;G01}xG6}iXDV#LjG&ba{pZPcPo1`S`~mlza`k;-a;Z>f5Y?Du99#`$pkwBVDgxM16XY z-#;G!P6cH=#?yuYXRo;o{i-L#ahvAv(zgXp!uixWmM}X7AjGyDIAllh?m_rzg>61$2juPVbgQCQ*govL5&fnxc|33)pNDwg#dT!Y*LW$-b)V3m z+Eu6Hx?(G%4Y$Et04{n`r^cD00R)?UYj||rBby7-o@k1)SdY8Za9+=E-HtT=~^Cl%@i0vLHa7iej|^H7MLB+1GdO_?Z28Q z_Fq_U3oqAE>M}mGQv6iTk76sKT`-CUy8-=)?tfBU5M$QZ>CSxkkavX1J;UL!5`^Ss ziwT8W>_WfVS*uW{^Tf_D{I|P-V6a%PPFtCP@>=T;sFR$?REB=AvH-O)k;hK#>rBPIV~{gSp@?z={;x*zG`y@LALgw@YqY|fi+Ae z9ionG|6YVx(|yQRQ95=`I(8mo&#TViaQ*4$CV%?`;KVL3c6uJ^X>420T;X zNZq-til4>n>vO@r@A*b;aZn~Hze>t)lJYy%&$8l22E0hLg+NNSouC@O7_l`Pnm)tQ zx0su#g=d&`3Gg*=QfRT z$Pg_($q}AX!Jhf;fklw1&Sg!}JOEnJ(t=dl+NJ4-d*JAT?>XRU@BApt)u7a20K{4{{aeX|xVHNv znN$SVG(`%EDX!!*V8-&IX*Pa2kRyWjz*71n#y}c1LQfhs(i%x6T?*5^iGVx-p`_p8DWqe=T3A&*}@0jJi8S#12ket7&q6ncs*Bcw$BVV zn*H%IDOHkE8}%uuaV~PK&)ww~`dD-WB^CDoFjV+Gg>vjccZkp&8S}iU(D;cQ%M1W8 zyjB43(lJ9h1@*rRd3a<5Gxbw*C~@6kmPfdacYr?b66xoqV(dY51j6o8ftAO~m;{Nb`b!!{~w4y0eeVY2N<>VXLnKPhl!2r0dNm}#GPZmB*-V6qMG7b8+=H&!%7Edpi|0R z>N)5f24B%119h2!ij(0n5l2j(n=Eis61#>!V19!oOWH4nG6~qZmmvazz0?<^F?T4| zo}Gi)+#4hU{jiu*PD0u%7bUb=FwJQMh6h2=h&7uZ*Qz;=skP_OF z`{WY1d>TuE&*z}}_`8qzTWO0~j?>o>#*9}ftepqmEA^tVQv;ZN7+^usJ$TQQzBz$O z9oldWtg}relWB>mL99GddrbkUjs3THJ|2*_Wc14%TXT#yxn}URyY7Dq2;g&j0%|tt zOg&fe{*0O41H-@O6QIe-P6iMHG8EEQZjwvguH%%CeB?za6@2<9ycE-$9Hz*j#bE}G zi&n>>q?l&<8c*wvw*Wd1dvp*r4Fn4_@HEA$`3zy>7I+xj_YLE%?@Uf_G8p@=}X;pm_f>kQ1Vpg}TQ3{b|#Zak)T;c#_hfUpn<2-+1xKa|?l-NU=x zyG5hoHu+@bvI!)+oz+_|9WC5L9g8C$pUaMHs4%g0NZZxI{O{gb%{{-1g z(iv3Kd+I2p701S7*Era=#|f1~!wW;;J)Nf%&0If2eJS2uiuaJ>J>l&<9)Wp-*fz2a z^zr_DC_-c#af`{vi4#a=JsL-e|L8V58S`42L%|-z*$z#Co}GgcK@6I_MPL7EpoYJ`vsYq zA6ucG@JS4^%$D+6bl4Ch_BNq_N2>rm``+nGF;x*1Ab<2ZAPUOB4u4m7y zrSlr;yc4-!_$)|QGO5cuz;|ppx0?ufAT3XT(8ayjO*a!4#-J7-M=x}@`4P&!{}-={ za#FbKoC4X69xCVl!#R-y6q#3$&j()ZNjJdt3irFiEkHxdmhho&3C0(Tl$mt*zt+ov zs{k&l`lG0N#xOh}zhxkaC=4nIh~?l?^MlgLt8#~qh=CE6P1}u=huT+McWB5f)SYEQ zo^Lzg*89&ZIOl|;!P!ts7q(hZyUP=iUEi+(o)>U7_B-9A`>*JJ!_9ILpB>=P1Jx;B zPi50`NIBA>DY@q$PB1%?zb}V~sT!~vQY+au0M{aAxcuzg0M!Mkyh`4NhkN?a5b zQ}V#Q7?bLEhw)(13Lym-2%s&2S+;_6D}Cu1r%!UgI?|`wG;4&cNxn zA+)UgeRL<3UUSvV%TJ8Ka}`mZ$uSf!J$n#-X^g1yRUPh>PbMQx{EN>$>_2qW$3eE9 zH{5veGR$cWZVVx?cQQLPc6whdmUO5WLsiz1#y-hsvHVi}mO+Zz2?{{~jM{savTQwg zQ1v)^6=d+p@eA?h#I<`tCXD}ZA5*3BJt8wUf;@RUKk?i>9|5FhkeAXFFNcVGF;H>0 z^3of4aBV@R$!_+G@FHrjaE>h$V8c0 z>me+e(*4nh+E>U*99WJtz4T|K*~`k1_EL;MI>zn}()vZr00p|eL|x%Dl?SZ$01uew z#?^2fY9ak?N$MIaxCMu*ly=BpGO1fXJ*iuNYU|5HYIgchNQ3&Za&|~x)-_0KOEFKe z2GFndgD55I6`K280Ud%zx&zSIpFiM*+->(@SE9LeNG4@`HAK*f6KlXcd7V+GiTX@e%nrOt!c7eU<4=NKuw+3+*%46HOjuGf;>>=Be`{5kS|#^FG-EO((z-%F@$ zSP4X+L94If)^{-#S1~#rJMq89vlr2M90nO2QIhKUWeMycq_f zyg4=W;mBuJXUDPum1D~`IMdXJrY5B<(;et5pKd|f>?VI=pLTF8!gYwN&gvyhU4y-v z^4gvkmgX|-3EQ z#uUBg{7s}T9cBnp|6Y`L=R1bqa1SXr>vZZoepMStPr{@p;Xa_1o-vk+L$QQAhpO*5D)Oklk`!+zLlB{p~igU3+CAjp@G~XnMH>AF(CHAoQPb+XTPXx>b<$9*R-I17tjCP3E1t z=ys06XcWpStbnB{DLDeeaXX7*r&J*RE@1B_-56SDS>mb6bqkI{S^=+sd4v|WAfHFE zR(W{hlrcrt4D@W+2ZhiGX_+S%H*G2*RZqSolhn@oO~Gk3!T@xs02VS>^*3njpxhBi z@+foqQx+rH--2bF7Zt2f;v{maiy8T4?3N~YFNJ4=PAXQ&jenH zpPMB}I}EU^_wc5$I}!1NIJ5h*LIlaB-MSvt^<6&+o5Y&j*TXgB`DYY6j>+}RodYo5 zj`Pnlq2Vx|**&l4uK2FrQhfy89i|VhT5!^)cTDi4NbQPsWiblErVY5Y8|5xDv<1L> z43iXmH`e(%zR(_rv!Ph@xjPGii}l;+lleQG6yv$u;a#v({2Qlor&r+h(I?s>9j{Z) zc8q5<5b+W93zP0rR6uV4@Az4B*b{kqk9mxv_nYv_(pEG9cuSbigw2^_lyapS7cY&; zsU}&*>Tb?98({Wn8cWIR*JFGid*bKSoU%S}#Fp&om5|=VJn=#Q*7pH>_&lFIS9VB+ zT_0&EQ?BPE<>9o!z3T~m>EL)h>0lk0fG|rO9}C^#->gnPi}c z{<}_ty3FuWQXPwj_#JivdN=?Bqz$}^(iYeO>}U0{=epx1J}|YvJ`Oi=MwX&82#{yR0vs%Cs7ID(axGH- zT$U0BTQ|XQwVf0S?FSN(yPl6!VSSzjC#o^W1gUurMKr&Mkxn>&6@bLNyd?^Rj+-jlkdXI|x-G{^glN?b zabiIFRvsYtOjpD^9fS^lX7HU`HUS?p-}Wmov+j@bh6>m_MXIj6DTYv>7vrMf@6(Xx zXF?rTY<7YC_B=#K?9>Pt#$fjAOUfR=+5&Keo;QItY`k5bBQ%{ZO@rd`rQc9nqb>Ci7+jt$&`)H-FOkgHD^3Z@xR zLt=N-YqN7c8mg=~ia{KHb|-RFxrMSQRHydbhdcE)gc^rufqCS%$^k6ZFIAKT2OfN+Y4+Y)qDU zTT$9OuP12kNO=$z#pGY{TTWwb8n6u1X}tx>!HYC1=9b()c7g`X^#k}Fl&&A5vRZs! zbeIO&M<{A3Kgd+AL$3nFFxH^mzWW#8i{{^P&N~Yg`~R+jTdtZBYli;m;Y z^J|K{$VvLp(2RUqA3(w8AVc~b7|v}gf;bt+OAt&uo%+ljiRi&r{%N80GH4x>{o5v3 ztdjl>ouox&Ik>f+3>47+^Jf4xZ^sY_HLUKE+g-INt!OQ+fGc~|bNC-VC~Y|;Z8S2j9+&OdDsazX*KxOl1q^hh?Uip2w4gglXi@O)~R_bzIH3L5~S(5P_k1cE5D9jN2 z+B5^=447eur=Fdj$~YXb{fca~i$mQ8w|a_70`HUA4Cb#b8h=4*y)zatMsaGBA&w~+ zrju&w8(3yPk(xin>B}_)5I~-3SKU#Y%L4a*0w383?Gsw5(leI81@@o_l1NOxlww?MZ6^ z-*h`cv1eWB3g!Kt#rL>c_q0DnY2U>_3hl&*I1UzhSjWlCXjv8Vc5@oTL~x)D^MB4Q zDe;g$F0Or`itL%l@9WbEOU?eo``HeZ&-mkP}e=b;l`s7w(}3Jke|-< z(Wzey1Agem9Ja+n?VVqdx+MbFPX1Gx{D=p{?(8oj6uul4M=*Mtc?$Tf%Wn-MI;V|4 zLv7XRvnk$iPbrZ}`|_lH?WKJkDE@00*3|J2_lQ#Buhf zrLn_{MFeNCG2}VccGG|o@N7E-5vHV9NtE@b7`dkBV=ygn@20-X1LR~-54s@86Se{K zXu^k209p<|y6Un%R+I)Fmr?j+SF8o05~fv!o4=w8%hD>O8Hc}d1!bMwLAkyqivy0x zbZy7XR%u)Uu4}$F0VdXb$(2jFTbo&jkyqFE$W||1h?#2!pY};IX-Q2>L&}`l4NZc| z@TTv09{SB4ohh0}fipScc4F00WCl3oB2A3wgGZOjX#9YDcpp1Tz311+n%hG+P7wpD z>@qdjd!U#yC6&`Y%eZ~6Z>J!-_!_BdZ9DRt!PBg8p~An%;poAsQ+o&tPf%nN2T)>h zsuaAHv~L|BiQHR3>P2I~l)>O(AtI)WQGWv7# zvVuB66rg;~JJaW`1&(u)D=PpFGncv=!s{acBl{V9@zk})L7qLu*h5T`2Dv|ARYm&^ z2n>R%ou3&Z0QEU?-@$~H$C81v7Sa=A@TJdZ+m4VdhzSQY~?xUVh#>n*= zucqSc;xa=ZTW?;zKC?`@tbaf}hQNLarFOXlb}m=Jdq(U20jM@g4~7LbEhuHYH}cw= z{egmRWfUVDfeERGJ+}=qc7(!omc?)OAE?r$00r%oZo1EEQicE~dHUMQA(e$^GwYd1 zJ0E=kgc5kVH#!oPS%nJby`_ShllW$*F9`VSL~ig~N&lob(#X3u6YLgFSPF zMwj6e+ely8f)RwOUnL%Ro=ZTTiQ$ZUvhHlaSH_$l4H3E#4vP1bskPNj5X%v zvIOxOufv^TJP&`n7t>I`L)Witt&RN%4RF}uFQ@F6IhcWlfE!aL;c9jC|_mz12x%u#X|YX(@5Ks#ea3V(%=x-Zm| z98)AmEC%-kl_2e1PX5DBqijSAChKZCP&CZ+anv!1>YFYFC*6u1*1f_|c})gU1ok@Z z5zAUEDzMKJlEuLUU6b^_u^aUdAJI+!^IZJRRgTV5v~PWvq<5KR*m zb%Peo*F5q%z+8jRuK7rFTYQoAgZjx7__8xuuhaL*|8pcBC`L0=;cGYvS|0wj?J!>I zYjygP>pDHjbv=F?NSp8*Mn&p^y%K67O0W81V6%gOuFtm2RkCy9s znIIso%LSQqx0iIc43R+*2?Jf~V$DYv5eerZQ&u!0!sm}aDD2s?tR&+te(xw-`3zr@ z;Cx~LZ;~XFKIkZn0Q*o#)pu@o>0KK zbeo4_*2+6r`8{{vM$SmXFUZlp*}-k;b?gqNS9ONUU-LXWAynAH5-cs>dlOM8>KsdX zM%`k}p*qtSQ_Ixj@GA^+ea`JcZvRART*zNj#J6A3^vU4B`>g~BqNJjFpo03tEBO7j z&%n}Jy0pTzLtJ0}tY6@3+{8uy&YOG}1oj%TXuyc^(s5amjkZRgS}8V%o_szfZ7z}9 z>*@JX${5}|Z6@dr1~eDnf}fEx9yF0M9#VReuc(5z_0PYfgktj~q^6sBl$_f8B8|Jr zJ06GWO%aJb5zE57jM+Y4w*=inj4^h?-MB7;;YO!Fnf7DGFnJeC&K?h;{u36VIi?## zWST9kXFN0fN=Mu%6FW1BA9;d#xadpl6LtB7aLUovfz_>?^9T2HfSnsCDTi`vowlyS zf_|)M;WU>g#_jYoxwO<9w(>skJa>H!zP28;%ksIXEp4$qO7za2Cpc3;P9e_FLVk5b zf#jzYvV1#eU%Rk+H=@b2V?5kEc~>x%Tl%7o5n}yRSd0&X%dv-yFbS>_htC~ zN(J9;V>C;kJqVY${`0Y;JidK^fbWR(;wX82+KrMzkr53)W{Fx|3X+hz4P=_YZKnbR z`=TM_IP-!S)1KTGz}?vVlhXWCB}e!j2Q|Ih0+m*=_9?Kt<`llAU{r8t0m zFO9;7$k)eETKiavkC=fw;_|bp#-v%?4_PrgmIf}VA7pqSU{?6IRJWDX^b{`%*^7CA zS}jS#E@}`>o`WErG3d7@;0(x+$rC3m0z(z2kf~DBDuc0^EyE(E39wQvypaj1O zq=yQon7G+iOxz+SZl$;m9)Q#-dT!$o1EI9}CcYB+T;`)A*>f{0IC_rS{rO4(RY0=( z)o_VWUHgaYa9(DP(5pXaLZ{0p#BUL>vX&ECq9XGFRN^@dA3bm6Nn+S6@;@~kQ`h)w zD5acSj`;LWSZVkp=X3o*umRV^ZEw0Px&}f@ZsS!Xa8ux(EJGG91Np|U$8Q6_bkEbStT{H=^pDCt~22C9cH)QEuk-g%;1vEo*fF_;bEuVC^6$8h^9%Q$k z(VM^>i;&v!U&>NKLIqB2o_CgpLwq?Dm7QITEts*DJLs+gy4%f}vU~QGn>3-av%|40 z$GxwV>PC_4+3&{2BKrc{qDlPZjpBA+p;BKfxo*8gW6B#Ld&c+C2=&)$OzgzUgJR_& z6S4BJSb2n^yYbj0-V8ymUB6Lz;z+!XZ&V<)Ak`zjQg~g@1_dDa;5$6Wx$z_{m_+H{ zA99~P_A|)R&$tc~)-7pxE|Uh-?Ow{}FiiD?!?87td$ez}QA`YMvXiKOo$ ziLjvkUt?gTCd(-z14~g#wV~ub-BDgjT@&>EN)3QZY*&VcAm?WKU~Pn?$3hD?p+C5h z5I}LJ!3_suWPKMx!1^}u4&nVT#f;5IQRDugGF>rh?OE*t%2Q;o4Jfe1AsbS6%tZyR zg^v)rZCs2nVDo8&9Zo{dPqxV=%cXDe8WVk+tEer9lImT&=gc<-Y;2}8!LxVf3E2&&SPdKl=&L$8Ol4{RBj1eVN^$abctUn z3C(-Td-NwH2v(Eh@n$%QjLcxqH3ezIPUT2-v*GFlv>vdYhm!8_chui1&I@_1v#ojP zlc%Jk{F7~A+{GHVJ;eBI0*B)tI68&LRG{78sOFefiX-hKODu0>)Mu0{#nhf+YNeRk zOH75Bs+Eo@alW(4pke|DJe{$0$6Hrt;hC6HfgDyO*HntxO2_m2Ht)|^%Se?lPve^7Ld!$$QI*-sz<|Ebn45%^?Zojh{ zFA*szIBXnWG-3qlhpdUuH&A3g%%M2%=_qKyHnQ9ugp`_uGqNy;F)**&yt#ZXGAbAH zw>Q>ma%aQkIyD&=0O$-%TJ>W{{H-NXT1eGCE0Nx9^Cl4XBi1ryCPPiJrP){nGxiLp z+Sw|s5Y1Fu#!hvO85b&e1&u`6XbX9zomD!EL!dcPXZLNm%=L}D1K=_GdKvJcT@+>> zi)&SDinBe*BapV5L4NMnT?iAM`=Vj$$z5clPzpc5SHRYBgHVxfN(Y4~IfPrg$B1A_ z^l3xQM*Xl>>skhvYa*)L7y@6#cVsaGe246YZP4C#Qz_>-s|h>0enIuF6CNv!>|22D zxC~v&{$#lJc=QjzK>BJW?Dil7F*r}NR)Xqd@!Z?!jOkVK_ViGSdxONi!Qx&ud~|Mb zVe-X6h&7?-!nz(s>K>r7+$j`2@uO^HN1>Ci;M&}6d?_05^${$$-|vx+dq-3do(9sS z6!{OuKtvpP5zN%oP)y-VM2;B^rMW2}_1%Ap83p)UVFIRtgZQ0C$mJ1ZrTU3IWwD@0 zEGUMGUmvBopcWT2#^QpO0tWz?NDeuq8u^^%?4rYeHB6;;=n$Ul_~l$k{yv5nHS78U zp`T!U1Y@e&aZ71bUkO`v(=Gr}@1}Fc!s~xz07l2or9Zd6@i#br$P!z#$!}B!E}kY} zRhqQLuN1#_p#L{Vs_`A|F~$MG>1>h2@$l;Z$+d7dWSZo02}v9mu}!P69{qTsm1HdD z^QFS}J-}MRgYk-1`Sqx5vIpXtsi1d?WnVD>FRrtHc+B-m)F{Nk=Hj4(1;v+Np zn>bn2Ox9?sgi>*(8Kn6HFp{miP-pVHqj)^?Gk$B$DQyAEo!qN&rWS9?(F#?jH3r4C z*Dc@{Au7HY#@w%F%vCcl2QMyGrm}ES3nvXskZ;7WPTvf#GJ7!RMH*}Z*#x}l`SXCk zXOC-*um4(-<@=wI&$@(9lBiFoQAOqKTX>G#QGx^|u&lS8i32LD@z6DZHCQ&t3>48J z9FfhA4(Crj)}Tq+k=1yP@7DymRzd`;TNMCRfqg41U6*n{tT*h&9d($ZkdI6}iFmjT z{mL4LL+j%rpuK^opl$*VNp~uG7z}$OfEa&`gbluzFgkmV0qcw}loSeTg0y!pWyHQf zf->7x2%F#Qfi|nzNF|KLw;LggHyi3skgr9dLfO=VEJJu9yU%Mab%HxR$Pnzb0sr7X zMq6C2dhzZbRqg~Gxf$g6w9>?ZryYmfP)3wfEB-*3{sK_B-fJpLX@X(%ezH#?p8qDE zUl-4BP+4~XE7`FF^xh94X%Z}F!ZBzCwZ=sYW15K_i_$a=GC+O$KbD`Ux7JVz2M*+W zkuAaot@e~O6nygya(NhiL_PUo+i-;}{PY!CCXQe28~iW#55&v0|3_mH+d;&36tSH| zY-en)KzJ|^6OM`r$0%Ie90M5!b;GE|tlnICg>0wu5gR?f2d`X>(O66d{>Wp)E8}`5 z1vt|Z!z%ElFq@ZxDtZ`HU+^9C;k5XgqB#h$ex=3$0NM7%DDT}m(iuNBF>*wb29&5~ zE&Z*tWq46r!t}ONOyp7zW;0Iw2V?%n5#f@{+V+X<|3m@X7f?dlSadI|g&jKYc?h(Y zAvF|Q>VP_`|6DG$r>O0nQEF8pFoj}1FbY!`Yp_xm{}=$rK2PxKtgpkmi|*SVim;hy zn3?-#DSpdnNVo6!Y+JS+p(^7z2=71^&=j{#;}i}iqRTRJAKL=7{mO;qSfkpe-+$;N z>hu*D`S^wYIA@D0?xQoB|3GspuOp z4{I8Hm}v#N&OKyBWAgJJEG5C+*B5TGF^%rn680Qarc*4TB5Gj-)+_(o$sX=32N@~NO-*tsxXUDzsXqFX0(wbQRGo;o@@K8UrmFJbUPjG(1!z$T zsl>`E{CZRLgA|NJ4J7(%W>Uqe>zw-v2pX7!qp{dmn9RHLFc&fB73~m7!xP~w$%9}p{f#$C7F_xld*+cR{?338--DA%U-bBo?rhk z`qt(qZx?MmOCfCz6q2pDSnzGn5}+{i#4h?>V?NEDPoDtDGBj@g%qq($9v zB4R*J1H8jlQS@`Hg5Ybv;7iRV_Gn~#&|q-DE-?0gyT?DUE!u9OqSjM_c{I9Ezxt<; zeBzYD%);v09?yPe))+;(%#;GIdt;uOfj`j<-c^hI89OQawpy~M)-#{UiWcPg$q8-o zNgfH()g9#g)dHoP+fiT}HCuX0@UMsWwc{b5kYOx}+Q_1)Ew-QU+z{EwoqYS%m+^hw{d6PBJeY?pZzjT{>}}NMAIem|^!_&Z{OBaMj|vh|!gd>g_Id|=@wB;* zcBlXL37MX{k~$ie=QXvRZ}Wbi=>%ZT>gz)*boi@eP4I^rwE%Z+(m+x<`_x?{luGwt`c~ zCbp9NDa!(el)&6gFo-aLzVzoPBvC~gnKm*2I9wo9Gd3Vf^T%n0Xq1nPcKQ^&YkNjR zzuq!R22cB+RSYysZ@gfXBYZL%QMVEaLnj);aY^!yp8!Dumom6_{Hx9sb>k0|FLio0 z){o19R>neCEOag5@28c}l~6>J&uDIP7fLBSj&VD82*1OWcZr4nzfAxwi1$PK8yax- zJ(FIoTku)wq_~LdrEYl|pYvYvIO)WJ-Q>I56;@fZDJ^)UT!+1p`14@o-3ddI4_hkC z(FWIl#>je67*7S$_&hDy45kL`Z#CdMy6&?Eq37%e2))eOV(=q7>5;wgDP`B6j7Td# zI8;GD-N#*KBrI2pxa41QSUO3!cn$B3Igfax#Iw6%y6t9!$G4r`NXD8gEprdjBGvZvotFY8H zWuL>FQ27Gx#*B8ob(qiAf;GQ zLcyyT(ah|=7#Fef_cwV#=-SO=S2syhLy-SKPu#x4K?9dQ{7GIVt0Zx>4Tx_xhydd> z*!LvTxPT<%vVl?u6k&GKHuaS1wo|~PFwE%y-LI(7dn`EzufVGZgh@oNPC^YlWgElT zzMGtY)|a=!49QLnNz*jYLezV}d&&HNXfx@AJ0Nu2sSl`eNl!{U%QTBW|DjT!F}O8( zQ}U-lh&Xef^j&dLo4uTZp4%uJ!(a&0D4mB==!rRa@X3b;q(ECc565o=MLp9YwjW5c z`*k3}kDSKnfaQlD3^ILcM_Eik%f0VIyyy7>Fc!^`wMiMca@|;p+HXXEE1Q^6)Ecc%HfdT;JPhm$Q6A2Zxt+!Hs-CAHLM1>iTtqq<~A}?5IKwKPsPxxcJo5vsxI%0ErGKF1#G_be}LD$#TXfu{=J5b zf`bcj=BAN2gK}&Q_Vc{WE~Az^8cG_?9QD$PzoEI~N5(SeH~VouK#1!iZ-cK$*Oh<6 z&S8Q`O~i^$g}j-PuPIKeDN1gPhmH{6&4aMBv~MG-S^~2sml`yN8rK*FJU79kSS1LR zrAKSPjS1?c!pRh&V{%>Wzxl{A51LW)&Qm6BMSX2n^u)9^o=@48Qy?0ngfcQ~N5vjy z-picru#w6nyd$@$aMVtepv{Janwe-i9A+-g$)*ra*cHjEBwW`5X4Isxqo}0APUM(z zn=;p5LymIrsv*j``<$`Jm}?|5=HWM=GSm!X`t0Ns?$0i95&GwSKO0NsR^>^^QY)@pOViMAkArz4l-L`$J6Wj7`p~+;Z1Dmf%S548Aht(Q#SCYIR>pL znL;-)(DeSBREpWyx)23Yz#A|Cp3ZzC0~NQ`Yh-6om*EfsCJdI7+tw)x(d9J6xdMk~ zqOhzv;XJ2~e*%)13jaYAd0-z5+Xrr{9i*FL>0iDt9O;}ix`^y@*1 ze#=l!TBL!SXq)^I7Y6l7I~F{4{vH3&)!qz~lOOnE6wctR@?~S>Sl#nCp&!NHDe4XG ze1IfXl((F5#}39StdeHQWSPrbUi+yNwv7$=@LrW*_KTAj{KUzN6y@>|ODAXjEexP~ zXQ_#hzSa}cH$ER-iuroedgxrq7s}L|A#nqg##J~dMA0NsG#QsH_ZPS;=(84~;Hl36 zo&Q^l44UL9(7x=k1SxQ^0m*ev+aoZIF*88XS=S5V}2AH=tvMFm59 zAi3`OHH?bia~+-o&EMmb?O&vwpTJT-nd_8@&D=R2VfMw7`1bE5%8^e3bh}%pAu??& z3;+5qg5zTy?FK8Yh+Gh#Ufq+$ z&8_0*HVWv|!oZS=AjX`s7gE&kJJ91k-|-{d-#hI`WzH@aAr|*9mZUEq5LPFLDcNZ@ zxmS0j}XvvL`Tlt1Kj1_J~?)Z(>qpGZ-nAsGa3#EOyHQRQpj2 zekgFhX=)@Z#=g3BUWP1;wCe@sPbooBEjt;|u?jD21zG)tG+R0u?vDEVTI|F%Q2j}L z&PW_d&)(3)r+l+;K0O`uI6GLYgZ?X^o_0QD|KVk0^f!K6>4Pxrr|puK!Y8$q!2r&D zGa6BDyChk3`6{}6Bab7{&=>szAZylT7up5OJ?@c-s0BS3*m4pQTkSe&m{!kyrXU%> zU*W>F=mIjG&U0JXa(lJmSOc+kO?jPK7n#w)F9#1T&JQq#~F8m}ls=fOZE zZq7=4UhGIo_POn6+1Eej`v64 zn#+HPa_@0khT2|nS`-Gsw3G&wt;8`=JLv^PSq78qFlYGgh&$HHNQQTZxs9->>WQR{ z_KDaID(IL zmx-!|`2~$B1=^%0l-s=?k~+`ohk=fGbd??84t~p52{mXLP=Ek$T9`kjwnrQhH{d(p zkyGP&ibh(6$hJbxA#J%8G)Pp6`@TW~Pzs#YS> z=Q|ikaQEH+Z@eVjU5qd>Y9GR3e>Fikrn&_vHiM^!;n}_7o>KIfW@I6Hz*pd`(QM%+ z(VLClCpkC8_tZsZJTj9ladl|00lxlN2CXUeSvng-BI( ziLlv95jIDJ%@twuD5@#Topd@3KVv5_<93B0hD}xq?HL@16y?TPaF?zWJG>`gMCsy4 zbkSVfI{2tGdqkFvL6%>(_brdp!H!p8|b@ zz=t@qT&N^szTC`*VmBOBn895AU-&%(SC@&Hu45QDxZeM6Y{ZNVI7!`(R_QfB(Sa1K zoi5hSfE64e)m^0A!Hj84Qtro6aP5>Wi%2^WX-{r1b|AX^=Oi?_SIQzOot!T{LQH7; z>rh|}Jw6WQ`J_{VWfr%zWB4Qtz0H4QLM`S`T~F>nGqhkp{tb3C7Zn1#SK~M*;5*jH=`~Go(K@k_v_xc;qbt zFdVYtAz5x{kL0OS>f!VC`Ov!H^WEkR5-Fgium-VfH?0>c1i) zu8N3X$#p@diAW9>$sss;l0(7Yw7iKfmskzQ4KOt>P-)a$7&}4ix`x!!U@Q&Sv%8ET zBLLLei$2NX)^4~0_zM1;BrT@YMvSFhg_fjlBBnt>84E-Hk6BV-3p$6ahRk052U6V~ zay;ML#Ka6G0qAUHo~Fm~SCZ(LL(yM*qqLFpDJ~0y4{70X8rbVI;H*u=LTo`*#15c2 z_)}2$F6MDWeXC($)W4KsVr_UVth%n^f1cC2$YO8{+!3sX{qL6Fc1sbO(Bu=G=&a-U z6?wrFUF?WTsxxVH+s(Lt2G0QfT+#)SddNjt6-lWl$73z#w`H8m=JPBrICxPdwszKh zHkDi0s*XoI;AlrV!<4#!IRhLmovQYpfQ1$PsbYNd>hKUe7;)^NIChBA+Ooy1a_>5P zNU0kGR!90{P|84+-i_ZL*hjr-44Q@l^wl+t+Ub0uQPGmIfN+?fLZ0W-xCz=b+hov+ z{HNf$D>d3AWLv6Svk<)mlaB&UY-K&E%$6q@wo0!Ac^`$2>R*3kQRZ)q{=L};!4L*X zPL1XR&UoLb0BOmaqUOH9$I4Pl2_1=#N$^AgR5FJz7dX_`R!ec@9S%8xKYKw!ISUfX z*D0tdA88`?;9e+Y93ov82orPr0wRTsBRaYT8(ypq!4DEv=hq|Er3!NB!QjVhX{97C zK}C5vXI>Ra-TGzWq#c~Z_7|P2#sFQmUxpn~GXS5*&8CzKk8tNl0ex}M<&^Q*7hIOy zpfou~k%}s{=RF`|4?N~u3c_|{{>56+U#v71D+Y=cgT#u#VnwxBF@(Hxze?i%-{gH6 zqS;QA^w9z3A5nwoYOpk-omh$NKFx3n-kXmeme>(f_2EGH3{=_Fhzio%g5sho+7`{T*Iun~r&`%}^VFRJNW#?~-( z>-%CDB3L<3N`6Il(AEa+*XlidMxO(cmK(`UmELzl-A;p1meo#pBsBa{_^N6E)uIS5 zFlk&bS7M6IDcGBDGm(eXU}sn@UuXb!zFR?^P*B_s#>>mq!?0Z1!n>S;+Ql~kV5;1B z6U8`P?SQYkgtIu!E#Q_g8T(HhoB`Vi#XKCDV;W!;yj}$c&BGSPMjZ^xX_B59lLA!* zBvzvRmPusQ;shsmJUPTf!W9JC61uIQ&@zZ8cr`>4KYtpg{08cn_Gkx0*BCKe4$#MgGAPSPDhw)Q1WqJ0+EUK8v(o|A74i3jl}t#B6DI z6QS+fVF)7+YmvTnGOWL2LIieL`@btd7wNMbh@7nVf_(mbAZtdjeW_RV!E}tB4MeT+ zN}h#vt&lZCOXbH5_oVPeosEs0xvS38VEsfi-$O}v{zDyBZ!ROWj=IZzO&IdCjDvhb zJ93O?Zl?FszF@)MGZN4Lr1aC}zzzzJWC0HQE%QYkLAg^6#MQ?Dq*CGn8W%ViC(y(< zvyme71{Af)b9Xgj!pBZTf|$pY2 z3dk~(e!8tfECk(#Li^pp#Kiu(7n$a+qVd0god82AIZpd{F{rdlnZN>qF0N;|e00de z<-Y!3b=ym+)9oghnYxz{9eZQ~`+`UZA3JO~JLCy|Pbs|ZbCelv3HMts!HNHIvucrg z0jp@xr#(=n_J!1h%l=}8(D^s;qKsEe>KSCu_muHzf5{rC)*c_NP+E$tx#aqEu~Os@ zDiisGMSeB8KX-%P%oXz7)fJZgufwg_MM>=6Nve=^cKWA_o4{vi_CE=7bFe2P=VEY6 zyW~h-(8aSf7Bln2%zQDkK+G%zPh$UUJ|3`7=dEHTHJ6vHW8r?4kLbYBlQ7)Lfhyp^ zV`|O8B5pk^SkjP{IbSC{w;o63eaY+WFnFWtDx_x=aDXA0^;wFk?u8XKFsT}csB@^d z47lg!2?`GH(stcPVue}Rk;|ePSa9(yJt?i2PaS)XLaCZ8ZytCr?GuIA*+A^Hkf}I( zI!4R19KQ;3F^3gy)mx$Zo80Fpt+eBED{LF5h3gc?I*?it_@q%E2vG>R${Z#QBBRG)J&lAYvlndfr9t@9%g4z? z?C}_$7e9ynQpcvHFO9%qmRSmf1XwE|jACsSc! zY^uSlfG|0O=mG5&;`AYL`mi{Cgfd^vL#A$8=GKf`mJ7eAr>W%48g_5y^!gNU7wrQO zEt++=p@4gHkTfcYvFMzdr5LPkoq;RJ+U`(IxYQVs<$ppY(5>WoR83sLHtk#jp~R`_ zL9X=;2C0Sb4RVc#paY8P-xiCs`&s*Ou)SA+(C5EQNLdzApew_SsJG@INO`q=2c!WGa{q=sEk7>VsTb%PxO#SG#Kmt4 zquVAoD8s`E=t6AODh1@=Xxzaiz$>lhFGCXb(6I;uzzYW?FZ>Ik*ZGBVV>60hHXrTH zP%&~J@KlGXw!vYL9e)w~DL1z>P?@|9c37B0pYc(j9OH{nzx1gr76ph!f#my6kBA|` ze8qI>|BMwZyv#-_LB`tr$ey$tvSc$SaGZ`>i3)_DWoZO)%W=uyVvLlJA3{geR-ygNxqvA!2Ef7P z*${>B+9$lA1d%9r;*#c!z+vUK-iig$^v|x~_Ss5+$=~Ta!?F?j&seD`4yjlfzdYya z5|d#-MFUiC4`bpJ)fDr#F;_8p5RLIzk1XmL2HTe5y;%)0MoBTXwYV{-9Awe(i(3Gt z->GGkAJt_vzIO|ySgXExm^z9yUj5AhUd=&e1udHNB|6zo%y>d}OL=O&iP(z?; zK1Rg$8cIz5<2OX77Wg97H5jpK22E6_eUP7Ni|A5|7=+sQ&45(cSWwodr5J^GDNyW4 z0johaZ9|#<$A6q&>8;yiy%c<7^CzmCnFyU%?m$(pRRNNSX+eP%Jn?}`{y?bNhr5$C zC3t-1I=*2nWXm*a*BFPCY*|HCuJ^gGt}C9I*n_nRpVO&LLGv^BLYt=u{OT~^AVl@% zJ45>~O}LhBOVGrqk1$EL9g)?COwj(t?rPlr!v3Iy+_wBHuex zX5SP%ysjX1_$z#MJ2D59gP!^lJP-a-06%)#^aI#mE;S1fy&-lsQ%^cZV3T0UwOeyhonrXVVPDDU)|TN&I+?YDT0Q>oEr zsULVmP!!}d+M{=aXeRpUqB}CSg}-i$KhVnJa` zJ&-Q|4tSnf0RJAO!A%hcVN8{Up)AR}<}`R5L2DWMYZs7Xb|Aj`U*Mib-L(c1(l-vk zpl>{W36!;1CpWK0S&bOg9z6ITF6d2LIA%x!d~#cNOg5`W`Y#Zb+X$rj21~4XE~l(R zK}c;K@tyl^`^=z?<*fC>9D}n_H2-j&; zY4!>0uIA-SsctvSIYKwY_$}omr2Y>QsbaREs{m}n>j2pLw4(5f50PEH)(Th8x;h~l z)y<^1)7*1yFoy|VOiV9c_?5x`O&Sz*6t50zA+`%_^V$L4P&(fNENo3P^3nPu$DkJ| zg?w!6CGpCPa#jz4mFh8>j5yfd>WfhI_N8o>OioQM$ar&{5YI)q^xrEB=gKhBj|a?J z0Qz`p4-m|TOfE*6aDywr@(b*jd!(l)Vww$Oq%5O?5pmM{nHVczka|L-m=Hy_=h)id z==L~qgfbdrf+XCPyfu{eGj2oNb*rc}!w@t-(VSO;bCcItzNs72Ft#`CDE;0*mO6M{ z4k6q;NFWiPU%ne#0VoCU87lk0L%_5uB)u0vEiP}xH}`3w$e&zfkR<4G|8FeQK+;I2)+HBbn@KEU#YA1pDU zogiT+cT|dlV?gZ~D-Mn$|834l>9`-lr=Tx5Cmlow?I3`b!;3+qeyvan(-8n~0WI+E zvOfs|l-@$;V05xeHWzRIU(jM!fw@&8j!VP zD9ASqhhR`qXGBJ>S)j0j6R7|2`$*BJeg?=H(H{%&w{`&7)@7DF3Er`miiRNY21cJj zC+$0v)7S>c>oThc3|-{H=w1+_V^YW_gYRK35vA~@bPRL1X&1V&1SUue;t@aQ=|!n- zKI#7J2ERWUK;J|aKHoY z2C&QW8!j^e>3EIW%p{;*(1OV5j+XDkohe@l;T7q72n~L)k2y}ee!^=>A|=&0Aw$eW zxEfLHr@RG`AYhGOi4Msj?qzCt4l_nR{$>HzN;2uPV3xHx)KI>ID25d` z)xZHsjD!-Y98IGq!VHWSzk>#^M<1Oiu0x1>@5utIbj!U ze|5pbwlJ!`YKEr!JCfHI2T9!Wqo56ZCDHy&aR;JhBWFtL7KlSe+Mfyc?LVUkm$ILK zu?>(WJ3f=i%$7Jwd_yG25BG$wJNG}b$90t0Vj7Lv^IhsrA;aBK zOhmsg80fSr{CZQ`VP0zG^KBdD!W2k~cSms8A3DP9z}0Wa8oxIJp|A2e?iz!JsPQ~B z+?{*)8>aazJXRj{%4KPur)C?@T-#}x5w2uKoX!{&B z!8s24B5BVJHHhw6d{Bxl+r^e0Eyb3dl$ghqN$q1k;$1D+asw0m8p&o*b{lkxwNTYx zB?}`7bVhR=Ek*c|%U|nE*psahNVdrm8qjG3L&NIMZ7__9?aZZKRJpnyz>MSCO$N#p zlH$6_?A8z+03Ah~<r+|T+A#mawd~^7hI(`0* zSM3)+ZbB7PAU(7cIkFcXiuO?2i8!1O{6|^yhG1A-3K?V06`3p+JJu9J1AkEJ%iTzQ zD~#Gauf<32EB!HUxp2p#q+ZdyRILB_VVA~#)oZ*tPbo*}^6JUsh;IVRT! z^Jpx2y%-DWCG7p;gCB5j@ijRKi#AOlv;7VTOTh;|X4?GAbRX|qZa4r6wY(ox$7*@) zwYZgn7q@Y%WzlJ{=u}Oet<8WuYQ0%C!Zi;i1zn+lZ<9D}Li|2tZ`Gha5a4DOmdNL* zT8uE^A5RQp(h8Q(IjE+T2m1j#T}`!2?BqXIjMe`%7yA3_#ZREHbns`1u9%R&xzJYa zzH$+F*<$TxU;O;w{0zoUsbtwLe5h;*u?X2M2h6FCcy0D%2Un$hhvzbnBn*b*RC6{N z>l?OTAwG=}pT;`Ec|{UFrzdK$dNL>S$qTw{J$>;elh4}ZXVCi?i zpE@Wsb(5QrD&QM;N_UbGK;L?f2*Ypi#VJL_3Ru5<#_tQI-Q~qta;pqoYnTjOxp2I? zmDVba{VYZMZg7kacE+?t7&;2s%w|I(=iP^LX^%UM*}69MR|+}MdQc-!2OCOoYmgC% zXkA+fF`~|_2@v3Rm&(v~{Ub^PO> zRb2mVA}d7UDvAl32LLYBVlHcCUrGty!G(Vv0xN5#6yCZg#?Oti_Z`yG4qE4w4~o_RrG)JQyOOgZmjd8Yi=PepXp)wZzb=Rl6WQF!yb z5exGQGbm*cQ%Eh_eBp#{hnFfu*HOTlO77Ih#?W_iGqD!4{uHzBi&+oEtcPOOBO33y z5oGO^yfVuVvi@4-CT)I_D*MQVpaA3u9Uhhk+{7s7p+$)Deh(uATIfK zrYLXBfG#{kO6YCb311)Tzu`0PNuxy@6ycc6VAAs@E<3}H!+`b|S&V&9pEA`mF)^p`exLk_kA3oiAg6B6K==c=Fo}wO@fXO<0&r!O zRZ@@%dk>pY;l^F=bnv~nn2G5!_ zCO0^Ldk#N!8{usm_U=X$i4ny(CZ_&{Wtb6XA=RxSx5wipQSL|j%u+CaSBt4@#MGa$ z^3UG>f#~tT`Q#l(QC@+L7^=O!#NI0SGa7_FWZC;DPinXo+wKkx#SflTLd!vb=sF(x z41ai@KzU~up@7O0x3I=5K=p1;R$ET~xNPY=-j>Czi(=L#_(g~H;<;c|q%GPF=yH$A z94$tIzGh4@qhnFUxPAETr*3Ppo@Fic2AXfU{i77$8GOwS+BE@F=k~TCo;%EXiwRT> zD>fW6zTS(0lfowY_4OFeO>f{0foXoW*9#cYPBc4hkgzVl2iB^r_Q0jDTR))4vbLIr zkK*$suse;b9fM*m+l?|TGuODLhX3wq?GPKEu1B#ent}uQ7_ZjPGZ4mY`+&&B4=FS3 zU+kCk^Xm{acvvrg?gjfFSQLu8`11*F=QTo^;nAiS?SK-w=n+jj|L1|X2c^RlT zIyR~YiEJTtH&SC>KxTrdeGk%n{h4*KbmRLem(Q!j`{sDGouN?3=xWRL^jB-H*C_DfGZ1n#3`CuSEM?M}g?m_re@AQ*cjWy&1@ zl+0%--1kXP?y@9@*+)@Q`iX-`{bUQ(9*+Pa;xIWLNCFbeye#M5LuFwPW3zrI49uKs zjgivag`%!7jQ4&X1*wrbDhb{Q9@#)8L+jdH<`9IW@}7^+`Hp&%M=`#iG;kd{vme~G z{pTokRVB)~agOYC$M8*adp-M16MJ&)dyX2UuYVX;YA zY=)eLuz*Fi)!{JYOZw}NO~tANu_{rlN)oG*jc_2WN+G)z*HDyC+x6gk7Dl`@tWC#} z^$@3iSc-d)@*ZhVwpG-JdoUM|2r!xwT)rym?n8DAcjyku`?2tc#aH6YaJm0QVdNzA z4=HfNcVw@+!GOjxd>F!Jiy6?UYxWwZSGTqTQ`)-155oU?#9M#*7h$p|E)i4_vkqdT z)#F+CaQGx%qME%9#w_NnAn)I|qW;kCe3}%V=ks<_wjQ@uP-uT1Dua0I`q-W)U1xVo zA&O7q$wToczF(yRT>{flX2TNy!mTivv2Yu;^M^LICH1>I619%;s6lC-8{UJXZAyNN zhhy66&7y((J0n_^HlAfSl`tiH9mrewF;~!#x;$e-M|YE4lwOBvjV@B_^qPEQ%a;Qea#oZfEB|`>K4{Ft-}FN;fFr~geH9*i|UTRaK`d`^~{W9 zRUt0kuB8WzMfeO6KGR5q&l2IYAt7zp&F;HQ zCM4H)97_B&kg8_}BTdcgp$K!T7%x`8zVkmMU!iJiOaZ-i$#u(MFdZ5}rk#<=_BV>@ zKaA~nBwXkq`w5d`*xtU%=#ulJTPWIPWifOIQ;PX^iC#HdU9m?;Re?RKG<7900t5wQI)FKAb0d7hB#u=C3&zEz}})rUE@ zUjR@*e(XDO6l5g_?$sirOB)-^k!#s;g{6q95>dU$Yb*$+=h}#KZQu z_Zg^&dVPlmM%W3mT?4=w436gMU$C78h_m`UlIHpIneVDGRW^lOzdtO4dqaX?kAoA1 zsMlj1M}y^tHCb~SVT?gOZ;A^gq<90}O047y)AoPimcs;Hsl1YfcJ=!>0ngU*Mx=Lt z2>GHCU-AeZhd0mrsgf8D8Q!0G2Rm5~HLU*hkFx6G?t%_p_*U18My#FBX`Kf-%SI53_@$a{2Zc4a zmz*i~t0&UTH>RA&&rp2Q>#cY_e44U7`Bcy}ZVXBQnu6l^4|ZpGA%*Q?npOBB*1(H} z9&+rj&yZ{GYU(f%1OjMjcEo49>||sFi>+&^u{&lF_6Am^!5)1)OyNNmNJH9n>*V@4 z<=6KtR>gY!@~ zq8Ck>$6xOwL|+~ z#Iw~JgS~n6rvog?YVm&q<}wyaQm8ZFguz{5M{P5#S(^vs?)^Y%6mOJ5K44skmu?VV z@1SI^2Wi@YJONaLJg@q=8{RhUla*%hWRg`(wk z=MJhO(3O~*a+Wcry-=fq``4&P^I#l|wo5el=KSP5Gp^F1BO%f7Zyyn*)n_T$O%r+d z%7iM`LyBy{l$L@^G%9^EdK+|;av$82`;qiTPaP5>5Y=oGjqrp-1rV6s@Robm98ENm zB_1?NU+|EZ#pspSu)$ovox<>$QRrvBj^-0z&oa^$b3=Z6flFF)Q8ubNUP5h$Bp}lB zW-w&kLBIA|QVTIkQ%Y~dcxiTG7Q(9chJ)qaOodVb`MTZ1kkfh7S698!rWc8k#%XHXW z8&LEC(xXX}x*UcJ%?Akcfq?0GSb7pHQM8?U1eBG|JDMVk$2tZ@sed!9y48`?E1=U0 zP}A}d4o`=g1Nf%0o`?l)Xf+Gb;DVlNETXoVi>U3&R7z;-g)~_Q?GVP+ua8ouT2ua& z0KAS!e~KlN9I_aZ$0BKXmt}~oZOX^Ds{E<35w>&LVUrzVm4sgdPo%( zw92t1>Qgj;wH7R0GjdSyw5wY>0RQo7u>fT2BWdDDx;O&21CN*#)2~5Sc*(Q;>nwM{ z%3+;h-`SWg#HWgxgK-k+VO>@%0UqzO-yD9vV0%H&7Tgc+WXYt_+1)MjL zEkF*@>{fb04>$+ET>SDVWkqjv=E7IfT0jsIF!)zrWkc~>|Hk6C0hAQLT>rhJ@v9A{ zoKCJNv}O54PUq4S)@hw1z+u|H2eDQo8241&U86Ju2ZFMvJ_E4IUC5W~L7Q0n&NrVt z&O+D&5{~tm+$oPB|52TBXywGMNB(h-xD;>gN?F|9Demr~$T4$~s^}e!O6!3yj@#~W zt*VoeSXEk29ipl)@!GN-bAhpG?*)vwdTqfVT!yys?Q*=u|B)m+L5o>&7%x4O7zh@A z#T8FhR8YGCeDcIUF-6$YXD}ko-ct{kD7?C;j1k5pBq$^xUHPj(#+B$HjW#G0<^OdO zAGP-G3Plhw)Xrsqu|KWAZzVY&OOh4PS^u&MO!0=~)#woHcGXvt3N|vZ`5o)pn8G0J zkE@Jo+-8vQO|jh~=5fC?J&I&wQGYG@K^7ep02};lsn&FpfnDOxVAJUZK){mo%oaZ-XaRS#zX*kmJ{;L}+@;-{ZPvmt6T%hYy@WtjE zJY)FteV4r3C!y@jf0q9M-P9+>8S~(IjI;*Zu+A1C#w~=@*9b5%{N)ST0g|xqsdsEk zWYQJq!H73xJo|cbecI#avCxXThakVnZW^~bDPu33D+OIFX@X|*8LptD`+T=QoQz)zIZZzYpx|R3DT|l=QlR|yTy6yOKE;DD8rGecpb&>* z^bgoVWP1Zt$jIm|)xD=2MJ?+4kWJQyS|d@jE%gxEw`Zfan$2K0<4v=k@p1jGKE`5c zeX+EGPAs($OB<3;Y6HYuUMohZ)t!cUNC}1mY@x1almxdz_Yqxs$OWNI#&?8~A4j34 z4hht&Y8XbpO0fZvBWjdT%(lH4jAwl@90tsQd6|YNNILR6+55IfwA&;NNcZdOL5wdJ z;Hkiz;@>fuW~5G|sHZe0uVC@RTss461_{@I~`}XFbu_ z!BI4JlmIsyt0=CE6{`8^XR2v@4dMg=8nPR~Cy~p59+GhGLoOEwD}=`&jC)pFo}c_q z#}T$RF&I^U*&P$ud&wMJm;NFbKRzWgX2qdf>Y6ur_D}(#6IIy86Z3)Lqk8Xw4D3Pe zTZK~OQPd)a_`g|kpX>dkp+^%F`;d^PM81E0WUqw*5RA})&`CWJRK;- zQ`)GeSVtYg5;;n@*$t<hR(9SgO@CoU`nM^^DjG_Dh*}sv%G&-B1%{b0a=*?*1*;t;HcT zWsqD2AX@)9mYABNc{2->N9a?Vw)I4qR)jf=Fc&Kk<|@K;BFqiWAu5c;*HBaOHB5XB z#~JI-bfRgCDQVp~scs9ozqlY{GX@oC(1OTEH}SDu26=5=iT#lHLW|ekHI$Jq@bK&l z4P9T1feeVCk$y0xBtzo2NGFM4cm_LIDT}L+8H`T9jHH9tP}ZvH*vp#B#lWV}EA5vY zRNy-MykYyenX-S(vJZuFE+A8*kutsoMomK)oyx*jgKO{`Nh4%9Sb(oZ(B4hSV;XPi zurB5(-|rt%+lGMhqF%p66$8g%N)3!t3aO=0J=sLdz7U%y$ryidK6tV9;FV& z(KW2@B6<)Ax$@^H4NVDL{X)uyi9{b@TP6}km4d<{RSd;%7{#A9!^`S;H2?W-6J>o1 z(`F!-`a@d@RILHjbIyNgk?)%>n5m>Mt8UUj?34U{UlcFV(wB>gdzMklioPn%}{;G=_z$-j=h8N+f< zivxIsi}S#7GEPgkd~ZcA-uyQ)Evw(`pMY|@*tX-gMtie<_8?pQ?5NYoVIY3mbHDhi8=&P7pb=?Mf-ysDh(=xL}x7XA0tx>@t%K+?5H!+m5z>M<*zN(@Xb~6QYn0Ovha0-nye-ZSX}4l_`Se^RC@{y*|8L;>ERJbYWpPu z;qcSe2*Wfyh@C!m!t~qyNBw;vyCr))r>NFy)Lh|7DF>PZmJ~W+_)Ta;-C&4-Lk`Tj z(I$*ecpx;zNecf6tN7ucz%8hgWk>2|s>4v&?B~twS{?{IyH-Sv0f>ki3sL;nfGf8D z%wiXyc0s;KqA%(zi|KX160_#YjRGK&h7@2-|SNA>`(YD zqQd?^%;|cJy(1e%lltQaGhxyTJ%k@qV9u^5^ME{My}{PYdP{@MmU8Kf_?RCX7mv_d znU2uS<(fiaXHNQFO(ZerAO-kuMr_h4JwoSJ7v(a*w@w@60Kkc5-FRt+SB}D`l=Bai zDyB?DNB6^QChh5uNR`oYR@>x11Cj=}2MZXARE^9B;V+<|7oKBo8mKlSH_gM#5NI7B zTi@wSk3|;HCJSyLCfoEN!d#hG*$7u|ri=4bg#L3&F%FF$QgSEe^c+7+Bko>Dyt^qc z82t!KrIGiG9vBV#R(GCR*(nRIr;FZc_Def9?In~5pQGoAU$kRYPb+{iBXjCfQs0E)S5Qi`S&M3f-KPbko#ymRlhC z@3#lPy<}an2<_4Le1erZj`X8IK!SqZ--l#Nu^y69w1+Nb$pHXld|5k{%by%5O zLXk;T)B^-^9)+Zl3?_3v3`GSW|0IoKGS{rTrUn&p5WKYbI>@3l6_74s61K4OBCG^+ z@>tRinTG$uJ6!$sV0~e-+psXqg~=WxHijB85?_jrPX)xQH-OxHz~KjY=)8olV9vp{ zpm5ujkV_wfijC*Xfsz>UjFLvNjjsc)IC##E!fMyRHSK}izlcE>+%(39 zJMO9{JkoK|%TVb;i1+!oJ&&h`dTik{vyj*7<8@Bp-`yHDH>@QaC%z|mepMR_X_gpe zB1Y8{qfEspGxEupf%3&01tor-ft}pCrW`4w=CS*M$}aeIr4+cX1eOuw4><}@zf*#h z#*zv(IShdFNpp%aIfzO+j-}pdB}k`=3^4!*fKSukz)JDmVTstV@x~HFSbM3qVN~5- zLXYZ#5?&nO6=%3NtbP@UK7}v{vk-FeW)xUdEbFmiY~W^KfI3R*BGNL>l*7gTBO|B|`W5pD?+;5O)4};N$m#UCjfZXMG!?f93{+PIsTlCB5TdTAiRkhek-| z6ihjE4=CR7x)h;d6xI3PXOlOPheW3oifla&7(CAP1(Y)Mo1Ble%e&!2*F`k4q8_!Y zP@>hQEeO54pT(KxdyRdAM9rB1Y)f(a0`t_omp4arSvd)WY(5DTdEk>dVU^n57R}(t$dYyEYS+jqV^9vFJ>&V_m$Ps*LYvJz z_6|-uf+aj*tC)e@vF;HTQ;TG>ROtwN%4jzu&>nVVeD> z!!IK1_>R)`Cnemuh~{nuS;_G#BW~J|L_J83?C2rw=t^77sr1)AX zzD_2Cseye0+O#R-VdXnjlzyhY|uwV z`?})kM%n#Wpsw66x+SH&YoY5e#jN^(Moqs#79Bcr!OHA|rjp5SmIC|rkAh8WFmXw< zJUH6x;W!i$I%zO6`F){Q#(VLqYUwVxQQTpW#e}7>HG380R`{d70S(BPh<4bVhcKig z-=MUsDXj7kende+^)G#3Ulv!cA-07bMcSyrIFt0Ho&S+?P&dF@sgVVBJ>MFWq8>_)2Ju+5!NYfvKCQ?EAvo@+ugxj)Nl~hureYno8YZY`WJ*zsjM1MGm$KY9>i-v zTi!JGb>!kbn=unissW|19*9yih%uA+d$SRmS3lHEx3^Or;Qfng3Vg%^AJ!D4Eg^W1 zOcICU?_P@g4vL|$>^fWvyk_b*dAyjyCM~;8UW-e%|HH*{nL#5Opq?T^n!qAo>4M9;~M7v5)cQT>e;J*06|AwZKbiu?0GDHwj}@Fd7UVQExG+m%1{YT1pup zr3{o(YAClT11O3%;BR@cwEa&|xkk1HJ65^U4qdSj`9`bg5``?flQQ?^c@{Ycy_bpa z*_pQxx~Llc!Z);=eMRYfKk0mbYB{h!VqBNrha60Y1d9Ie5Xc}yskhMyG{R#Fxpw|3 zN^O^7q(8j}2#9mtZ{D%;9s>)>nsMYD#rG zHR7{e56ml}E$)noleoc7pT?l6$PC2z?tEUP(JP0^)exM9Z-a5IDfM+Dl+wD7A=+W# zOxA6<2X03}R_cz(k$jQ4eH_mTid?uEI80oh&Pb4alY#iiniIGXZ6b$Zg=n*@6F8<7 zn4zE*;rD1GxfK7a@VdV)^D&IBzz~SB`KDz%VLSMy-DBhy5e!eFB+_llEb!)Y zla&U$<(a^iuiLE>9c;=R3VF6|6j!?wuq41_Ba(TG2k<-E^gCv`HWE)13~O-yqWO&s z%cHZz5Rx~7d_*spxhL@w7PN*7OCqhBSiRm zoy8o4te=Czy}m-hoqhcjjBrI%;Sp!ZwHOY@O$m1=HCYx`z5 zi+T$*9U4pN@G#_h(p7{yU!?v;(F|x=5BP;Yh?3X!q9j8|`@oWanad<(89llqv?{IN z=z!1t{g^mCV0Vu7*Mw5?=`{=6)BnwQqzi8J5`*8dI0h@Gg&8Shs<0D`fU2_>`jVl>?ck^_BWQ% z5^d)J`m$u!=?J`C$EZQX0N$sCVbBle0z1b*<|-4e5880`s_3rJa=8OoJ@giuT^zu} zIiy^Hvi)JyV>HX`$At|5;mqlIiD6R%I537VoQuIEtW|ZJwW1WBB!wr#kKr-obGu)L zbKAYD7QbU1VI>ys;A?-!{mH!-ci-cyJ;IdWw~SwoZtjm+S4>;a%v0PBlHGnSllb^| z=*~)?=9D}X!g#_EteFCyfAfz^f2Hsq%uHm;v|Nm@EzOb;s)lu7wA^z`swgeclNRVx z;%wNP#F@S8DrKH%fl;$igF=BleBr18{sPq`rNvo&d$C~|zPgM;Bt-6pIHDBS?S+O? z#~|D~S-nyFdZ64KT`pP943o%^a?Df5F_5`3KgRbjrvOIGTmn|4GutJL|F=q|x-La68eg_>(I9x$#i3XVE^v+45r!5t> z{sW0CL?uFtzAz&}npz!r_EcSj&ChB|HfaD$T5*}L;1(V75hmSc3^sf86@;}Li?MV9 zzmoZeW_b0{LdE{`7fN1z9i7V9*d8^$s-$A+22Mjo9{4?wMsEGkfawarCh}6 z9XJS_rhXIxA)U{-bZ!81_r4p`_=?r&mqK>cm~C`oB5{TE=*u&cK6C<3oFT3Gx}dGv zrzahJ1@L?DH6;#XBJ0j?)N;=Nt_7PWjoi2Yhjb~2nD2M(2NmCMgX7O}_#D16hY62_ zV9J*aF(}>Me8PqwJ}eTcJ+?QOOVITn3_B7^cVH;o0MPTRO{7q*6zU~~dP|`&2@>iH z+rOriviChQjsMD!-rXBs#BTtBE|J?b2DmBf!E4@Oo)6-D)<8ZMWc!SGKDLHO?8cC* zMo!W$*87kgtf4jD#}e4hn5Sh@I`gt2Pn+0^C=1yG&DID^t!9V~MkaANA2PeM@POA#j81tu;!bm$v5v$syd7#ngOJd5kBy$xv5Sj2 z%BwqsYU6IP9YlwlD~+200ORBa3@(cMhSh46O_~0yxcUqxQCMxej!=2yD9@4C>(OGv zRq2@*`R{Ctnk^5568w7=668PqhS0|*85}|B(+5iXaDoBMa1E4;-jVsvkBIHMD4t0a zmiZU3tZkZC^YZd4{tH$YhEvCg-%+=H1F3vY;Tn{^iw!(`*8nAWy^12*e?VpV5{AEI zp(yRg(O2TjZ8e=vfge+GAVpkl4jOa$wM{rF9QMp*j7*1(xElY%_aJ?8GoCA#sz-q& z=LOOmTH44JXKA;<<0wU=Am^ifu)d=fx526zx`n*oj76F@OPXO_P0+uLl5T*%bD={?ktrz zXN<=A@+f&I&I$G5CUPnBUK2A4*oVUm*`zu|SG)Ovvr&G6Nop1cFX;+Y1n_=#*|rwn zT+irY|<~xqp@1zfs(K9e$nD=?2o3&k4i~dym~9 zNN*x3y=x8{^mGQbUb7Y1Ek;tOq?>}81~`t#t9Jnf*Nj4aom`h7YybKc_-(Uc6n?wR zy&~61m#XW6^rW~IQrt>(L=*O2l$k-+&s;8ju7TfI*m(F>uQOB-eZ~tljsF1sw9oh< zz=zy7Xh{eor$U>-A3y4vlKFU@VvEmf&>mo9o=TrA6;W4&@e90X+ft+jCP8Qi?4qpu zWT3UNr&$DX{!+><%f`O0G5Z&(2aMd0ux8CaLKs=ixTPC4>&QfWYf->Rg~lLEZoy#r z*cD`s52al36OVc8`yf7u7WZg)IlJ?5?7@h7WEUnqb_VyM^L3hVJreSDZ^6Oas1sb* z_T8-~9c?Kc&6kcAU~_)ygdE!6I?JU~Eu~ZWxX}!M!Uy4H4ZfRS=Szk%VI$X7u>TS` zQ~Ew2L_3GF?cQ$bHNrsZ?*1Q6wO&;%F+(Y~^O#@L_9}KES)M+~*|gicVpV%@+zuvK zQcMDW%IUoj@fD6;*s7C<-ajHv^S~o_(KBbFs`CM&B(D%DxBFVTz8qFt^WcS**QKlS z0soLH%*fS?&k27|X8kn3PN`Sg;?-vMXf9p#kZ}_A-D7%E?lLKNxlGDkL2hlU(5rxk zNob|>2CbfCv5$-NKV^em9s zc$|cJ>gWALeR$c0Ue}N!bUnhnHHJI8GoCI`*xky&V7@E0PvYy6GPxDZ{Wttg&L<$0 z3KnQ8pB+^Jd`x5(ZvZ8|*V7L8t+1GFhQk6^a_FNPHT$2nX+{6G`VF_yP-jy1U5|Nu zMTseML}L?3bLhT6xH6X~_uXyqK zT8wbyzoj4}1&nK?TW4{<^XZ&_nXihGn#+Juiz#Ux&@SP~P{_UO2vfscKL8w^q_GuK z0EcYt(~ve{FBhL`a}d413De;YZ_cycte&1ega)}zbk}j0?t1Tj!URdZWSlKIl*c81 z#t($b``NgE0j6ZKUEK&Rux%mdPAP)BlzjWX&@h&i0}g}KJ=HtM%I#z- z@&eb}iSmric+!%nM|liDne`s-i{1AT2puj~8X3w=^}%HaY(2~LJ=JSBQSvH)+S$u; zoP$YEm}ua#cn9dLE&5=AHREOE?sEuuS?r0GnA>>!51cKk0T#n z)vw)-@d(FFohUXel}y~hcG!=CcDa!%mZ7ot@i0MpZv%y;p1cSwHu4OFAAOB986{Lc z^)Oby_R%7_sdV+Hbd@M6vm3M-goCD(mdDr6{|u?+AFp{uLw>0A++pNy?+}V5U>^Dy zzg^Nj5f+s(G03PN74JNS*V$7qA< zJ(Iq3a{5D9QL`F8o*u#r>MTa}!zN=R#Mo1(l)v#de&_{UDALPyGHv#$0%tw4L3F^M z`+m@4!@JL949d^Tl>K@nH}>;Ia$m4TkouHT%sKYN;d$|IeQEI@u$PU?jI)P`MH5!c z+I4O78T__A!^c(2s!a&X3mNNINEQe+>yku$-1OElUZ9=tBT8p}N@s{%qW)mwnfko3 zAZ5>_n3pPy)yz6du4R_xX>U@Ex5iNrRR0e7I&`ME zRLELRspm&yNW*mk7?v3uRc3QC9AM+62 zkEy*We{2B`m)hiK-wyScb<2T*`k#Pe7(IAW%-n2?1CnLfhgk_8|sqv z0~ks2Ll)vX*9I!zYdvrmkkj}rU6Ik{+hT-?V_80@D0K>ckMcXkjZ~~%ESH1W?)?zv zSw76B^fjC$#B_AeS}o(8%BF|(8^I7ey968{CI?Yi z;Z(FZaxVoo%s@3U^BFAkdpsViZcsN7zZGtS89j-peSkI=p22gLEONFp`IV=_fA2(F z{B6rG|NnnYDH!(PVK=6RM%KBYEYHG~deRhAX-XrRl0t-JSeA&LItqt(+)S3L%pUa= zxO5}3A7X~YiAj7>-VsQO_;h$)0kJbqI*0ECUjJcUELjrPzWZH|=!6#9K=Fczs zQW<2Cq%t!-3NL+$HV$^0j=PgzTTJMo6r{1v2<5T#{8u4J%giV;l}TY$Td1lu6ZbKz zG)CLp7F|T>d47qWv{)f6c0~H1gG=#AarhbLr97E0%N<+rJ*qnm26-ju{3;Q*#?n1t zHQ>CMn#Hs6XBf_tI?5c`8JnV_MKU_xyd8N@Ud-O3Q`YT6?(BDYK%DB2OhJ05X(621 zW5q2&s(D17?IS?1pYBdx3r5O~WzxeZ)MM&Q4AFlz!z95Wv zyPc;yx^e}VWbx<-zB$+Z_$A?Ha6=>`%}ob^zYe%HPXnP2jM7N-|7bt|6!H3HYiy4P8?ASSNs% zv{iW5dd}CAwvLguj+M5KGok(m0?>JHcw25{tY<2dii)M85=av>O40I>IpSn=3vekZTw3XoJw$?s}cM407L%)G^z59LojZ^|!N zic0j?u8ST+8geOJ{cErLgvq6Cqoi&1(zel*AN3q*3ziMzqf+p~@0@xI!G#>QY{hTK zR>N@670+FQ2AC|R&T5|Y5qFtq>(#ys?l7_Br)49tBs7vJayDz>bYDiPs;1Znopoj| z10dd23{{s+HIUw~j_AVxN!fz(&o+mYw|0_JkWQVa#J7`lZF8$yrL)4dg+)S3Bk)AR zO79Eck$o|!&J1}y{fsgFuH?9(KhV)|IYv@QybDwNF=%6>i{!1b6r~sQVPU8rODD-eE-9Z!|}!F=LYx zTGO|Jv_6AEj{lBtY3;8g%nQRU4H(NV>Qtm7DLJR{0p>S~uM15(fuz2lkz9Rh_u2{H z2k7LyZFcO(c&f+nPH~OkV#?<#5GwxCaU?vxM~hNz6REZ-71i@`;X9ZiZ}P`_49EFq zc+9B!=tA6TN3s-h6nV-*1*!Hbg>Q$IT;qcj5Av=pSvwgcm-p`zaLejKK1&|rt(O7U zGuX%h`^($EHOrdCSK>?%R%MbiE?79RzhBme0Nsst&}xNGlpvi|99zrFyz*NP8HU`g z|HknsTKqwZtbVKl=hCYcR7%%F4!!``p|r0hbuG|hX>{KghSZ8}d$5aLZfr7;HIW=H zGzJ#w`syL9#-vWZK$K5USnl|d4>s;fm{g}nGKn5jkl8_)naHX52MPR=c&~KTD4+JgA-|81zK;ave}pSa?#`#EVzaMqExLxy$D7CBd!aCS9J&{$ zKyaK%rLa%oO^Mbuj5nD7s~a8ryjxhy3e%VWcaCUgj@5SpyV8I{CS1n)akNgse(;@U zhXPX%F~Wc66r~Sfpc;3D!$FE!0xUQg7>G`Jq&~FLP|7?ZYnaj8+Ca)YNp4?fA&uwO zgFtT=q(}==A>1XRK&LOC|L1?89mJjhYfdi)8l$1$1_Pvbe7*}+2d#1es+3*z1cW!s zV@y$UT6_VaYyCN$IxXk(+HB6<0cdnhQXzvLFfOo-GT#6XiG^& zMyU8;d(tH3%2`}FI`9V5F~Mn!|F|8ESob!HI`5w(G<>BoRh-t(wh=jv92UOfKP(GC!zEj@`4VXUX z8#ow&ZQAum9T6~>082P`sGC(H7WatT4DFoV%V6NsY#Qs*2^7D_6rEZNxrkIZrX^$s z9!1z2a^Eo0Z$^C{bVujxZ!&5Uwh_uXplS%Q=P7=2H_-zv42glbnGAdQV1%C3q@tm= zi5@xUykkS`VCt1l(leAo++s`lYSD8rSCD%i zIJX()M-JtVg?##g*88}_*fmItAop~|;VwF~r4s zS!|C%Q7%uyv5M87z@g9ofV_d`&e%GZl+>vZ06BaKV{B5&Mg}q? z$!G%aW4~KWvNS6r&7&!ziB$fT!m>;8C9)i{;Tg!|>gS3ub_pXzW#70I=f95u;Ce{6 zfkdp9YS&Qo&;{u6nBJyflquMl>2_$hbeYc#E~Vu%Q+)_sVaoMk#}H(RHnqi=J;zWZ zh)3acOlk)|?=YaN-x{e)Z2AZdhso`SBSiL{Ddff~3{xdV4R4D=2Y+)Q8~bHQ=5lc! zLSM6VaGLuU9mj3C_P}HASZDy0{&i9yxG5{Ij>3!?kgxR#EN$N`=I|6xn1;bKsUgeG zqwyLW=7)l3H^-U~$D-3W4aqv{gKl}+Ok|tf&b47|N6CB-4^_~_KanR{wGd%n?RkVw zcO&#Ay}h~&!KTOXCF~+7)I$6&viLgs7i6gRcf&PJali$!9)a&ssNDcLeruW-^6_M0 z{XY(^<16lzr)3vWsxOf03!#W^D3{z;Np9GO>g1&?B&Y54nb)Aze^p58H?;;!sMYCc z^azZow7Z8;^P{=cDsi;nOb%Q7V_mo!pA?%yrlh_|lx7W=W{rS4?td7K$R}Ft8vCLG zUTz6qopmS2drDkTg)(--Pt9~&49uI)xGEXUWof_I;CfWqdUp^q_jnPDD&6K%r;QBB zEzG)eDUJsY^B?UBIEy>yEuHg`&iPVo%su{?>;4htetSZ7*)2K8yikM=3mOnQUC@WY zAMm!7HBeH)FR1Pp0GjP|e7eY6pu})emKNww2`~T47^CUZd9G zqn8{m$Zi%wa*OE#*<%2BgWrJ)H<yzyLk7<`bsF{>?-D zRw?rls<&RY9V)2JDFkNa7TG4aAC0F5K~~lhaYihoh9E zx`$WWUU~>a_d}IQ2jMZ8n9227aYOs=~r-StYhdnzR)0b+)3W?ON%I7 zSp?`=d{K8JR>Tg4GY;J%mf@1^;@twHp4it0Nq4TK_z)eXwlat()N1MfRBmi~^Oex? zo4}=hsTZ4wlyoE>`II>)G1UGuFY#zZ9%tHpuTSs+3I%M_jab>L3mQEm$^9;3-QIXviL3N%t+To_z!(%z00Wj@ewZI8^c z*%Wzi6n^xXK`mF@lgl*l3p(##hNaD{0V4xvp-Jh@#-f!Lq2F;&2Q}6QDx}cSJ^mUW zHG8ZO24^w^vy9Z;P?Ycl1C#>>$5#okG~#e=27@$GkDQ9d8aDu^(?dpEWo_|PQdnXl zYL8e%0}UKehLt1ZKLZ_xaPMo@je-5my2SPPq;x+P%0r)-1v#d1WO3lN4##Pl31re5Y`=hYWoW6xWeSb>3q`~?XfVp!H_Qy|MkCH85+Kvax`=~zZ zEGtAG#HOZ{c|0A9-eEVZB|`)P34Gdul=mG{hA)O->SB%!hJ8O@muM63HTR$;*r-` zwD<{jm-T4|l3!w}bxkxD62 zAYI2EXZu{T@REMy=L-#)T#5x{;mjBQ79;q6p)@J^b)gi=`&Bc!^id`;8$LGip`aqqiTxl}qFsZ5 zJ~xVjOJX6ZuJP`Px=>13-&zsGz$_y^^WF`l!cV7>QPJ-^G#g3jEi=`LGl+243KxHY zzjqM>Oer*bxS*l*KmPy$K{L*t(f6dDyaW%0lf`6)v-VDW%(`Frz-u61Y=!lxFmJAt z0mD$E{8^hhX8c3|Eiq&eg-mJ3qv=&cwU5AA6N3OWUG&rRBN=1?9o+Atmh$Krgf5pO?cDP(b&DtM;4iE;NjxqCX;#d_342=+<}` zIqiLje4A`TJH%DwHwbv0(6lKHOBA6#{)cX*_*iK591QfNPX{QlFE3-| zR4U0~@@6aj>oQ-2+A^r(Kq|kzj)@X5h9!uim8|=N0y7sg zO6VwSgfLh63GHb89{eb7{`h&1gm4NkVRSs@cZx`GLX+~Q;ej)@S&7JCapWNnuVQ^O zxq(4*@;lg3P?G;a#w0?94S)_&|IIy6nQK2Zu`&;KJ{_y{I!K$HFxDe7qA@m!wtRvo zHmpF&`+DH%N!DI>@G1V;Y^aN*oMOuI^=RtRyB6hm6x`$L!mWaJoWtQYenKZQ|3|JH zUd{KB@!T9#qy;{tM1{e zZzDy67$Zg7kfx&!TBe76LcS+U$ovSCU$T`9*?dpmL>oq`OwohDN($QY2R^3$$u3S^ zTL3+3^^LsxTw=d-E?o{GYV@rZ2sK%aneO6K(@0zBK>ae1~onP#2Z8p9A?CV zf9jq@!-)cJhBr|} ze()rOZ8u1m`=~uZNIhJiQl5Um$4q1v0MDyRIh{S+F-W&uQK9*=u|}%(IV`9*iS9i^KTfJnn~X zwzB?#1%KfzRp0)JsZrjCA?8@1))}{sBT;tTCLFo;D{JvP5Sszs3~rP{!xZzmgU|e+ z{%7zld-6);D1CYz1(g7b@8e!TW&@N7!`UGAEKcK-zVDcK=(PHa4qMYC^9ktvxCo)& zspdjAitpS3*o@MrLf0zgq+6hdT}DMN%@@ig8y{222Bzg2DUm+18I!=IFlPQy9BEWJ&2`5m-UQP7Nwbb2^6*7cO&laj zDkzq8ISaaxLel)>xFbE(MAD%sB>J#lIovpfZX& z%z`MxJL0K|Bg;fakKKR15v6{QfM6T(oi(ZlUwP|JeBuH_aNmYOt(Sg)Y1N^V@oA{; zXjJU)iQkI%xD4WEF?J%GY3UKfSCJN@c!NZj@gk`|M={;+gSeBF+ybu$_Cn%Gw~`dI z9|JWuvSVxHaSw zX-LB{eAIS;B;~<@xM4)xVj5IMJfyjz5aFAaB{V#vu<>f1?5MOo7`mFpc$NU_)EkMg z0pE_|8b{$e;52O(r%~P8FPA(&NS+@h&rcL_eISZ!^#S(2G|WK!voi{Hc<95oL8VM! z8o5aA&T}`t6G0C)Age7?xEQaHT+k|8LI7Z>=q!C$Kw331avu>0!4cK ziE*g;ox=P%QJ2e~A@b6v@VgLAo+?N#1O1umkBIatE!y*RFzk8R;MKy*2cfdhYk)Ry zLpPXWN~e5?s(_&SldMZeW6cD$(NXk+<{ieV5k~GqvVe{zQqX-T6yzFBIkgFB|5p_( zAlx4gDqmgBPfY2E-kngeT6RV*c|VdtlzPceu}pfDOJPRekUY2&Pdmzx!15Pf$Kr{j z%n$qJrVtH!7fP<M?F;gvO>0I*l=cht!LG!8DYud-IJuuv z5VjQBB6R*&$;n-_88+v7+aVmgi)~M;hF-yM&k{peCz?T?t8U;{lkxBfzV&tvM`*h< zg)?UK-7Tmo=lLsq>iUznhjY6U7DrGkmdYi+ak3^9YWo^TM>tC<+@YwwS{(3g*79m` z%1IF$R-*C~kC>b4(Tk^|u;ezZrr;lq?0Oi8hxxy}wOm>=kv3#P6h1DC4XpZ~3OqW;igtWG23xn?WMVP_)^Dd~QZClu}(oJ|nK^OFylppEewq{9-@i zER-L)AKv+edeW;5=~brmDhu~Nj~b4nA028{2fgpm-sH|y^x|kX8?9|eF!p> z361^q28%EREa}CkaZLJ{R>IqGuJkDnbL*QfY#YAkg~RdntcpInf`4YP^KzPhqRad0V@C{dj$iCvCDYn_f-p_VHfpFEe8|O zp)nIK9gdsujsl=fj{5|nOv0T}_?pz6&ma7Yg-~DeR@7v%Fc06=#?1xEXEwRDH$+FJ zuC1&nYXhIrA4bryG8IzT?B~<5uy_GN$7D~0PJh*5aT-#*`6)d=5|%Fjx3y(z95OZd zk$HRWlGTn1ZmLEBhD^~DKGPE$!*nZVs{B3wag$ykl@|JY(wT5LN;?e{7o^%JRNA5$ z6xWn}cVU612PAXaytNE@EZ%oRs5xB^9)7-d4E9S^>&^fm%5&{7G+v&tko@lyN}N7I zlntlE9gC45@#qt*l|Ahwp&z_zFkRZ+;wK7;2;o~??kTEV*&VkJW!YoKDSeHZNGx_F z->G~i8p8Sao_YAuY(HiE*9I3X8+SfdyG&k=F!=gb)H-_O2kd5-xOl{>4RrK+&4BZa z>g)cYOKFKKk$QN-0T!n?br!#sw(FXJPr#V*uN@Af3&;Q9Jd#5$K1vRG=yS@m@u>QS zmP*JCnJgax?ZEK=mxh;s#?=^{#5+7odqb)3#Fkhq+DVjthL_>9j}+VHT*3b)UmhAw&DPlOEEb&3*{PCqyYt z4OHaSXf&?03KV+CG7i8qkSzA=Q2CG(9Z*Hf*-i*Gu{-2!?I&Q=AtV%9;MNeFQHi5< zpmQRk)y+4+Ub}BytlWx4+mjEU;+*sIVe`1VKC|##jmWkokFke8^g9MPkWa0RDE&kO zLchBK+O+HP8lz_$geRCh4?l!6EJzi7?!j&KZ}xH49OKWg&2AO!r&(Sdc(s z^IF3vWbnd~7@*Ekk5HL&0*%?si`u#DlL%bQd4b$OvH%1z#RcBG;}}7D^`3kzGoerP z=>k>H^udweCIM=^qGfv;yB?bEV(>>ODl$pPz5XHC#VPBd>VUmgI@uq3-DT(Q@_D83 zx8{XL>4smCux|cA_ z2bO&De)uBxB*o4OU|h~^*m0ldmVdE>y*Gb>!`4&?7W$dRK)xaQPbJov`f>#5w?;UZ z6Q}*a)a;r_1>>`Yc4VP}a4yhrxC3gKLs2n5V1_NR8Mj^$lqK3UqMTNDA#Qe0pwQj~ z4A>9KS$^3K6X1At7@90QPgSXmIab}Cg?`v)GKS*tSl$d5{3bH^b2l;2(N-~|lTTpi zq_SquK{|4!rj_L$BK(>#Teb3u1%@e*QeWw}>V&pUiHr-t)-e?qlEYBp1)5VC*oeLBlo9g{Z z;G<(H(uRA3y;xZSOe%dgKp5F-86S*X(HHr8ET_yipdElWIk1R)C%r*TqJ1J7x$QNc zH{`vhB|iCtgdvQvVKUT2n8SHn2N2_YZax+u3RgMjAU4X7v-O9xTYodEZOoQU%x_d6 zBH}FH*vnrkXlxZj7Hb1W+fs5NV+zl@P$eF}1jWuhM3!&(jKYwuvw&e6EcMsMg4Far zc?G26qTx;cWx>d(Zv0AjRvJ^Nco7BrbaAEhE<8RZ78it6YTx7rew%l!LFjr?`KyVF zRnLrVWRS~ZpiOyB<8jD#%kjZF4DGfZ2dm2`+(Z@ihNONH&i7dwb=wT#w;0{$K}`;!YQ-d1o(Q!Sgf%4Jr;;y7 z4L+p_upP69qIzc{qm6J9>7v%SBXl_VQr9U!>*zAMG~sV)!WNXVW~hASvU}-M;xj}v&s%p#WgG!(cFQm z?tMqBb10u^!7noqR;Mx=Hz;WjLYF2w#X$GeYz&I$O@NW56)?-!8qSW`97J9b>H)i%jD2f@%b7FlY6OEu@ToPr#}j;X`^-%Y)7pqYg|qS)n@u~h0ChdQ zM%j0OWk95MGe!QBfZg6FAQb45O@GAhhcV=33xCbJ^6@XKziZz$qEs2t0u}{(VTJgw zFhyYjlZRmSI5-u-4f$+vO~KkB&jD8iX~rx{(@8UQxRQl*&d=-NV@>)Sr{u#pNt7#AB6&M~ ziu5~!sK}OZvLSTpho?V9%XzhqyhE|=mf^>o8I*D80e-xiMINtu@tF6i#X=Q5&(qi$ zOVP|ohk3}|elDJQFsQ_)eqMtx^?D2pul-`HIeV~45zR5iDwOGO7(nHG^=HPqVx2UG{G6?M<`0>_@^2?JTE?Owu!?~+})QFVBA0V~5Xp)Fs7y0gAK}ibx zomi@j@G73NF+iob-$;jBF_R>q4o4y|fqh0~^EcxFQO%5nhD($zGyyTZ!0iAo+AhUe za#LtA`vts2rH$RFYgHTcPIZU0XKaxrsgQejuoa#P>b@)w%G7PwRY2iH)lr94bTHPF zBKAuW2Y^#VP0dFcLtaqMn{qZ;+&1`k9xs>PR{Y1CW#`_)HOhl~y4Ptu^kMNs<)L6m z_r}u)ZeBa$o8MF>5jF*D^K=(Bap75y-9Bq5RepSeVeAyr2QX7H@-=+Upj5YxU9qcT zd+}{;jzk$RvPD@Swd|dUcN}mXD@w$Mo05=CW9`PVJyXk(*gj-;;Wlz<9s~JpN`VK= zkl6V#)(jZ5+4M;a9v zG-3+hh@)!+7l@;|3Nergh6LI^E%p6)2U!%?O}W#-r+G1lX;xxPLyzJ)M&(mLrzO|< z<$6;4+swxgRWA}6CQ@~?t7weV4sx|pz$+7ws2_EL^lTSJ%pQbFiyf)U62>n2zhH8? z^BLW3Om+Sz?pp3Q!(?_aPE?Nt;TP@zB3W7-pSap%-HfG6jpWS?j7-f;OvwM4i(GU@ zd-m|r7dM>x?~m7+Tej2S=5m~eSJU;ro>Xcr=)rK&y&$1s4J97@4Mn9ks=-Fgk(fNx zay_4}GIz3cdCQ$t4q#zW-}x$Fd$xw}asHOvnvE}ILwO%M4g95gll<-n-nv(&;1&_# zZ;t`V&Bl{Mk(f|FN{L~3bP?VMF7^Y!dSHbmr&Qm7E{EbtFY-&@Q1p6j{%r(BwsE6vMmLg}XxM3kM;YYQSQ?2LYaT1&e{ zJceFYJ2AdV@n3~B%DVg}Rd# z7#8TTJaHEhE@=bhlI;b__9Cd%?=@(j|L(u}j7o05A8k05OZNI~Jwj=0_sa;U!~dq2 z)GO)?q}0YzY7;57DK99$NemyG?xX-{4w2wE0%}m_xI4vbR-mIM2Y~M+iCQ$>a-qJN zR1eF{LJO(Bg1YWy1Df^G%W?3Yq)vDEP#gfFDl|~elFOp^cy+(XkkxB3WTj`3|1CB- zXdR6whH{g}iZ-xTkxI@!&Cv>t4UfW*jL`_qS1~562=L=p_||5iRR(R~Jdlk;4XER4 zTyG4}Gm+W3!=6ScVn1yqZJH9kf^DQda1Zf(A=p5&Th019#Y9Ce&p_MsK4hI zJP_O#e?w^&)_Zg)k!ou&E-5i?9!M5*U=zaf^Sm^j$K2JoWVlbRagA7|-h2e?jp0?1 z4@Z0a4{oPh=}R^(WMQC3R!%ZS?`@LEea}SRJXtYUP)JpzBQ}q!zdLs)*_xMSjcP51 zZu}V-wJ=R2pB{M_fzBhkV6N@YWFy|8>Lw>vo=fCEsX0n~YyEQ)LhF`h2!n%ooyMQO zgFY0dj1wEdv-dD}!HJxc=OMzq;a{-(&6-fO9pAO%y&0uS^~pu|Z$YQqvfW&~D<3V@ zu}fVHc;sDLgF9>&P0>@C3?6Sc0xfEB{~}kf^4r5ltNQPJK}rv!RJenph((g2YrG8b#{X3G1>VgX)P&T#93 zA|Ju)RboIhl%7-a9}tHzPZ=brjgH7ApUGGQnsyB^_z#%4fc5DWxA)>)u$rxhH1Rjw zkiPSa3e1nq`3Jw2Lj7Vc)+6UOmUR#=Dz6||6Q*|@K3!l}H8`3qtaP}n;_q$x0tC(h z5Mv90H~0_jiW0r2Fo^WI^$3E?&&l@((|Ag^R0CoMMOPsv;x_?Q!_>veK)S`AdHU4% z(>8ogeikf5QOmg_*v5^^_Rl~gJaaCJ(xgQoJm>v^!_WOE*uMQ9K>G;F$f&gPqZZeK zj@1`17cE@jIiga`&!91_m3R-HKu*`{3}nWFsi~x=glW;~I?h}uWU%Cbje6uh9qY@Q z3SuHrdC4qBmg-C93z9)KS-%ZrSqa!efUyUF@PL^*8kB9QBNC}^UX)8Yw;|OV;S-9< z%{6y{!IB>y7*V%ozk!;33?c3F) ztG?7~F)p*fj<)`e?}}|pIsB(w*F}HVjaabFaTqi|NWJPJ5LH&*lg*m9#@bhjE$i(n-P7Hqs1|12B@uiqCCy>UXZ(h9?y@dD5bCkL_pbxubqu4l4$F` zg1>g+2#vpcAFsZ{{n2HEXf3rr#rN9b(~@vpX~%&ae)23um>fZDHgsB}m+i#pkBhAW zxN7$V`_6g9W<#N|A+GTtY;5vHvcEw!|NA;s?qzyZ*An19AE;Zqg)qpF_?U0Gd9QB? z4YlO3%>^&2*KI)NO~CAA7N7RzRCs|t zj;&@6l|{h+@Qu-Eb$VZl7^4G?FaN;ny7kmz(I=Fn=)nHMRghz_B>!DwQKscdJf|pZ z>SqjO475dJpv)3e3ZtAw;2;bjUns`lY;4y8xyLkOs(ZxcLzvCTua!JHUSKc-l3~XF zIf4{{i_YMy^Kc5QRig0dO?Wm_!d~48<`mq7_s1kV5yB?*%}0qcd(!y*C3XY-bk%6a zRjT?h1nqqqG614yEY%Mli#w^R^JaY1IG5`+Zrntl0@pDSqkkwP$^%1YqA97jcup)L zftdp}8v7MMW}HD=d{P`|18k1M7}3-a4pFvqyuze;W4_SvKSuCz=RJ!XFIBqQBgdHU zOCWKZI6$}6^Iw^Bj?$Am00GC7jb3}CD0#nAl*C?=UOM^a_T%`ln6>yGecK!zo-iNJ z0`je75{tfv7uYIHxZw<6P&}?5g7{gzuXD_hgHpF03LrM5z)8b8u33q*vk6Ke@O>DzIucH&$T#S>(|VI5v$mhl~PI_xG+ zpF`u`w*>mHyt5t=st-KJUXBNF#r29lir;-<^TUL~#35)(uoFd(e#)Xrv1iV63z9xQ z!|)I6+7ZL6thk4S8aEg$HIRyvfkb6u94Ee%CcdJmLwtF#0`U~5Skoe`Ll>!m5H`RP zJl8wOZy#)#h}Fz;C@H4YMdgT6PJkFAj>UBWu#`@I zA2uS=Y!}RljpgxlOs+&4h2b%l7nWgTV>I!YkhZqDo^+xZK&V7IQ3|c_E=U)CA{Ncb zz|B3QKRgU?v*CU@bqIk44dt>W{Nilh1T*S#fc>^&9p7WH-cLReVbYxAZ2si%OET{i z&Pgp7c=I2RN7;}V071WZ(|jazJkR}cExjj5Z2(+nzY?T5v*6C9D~heZ?}fOm0Om%# z2Ud9V5&*pD--_H?Cb9=|pK7Q|eLpLGKNm!fri+ln*L4EY$`_C&%3zvxPkO&tdcOpn@Ut>RT%&SIjAT5_asY?!{rZ8a?gopu?R6Gioj0%=l&04eo{!+$ z4#?rLg-Sdb;DHXNCz%T2QEnmE=vclU@VOWVIi1Ppc@~sVJlS_%}mua{MPKcgyD)= zH5=`pevSHtu;WJaUNcar#T~vPD)i!-uy+#ON|Ko}!^`DPo<6Q2Xma#DFD#)6Fit}% zQ$wUyb!jfb?56LzcOsxq=I=rH*8RXew9<7UX&RdfQc*`rzs^8KIp;72rR%nxh*alO z-hV2bg65^AEJdTbzZ=$3n!yl!HVnZJqd>?I1N7QbxJy%HE!e=qe^z}$@H?`GDW6@N zQR1BG__6C2Z?M&FsN2fv?VL2z3jm zxOwHZ-oO12=~6wEQR}o?E$)VHo8c;$F6`V+gD0*%8YNh?)DQad`FqFiMayKV?7$%b^?;uPuU3M?=a=xW4@mp9M>~N+@eJJGmfod zm$J6mF8s;UbvV$VF_(vct=CSJmcedSoly^=VJ(fGI1h=P55E*`(Et}$orSEx(eF^D z@;NCN4Mc48$q#~(x?TJmzr!K&4gga@)dlQCpsIU4W={DX8vCHGxgOESI&+Wv0|~tz zR0F|IpZX5u0GpM(zg2Bb;O`0ie#;6$+UP|2MW4ai@9>UU`@x4B<6Nj&{fMu_5n~y$ zTf$5iGTqq49Z3G{jB3w2QJHlT_&S|}en;hsK0Zj{+~_E(sGi#szvBuPV~7?N;whqv zO-t~}{3G;%QG&CQyW?y{vss}+Xs>z2q#ISY2Vn01vNW$5ya-3H9tHJ& z#l`PipzBEJT|0d=Ja7tFDuGiCC_VuuouNPrQ{e3&)v}GUx7q=Kv_G~Qqo5)c#HA#6 z1;}WQ6uzpt9CSS)-IJ0Zm+?~Uj;9A@b>l1gdl*o8f0n$nf|(og>!0+>f)Yab3e`gX z7Ts1?_LocHho$f%u$|?FZ%GP51Y*hp!Wq3N8ui923$0mSx~uA9qxFVD&D@@ zKzM@Regf-iNw%K!2m-s05iYljO+=3$HJ$Rq>-OTWp1}#Ne9{C2stKu>N0y$0`||8nNsJDH+hV;ZDMMP%sgnJCFWo~)a&lPHJ# zAaz3oBnir?=osjd+&%J)`z%Vo{RwES_Zrtal{lPdc6%xp7cf5>D1_5CV|^S2lBfZA z3~0j&OaVPuV7&$Kkf?zGwc!$;2GDzP1naw?>fZ8Y2nXA>V6s71UEE8hVL6m53Fp(k|px=y2_;1YZ=ilbrec(tm> z{$nh~pOfOxGxJeT4-U$bwulZ;LAvt|Uc;xup?x1f3;#~QF(@O=mCvyk`^jbRe9;d> zwP_Tl)Mx)kMCQG$MQEGA>m&HoZG^>BhXU8n_z;1KEBQ(*%*8& zVGcuV-b~LyAa9?=!2DJ)eX+y= zj{>^*RY*0gh*FpEf#I||2_n)>bOz$c=kpJoBoSNqNGPNZ2o-O*t;&z=Ow`YWyqDBK zKu(0=r2#8YWQ$f}SOA5;GU7De*>kK@cN*?>qESzvcr z!Y&{nIp?T?h=>Y;0Rv*r5k*lrv)-9=I6d>3)0uNPbIzXO%<+uX{9d)b|DXSt=hCbwb)~MZ8g)Z%XiEO6jN0P<_JrJ+uzw_fBJp}>RJ8RmHJSsx9i=8Rg1)ej(qc9% zYL6KSY}T~f*hH?66YN76>^$Bcm6K2o?#In3tL8dNzqwCshKNcQWFYf}QYkNd9 z`xP41AMGjpy(#9Rgj~uP%}1YPmS)uNlx>xX+m^kXqU*J@@cWfI-(zKnkC_7Ddh|3h z*9~CcX;#Tq=??T%h{bck!Doh@YWJ0?E}c;^&Uv_Ex%FBUo874ZMMe< z?7?BJJ@fHfKrQ0}LBygT-{eRoqYqN@t`=y-k+)=XpexGTpS$Sz_zF_*dY!;2 z#-{xN;*ofcQQFp(l)QNje|R-jE$zaHrDq3V9M3D~QQq%OC-mW?6YR#i;daQIg-Bzr zzhPdrW*DWkdW|mFJY0#F>&tavuv$#kxFqD9dXx!L}9U`Z#3MsKiC1=)qilO z)VCu|;cXmi2Cm(qD12UrLKc5PyY&wyN#Y9ZW2VOd9~XCJ9w}`R#2ae9WIaCc={vPP zz${kDs?E^zcrIlE=6C!GoZh)n!6KFohQ6PQRN3Npd=;CU%{Svt`^z9%6hOz)JtXrD$l_eF#gE} zd-2l2YRX<}B!{A4*L^=(oH|2gBR%5j6wA$l&O*v1@wpcTHPmp;O=F6<<24iaL0=d! zq6j!C)l)6ol5~DAwdxF*myKJ|$S?n3kg8M7@%{Ei%du`lfV$qWFxm}4oMp0&IDto5 z-;DvUEf)62bzX7;r|ai}B>UG#kl#;(p&);90QO4pD|q_SuNxc;F~c4r3$-6EeqlF& z+G*HY#n60*VD3hK!k8toB#zR61BnAjb1BeV_{13rpLl5cEQC)2c{ligm?ph8(||oY zq+%K~@i$cOTy+Ggs~m^<^0@<>n34T}4u-Bo1MMcTNa$T~09%LDAsy{9khu zONMt)&eY}*=cNmuD8(L>9cKT#&8YM&3k_p~aA31ODO>aGyKQ+TTVngKVzoka)T1u{ z1Za`JG&P|_)1?ev(uS2-##Jcl|7ekn9WtYAYT~g8Ll(E;H{i^;vrv8UZm1M3Fu*x+qwc-vr>#|N#=hSuE~B%16(-=eT{$Fu09-UbJBHlCsI z6Bm&e6S0tcLcTAxKvFT0J0LNVR0(%3CQL=USOTZY&R0oUmMj~^lFPGnIEDllhBM3j zo`fOLef>=qYhA=zB@EG6E89Ly4bmuESCIejwuYeT(du@xJxPP6P}bz>JV9@sfW@7! zfIAgZm##M)ElO~yk9U)&HBhkI6u19&nlxr5EqOf2QHY$SULt21HUGi1F`G|#m}9f1 z3-uAq@i^ZyP)^tU>$vd=MZ`+dU&b!_U07)fmq5dROtpMPl7+&YVj~TWwGx9Y47Y zazE&Xed%>WH|^g$Gf0M+R{|aRk2j^l$OwGB;UL6+`Xt+c#M^8`?Rn|HX+yv9VcT#W@Hmit7KgM)r771SUr1*kgFoN!6(H9J3egkGaItO* zrPbfX-*vw*Qz5JnUkkfKrp5^R2sy6}>EVqU$k`~l;@@Py&;)g^geOa@o;9<{=udqIB+Qi~o+4L*U zWy2mR>MvOYRhpAuWTXP-czxhAFouOCkAdA}D-qk50=KfREpl2Dw7m6Ha+|Nit-FIw z9f%@q(`Lcw+2+eY!%!$KL+Y|>(C`OcFZm3f#Y3H1^aHP7Ttdxeu7XjbP4^^2@x)uq zj%68Qdb>062jfP?dyDZvHOCjMm~9H+36!`2 ze9Y)tUsi}|?a|cq5j*(<4XL!J9rkf-epurLw*#h7pF-W@9ThK&-m7q=XkiH$gxDMS z-Nf$}<+Yp0YMqJLbVe;6_bW_|?aWPUp$iZAs|%_KEcZhiWcyIIz`4ifqj8#{`Pov^mI zuSF@}swkw&p@-oA)ELsc{(1#0$vTpD6=H$5Eoq2)V=Q~2-Z5Sj+h{xv?Peu-|Fr#P z8ydRweG$jATl2UE2=3Zo|2O381=5wIh@G^n7(GKy*sh?2VH;@66FALbdG)E8^s ziZ$;jZq6YTSrAJpF;mg%)?SQkvg5#gnNzRUI{}YH9dKp=Cxyn>vPTCy4X-)<8)%H{ zP=54hAVJIe7SuVL`4*+aE$|_1+30GD!-Cfq7#r2D5|?8Uls1ePjF$?h&rB(A*l^s~ z6yo?Pda3Hjl7W6qh{6_po~OA^maX8Z7GdUoe@k(zS%u+v*$b%-VzXGb1pds<8eWWB zGKrhsn-UtbG{0(=DYdfLYIu}(VLl$+3#Ha8Zh_Sqergz-`QT6q+@&~p;1L{~IbCiK zsBA=`sRqjBpVbq4aU{dPHfv&oqH_R&LPz=k1#e~71#jj=@LMZ4~qat zMKJa$3db)3mW2ipRwF_cM(u>(dWxCF-=8p&GPc9SR{Hl(vfagGqg}iO_`jaxn&UcR z_b$1qkXn)&?t9EcW0-AY?O7*sPXqrob`ukK8;OZ~$fnMhgYpOJ?#z#xO``o~VPg_2Vx{$67%NXKY5=PO1DI&*=%0=%l1hR{WCZ ztq!s%Jqx9uaYx)nd>JOIp-?HMqLSsZsVQ}P0(Tg%$-M-7hN2Gmtx%J4l#3S3F_u-@ zB6aP}h)S26gmb9F0iyocDiHs5qF^r@Wk~RNsQq#4z5NTG3PC;4bms! zHyK?^pF+;X?4e2*?jeinEuwlWjVj)Zf%dXuU0T((bH*n4LrizB$#v~xr0Uk&kp@0v zYaNH}P*7$Y#N#Uy(AE}(bxEHBqmez3x*we2;al;Qn$>3z9`JCl)R~G7^CqzEdYZ8B zPh5n2rOXFYFww96g>RY(DCTmmKh`SnxC3a7Q3K8y`zzAK(M;WQZnfm$9RF_~R+Q^Q zSRCM}_l_GTBIBx&6*h@|2gG5bzR`7#+1yAi8EH7vJ?0t8WVO(Pf1zP>C*fv%K3l*!dt2~#{mkEis6Q{Jh+WJ}N4`wM zS2_gY*OW50wnmoD31P?J_kY|q3eouCsh1yq{#5X!_`|NiALD0Hn`f<*Dp2}8xD&N zN5qDsdF1D{QMM2-wou4rR$}@rq|q7IL3Z6fZZP0JBxKi=3I6EyYBZo}1lf1}!Wh=w zt~Z+I##fCC>^Mda|6w@zJ#4FU$9=#0%NA-XyE0W_^7JVMG01jo zgSGv28+fm;+o|+C^gS|E%rPe1k&5qBabUYb!01+*Dqww*Tp5DWht2TAVSfGa^_b7} zwkhBcY;*qLR(aekflgMmctP6ohqL12P}gm_4UBw&fPzT2f~s=@)MzJnij%v@_vB-R5r|;&`Tmf|?PnTx!W}w2 z#K^ckI4OhC^;`my)48tb3}v~`w=feirj8g>SBzoro$W^~!CRw_!D39J@i8zB6J}L3 z{&W@An|m#G&MZX(82$UT*opf5cK#yUgXMd1MK-daq&2~SO#xn4z0(#G-7e|^%GhO( z;Q{ve&_xotJIVR`9`s82f!UU!?Z-;B`$<)Nmv<}DUs!;3wL50mpKA7bC2I_OzPOM6 zXPnRCzK^jlV&+4o$9IiF69J z-4)D}JO!bjZP3b;7vE9r+;SS;{s}%|Z>~qGn#64jdi|UiSa)Br<#Fad$ca7?jdWZ; zu;#*a0@<~G&EHqXwl@S11VuKeA<5Tq2Wrkv`5lEj?;U_t*|@7=ci-4h0KF{65pGc@ zO(K=!F%}<8!D%N1y+KocUqEikhS&-9c~~Z8QQ#E_??9cXB;@Q8@X3+4pQ2RZI4Hyy zA=BfX6EL#lvib}b?o&I%=fNFO_bybdqhonvwgB#&65MC~#A1#W3cR8!HIju5SfQ5Y zBXHa64toWjFntxSBmP;0*~(gt-x_k8$l3$VaVKNpwcbdM!%3GQWO%kh)UTpZq6h)+ zSH6OssW|(CoS+89>U~s%0@{AN(aym9D1d%m?(a;(RAc_ec@HS@Co`aVXXas}s1Y@t zTo-qlRDv{X-2qe(m(u{9oBM?#^OJFr+km3mUdF}H8p_V%lZQoH9IrkNTq@GXI z9>d9@W|gG-g?S&pZk?c1hx7E{PO>kIfaX!o7!9DS60QflX=2$}K!kGieUx+!V;Cv1 zIe{G2gSRqNy!!T}5c}Uk5=>lr0uLwdcS4_<!_bKjAw4|HY2OO&Co z>cyxu;0ER8?ZA`p!cu%N+5taD>h{zT&3C*s!(j2`+^;VRxO?`1^G^m>N^SHWUmW+> zGJt^Hyih!J90?2q*RiWDK za_t}Ze0m646Zs$cFZpCFXc3n8VnItNus9plC+~TLr?5=VR;*!=Rj%#Bu&E%`$6?02 z<4VmknOHhx8f;LUZr5PGN}JV3mQ&kf{D!7g4tf+{@CaGC&;CU7bDtl_b>RoFVzNzC z?P>BZ=5YvIITRz;blN{4H!-^p;w5*Le(Tdu7TO+ewI5QXB)6D8_i3_6J-bU|M3*Q2YUniJe9>$MEIM+j zf>_(?5n7BiO23E+M(5+y?B#3RHy_7HQIm;HFqMvU-)1X}bRa9Y`$#@CD77ADW;7hd zxRKKLGZX%>N33>ex(lydHds%DE$NN-Cc2}cgVq8AdM>;_Y(l&?IhMY?-v$zbcDNZpFR%f%STPhiQr{zKhj z&LGn!-(aWSc)%Vm9$<1GdHHQ3kd~Pq;^+HVE_1Ctht$g#;jOxFp~lyi;4a`c!zTs(3qh&(bB3m6rYrdL0j?( zzyB!Z*?Cy*WvRz8NqBt;G1p!t;&s1He@V3qsqe*2xEVB%=TUi@(RuW+SvYT)y|$@r z6h&Q!e}k8&{?zj`1G$?ehgkLr9?ODaU~MOS#BmfzMSGaKNoyLCZM{e|+kJ5~8k2Nr zEi(5uqjq;%F~PHSXVpF6e$O6RoZltR@1|m>8e=EhIt^(2_r|C_&9o=$b8ooO=vUY; zeN1Yli(%mA4Mj~2;FNR22xuL^v;P(+Wl%?W!9<%URsNrpO}YhR5IXiH*qXyfaTFtc zSf!zS(ftcj4t4P7-i1CkFgG#dMzh+W>H-|sFk9v`tB>pk258h}+~jmxDLXk)+t4hW zuW$;}AX3a>DYbBON!W3HU(w+>szBs=Fx|vHWG+lAgVmu}0M>1J^@a zF?n%cvPUL zIL;Y~Ja_Zm1}?ub-qCd4%FJoR$sckQOcrX$fzG0c>dHq+*nOe08fF42SGj-*Qs!pvfwSB*YsH!7*{1Wf($HL#HL~C@>uT4eG3{f*v)XWk!ze4$=S2aYL07I-qkG|N_ zjyWn~j*;J``N&Rh%@|hGBMr5hz;NOCJuoZR*#TZkf)1c|GMdI0=Sa1O$hFZ{lvLSd zV0QK8sOIo4ad+T z@)xk}QtNc6JSQ^ylBf?rH5(t2_V!W9of7gGKvVoXA@js)92{A}`uo70Z4m7@Vr6gS zX5id+kLgUonGD;$9)$8uTeU+P=jMhc%xQ*&X444>7lUFg^VukG>?>GPlNKA`DmZFZ z5GpATh4YjrTqLF9IRMM8#$ei_+3*4Ngx_K}-a{%6NI2-Lf5^D1cYE-}veyS1Xvvmk z4o6?JxkgaOc=W}276#dycS`F%!2+&?ye-|nLtQ&q;1yRTc_OR>0PQAl55AXr_Bozk zE1}Yq0@T#gwL7+FbR3Cju9ozLg~s9l5S};yORpWP!Fs?{Johdts@IwZE-Hb^$k?5{ zqEy$9;OIMtEG7RG0Nj@v8ab;AcC#AapNYrX84F}6xE$Kl!HsXNLHU#Scqn@6>dkVt zZY2+MPB?G7L8m@O-DeOZ9Y%$j-O!%GqNYf)n8oKXsu~tzRR5&|^ zu|R1vgPOTl+Be(;zSx0TD(}Xo_=4iq+V4I zsczXiMtr~q^H+=cYsCCNC}MVFG&Ow`j@w5{DzZ<0g>vq}$q+Qydn*6I7qYs3j3E?M zo&)fQ(^8&d)x+7mv{3{m%Xth>;nmX>I2 zO@$xAI;3kJjsp^@)}(6KP+`;!qKY#%Wyw}EkDKbYk{LaZ2i$tUw^LyZ=Rq0E7?B1H zs6l7z-@@-Uwtc+V%q2bio}r~~!&n?G35*5IJG>^9b3d-j$L50Ez?_nb7<31YO2GiR z?6H799tDhklCH+0y1gIp`-mm41@9}J-$l8Od8h-l&hamt7(ygu_g3k$uzUtHg1Vjz z2MxfmV)M5oiW|6pEPM@|u_LWA7ZeO1lMm8u3E?KSbnPGH;98kOI|6R&<_-r}FctFB$r)_ougrwy4@H=tMMn$R!GT;)L$;Aq zkg17a$VfVU9%+w)1xQ`Tu>qTJ2DTXQA=XBGi~H!$(lA7$Xl!N#0mDdPMlSafAgJSy z7ZDWG+Aq$qwk^O&#a1|3v3kEMrQ3lkI3{z ztYM5{4NX{h<9)~ueNMSald&LF(OvLPWOBM}+>HuPnMz%##}P(^nug@l=_9l;gR?t{ z!8sIN!^~_Nq-X_|{jpDKMd1s+Bgg*FNl0Brw!>h?g)>=n_BHIixR-uKt3;il6r$RV z?C=irkouOLL>gxYSM>Ow(wu?l8GbQP&;=Vqj_vjK+Ej5jpIJyyzuUzASBbP89XxoVs7@c0-E z6sY-ymz&R^&q$;4HUnj+?99cm_qAv$d$uL-ARI7*Vrw4s?WUFF@uMyPsma(8DDD2& zC-4-tlibN>9m{eyZ+YaC>M|*6)}cN#G|;GJT7WO|AIEB;p!Lsz?3*=6h5N!b?-*Z? zkH3%9=`oWk<%4WA%)1-o`^d|D45j@7YEigB2_P{N>>`<$)Q@T+8sAL%*P;hLIh_@_e&hn$K?Z$yP+Wg08K~n~uqeKZ0PJ@u7GyGh67-dZ(4(;suaUk3k$CBT+7Z{0D-B8T<`Fnu#@J)ECe^d`9 zFq_GDL?`%(+)vS~%JF;z_>+k}vaw!l>oE~?U-i_Kg#%oACe;7}3tymtKKJGui;=5= z>v3}a2`cxmGaAl^^Temt!%8V?EOUotuPIym4OM=bSpgml5KHt(2!A!%wH+Hx<8WRG1dZz+XwFiQEtU20wVFeoc|SjEv(~aa7q9?IB#J zn;b)H?^jTt*VY)8u#33>qbI}1c`jpb(7&cV0egD%=PidLP z`UEyP1&d<@<6LZe8W}ex*T-5E^L|`_G(O&$gGG%GIfOn{{pNry<=jBvbDUEwI6oKDgKe=U|o2$k+GzVJeO+5Jwh5DSBj)II@`ZU;dEAbrsh9 zo7remhe`}e$x2fZaTBWlh+87!wurbxDJ{QCeQ9vb3VhOkT|)?sO)MXw#qh5+4CK}9 zh{0G`;(#E+Y&dqErz%7lpNC7CwG9n8y`EA(WTOG?`!J30weBg4o3-K=aMJivhTOP5 z15j+<4~oo#kR-LdO*xG}VA!gSz;jzxkkh<1c+d0vKZ?O7h+`7i7;2Vq0DM3AUXTv8 zGc2vl09W3_KdhC3$HISgLp`x0DKT{}NX@4Gu%K>oa0)Ihdg50u6urpyL~m58epbVi z7;8C94ur1~GfLmX9MeA&$ac^IG{OB$=buv(H^K_}^P5qc+6?pEJqZl3tjZvpUym99 z&+RcDyJb`4CW0x_P*|1vdsWr6IyIx=Ds+{z;db1#&gpHlX~;Nf(vtD z@AUuvSy6{u>G+a+^Ns94FKLLWz#w| zICnX!P-P84Aq|ct3Ew58GlRSDv0HI8BzyeLhciat0--t9Y z>mXm-PhfU>XnTb-6mTB3I53iTlZESlG9^FK_p2j|Be%toI~38M%?8q7nv>Rp>@1Ve zZr5g~4A$PG*2~ZdYI>V6_0bG3MYXnH;hX`wMaQAIX|eAq-$dG+2Trox=)gDHlL3sL zecYh8$A`jJmY{Ee6Uet~Ic7d{VHs{;IZLrG3Q?_ z$R=CZ$&@+l2F!O*$@sB&IPCR(8E)KN%DKFEB2G*8zJWbrb{LeC%x`N}um>yefDm*c z{_h{~yq6jFfH$g|?-(V)J<38e5G7^U@61yaxb2p-)ZC4k;9S4`-14G}Z`nDC+x<6xfSxO>OI$|Sb@x02PylBg3Y5R)dQUhJ!vZkg@Rk;?IIx%vIG-m*3x%!yf))mD!*4sH$6sJW{OwpI9GQSz9?)VHW-$-VdZOPg3gl9`ecAhL=hyddNe44NrdCXUVP5Qqx>~ONX1x) z7)u#D$gu`BPjZ85z?I#}aFlCQ&YOFAOMXKI!+JX6I(NrLkp8}geFx{<=g4t)SYvKx zC(K>>h=CPF-mpSuVyjDFQquMu=TUQ78G@{!K7ZoPmdp2JdGt>hj#cA9?&*h_-PQ$Q zGeJ!34ZrvMjm6}2F*!p_hU}bvw+1uOXWTQ4pqu+yoE~wzb)S!@`Km5T;`VN8o*a*w zi*0YBX8YBwac+`a3&lZXOlPQ-lMY8h=L4}Z2j|`g@Y;@^wvQVW8_K(RQ=XE`ts>xC zj1@(6U`==Gaq*6;Loyc%nf@^I8_EAm9`{V|=fij`&{wyn%2SlJ}wn-PzV*J5V^c)DkK9A<$ zS**ibd|~oZs@i46wl9!|6BXb1$XN0@^msTm-Z7WIvEBg1UcVUOCgjl{NUOF&9dCY# z(oX-5IWF!w6?yKh|AFujS&iLIsWr%D>mb;g?!gDDjmDP zgUU}rY1rJuR`wyDCjI-DvbZ)xTpLQwGp}kq6oQpzZJ27x~Pxjn^t(g?^q}fT(kJEkPlHVW0R5 zb4fvq_u!d&b(w4e|I6zbz`YiiN~H)`{4)TMw$V#IOVPx;2=6J@!XJJT+UpY61tSaw z#Qh82@cB9pOj^Y^DoA4jRtO6+8$@0?rI0KTVc;ANg4Y&OV5b&%)_UM5q{Y8Od4LxG zaRLp^h{O*O$15LV5Vd{q>x+|(09~nN2DOR*fZRGe@Y@N`NIJY+nmZ6f=aNDWwYzZZ z^68WVID8zIRG5GUu@b|KRe=n(AsdPmLS6<$k$M!G7U^1j{H*Y6K*Rr1B9KT{d?!>9 zdi4sv=C=h1n*rCOUIx1WMJ*fetJ4nGn|@%~-?@Qa?lx z^Fgja81}ObJ7yvOHbTji02b^{YzN`-eI$!Je~UZk$^W6d=^^{4VtdQ7D%MJbDhMfJg-p2K9o zc6aeHGm$crdk!nd;JHlsn*Ha5G%P0?-)pj$M!gy))#6m*wo}Np^+RMI9wz(yObwN} zd3^NV7?MTaG)R=wU;vBALi1=p}A z5$tl}U%m{&nuYL?J%fC%!hi3G9h9}@r@rWFUk)x59?%1HHsWIqs%VBSm}b#%;Q=)O z&ZUf^Q8mvXswD1a5ZDU6!ombzpYFZ-gCRIXn$lVLR0fQ3p;qdu1~7V#8;)!5X)9o> z7VcDwDnnuR61s|_z1Vhk&{@Q*XMs1Z0>3fTV$&VjM#47Dd)`yHx0n%d@nA{J=t}x0 z(Z=E`B5hx-E3Vd~BGYJWPR2c2i`$OZKKm9|k>h*!0k(5fM5 zf`0c>M6j4cv1?JkH1jz%bAH5*zL6J`jYQEwLBz%+wYEJUQlb~RB&Cp1Vp9W`(SIFYYU*gGr#NHhW&_=XX zNrqR#SS^$v(v&8Y`mhR2vGP?Tg#)m=zL;5&FdtT%WQKHsEK!(LhHH;q3|+ocj~R504}Bd&_{q;B|I$+FZEHxak$vN@?rIr6`&}wt?{O=uN z-QOeMNe8fh;ysqs6xRTzl zDC|A0M9&7)^gqT)G3$BCT2Fk4)M@NBq*?8m+j!H5CU!W1+a^wzkanNB3!hc3p#hN= z(jcGv~BMnF(t_S9qyk zL%j8yG8ERzl&PrQR7wT<-;vC4)$=zMTB@z4AsIn{wrHo8C_l)TTD`o3r`fYRfr^Z4 zuK7TiJOHfbyNPL0NbYVl)9Z8t%4>ES_wK$tN}gZ*k?QVZKWJqbBq>!n z%UG>vvEtPH3^jdv7_2B9zyzM)QxZGIQPS3LEW7MEfZsu~U#7c!CG*`q{wq>f5VaMkzd)6}H%QWN7+voRaV9Y*rp<1XC%W;})zZiJ{?)D*_3m=?o_Swn9_lRQULcHqX#10dqp1`J1 z>i3mm;7kri5&J1o$-ujDJPq9W6~(-MJuHcy3na6A4(H5gPaLcqoGQYV+@>^4Z%1vJdYk%BE4KEiV#drDDbFrHCkK}EkjXV}pW zp8>4J?|9d=W!d5Tgr9pQ827x+k1%cyIY1*+a@G^6%^;q@vfpE5qcZAZQY%H0-&W}3 z-?gEv-AuIJ4x{D;1|?AQjz3T|=Q%r4aXpl0i4!FMzdwp!#w5i(eJ*dHsgBso!Y&_3 zY|ltJ64?cgc$oRU5D3(bs@AMS&(2cjvc<@4+lT3uvayck6pw$F;)GapXTa6P*JxQU1v-Nj2 zMjgN&*E4@!#5Ud{`B46%Ie6D`jlue*amYm6XuVb-)g4RV!}GB-Cdsv@!OHCK!cB15 z@_ zj5ip$-ZWkfYihGn#5LNDwatGB)EQ)LBsVf`#L^tL4P6XPR`th8JDVYpOz3`2}0tcN?r_;OZ0-2Hr#tzkObRD(}jtYgd* z+RH*VYC@5X&Z0l3BVG@d8(L8UO#J}N9nPS7=`B15bI4HD z5;nz*vdh4Afq4;+%jkTLj9r0H<=-zM*JIhE|2v%}Qsc;{CG!VCu7#+%!$>F}WxG{0 z=3KUvMC0qa!c@dR;e6228)!f0zk z@LX_tiLngpDHCP_!<=qrPL+_ZAPfy87q41Cn{sbH$8(E1Zi7R8u?rcXGh=wW=EZC( zo__#E9U4)oHUr{l*?(v7)HeJW3#C|Bx+$H37Ulxm@BBj{p47miA}i+xWRI-=7jf)* z#I>0y?*4cf(wGY;P-RU3bw55AAC2~g`du1yk@8z419&a<_(6};A`AoO(jbqA#%3jK z6PnCNzxw02g*ciZjwZr3|7empnoPMh%Xl~ohhO3mSWKPZXvLUp7eNJpY};FRQIA(J zw>F_|A^MfR#tnGhR(tDz&aG^hCGq>7rYBLv^HKkw2je&K_8FCjGfeSzPiIm%M1y(`Y=X>^B>!UFI8}&L%d+=y$4I4SxLZ z<(PrLSHMLPu!odD?jx(1uBNW5KzXeO(T6c0+WW_4J15dDM<3@S8bb1#lW6{tB5HGG zqHGTD2bE;kVw+(UJuBNXzM|}p9S!%zWtpg`sC8>Fvg%daObna%~>~efiRRX08 zhNMnc+02TXb+p3bl-{prfN1{47zNsYo`TfYl6gE0LQ@F!Cu*AWm|uz+auEVxCiTZS zzGhdSCEp`4cCzDXD(k^gX#bn%C1LU}HTL}*cdp55^fp~AWT1aCoU*P!FDt#hNo^D# z@wj^}EG=-Z%I?xXxGQ+6LwDdXv*2o6fzc% z_S+LY)c?jXm9b~=&nl|sGrzBFGsH0YM%Zwk&2t+z?KvPO&=fjQl{KygRp2*4TVo1~(M|6Zd}&2lMnaWaM|*NXLI&~@6}3r5KTyF^J~9oSc~jN>+TATXH5 zI02CpPUX?4J}+UO5x?&|Dp-O1q8ekNI*MkIe)Av{&uMuJ;u>^))VngAO@;ek+=cA$ zHZRbisQdUmAm2sYr|Pr)kh;9w2U~S^x+x(D9i@hcA~Wm2uMm|BL?>M9Z%>54boqg} z{7_teBrg901>Hj4yl62F9x5m{>lj)x^(CxFcw6GeavE$BiKn`6<1xHA;h!$nW>B&x zALDX6Who~^-}cCq72~;eD^V`r#ut6J*hcNEcx%}DHUg>faQRH-Y4p4GRTdwD#fK0I zpL-PJmlIsUYJa^!_d$R(K=&2=nYY`u;Eyj)Qw(z|e#%F$On<L`XxprECEl-*eyiz?ik=OJQ%HO}bwsFBo^c>6dq`#1t~(V&HH&_(*i zb4>8!ehlg*GgauQV;WW9h&6PHt{>SlGjY@psrD50U6F!^Iz+5`w%l+K-j4TvSUy5j zSS9c^ASL*h$!LAdGdF1f`T68Z;>8IXpT}Ij`>Fp$Q`N0lA&L1vD6EL3+lb4% zAS%|3KP1CmT)V+KL0w9?IRG`Z zs(OpG&!DeBYeC{AuCoq@*lqha-zH$X)g9=a+R|6BS|>%21+ZI#$aD=ov?yX%BV0_GM(LmWv26<_^kC6{%|1$-X`q@fdts)0$F7xX7gP9d%)J!f zfjZW9!k%Ny?=zvAYx%;A-9$K*cSpg3ReKq|b%gg+ODZ3#0L5^l=sAo9M?_HUZr*{3Lid4DT_wn;`DRM>7{3% zj+JX!r=mJ!3cBoh0_H!Z4y4aegJADX!7r8c74uBQiC`;nB1D`B6(_6JUG*mssj z7BHk~eU9-02;6>?8+B%Dqs|&-aZzSr3>C=BC6F!j-py4 zsy*Or;RJNeZN#(!F|94>SBERaIS{jRk<_ar&y1g43es@X!O(!k6*NK@=4DXoc<`Dy z*BVV;;o*4fd&5C?6d;{Z_ZjWBG7dyKYIZM(1FmgA(O|i9fx{2(Jq4|J#01$&rk2%Z zKvHEtMxmtpj_#(C8~7f8opLSut-XZf?})=?v7O)bme?P!+uql(iX!K3T({%nF-TKQ z`0Qqul@ixoJzF5{@uLBwn0DlL1}374BKV9PJsJ7s8yP!|+147Hz;>>EaP3l`9dPKn zje+M&B?bP?GHVw%73%Zb^%2*jyW&`y8R`A#C8xrG( zH09Yhq#kCl@#F65x8K4km%8G7J@VCL;Yrf*a|%E+Wt1()ovU?$Y@{Zi9iwD1tgaYV zkH#-`#CA%`nP4>D}DOaE-e)H=W@!~|TC6p}>EdUNb4&+Xu@MHgT4-T|E3A3;!8KgG*YujZgs|3L^H z$5<{ZOYo|5pHd(DKv)r)r3fh?@?CNHZViyRSJw}4S~mfXq((yL9&?7b>`M!m545BlfhSf%zS(P!Qbm@i`KTpbi0*oaq zVyI~FI2@JKs39`~FKXMbP#D3aS9=qCbEp~a|LT!)Q%7E+Zp+W0cJ12>Nd5c_YRC9X zy>Mfbasz4nGh?atKDnLy1n+Z-*;YQJ-w*J(;6s6T4?ykY&)vAV4T>H69d@=^){L&AEnc8`1EUdoxI3EHG#A=DL@$c(f!v&-RCXA6j0LE0 zsBY>~+>v#_+|Cc3@uth=yq~H=e8YX-2i`Bsw&O);)1!@nC0C`+z}6%=on#WGgl|g) zxh&G z=zq#ZQ!8@6;v(0_e(l?~hS^h>Cn;*D7+F)KH4k!1#C=$gxab{lt$9397J8hritW!B zuE_ijhR&uVjk+f!cdCgEK&JBKb;J1=E0{65)+4XzPm<^nj*v_5@i3t^s}CLDgdlbO zE10_-(-Xp*G=4obbFsq3yDgO4lu<+U4i>5sU0`?wRrv@i?SF}j>)Hf>7OxP~R*Gq> zNFSs&5j*;b9eu@)equ*|0ncy&cHi-07}Wd_dpA+!d2rNH`ve;EkSV;!z(xuq8xh-$ zy!4Di#}0+n<`?n#D|t2p^I4E z2`3KrQef0K6P|6za$zSx26BUv0XuD!_fT=2el&1iQ>iUg4lR-!CQn(c4gu{OJ2Bhv&BP3Dx76lDqAu2tlC(`^Y4;c~?-j7h! zE`qV-6#(%qo;Phsm9fa*Bl7pMC^5he-#0x&J+FVoh4vhd2X_XW>eFi=+wgSDSOHvS zTfmG-sA+FBK<5i@{1`@@bJL@OxvTNP2ECtR{krs6saQIUOfipUv*w-W4t zHKbK5DKUoO!nHfoG1VRf)v>bxkpH!lRoNI8@*F!B%KBJb>BHM9LLo0DE}no_w-ixk zF|#eL;wPeFg`kj2mAFmv9ge3v3Mtd}EtVRjAS#Gkgc9|_$aN3{vG$9CZL0Oh;r8re zGU-n{z$NL$J!H2!0Z)}9?qlI;@jd^e^QGEx6g2J|cdPLQ3i^vlqf1gFq<-6D6^^nB zt{@n7#mBY6c=%u23e|1b)qOEZC9o}1;EBB_OJknh6VMlICx%+%F1y2NOq}Xt74n3G z2SvudMXqnedxf|=7D%C`$tKwvPQYGW1y)fgsMCT=cy1GO0;$$>85MCN_i#!_TsDmK$nO|O<0;hB_XsYuFhIS1jcaIf zX*Ga-w99D}$}eNyGpO!3q~VQrVOEEoVfM!>aR~503Hg6!!z8J%F*U8m_U{9V^63sW zTIc!5?Yw~6_HqKJuZ=%|SCmoR3=1RZ3Kp%Je9GJDqgx-4s@0 z`WP{NEcsnXWB0WGQR?s{WA?QzUD^Z-Pk2GXVmbx~S+Jb+pP3;E0@GEEohRoBV8QKo z^ZIdI2T=mW7EcGc^p0o;L)E#|Gj6zS0s&nQFXND@6Cf0V9F@gk_%shlTi01(0mZWS zu#?D6@!t&a8T}4+hls|p>^_Kx*TPA1Gdy>ihv(i&md5o&@4H5#_dU3KdS@)E{}$Ef zMfC+yeUbD#ag_0VGaCCg6lLu{MIeoNfRmBfRd@vm{9Ofl(76M79t$!PUA_Ybj6DG3 zA(s^vM&ffn3U;`MH$u;@z^M5BLN-M&xkeU) zTVd6nexa}wc2lfLa|CXjykdn{obZY_R#Cza3G<)-H&&!<`H{vYb-}zedxXtj1c~Hj zzT&nlY_VOf-8LO;V9fObsTU<2-h(Er>r6@S@8beN4|QvxO$g~F^I^0T+-6?KH7+>#nC`G-HR ztDA2uDg*hPtV4T7Vvh5f@Tgjp^V5p3wz$z5Ln0WPLjjwx1*fOP#)lb~Y#dC@#C6#p zOZ_ia&1s&VV91Vn%mTwN-jtX!oj*9y4ClbgKGwzPd2FC0i{cQ(uL{Lx;eX6(h2J}XJ$7@dDrXlhw&$34aCO{-)crmmMTe1jY2Tkm z`|ARuYmEyGEOFN%3IL&Jw+7f;DjtarsJa5}>lRjH0{}d2+QObNN=kdc0!hn{_qn4r z2iT>M?X3mK%4l>K9EhfMf8=;3yq84bH5lP^P>5~c#J2D7St3Up+=~Lk;M0->AK&DC zt0U}(ttc$o4DaSVnTvY54H}K9a``mqXPiK0RWLx7Mi>frQ`fq1%>zG<$i$`sscswt z+01;$jD@}~_SrU+JBSUvC|c);(H!)Q;v8|-dTW!|4kb)v)iuz9wjzPslOr0Pir`AzkU68@(jszYAbJE#G`Yo$T8!5WNyQ*mgt<6sL@5vhUzB_h=# zQX?WgOen^i%X|0a=0@Md)*ue>w1aVJSA~e`U?HN4Nw?n~&#I_iO&ERkLUBSELI!79PI~P>P#rQg&xwk^7T)?^C__bILkylue)qW3U)oRe5cd)&; zAI;PtBDe!m<)5t-^}tBDI;@u!bxD(U2q2y@2zpHHZ0?}E%poXLI^3v^leJAl>jw6= z4WYGBH{Qd_YPD(wZ$(CS9M6_3xla*T5x5B3v6ZvoyDa{$h`%S|?~})$D>2k2X4ceY z7!&WVyRp41yWXb0<{feCCfkApmG4W$waelE3)bjy42&nbnD!UzknV1xaeYn$wjCES z*AVjyOJ);bZ&=8q(e-*Xywm~e%5GEu3o0!dGfNL;7kfB`GbJd8qR9OQ0%cjnqIqc- zcuCG3fj8q8EI~yJ^01>Y&>ZD~CU`~%yFfYm9iE*1bXtXYaZbGW+mSNY{D$%DK8B@V zT}Xc*h3a@wok04SB4e?;q1bI>)QIBt;EcDlkXm###Yd9*|KPQ|vKX%@TP!uj#xmFM zetsePCR4C~4)&X!>YvABr{K>>ogdXfTG)`dn8Ps%H>xjjaxJ#DJ=0hL74Y{*G}t-; z=hFM(qSs2wxd4t%5)uteyu# zx%MIR)KWuNQjcPj3+2Qhg(Y6lA8BtaF6>l^3%kHXInTtS_Wu}!;64o@I?3Lv$#?ER z?rzd4H;m%m@zksh3*HeaOJsA1Az4 zsoQG+N?!K{z;qMwGgl(rq z@GmpC9TU`yqZNiF((3C?G|glOsVuyqoKsNfNI%)gjlwTILaFL~W=NH;!* z8apwHPCkI&LF##mN5G-ZHWX8}yo}Vt4j~tLoIKVePH=j2FeM(mvu#1D9SboX`oXaZ zaZG~({*G6n2hXeqMTcC!11pH^2UP!bv0i^I?(8luL27e#K2p^cKfLU#odIhs>eJFA~&CQ@mkF5ZfG$EJ3-wflVy9S&u)f3CliRFJ&?6lLE zof&JW-OaX`jL}bKg81O%ONTN9HwhFGK?sFuf7cX-myirdmo`CBdr3^jZrg|~Cw##U z2bY01U(At>LdmO-B@R69>RE^UMh(G=x2dSW!w!YHNQ3v(R!y{OdZHl#-sFDBI&HjILx2JXvqe!L8#g7WI@J zw1!T(PvQ^)yx6VJ{n+i>dw#!CS2EN7b9i{f)gcmO%LQELXZ+Lut>>o*y(49mj z{NR1ZPWAo<@k#cr#Hkb8+%tw6Y*%VogmP%|1Fxue@+?KUu-mszv#~)D?u{{khE07N zyp+o`@ORC*jkZ+`EbcaM>I<`P!t6Uf$M~54V2xaQ4|F?x&=eT##YOu9lKNb_go)E+ zm*6E|=>e3UK9o4(G4QV|A}!oRJ7Ayj2lZB5#_)NqfejN&+b;UMJRezS7N9k6cO&ET zUNdH(@G;W2LBPoU&cLq!A75`B7S$H@0na%zfT&V0@}8^m@wLRRw_0Sh#? z=M{D%l7ju+kl<55DO=JQ65@{>V?k{}vPe3Itd=bpBlF&3k1#&uEyT&vmP5h~cOHGC z5vAMu4ou|>Sno6E3DUcDlp|i?21`@O>SP)+c+9dD8%gKRQ&{^GqRyWR=TAed#W03j zmLIPpbloz55&fLH7idZSRVqEoF1rSeH$<9U_)M-#3u_vTUhd8BG)`Ct(kQ>F3+tUBANmm@Cs#}-kp zpul3@O7RvIq7#%8C!FENU!6*s8+W6sufI`UyJuL_=|v96HOBG?gl&q*>A!SrR~Ixa zq02oC0rZDCGCh z;YB&Qk*^U}7B>Pxs(#u5@>0`yRi-TL0>GRaAt>&<@rgISUXEIJK!0I)m zP98^)BdUHXx;;0FqL*88;hOccfU@z@jJ(nc&6p5_CzcXsALZ06mxrRUJ1n8buqZHT zZ!DMd-tm8RhMAo)6;3EoT{lyd8jq1tpPzjE6n})8li1_}o{OXv0~Jy}FkUJDJ9%8+ zCK@=C=lJH#Obh>3iiY$Hqlm;03|jn8F>gHKo?a>-aXyTVgK2nvBbsz06HgYUP#!XL zU%yQ>8URW4+0ZxRoecNQ^U&u)auhBZN|uwD!~$}j#|Tx2!`@tspOB2Itfo`&*2{=Z zs;|Y?y7^EBQRxf)<#GUeZ+I@1zE33|qj!Qkby@Tb*_>f6R?5Vkp7tG6kuF1c7NqXq zC{%p{#U;F_^#1io&>HPvmVLmVOIfjI@L*@eg(s~>mM*Z+(rXv$x{`%fv^MCepBpo0 z1vkoRJFi>!YwP6Fiow!~A+W;M@tPmqs84DrP`jB~y?#M38?L z6E@0m+(1>*c>`Xf4ai|iw4Qt7m@PDP`<=4^N5KWuec!^fjBH!Ff>TFVhA+RoI3QOIYF$JH~Y+og8=W&4Bo0K&El$ebj zGzyODA;6ceeMiZwSXW?E(Ppl64VV4WIa)4M$`~`dhI3vMooVEA9F(L5$<6 zvjF*?;Un-n=%J5Lzk*u5>xULR#3tLznkaV1Aw4HE<&srGI&Q^)vEu?l^K=n+(~sv& zuv>v=B?Zskh+K)TlMs%0o`g!2zqjRF&VP@TH^MD^AQ6#Fpk9i3i zL3&B>&#J(ubvG#2ZYl;K@gi@NKj%}*Mjjh;c?=g|Kd_1gsx^NcK%9HXBECVA#viAc zl&;9VOhx9ytC5m%gfSn>h_3oE{H?jdR3RngLpIA~GA1p}_6#z=-Aj4r7%xx_D8usL zoP|@qfNfN%oIl|)BhDEWrsJdtJrpB%1B z;?It0_y*r&;b2iZkB!uZLQl2EM5mTRN~W06iug^8ekG>;K$xYOiSDBS8M&thEX+AzNd!uK%rg-&1*-a_+05zZ@&YF66;IAtA)+((?bUV+!HSMS>Q6Lv zrlLbo*@no8HJ{fV3#c??2VXDy+0Nu+yi+~n3+W;52p!if0TaR1W-)%dof<1hLz2mR z>P@^QKVFYj_H+w6pj$f{ovnG=ABdd2>!>zx5;=bVidWC0 z%>aMAR^jNA-cKjd1%%8M$V9eSs)KR}Jv{rDcjg<}~JCDbS(rRCzxtkh_@#d5WZ^HmThk*R* z#fHDA>)O0S2x1+ZQ;W0ru^^4)!=5U>5HWBqxuADO%=Vb~;J1?K`8QU^flq z@?-u09xJSP4>_o69EUBCV0(k90sAE^JK=0Q1t7{h-&K&lje=n4RzRDQpWxhy&4Ose zP_{Y}JGlc&SpOIvHkKH%sXaXy8a)vpFXqqJJcwQ!aL@JrK6neO1P2;4;;INkX~WIq zQH$@rG=%9_S0b#k#l{z1j*;bc9z^xULyW+TzsQKGSq|rjtLB!OZRBA^2QEYjt}qx1 zfnrgcMIkUs4PjSr7-s8)8Qr6(AC2uv@FXO>CC5O9o-S$axRkR`ur(v!!7`mNadbBz zCRfK{addkSheV48%uBKRal8qRY-X?FKm8wW7CSZtJ}1C(f{bRU^9X5{f80 zC_=7d&`xrCaFJKO?qC{v=(3+h_Opz4K@i1Z?l7?lM6`Ck#c=GW4$y3b=p@1TK5k2D zn^KQBFwg@g|JxLJ1ZLHTa58j1+CHxhq;gI2J<6YX`W7+=RzJ0?+Vi9#uWF28PR#O z)*!T7nu$>3aTrB8HRgD~>3tD8{fqkx&n=iGgNbl#2FMZZ+yL>(?YbjWx1B4>P03|6 zR7)!ZV3Eu)1hMW87kSB+XY*MyK*Ospg7^l!W)sEC;PWAQJ(CIpUh6$r4DbIDGL)UO z;6I>(%#$N{^euwG;sSiA9fW)#vsVI4MvZ}S>|<Y1-@3nyK-zd!6) zJB)HfT$mY?ZZY$pa}gPRn6vhIB1L_TM{IlcU_%{`B}3iP)A}AxgF6omDSR^@NL5WK z<@`H+L5?jLC32dwO|IiR&0gI^sr$aBl=+mMl-u|PB2gRFKq1OgLEx$QSoqnO%91}J z-fA(VOh5-U=V9_r)4)^I6Y1;U6!n&6G3U%C^_r;$K9IRlP(;%vPzx2R=TPcMurvUb zcU}^6%Dm0pqF0>*Z||3n}QK*cd{REU|ADT={1R%ij3_> zjHu)aYz#L1Q*#vE_dbnV-V3j)1uA5=l7WP9SnUKXt^PR>kVIYukr_n46bdd>K*Kq}6mEprVHfPZ= zyr}&LDa3{%uAg7k8yZM!Bxy~(Tv{uW)(Vu~wKFfJtX=SFtR#EYYvgyn)I$N)Y5ED&C-j?y;WE2_6ER5yNkj-ma z9q=2UnHHkliSn*K!+P%BW;K8FgHd?xW#($O?DG^uYH5PA1A;Gyj+%-h>mm&thy8$eVP^`fo&OhM0{<;mr3HKvK z6C0s{Cc9xie*zL+Y&qK=ppaE`R^aRh})bn6#^dhWR9D0#=nG%=tIeJc##Zt*rwvg=b9`u(1 zQP!7sf)kWBXCq(A8H)8^ggc{z4%M*IQ{rbfQgIPi zKiweuh2F`KcUUL~AED`4IWPH@p-2-97 zHr}Jd2Exl{5q|u2fHI5ng+v-vm4Q@`yw(coV6b#B1lVrGj3DF~@}A0S;*jR(`j({| zRr5z0u!tHO9>u+CdFc$6X4^QxanZap^}TurL!*4u5=pA=$9~yIrkwR4$-uJerfiR+ zLN)Otqtv*6DfLXCUPwJ z1h1m?sLd#sit6=3b{@;@Vc@k7#h>RdN86?2j8J7lfDFfOW4Xe>xEVZu$W4J3lpXDW z9O}Q=7ZkW2j;eE9N%2|H1Qbg8B)k+%n1r$$4j})o$1s5bUk>8(#$1+;B)d~1u^Rwe zjM0B``^w8Xp_+M>eZR19bofcmmGo>NzDst7L=>f1^2q0H7r~9tWiL@kWeHMQqEway z-0=5H`sqD(5IHp6U|`>@B`ypqO6Ag{At>JW?^ZZxiYl3OF{vfrXP9KcaxG;j3sF_B ztRXgz>?znmwE(Q5vk?t9_=GVsyR`}B*}buB3}q%Jyks)911i{)F6a9}*J?hEb>`hL zNo|cE;&;f2!`K_K@bMh0f}v<09*6(n8&SW5VTiRi#%J<=gQVzBy&7 z`8DUj-`taQFeRqc;oYh9v7A}_Auaj7EaV)X^OPYw3%%JvW6hAkxxqMes|k7DhUo8$ zDvGOTv)Lh2`k>S(A1X-JAJY|CKwd<3AekRzgwfvQH-sM6J8*_<{UmMuOmP#Op?B^< zZJvEb#^%oCW6C=wu7VeJe)~(ftc*CCfij2ZQ(SQger)ST1G+M{Z#$zDz0V4{AUDRE zZcWD#*VhcpJkcY79G-140-DKFQIn|EmJ#9Apc}g&u zX5Ha4J|Bg<=Qv9DXbMH1>|5zz>c{R$#Bq^Ubr!Q-WN(4B>%Kk`;xPLtD({mh3#FI< zhB`|(Q~Bjqz(2;6S@2|B)WLj(p_H)z9!7)rqZ662Y*^5KTO7&>`7{r8bxh_7>*l!* z;YgPx>|X60Jx?W|cSn|)3aVo&F4Dge=Q<={5%dmRgBWZ5oooNqAMwTL5hKvufLpln zaYs_V_ZSr4<6{vz=sLO*=xE{K)hsnMU4g5q5Fh4xg+QPtWt1p`I`fA|JOr_+`)~-y zk9dH@y-G@K^qFHdi#OoniZ$Jw!;~o6Tel2?6vxQBA{cK`d+*?up|_6tk#-s55vm^l zC5nOISI0233)n%f1In8QyG`~XXreQ`m%S+K|15J2!JFbhh`I)>_w_JPqa z$W?<~3(y?cHd&Oz;q%HH$ejvP2QYB)jM8G8VSLM-6ZrHtPfg-JI9aYlT$X>e93N6C zbZW7T?~tSHIoFeQ0h$5tWRmrJiWtktp8ZzFVRZRx4WzO;QrTP#7U{Nc5WyVHx(;%` zBh~z|K~R&^&iSwwIDNM+S@Q*@R+1lU4ZM_1Ztsba)Ohe}%@bX*rX}a2qWS`Y{e{w;i_ma3g$UEnb}7LO|HFlAOBcfapfFyZVXT z5$1UfDF4P+lxnnroHw%EN=VbK7^J{!CX_gw@AJ-CQ>)sw3|uD#K|KD+So8rq_O%y= zT)Ac%13R+odIeuPjq1iV-E>k&ZVx%y{l`p1#C#T!HDz5BO#8^)unf18d~eyyW%X-u z^xM5e6}#auasNnt(~WqESQI_taP@SAk%i1Ku+p;%v^%!3>RRz(>a$`Xcon*yW&BY~ zzh}T%Ote@}COY!}JrHL{*r`D%xTKUu@92Xa-7!kP$o@R>f1>nW^IAgCx<^huQq{HT zJpJl_OATN)A0>u|Li~h;&c`XK%$np<)TY@na zmiFxtqx$VNU!=%nmS~jAc%?$B%o1e%C|nbOK8N>6!k~8ZB=xFA$n1TF54e1oziCgS za!&B)t!qShVNGwh2aPCu2e&w;IC zR1Y;I5Z6e*V|&L`4MFp|bnGWM(1;uQBUtyb9Nlnf$aMw|!CeKE0Lm#wYRz3;^%=!Y zWKd?cO^whwVLZqptS{frqw$*9ZwE&E>|H$fXw06bm}Bi^EDuU-{Tf^E%r#jCbtrH| zgk5LmlG}X`ZopT{G84?1ch~W#So`-l5T-!pRhJryh7itiYbQ$97SOD{wv+kqZEZ*6 z?6g=Jh0k4lUqNNzsx`S9-3DtRqIW4GV~p)E0ZS%R+GECI?Qb1Hm^f=47ED3%MLjfh ziW(tTh$eFaTWH}QFgu`j3I834X2P>yka7bFdr;+ zJM%%_R8W^6ukqSr{bH6=>0G{at~Dj?d4(^oZ=|$< zNaWIrn-!)a(AThDR}i0fkD>;5!MJ;F(jnDp{!kGz;UU5)^e)gc3%C3~FcNY8m2*>P#~5WRh|h!wl8_Zzw#NT#o}E?b{B_g;F*K zTM!Y!8?aWngS&m93ORcmXFiDYm1PPyUh)o)mgq$v-9A5p8q{p5W)6jQS7^d}0ky1A3DO5*Ktctenn4@Q-EyD5_zET$%dx*GnBDLsfcPwP#E zz+7vmgM%*m|4W*NS6F^uyRigyXn+6DKq|h-A5qZC|4_W=5z1=y13$j!P?5`cZe6re zVAf~310&h_Z8u}|yBfz?^e)Zn+p`p{piy2YFjyt?>ID z??rs*;c&#KYAF^*n_>50C-pSljd-)(ESZNv zf7TS@t#g`DIjo+L=l~cR`od5tQ&?cuwJ=r)aVuSWBe~S}uGIFP)b>7kI;$(c+&{?(<&1}50(6Ug91!pP3MRR8a>@H$S9D*%?2MiE4QoYtt0z)5l|9&` zgYH2OL}}7u^_O_V)n2&SN$&{-Zm^tJ{4JN`R>kurNWGVa6tSHNwy3YnnN8`(7oR!X z?09a6UE~*~ZS#geb^hlMW}LbrQhi-8NP&r13~#{#bi%X|rA%ZT#pY2tCu_Clvc`OY z^#A$;#U0gW9nw?fOaNE9mWV1zYy+N$KM-B`JzgM+k}U)eL#l$%^+Gk!31Kk2pR5(6 zQ^%>mO^t~#eo14^7^et4MRv;=Cbm?Z)X!LeNq4*jFJ}gh?*J;ye`2n;87*ly2 zkrtWHJ2^A=JwojzLxfS%G31^L5!~Op&6HC9VBEI%?@VdCxBiGNJ*_>3-C*$E=3l6d{)PAs zAsz@@ec(?XLQW#(u4o14Pm?{cJ-iMxCL1DuiEz}ZHEe~(3LY4sW9#=1w<)?(g|j2e z@2Dt?qL@pzC}QOp8ghCT^2d4xfCd!S^dxn3Fq$egw4?AJOxW~mi>Dn$%HAP=&7V}b zmfPpHM8AAntsH~cd-uuCy%w={E#IOYBOx3LskcT81?hGn<-wsD4l=PEV!;QodfkQr z+lfbW;yWD_3&BeBq8=weT#LFjWOTbIgr6onoM7B$vV4`#CYP@&* z&U@E;zXed}z@ok=NM-!iP=>oU5P5zsF6fW-NhO2}t=PE~H%-6cQ0lxg+c`9PT^V?Bl3xXTF579);|V z4nq;TntPjp z6O~5USk_EtCbw$@@(tC;{PzWewCV_+qm+34177}og0?N`3c)<#9y}i0+fBjltx$*$ z&TU7&)H^gCOdzcrpo;T=%P2JJQb#1u{tY7b;i4ouU~1QqRqZ_tfyVqj4v&a``FyE~ zAghvI$Zr$T0suzmTp_O?&wQgbw-wUDzS6>e(!y$KVSjRT(u*K?4&}qh>+4K}sUw)X zq7q_E08f}1@e4SR&nZ{LN2PMktQ&LDB=w-5dJaa|o_Hq1if)r*Ht(Onkq&5sYb^!t zDZ(gEpb20L$ZRN4xfzXVfAlSodF|S_IPv?VY=E{gN&Nkg66*YM6Ta6RUn-Z(OAKL4 zGX~<(FudYNx*IK!5?u`DpfJCH@_#0SVbn97kqH+Y3hc-niO6NEP|P@UJQkE?3xh8r zjbGXy3M8<4zM2v3Xgde4X`Vl&sFu8L> zF$5NYOAea~*NL96y|Rv595D57)E3kF9zIyso?4ml(be%Dz870upz@=2cpWj(Pc%$` zMXPn7#e>#LjfRq+o-G~Uor&GnvEXuu4d8P11Z44`gYL92Sdg4%(by2E7#k;0QQ3Vo z&wR%vWcEisEREJ8%6+7{LYk`u-by|>JLPFD(BFw4;iscQ zI@^_WeOVpO#nKC(`HU+kb6K>*;A=@`z-U7?I^>wDteBHg!$mW+Rbo?^>NH&Fx!ZrLj_K|u|RUw0O z>H_r0Z6g#0202sEt$J}VE~igW>dMoza%4xp{2KcgUa z2VP@p@Q*wuFpkjiN;{-=pAVzI;D-8AU*IKbvfrsk_$n|+($N^K_ML3mu5J!gZ`>g_`?N6K^N*fOZXXCPAz1`-7%9R|%<+$9y4>xteB zElRg%gDr3Mo)IgrqdZV8RTID|%Nt?Lzt;~#=$G|altB-A(J^$Spd3#H*$(nXik;dF zp+m+uz3CLI5WV!dV<_0EV2R!Af$V*tJd(K35d{Eb{Z;f-LJS6~&Q*)xZXbeq?F@wFLo`_XPPl}VG_y%Jy9OZ6BjBJQ{Q+8g^CR34 z)SNqweBOTf_2Z8uf*5CUB}3kx~ga0{lmI3E#2qDfT6w zA8My@P==F0$H?IF9%3SpZL=a5_i;#be*%nWb&0gPjkLOy(mWUfDAO4<28ZlGIBtCi z>P?$tE!2OctfGU6^1a8cwk)Kk4u@<>YJJvxY87K=X5NNIYCS^st~CgS{HOpE`>?=$dH!9IuDn?vGRw7d)| zw-l|rx(1-=i3h-h?{BfFtHZ)Q7+`znrugjz(@#dyzg6V(%o86s`~l~5jqoGk8WoK5 zLn#gW!X49$rdSTfazXY#7z~8WybnR(v6&2G8C%&4AFR7bU7ki_hxTxcLh0(rjey@q zxMjA#%K{Oux5Gh$%gJrTB-C0aZG_26*IuCOdRtM@TSwT%e@4NBh6CZx8O=v(4?9S@ z2`fl9--;*7dp^`2Taae5g}gDQMZ1aFq6HU2kSClhTIr=s{C$p#mLPN4a+8oc2hUs@ z6TS)=JZJ^3l#f7|3*5p7|6(Uie9`JAGF+f2VwZ+<_P2Mt5HW*h=&*nAauMMWov5wWNJCk zo^cfy6-7NCjEwo2*ARBedXCWTUM9?)cb0~A!JX+Xd{X%`N~j-4sXZCMW-Jqg`u&ve z`KFwA$m7q@v+038v2b_1L)-pg3>@ZAkBb?MUX3~6^J<@A|? z(%W8RJx+@T;D@z0LvMMf>Q~|ah|s`931cCx4$Q$(EZpBrgGWW;Ju>ne!cosgqn>x< zXfvKYTw<)^4@^aT>p6ZHa)$>HFM=!8Q25l6tcRjm<Y;FW35pfWr_;IA(R4hYF79fihiCAqUv5jjjW?sw?o=@JA)>2S^~a{Dsho}Z zSWH>d_v83c?_VTJrXg5o|9wDvyodNOWJ_GL2L+tBqkb(91AFv%g=6xsp_tNur7wm0 zm6VXM9vkEE?nV%=c!2KrHC%x5GvvJy>b~ZRy`&19!QU<$N_j_MNL9)^YCyqaZte;7z^e~GdfK(}{o1nGt~dBIc$gwr-MH8o41jOO=Ip6{D0sLS#_&V$A+ zkg&QvSsr&lf?M87fQNDzf9!!6yKy-1Fr2QV8nWU|$de9e zRNQYA`EwN$7n8!_LMpf+JdFx6D9Hc{NAv;LL>Sx?CeeQyR7;zmNSpu085%mA)lOQS zrKpHnjK$P&EdDdhlNsxF4Maf*nN@G&6{)#dXwVJwr=ZTiNf=}6t`j-hy?%ipZA>AL zp<{5sN~hwbQwh?kL<(BB8JQy1@=CR|UBOxH=onBF0BESCu>>&xQQ?+JLIOF?hD|UV ziPDzb0kKpubC%GDyr?HS>$fh4Wj?)3P);I>1RwANe4X;AxnB41I_&N;Ag{K4cy|TW zp66`)=K{q@ZPE|F0}mA;%#m(lXP53dEYzjdrNC9xYx^J}2G=E>kmh*LNRaH_lh2FR*mq&dofxx>fp`W%y}=GE zEVb87u>-c8zPLHTYimbLwV9f9hn`j5d`RNDNAd`SHS zWSeplV9Qr`ma^fncaGk{axw%Ic5cMTy!H+&XMP)e(QJLe^pT$!pC+x%7Sq z^bK}WUptn<_lP8A;$)sP`-AULjF%}ytX^#-&8~ZbqR-QY(M5;~94lYG?q02@K=wwy47=YiSjyfS6ecc$L+3~Rm z9VZdi;A+zO57BQzU9mrKD5-5Dis@2^bkC7s+&_WSt~pTH5Uy!SX{6yHQjrx>b1Oad zUj?qYC6rL%j5x$;w*8CHuVn!8w~$lT1)Pf1`?tFyJXPd+{|@L~nV5*E5%r}wiqxh1 zF)Kb%DVW9ppD=vm1RcmypueajGoCw8SZ;}R-2KjSge50;Vz8Rtz#V%hZiaKaEx1?? zog#%!l|rYH|95-7Y;hQB^J}wsyk-=#!*Dx<+9KW>UcP)hL}ZP_iW>w1HnO=A?@s5N z%O%%NC@}2)??@@#jpq-T8QG4R3Y&Kh>o>xIc^v&KsCynXgG8qzC~?8RSo-cAJHs=D zN29&)sJJ;y+8i!zj*vD-Ql*Uv;G|dCT41Jy8|!{GXnd1+v_B{ZW(Lk+`v0CnDPAYh z0N35eMX4_YPJOzM#Ot^PD!`EdCx0G~Dk|FLCe**9(#G$F`rTAxb{%%3l#b81;p4Kg ztK9BGxqa9eO6?m9dEXv~_ha;6A@y?u*10VAuN1Yg&%c-|dIaK=w5g28>ju0NVQw#> zTc9nvBEpXgL7R3TM6?WT; zo;3POL0=gC_x7fWY98j^%Pj%GMqOlL!ulSQd)hRHM%jxP1)?8$Mo_d5nCV-3*gb7T;F;FVV+Ii3mJJRy?6=X zh+Ex6kgj%zAL2-03C`G$kZXedN4k#G?%lWZs(D-wE@8jL7(a)fmfTowjQTcq5g%$k zFCe2?)sB2EE{bVjnN(24gkxx(x&|UzTN}ce5uYExtw{BwCHJrUVMf?3l*bUNJiLGP zt>uOwye6%Bk8?DC$77tS?i&IOnn?>UOAD_^3$IEGuaQsVR7Hm1V@l?`)*^H9m)EGK z$rbV{&)Sq z2#dzGg^~8Iwh<^!<3O4N59JMj4CqD$0!~JLxQSvX9-wi@>T$(uQx%Ob%zBMSsB+FS z&}#@$ROD>T%+w@2(Csqk*|5C238Cic2%&y2IbVONmjZEp^0%U)PA2usAa_^T_K?Ol zY$lCuM6vC5WA)>ter1V|!uF(~%Az|I@fVh>F#J6!drOG--3e|6j>x`$VnM4${t|q{ zdTGz~#iUN)pZ-|DxuzeY8C{cm_JUd7{69d!?(js0ANj*&aXCe6wHuWQ)P%ZthS z#$Ybl-E^+pL>ko#oaE|qQRYA%EfyI{+d!`HjJrDg3ztmRQdJ95pAF{m-089Ki9 zIe2jLTv4h>kt$LtaYlvEmVC@v);7B>Z_L_@X}D}q`AuilB2c@aPG6-OgYW+9kD}!f za!7p(bK8?<6dP>PY+nUbA!6MMls*jPeiGE}0UXwLG6te+BMI7Q7IY7bP{LiYkR3*; zoo?tmuyd5$R3VL? zWLhFjwjr?^H^d2cxi@gZjPwvm3UUc^z0f$wW)R&+LMzPYvsG0 z?I=n^hDbw(l6S{6ZVNogA&=KZQ!ahnbDjdL-+t#5yJz1T=&26AcnBi4=5t$d@HO_^~JM#hFjb7Uto38GI9XQ zh;Qu5<(Yy|v!~IC;~*Lghq77-gQIGwz8{7(hv@zVoW+zT`bF|Ta{x~Vq-#A7h;Nbd z5;`;{FuY$>gIM8Qg^=zt*lWWkL(N3Pl)ptdhl#0u~bz#~6S zu_pn0u!C-Q1h=9o`E*+^v?BkP)Aa|W%Y?JcYKV*6h0nM4q_m`tnDHW$d8ngZ9%JZZ z9;PGIz!Ior)na2{@W9Jz zW$QM`-g*Ml$l8-fM94k5YMx;AY8B+y9zh&pYfI+ZB_M(fRgty%3eh z*js{h<|x@%oj`1U1oHr6yKB+db%!Y#j9p(!Y08*g=fjVXq?udE-Ep-M1*zvZO3(x% z=b>7%DOI3xs#V|EA)xA!UWOy8mRYW`(Rz@)7Ty&*CZhV_yX>JbbTXv$#IBTLE#yGL0-SF z6r9W8Qnob{yka+!eId6K$TxwZS$MKZZT=gSM5P7>3R5FPT>NQy1%}KVhs`NORpRM^ zW7p~yrVJLoHXcRd&@3oqVn9b{fjj7u(n0~_VPJK_yD<*@a_Xp@fJ|LVJg~s*vS2Lq zlOCpN<2r%12d_@MBLoO^z^zo|8ld70(BLy`jZb<`l_gtMJN>BR$Wjw-=vX_E!{ERt~DD?APDz)k- z)bAs$%}|AgyQ-_sFY+Z z|1hDvX(dkOPz{olYbp_1$BO`Rm01j4+^b*7rP(88^#>?YcML6aZI}uu?{T0JtVTY7 z6oL;jCFb$iRm|&(>W3a-eo-wv#X_Vl>MFAxT>L{tIm|KMYyb`^)|FSvPh|1w5)NQu zkP1dtz@r-YBQ1T}l_`~RwRdsy+sZYm#Q)4=6SI^x=yRQirwIu z*4!GoyjQ_N9i0S7Ke7{9Mva|?EoV?oVPR)cShfR&KW~j6ePO&gdMWZJ_s>R{v*I3O zGS{cWd_H|da~hSx zH%Wz4>~o5>gw`NG)_2e+<43IVc-uX6r_SB`m5p|faCr1{P9<60&SJUSl8uk8Xo%hSD*H)7mD1}HldDO%MHKjy`g z#qJ2iyU&F(j5Hs&p+lwt9kdx*;+b8=DV}VwiP63EIUwEL9#T&YiHd(Kt0O6WW-;h(C@Jf_v$?3f( zvPQj0Ll|rIn?eQqsKV-_U>4S6gm!m;jA0#;3R{H(ceSM|u3U3;f-wx%u*fq!qUz+k zMSK*~pcF%=Y|(*pSTAdek77J{9YkL$0qc3J77RvXAF>Nxp`SHpTU&+HGM#0JeH=d_ z8)gLI;H6GLh@9>laVa5|p=d);IfeA)lOocC66X!UF_p9LE8l{;wLgq6dUbq(rRw^V zoZ!3y@77-#Vy2w^4`I>iNa&V%3N!iCj#}HE3vInCfWNZKLRj58AG#vm`R`x_Ud`fyxUvO`aBQCjJQNevShrrN*;{D?&JXU-uA`2_OBOc z4mcxg*BU7rOP%`5T7YDYx6VecUDt6y9rnZA^l$M6JakSrPXx)~3OPq+vD5mvfrk*88p-Uke`bS-%PVsvS4sbhRJnhBW6k$6->(S_)|)h1kF+Ug-gabQqep za66f&11v4aEvpl`KTT4YNvjV^s}D)550j5_7g!vE_>MHwUoo77xLwpr13eRx!rWNc zAoB!hXnpfW=M@SWq^;l!B6r8G&`t@3wXtGgozl~IN>+_T?nf}swU!YF?<{L%^M;22 zoC*s-*Nea@LZ|VyPz{ybVPtWP;V(Hj^M9Y|S6tB6m55C_9gI-7zLP%AU$G5vcq8Q$ zj#aRj1stv0@G44zJoUXXatKtDPaBxduBEP%62OFUv^8OyN5Qusfg$)8;VGu@+^J|; z`E2SEHw}Dhb5o$ipxeeyMLp3o$0BVZ6qD|=i{Tp&F^#WYFpjBwR>a5j;D6RJd$8q2 zve|M8A5@I6!Fn5UcL27Ia!4*>;#%qTExlT%2=$XF=>8-W=yi)SR{en=Um8=!4jpo7 zbS0cOF9;}pyly48VEpS9zm6um^aGru9Uq!5Ax#hlK@d!UUO*_vHw1YIMDtyhAdOfK z*EvjD)=lKbcy3t%SDK9ht~?9gh)tSNLMz^ihi?O$9LsR1=fCF=DpeL-g6-j2wtS}E zau@4zLTq28L>}bBGS_J0uZFbi(GTpQh-cjL5oaL;cowN)Z=WE)(mR#Q&}0V5MPm&- zzS*f?6fkP4e&*8l+v4NGiV>LlMjxns@)O`+Zr41q@d_^1 zgVoUxx2`S(D`cAbgXHmFI}_<9e~3TnroK6VP%}P=DuJx_9z;<#Z(|T9ovB4VH-f4A zMA-O-FxsGsE{v7Au$2%9F6~G%Qp#iyID;GY>!qS})e?v1&qR#Mq+mQDq(15kIUUKg z2YTc5uo;SUTLFINz|+#eGZ5|ifr#-PcO#56X@EJ1)Ga}MBYRWEW(Ls(?HQLIIkq*z zp28E{aJi?$AlMWapgWnp5m`}Mj!hp4j=gHYSK9Wc~NrF(PzKGqNE{|2P=DAiAo&mKp7YivNhZ(hU< zxu?SMp(W37s2c2jA>ji##`V|d)NKWM3(C*76!Ae%N!Q64mAF4@0Gj_4q)QW`TJIpS(MX52Ze3j4+R3$DiUQpuw@Ta*sr#xBHn8YU*>AKYU_ zli)y(gFE9B=Ubb2i%Xfepzz-g!sf7UC@=%7aNSev9`E!#SjzZj0%4N1++g!p%aNvv z8_F*c1xI-E_S|cQIM42Cgi6cB|I0@+zrI)BCChz5NN_DWFG{@z;;0zKZ4c~t4ePwn zI2Ra0#WzO&6AwN?^Ugm4HCEdX@5)!VxDFdAW#gQj%?x*SlYaU;e6$xjHx%%dPjIJ} zi$zJ@){F{Vtx=er2~68zJnENXoRqEF{|`dxcy1w6cy7hV@k!*+l?;gM`jEf<8jQ0; zGIT+PAR+HG`?4y!*&HZZ|B*I`alQjvqnY3FEBwMNxe=s8^6=zSYTE}GY4?@b2-1RQ zfWV8l$ielb(5VYiV6s0&^!$kK493|nZ zx6Gj4L5@08n1=jGCQFeHwRM2f}E3BLed!sCu8{G=mgtW89G=~P}9-IDtWvD9JO zM{Iw;{tRt{y@n$kHfJnC*RBN!`-IqFGDk#(erbio3HdI^SF{< zb!f)Gcp+@EbiNIzfNd!CyMWvyw)aOEK8s82{k|MsT0xE>uvleEz2G4ofM#14gzno6 z1ZmMS@~(Ci)qo%^H~jBXP7LM-C$?j0kF(w|cIE|?1!TzMrgG`p6zSSj>Dn~%dj40?QBYWPhsO+^hG=S{BPC-3}Mh$=t zm^taWsqy1;FdW%|jI{KMKMMH|HSQ8H99OD=%B9`M!7g^8@_j{OuAJ215CYY5G%*w* z&5@kXqu2TtTMix^HwM3>kLNHTTU1WN7KH;an7z>;)?uKYQAbXLp5e`HEsRVI{D%Tf z^RO{=&s)N9_l#$vqAi@g^wr-CWVDF?qEd~qPn`od$R$6m zAiyupk9Ap^;njAeHFwS~Orc zE|S4wa=E`*Y-|XNVgmuSMs;|IK~+6we8bJ>1OS6)Edb3Eu-m4Zq5WgiX}IAlp_uHa zTl3jAa-V+cqvx`8>q5Bbn_Px3qgF0J=ssEyq`5sv*L{{K$GJ6!*#yof&I3N_E9GY*SNJxqsSI7N?HjnP~%AI}0x9@7h_dV6a=aB4o+;%YhR<5ARdvj!?~dQ8lB zKo6FzZT}MEIaa|<9zA+AY!s+kzR|bJDWC{(o|ghy^TGES2x-VttfJAzP$D<9fTg-X z1^kTIQ2I+3Je4fybnU{04#5~(lFkDmx436A`u(H16xJ_^VfU0 zRpMReMh<;;{@O^sIQjPNgTeX8roV{CjB{)#0ZnbOeIiJ7JGUTS^{E{0O-`mNxO;+Zcpnv_k`Y zXz>!mfk~6K#$e_@fe{IJ(F`Vje`9pPuGozeRcqDkV3|g>nT|+hA2{05Pf&6KGs+$v zqLFJD?!=5{N$cSO_i?T58^`P-v&8Ngn7%B6>-KY@T&nFM)%KKXt7xD(gD{8hzc)dH z^cNnCZt~q~Z=)SZvApAf(D~XK475l8D+=jk1L>r(bh4pz5{AhpChEtwDPtWzeVd>n zgVT7h-V1hlp$TSP_y6xv=RH#?NT47?*2qP)H98d{pRjE$>|!(6nzNr#yWEhx93I1) zZx0HH@Ixl2e_$4&F@D@VL&`%fxS?mOc^rH%@scj?t;Ae438%sEd!0#sZyF-2y%Rif z@x|2YbpllunjnWZl3W5}v5Azm!}#kslc!>&NO3i*f!F1aXV$F4Nqbgd(Dgnfm)dJ( zrVzzuh}EYdr9q_{cKdt#fUPIGZJ~@6OyFgoIgMlqW&=(*7|H++F|g^y%n2Ek{TBN( zx(G`hsvVi6djbvy#>0ot+(cgptE09Q#!wuqrU_Dur4-+=J>EjKLs4R)1(g@V%$I_y zjP*`vdbuG@Wz5EEWinT6sLV|;&%GGB7yzD7#>j>|_{gU4{e&BWqE$^RRah_JX&}U!G1f00-VcVDN+a&3W8gmql642k zx}zY2yYOR&1j)sm3U6Txh>gdSrS2UvIoJJeBng>P>@b-WJ6wt#A;s1}ICY{S(yTgl z=drWV8$VJRUetS~<{C^*WC}>bjP9KY`6|zURLC0;b4cEc1egmFoEy-fqX~%9HNGQf zJk6_Q6T&dRQRrt@6;0T|95(G+D+9R+&N1@JGsfzU3XMmoo_Sv`nJ^XLe|ZJ6JL)LS zY(KJRTs0GA7NogR2Zs(84OsG#oVz9~r0^%`F@@~|?@B1PC%5Tmu@(aVjRQjE@M2VB z$)Ffn(GC1z@Kt@EVR-PZQ!4Lk@8!(8@4s^vek-?uaRdOOF>HXG4KM)6_0KH1ebUaE1sdVp4jd`)h6zWin_GXPJl`LyOVIv=)2l;oXdiglSTV7y3l-fXOePF7MeFMkI68+e_yFp3wKt%rc`(y`stz6s3m!3N%SHy0&nL;}Gw@IfPk+pq zd^y||UFw0%eH(N|X0!WxHi-3c#y1?dE!P8jx2ZCPG_a(;P8!&z5rmF;<2n2>qXCq? zvT!*hfOgV_VlOwL$oKYWz{Gjf>%`y4WS{dIpiYye#_t#_>_uTI=)~uIo%5<4<<6ha zvs&DfwJMbgTV!gno}pJLpmF_Q6xo3JbG2raRG2Fo`H;<#f4NN0j-o$0GrcihoKN4! zl2WI*f>Q?72)ULEEZ^k1P2R!Y~`dyl}OG%+ynHWpyLowZW9&^iGIJ;Bw z6#h@woUxTKw$v!(ou|5(n|MvI%*XXv+WFPdaIN|SR3A+xuWtiYZnr2J({5=)x;P%Sb|ct~ zf$tGZ$TasI!dwaaC)xU$(`lDNF6uMLEHh$(&6pesEZn;~8I zxCCL=`g~3=Y54^&<4RfBT-jotzA4VFVZb54Qziv?QF@*Y&^Tp8KYfb3f<4+qKiz`* z7RQn9a0jq{!+&puEmAcc4;;up)!$V!J2@Pgu05j4NqhubN47yY;+nMpJI~$q+!8y7 zPl(cHK9Ng>eWb#^Kw_40R?klm;C$JhV$TiY(_!NpVE79Ph~I|Mz`7&s^TP_r5pJJ$?F6QXqq}n`^1&I=h3jtIyW7&dUd* z*4&#+__sgn0_5K^3tAWe00SUDY<3LX@JP9+^bwW5;N-LcFrf-B3n2Uc;2iu!eO?h1 zW>$fVj?XB<#SxOH7*`D{Rv)fFXC-neW{BSF6(mcN_APmPFn1?gUjlU2Jb|PPXC!%q z_m#w}3F6g6@>_Bmb*YAt|585xBWIQ(ZjEgELyEl*aRtEP%V;K1^DoKlsqkPb`eEvu zt?RA#NlDRw9Iv#LPt-?0gP04bC)?BFA$D1GW-h(VOpA(R?@U8bS#y?Obl`qB^? za9*5$J)xQ10M;K}Zt1l7Axw1+!94Yfo+7h@ONRcsI-QO#LzjZp$M7bsaxQo8^jbc1 zvgg)g?2oon(&g!R+(H*uqV0|Am<}(S3otS4gd3`;hxL3pYR$2QIEhkv-;y3zx23*lk3Al2)K6&EF{@D>YeI> znW$Noh*Y(0AY4hg7sH(JfjNbowF1w;^$h%eFAbsI4Os$US^p3kpfUSw&+%9-mm@+PxMI-XaUOFTN=c^<`l2a#w_0WD1cL(;=%V0=1%VW+jq z)HVwJM*2`IpJ0gqdUHhcxf&Xo$*gJ5Jbf_!LpL+(+~zH%Y0u)~%`LLt2a7VYZ@8){ z+cyK{f!C@TNOVLC#hJcB+5ARN*a@{$a6KLfmqrq(CEx19y4j368_e;yqOY@*WyLBe zEF8s!ku9ah&cVgYb(9Y?1|fSzRuAr>E@h7rox@;U26Xz4PggxX3Kva1C~wm>Ea|Yv zeCS*LeG;iACk|QzPlVq;*g&Q)58{#QlCB0t*iSe)O55_-k67e})OLG0i%`97obbs8 zPzjj9+gaHXv?TaN&R$a8a-iKd>+o=VpIP{*-O{L+bFpJzQQdhL!G4W84OGG?et}({Ha>cx@KXj4roKXzl*l8E3Ae2DeE? zW$Z7m6RhKP_f4~`2PQJPkgv9K0F|wh)sCrx6%k{=$BJCq3j1X#bFCW6txMS zRW`*DBLyHxYUB#s231bN*u<(|V4TuZm?A8M!*3G=#apT`_PB^Wu9Dc}CiXzA^nmHH z(Q~O&;{@!g<~E0sS?%~YuNwEkd<-P4NR!Og5;-ihJ$;s8e`(0%H)TPA+EQLBeO=tAMJ(~vLO=j%yYh-=p| z-r=Xug5&i3iMVdHs7znMe`M1JKDi~zX*v{(UdXjn(w&d|is@%@1{^2bDPwTw(u?Is zeLvqps;RfOtD#}{BfmJ9=u(t`2L_`?*|i0y+r!vB7O z;SjW-#D5TmBF{;UYv&Ht_>_nIl_XwhU>tXM7P2;hVrr-@!_iD@%8F;SQ}uxzoQ`=_ z!fVe%?82jf@DU6;b7!3c2_f~xk?`m#?tO}qu~iCxZpL-!XXsXttk@kt56ZssHxR1U zU(Vr8WxXZPMhFDo!bE?h$a}z1RQknC#-U}gGM@*uS-sBSZ3V{iuNIBXyQG1)H56nGuCtzwGQWKOsLnb3C!&_jv=onhwwNw;S;0+)-BKC z+F{5}?sh;Sdt_|4{Rghyf9o$74^N_4Y)Tb3KG~V&We)<$JR=(KmFjuALuSZG+@$S+ zp9csU4ll)x&Fe1p;BVvCAGxJ=;LV%Z?=V9ryH}zfsAO~i>>qL}`4{1>$WnWOGQ~Cway1$Uu3O9so7mVa08c5K^pRb$J2gN z4N}kByzo(dZ(D0DLQ_o-el>L{pZJkub>xb&zYax9lbGNr_PB+#=V>ntfo3qmsw~5; z!=`=cL{}9g6Ju`Sg$vZ`w#4AX3$fsnUwdeg&O3+y!DINA_7Z9Co`yPjR;9=qFS4pA z@*O0gvRP}$azP!ktG%I_1Dl<5z{^2fYT>m>j(`Qbz>gNCFpUFmTW0x~x;l-+r)-*% zYUn=HW;z;-5yz?fCDF+O0^<3N5YT=Mjn9Rf+j{wAdeas)TfJr?G~f$ZcnGzcT>1p7 zr(ob7EO_9j-eNYN)83PwLElF$b-=ZUp$gVV z$<%UMOWcj}y#bARW$_ZI1;OqK!)M!xq%=$m9Bn`@y4)5EPBwB6Wu#(p%063R6`rU> zSD-1F4%bn@Fbl>sLC(S9Z;)z3S_6B~hWkqPPz7E339}rMJWqnrezbHSr50yU>Z%%m z5dXMp+-hJT+R+>3Y=6hj1@$}iFleoo*1Iu8@>;6+$a^p7bS<*_UZboBjF!d7e9@3q z^>CG0B@3st3ryg=J3?c7oyDdMwHpW?U#2sDF8H}pR?2yNZ%74B5y>-{w4FJU75oA8 z{D5LDr&Dq|pQFj29&!UZfl=F#%-cWWo0!8rSq_!h{~|J^wat-5QONX`D3zQ=5&n#@ zr9MB5)Kq&Hsm1J3NG*H)g;eGK0jaD0SA{6A(u(qG=qUTMnO}s@aJ+~!nTL5wSO%F2 zl)ZNt(whieR-LcTD%1Ybv6F%D&C za6~9o5F@l0#sJzecMhD=_CsaRU&tMRClSl}P)X>!oIiGY4a90pT0FF;3{KH)9G6NVPr)Oc+@r1==U_i7^`fkV*1`Xm@lnUNmS!&P%Q2Vn82=6k^BS zL>IQKr;?=;all%Qj>Sh@CeDHcFplD2J0^!S`q_9^VIBjpow0X1nws6931+fna-GbM zOb;BxTgRL6cph*y6W0L`j$!?{9KjE&Yc9tq+H*M`EUCt?2EPdu9I+Ak^3UDiU@}Fs z+Tq65pOGI2qm8K2ZB0E%f;Zd0sFPJxU*rSB_XBG~HJ`;!&dg4h;)zXjrc{%9JVw87Cs3CDP~3VZ z^^u8h%P9Ed8r+3ijKs@~sR(b%sD1TrO7eEVNI3R9Es5d-IG{#C@_8amoCp^uBJfF% zi#e#@uWU1N+h3$G+ab8cIlr&!rTj!F&p1{F; zj~H{uLk$=U$$-A}u@gYLR4wPr>&A(uyYy+;aV6^Yd=rK=Wz`W`-C@e>5(|95tF$48 zSRb%E_(&P9qCeyJ1wKf4!=|`~0u*JZC*ay{_bN0Vu0ibL(UO>y`FNHw(FUn9MuHuY zj-L#v>k4x`vJTtN?a_{3$WklE<8vj^73;9~NOl%)`j}DnI0CC*w!bsAwqT^)uFO(0 zf}8^eFrw6mEH-xJ3H6)}H45-<7S7`=>(43V#?XfuHm?FJRecBH=&%A@k~;z3Sl;2| z$mPmpNsR0!Ms_EU?Hv$~vIw?N##nnJMxmO>-~fDb3e@l|ijg^Rdkh%So`HRF?N!So zn#&J$;h{a&m{#6(`xUblsVKUyMBTn?ojuVvKi-8?yYR*sd+lwM@N z7OY`?=nN(fK%PW+w7t*g-Rnn`JC;eFZrz(>iCKJJkJQn0flL&hCC6eWPrO$@LdM1| zsr|kk*bH`ge7r|FX|PBve^#>wk#k=J6YdZFN`KF%5C#|dv<5tA+M9Zu2L=F(%Pm+f z3GqIt9Sq-o7VoqG#1=rW6k>%le zJZk1EP_^9=YWip_vYOpLja1_jEIFX`gToR|X!nMv72@W6adUyVxey@U=d)Z??b8!g ze^Qjs5@b(r8O#kBGnjX~%lvSFqNO-i_H%v1xd92D2*Ri^qLPjm@iALx>Ui@C9%rm$ zch_H(DBJmJdo-qBo5`4inyY#^=WWmY;udrU0M}VZKk^EcuVifq&DtIMBB@FwRg0t= zWFOLw=})VTcet$8<{7wAA6?AA%I(q}NnEKESH{!Wh;FhJYE#AB{NDY}V@@r555#p) z)NEPZ3<~=`7Na^SjncQpfDCC$IlF?;RlRVscmD*29jZpHYx;wq1kQA3AKvj}qpV@eYPIXquY*nVzADn?NoB#}Uyds5uO5ZD30GyLu=E zJYw?60F4iW{FpOHn%EHN*n4^BbwM>rNbpM#ITXCYMv zJ~aY^Mjz2IFv!o&ax21LZ|6QXqJl_slrwoirrmz|hS#)NVc1LrtP}yOV4xJRS_G^i zj{~~pa_O$DZUVV(-zXD{V#sf}4hc!)qIs49fHC9&+IbDifCI;IMt;CI3;@!tf$b zoI_1R=)*ZQ6%OFAnO>HO3QMx}V6KY2!xj$O0+&`XAC5}-U|(Ejd|PW~B8gUWq004P z7GPJ(c{#rJ{0CXrW7d!+gsG5-(MQq9%DFh4F686BvWgq#n88M99;t^V@!D9tt`B)i zNA^tMoQE2A#!=v{704BR%UWs;X4om}H-H&})p^Xd4D3M;u{j`FOt*jH9UE*s4SAc7 z^+RggZ4XkPjeHn(`yL96DxmvFnH>f1W5bSU*nUJ0Md-|(a4=`~neqY`$m$jX6}<*@ z4cjRDm9Kp`5 zEs5!{lpB=OKLSU*{qr=wiPOiD#lI1!W&Nq|;4Y}JU5A&b-^>&o^#}U!yU?f}IY0gv zHqb4}Q#ljxz~@FD_oD81K60$ejVW&IDKvjih=Qu0OvWpx=nhgOoc(z~{mYUf<;;Sd zxBv!q?8C`tB!0h9==WZDT3kt92lQ}JFNq4K@af;yj~8F}`2Z4R-PIPIQXRP|Sqk%3 z8P zpfPy|PDc5L5mXZf=}Z0bq*=Bb@BL3DA#dz{@O!~b=yMF2)$6FHCLIm+F=N_7@{g)T$MM_htOh5N32WjIy(RgR|mKPs4Rl`*b+H3b-*w zG^3jf@v)q{pK#r}C6kvHDLhE7A#jIPeVg2q%i&|QMxxOJKH{-9fSB}>DEwYB#AmY6 zqsgl2Q#8?GUltsm3GMDiV5Y(TxoJisa+YHWz?W-iRz zvMK^mQlD%J8{?73>J;eOzS}@yfy2-Kkjcy63^3Wd!MX=3|zNXLi2;thC>?1v&80sLn>`$?iG zP(gvsn6Cw^H)`c@6TNG_$^{5gKlpY?0iPBhF(ChtQe<(s*PME9=QGi6=UIKT4lMAF zyEGQ}4jI1sLKUKyVh}}PdKJJKi+=zMD*j1bKe9Q1(iuM&sC44M!~p*|PueOcxuLuv zX(#N$3i4={g<4|!wL}_UP=(ZD^<1RdwWHuqc9w3u^y*{&6lAJWn>&FDrXjh-uxc6pi@W9QLq!NfDujbG3Tz7 zck8>XC-puOha6@zc|7e_e=~%ZlBp3?YTO=ol8I~gD9S}Aj*oFD$5gDwTC|UusxOQK z5dQ&&D-|7?A7VSC1T31C4i`{IZ|EFDMgOeaGJ5#effM^*`aYTNU(JPJJNNf|H+Om8xwno>&DM-ynuVx9C^$BOZNQzwtc)|fAk?Cj)q)tO8L9~aX zW<0C^@5!RV2k$^7Rm7f>Y02)5PNbG{5n5-!EfO!Ifcd@`NVRPgV-cD3n0=Cg|Z!R=$F;e#vz+|50QCMFn62J#~9%byhDpQfu zIZy|^hf>PQK$h{Fwc@c?Er!918AUzitus(QL#83So_x5*DGxDA(3Dag`{7o57Erux z9hSVqOVF|hvK9PwbDvF=V?oX2w+5w@?Sg=dKVMF-qC+&M{ zU5C^cp+k>2&NZwl6;{Ly;cnHG9m8lqUL=p9wGA&Sr{3`h&$~+WTupfhnNE`7dFrU+ zyW5}N#4Yf8(Ut$1UbxBs92b&Ybb8_^qtFQxQD>_Z>hOWN<2IlA7|Rs~%oJrxcC6hs zaOH!x4n!UwqTF*{I1;+UZ9HnasY5YU{l??Q-@Gq!IM`75U#w<2IuyS!>bM0_v!yAN z{RW2(w3$eC29w))8%Zs$G^6Md&v2q9cyE-<@+iI8EwpBQbQ8!XlA#FJ zAKVz{>W6rivk<;>^gO7b))RN5?}g%&b%PAZ=nu^Gh};SIls8dzls_&4JCf$pA$^hi zTI9YlG8MUR$+6@EcJ^=pfd?!(+z|0rYQ z#gllGTXmU+R2A?iQilrYIze8x63#_>y@9!jA0Bp#+<`RRJOKkSpfC;s<-uD^@Wk{o zA2YTY%z%x!UypSeBA;jACd!DZ@Y$1xQ{wzO+;`A7!6Cnlx=z;Tw;Nv}a!>Z7?r5w; zc@HPxS^n`Y*d3CI3sp>D#ImLhpQeG^Nz<-SUj&~J!6!xVDPs|Qn%thp%Ea|flr?xO zRuQ(;_brrHf26EC4IGdQ3gk3}*_&ewJ3XeX-R@F%aGZbeoH!l<-7rJW#Gp*2#*b83UzR z1GQ>K!mK+n8lp-2D%Z1Ak#_fY2`94iALcSKUJ7y#V1AQNv|O&x&|FggZbpudpPh=vguvN0JHefc=1CuTjP*?(++P2UwM9VBy& z6KWb|y&7dLhH#TK_reTB*38C;zIV5j97Een?J#EGR6`ePJ;*y*pI0;n9$7*u`R-YH zAX+%SQwgTRcj<0!Ze&>u|I3Y!#)w3ry7cBK8CA>d1D8u-NYz2Q9L^&(xQTIUfGSrf z(U4DkJ1&nww694OIuthd5MK3OMXkLb^Jb*6h|<=Ex}IY+NKOABi(?E9&7!Lm^ydRv z-2w`q_8hNT_WlY4%FWan!!9=N7aI>y)Db&0BGW^+|8s&{K*D8Ra}kd;-=3jFfy#`} zyOP#AWt?FNiY6k;Swy)&*P^BvZLk+)bA2fgEE$tx*&`U3540J8RB7mm10Nmc_Jz!w ziBl%&H?U%5w>QGyYhw&}n;x~OJOA@U80uI@F{0z}`X-d3lZAVVG3CGfB?uYJEOW`@ z4XMfo!UqyK8>9&b?cxj7H@8NE0EqU>XS?=SyEW${urcX44i6(~xB>#d&*wR5iU%{BFds;BC2GbkxPyom|YcQNx zMnHFki9K7V-@vG_Z_C(*XE1~qUu!6`;Us)$QYhtJTZvjtg#}(J*X9~G)dfJP=a1@Z zPWu4MAN(~D8a}@zKz=3pCXnrYa6f^|!qOPq^d2j=M6I<(T?;l*+zJOg3>&~213lJ~ zdG3D3T`j{HoW?E+M>?!!3-E)Kk7~d-)F<25cfr90RG9=e-JG*x&N=G4Y8|qbHS3Mk zezqB!78vM=>RcaCc$2pvtV%cIw*|kg6d%2YWszB%J7c-zdog90|MdxLTzJrQ$-syb zO5#xTbT?QPJ(e27XHS22wrdkQjeDSJe)X4nmaiH2z2eYibkP3?+5ZKeS3Pj08~IXp z7gJ2MO){S#o)7*7?b4%t3EJeS_Ya;VA3lL}=sw0GQtW^|kb37&9KTv0PkbgZcP~DE zSxeoH9Or|?{uGV$8-s87EFooq0uasVXiMN*Z7I8FACz?oR&%rBkFoUhSRR#ZiO18L zZG({7RqOCS=RzH7m9XXpvYfRi-_sp%@{O*WB&iI@^y3iZw1jE{W_;o)q^dYOxn5*b zXkFW4`DQ|YAbWg6l%z5$`piJitbvYkqS}7AD(wFb?ST>4OY8wa(GNZZydZcV= zCj|i_{s|RZa2%TqFyKv&;pjEn1^_#zGxQ5==!4KBEOCDn~q24oP4}xibvdMW2=w z_oWB&>{pY+;Eg=QMIVZh$=>{rMqnWTGilJ+o>4!2IHNOxe>AwV^KHBd_(1nP498Wg z+aPuA13BP~6Jo|mFd?sk3Hed%{v>vPri6c4#Bd?Ojxx?x^0$|bQ0Up#O$E$*!CNGx zJx^{#vvU$j!cAwxOiAR56yR72Y^_fda4|t*9n@cHeOChkYJT+WaLQ1oE zIKMT3Ge{kHq~bx$GAVVwi-qJ~O=C>f!(F#G0xR!A{qLXQ_Z*6s!?>Fv&PSzaS17vx zIT8KIcgrPy8a8#AWI?iCKdHoIHmb6?0(l-98>0u$r3tA%Xu_#clyv$U-W45LjL(>w zP_N3txEp_5xr})TMi2k3y?pW3DWg8ZGEi7D$L2}P9FDa2v9)-iHhe4z z%hL#)ymku1u^7`Rw#FTIVhR+szESk1-uUM7gOm}=%xue_^SN&Isc*Q^p26!LOb9b_JdcD5Sjl>c6Xxt!}M0BN!0y;uU1r|{|| zyvR#{k~tL43uwghw!Do4s6gEgFKo&$p|7?!Ke^rRvN~o&1op_ncifKQcbvjkv;p86 zc@`9;|DT^3nH`)y90kX&7Qn=7F5$el1Eb|Km$!Yw4AFqTr!gkZ4itCoD?e?m&r2!y z(n;hmaOKWhy-7f--rN$0qN@yI1`t$tKsL#qR6*_%JX02h;E2Z|^RQjSC$rtP<$eWvr|&}D#^Bq4TZ5^vzZWu_@8?h2 zJ2nPd4ZaQ{D}ZrX%P3R$WiV?%5eD-rQFXa3=^^H3FC9wSnB}^&Pr*^_anMo2n-n9v z(xVd$TrpNIP#3;4j$(IjK&EZh~K|BZJ}V)$mH!@eHHw71*@yJmP`k|=)-HjLEp zJ6T$u#B1N(=a9xuGR5R?x#LZlADKg!`>+{OGX)=tnhy2`BIFMdvffODY!D%}B4i_Z z+12A>t@?w@5I^E87UfvWh8ISwp zU`|t9mt=7?x@tP!kL%V7%~qysI2HzY>~>xZjva<=l7xDRP%kBS1aC5?0GnZwz6m*P z55d{%L(X$Mf->oUn9!C9j04k zu4&Gam~<7298oU#(AdmKxStCm+t~{xxh*-|JEbpN?*s|gyBG-PXlA2 z;*dH#e60{}-fR>UzOpA%{3HLaM=__$P}*hceN61|Z~hqLeg-`fB|K>;afm zFW@-X;;13HZD1TRW9(_9j=K?&HMKc;4Z)nt^uHn!!UC`X^hE6ia-Uj=n$(>m#IeAYJXq6FTg&y}@uc!{-m<3!Opj8iX7 zhWGp;9tYR&-ZJq=5ZPQE&A1((AgYe=_k~SdG{+1Tm02B;^z2EQ0g0KB9|T3uSwA)9 z=2%qo!j;T=@wf-Bo1?%7+#jOGEbnZff2t#bHP&#%?1x7cM}!WVw?onj*)>XjS1E7k zh5p+ZoFFy`-vG&PyM;=DWrXwmjNDk;kZ28=4>4ntIimEInr9yHnX?0=Fm zUsX9;VZDs})*oQc8-a1WlC9$zqxbpa3DV?l-%;bk-*I9D@KgU?;apSZ&;Z=H*1I4V zTIM!$9L6k z{T<|pv;PXDtp|O?myL_bCuk1x#A=m1YE~0;6jrj~=CCtE?yyqP|>+H-uQWk(f zO9-gtFO9p!EwxLJugKw zV~E%o+CXd!6B{vy_Y=`dv!q{Q`>-gcamJSG!_=(8*%V|GJkZEp@s-gX7U3AKoXz|@ zDF6b7hsTgpxsS0mm~3hG;4V%t2f(yVG|y=L?Ql>MYy?-{+)7hwwSN_IjL5QrMTO-3 zFV&3UJrTF;CU{4S(TM}cS({U*Oam^o%6kS*-X?H^sH$43TaNKPo?u1~TTtem-2gmQ zM_ywjYuXJ*C3c<%L8z%V=YgRBKIZ;y=ypGlblr#i24^4@2HgQA$}%n^r{ne!h=T;* zJzXr|Hrgrb0N#fM^I#|ZV}Nv68^&o=ZAy@iYG{sBGY63=>-J$fowGOMzTh5I)h3ep zEJhu3h6N(c>uQhw8q|{itwCs_qccV6*a?Z-$6#dhhC{p|8Qh@!e-=Q)1LwwzAhd5_ zB$ij*C=`$W#%NpGm?5~%YH5Si{QV}R>4E?9^gD*@6m)7%GVo9;n;3vFk#K4Ms#-2n z7{VAn57p)2fXTZIW(R}dnv2xWm2q^{h4FF>DTQy!!Q`gqRt|QJEpJfE=N74&b}3fzM@rVKt|L#|~j-+U-f=rUyyP{qgJu_rD=%gxlQ| z_^@g!u9+G@-=-GjOv7N>Yxe$^{s{_b{zM$>)H5RWtVlfvkE{$v13SYb^&4>d)D1J_ zkwUglK`GaTuKC02u3=ccGbpt92wEN1G)q=UE+=QgiF`XTqCG{f0?SwS`(nzzR)_a0 zzx{HlVPklp`UGV24Y^x5%f+ps;?^*6Yd8g`xk!4hRQmB4y5UjUiz$PI0$A?KPJJfx zuFO1hUA{mP^Z$Zqq5W0{p~?@ue%*tWz zk$XJ`$$5JnC8;6xT+$8>SI6!!1|si2Hi1!~ z&SogBF=C%4<2Qx;nzDvt2RBa@1hvaSyLt zSACJhf=o>J>vpI}?+uU<$11#V8u(0Zf{36YZ?Vo~>4+S6Vm&+*bx8o0Dw~A?)`I}( z#yPpH2(9mtfd(7w#BUe*_GUI6>q z>VMG##V3q|a}=snT}hN{(Q$Rti`=aG+aysN0%zx=_Qzu(J8lZ)9qG8DIo7;H?sINR zih2~7kN_{SBgi{>8)&75`|$e{$Ja_{K3NiuM4?&dtYLDVhZ@u0>R2r)k^Z=87kV7y zX?mGThEJ3^lids*$?bOa0Cqqe5hZr-iRa}JT_Cp7P*7`7!7{IN6kZgB zuMb;_-!cPATX^w5P*Lveif{PiAQ(6n#7HICUQz1i#eOGqEMlfOAWa^j<6dTW8jqU@ zgRV%s=d;PY_W>{?WsPr<&n$nOhJg5c!P4GS=q5V#m8G{&;B1f9Cm8mS{O&duCcJM|xO?huB-UB^IU^MDf zYwA+=0WEKV=nr4{tn>;iL>5 ze5|q%BhADzY^QTXll~Rw31&w5N{1?WOgW1TnQ4C_)n4^Nn)P5k7g>5A9r&X=6>v;! zsnJQYyE_Jvu|S3myCp|xRB|Y52j+5E-BIKlG@D9t@>$xFets=J)x0sE$2JohAoZO- zg6mtujF99NN0D0XE94<|`>Pl?-m8t}^)b|e2EM4s)s?L8^0AzpWRKei=U^1j6?on_ z!|CASg~4!rnXbn+-;IoAhI*Db@Oc2b=FUYKvm71Ju$RZ`gbVyemszC?IoxMy1-gg) zti_@G_dn=?e7a|x=mt!8&sj*>YKH=KAada2Izypv4SEBEb|DzUZ%hxv;d()pu#T|IMtmgzH z^_R0J$zTgR)Pq1!aa);Gi!Zy3+r#h4!K@i>wbxGKzy%L>X#oiSXvA=Ylleu>r6g$O zl|y1yZGys4uFprE#ZQ}Kby$|s z2+zkTk#MjcT3w>N3-N@dlDCPfARnG{Wm!C!p8Ndx`@Yu9ON&0`&o@DTKp{@%vyq*e zfVcoH0k^3f{Mp>919CaF(XrBf0(6{U{{uz%Nc5m_c#~<%xag40E0CI}9{aV6HHg@N z)@#^M*~yPjAkWE+z-cEl(V8{~sDmlR_>`hstEW-E-$uN1*j1wtT63Yb&=XoqQZ?)R ztFCV4&@l%fQ5Yh3**_F_k_Gj$eZwhr_jh=POm7hmaF;)Xu{||}oMGfSya(#DH@d6C zfO#OnEOgjAs-B6b&`t+&to>cl0vl|>KA^p&^%=);Ds@9~?^BEmG_j<@`)zO=xBVxN zM4Go6)w$n$BsUVz=89+Y$nz9VnmSie=SI2y%#30bwNF0 zFdTE4%1xkzc^hSQYbdP^N5J%QeuMFr@4|04Mg6Vf54G{zjq>#uQ8i2)nnOr1ub=%H% z0!M$*bPCt6Cqf5^(19X!kOR5xU5hisv+)aLPHxjcs^5UxI8@@MIR1ycnUNWF-NpEj z%{(To{PV5x2@QO#`0{L5PP&M-(TyzcF5-4OuLzUGfJzV#*^zwTSHn=iQO3mWp#Exb zGnG@Ovdb{MQ`JH{1dc?WjgmwmeA)%INJFmh(mP1|doM@-T{hFmJ-yIVvmI^m(0SJv znHXqJuAU=dE zYAC-2qL}*qIna)Sg>ndd)$i7gZS0Y&sKatObGvO^;t&NA3eBHK$YtPnM}9dC*A=o^ zPf6Qv5prqm%$aO=TMr8K{7P|t6$P%|h?xoA7KXP4&kiGXI>|(s;}8bh-jmj&L5((3 z)L4ce^UEpstDl@Cc@bW=^O%OkYpH(%*ET6y43}oePv1vHw}6s+lv zyh*KU(1u&9DD%4x+PyxAESkhRRx0%D27T%87pRj_V?68}yc>{tX!&U%7HWTIuG@7{ zxI)agV@lig-}c}inNr+^0F3dz-T3XHwx^O%&|-Zbq+T~-kcO5Fz!4{F8HryMb*pcT zXQh>q3Ijt{5uK@&#F@9^%sVPAGXeCpIXvr^8Yi^x$BsrjBQ8?ro)ipFzTtVS^4u4; z;6s#l>W`gnW_#oR(jxZT0sBl5XD?L}4nWhxF3rPyB-)vvii=apRta*AqoIVjLGl%7-Uulg7lq5x_IEr+$p$#vA{5h#(wO>n5=vV%RLJf3g>SP!`d|gQ+QlE$mAUp zCSzc2kAk6wp`YJcA>v{57XPP+-%rjnnxlZjcW0zwhnsVbsL9c&ZT?IAUXfj|=>G={ zu~En7au!c}US~cFUtwGlqVv&;Q^Dl1=P~3QQ6HJ(zi0=kUb>xBX3D99WB*4y?n9?6I7` z-~3S*yoziF`I>CfHcB7e85bYEQklU)w8(VmYp!~owShUy7XT{|CV*t#FF@*kW!&m~ zEfxJ_13uFO#WauNuhT1N-V8vr^sU7N`m&|5q3+exX@9-?hFcfrF)yYXWrfm9b) z!$!({yD;BDKBtZX-dK#o8wyH0jD2o;mXEa-vvGjpnf76NJ<;}|X!}S{&qA(O55bch zOBJH8XFWa9*NZ%RP67q5E@E#gZZFj+=-{*n%ph&q1_Omc2in@%1HG0^r{Xsa0>kCV z(`F&_Cmq`A#JCxLN)V&UttKGtjB%uwIf3`(-nfO_RNTA^rJfZkjJ3nEQ!?Rj8yD4Q)+xyT)f;&);kySSXVjo)={@8(N`G3`6E;fFH0ig9})4C9QPgto5@XGBo|vl z@C$`6w`nMx=0Q>4`{H8JC$b62WrQK)`9*B{E@phP^qOgnG_UL#qihCGXy7^rjK13f z8oXr#cpv3twd@-**hh3`HHQz# zM)N@qO-|S+i`>y7w~XA);@HnD`5y4WTbCES8UqvzrW{XER40F2%v(q?^LSwF(jcQp z6@9ZH!QX4oy zV{o^ju-rph^Y1{?C07c0?h5zuX*YO{lG~W$Ae+XElU3qmHRa?-qo#3=%m}crX)hrF z)GA8;?uk)M9hHPpbUapwffrpqKwi955_c+LR_6Kqyac17#Gen)_P@`=^yhaJx4QTh zsq@BnJlmd!KH{hrH_7+RHDpq*ps;6*%nwvj`)`iOH)yF6Q|=y2eD&PP-D@l+fFqbl`0Ddvs|hGGNE z5@PFaqM{w}BxKxxVaJ{cl0cX&(o`LjL`)s#xT+q?`uxkn5tru>PmVed-}JIWFdcUt z4p=V0f3Z1%{RrwtUCzGKw7qPQ*Y$XYB$kxJ-e}QwHb8A{4#|sr4!K;#0#%aFxff`6 zQosyk^-JYQQucZ#bzdl~m{}&>j#HWOb?7E1QI*yL$ca)f4W3{y*ZAX9f@5?>UAnXZ zy)Cscqh1|5v{m{qL=Z7CWZMo-*QL1gWlK$*D?Xk5V(939Qb;aV@$4p%G2 z#~C&=k;Vkr?;~Vl?iTVmm5j=~PCN5?a27vs`urZr8`>bEo(EY#?2Xw^Ok>pvwQ+!= zKkLG&?@yOAe&jUp`v2qU^xfJO^i=r}0*VSx?U~zlT zI=w+}eC2h}dzATWDDeP8)awta<<4^)6)7($1(h}1UG z!%Xu_^HqZ==#mI~M@jK#QOPYtaUAy;@2l(f0HIPI?ahHAykZ!mO<3FkInKPHq`$&I zbU;@9Wwq4Mh`j$egts|Om{zE`$Fxh;r%gybXX)tfU?=8I27SiZdd$StM#9&B>BHEs zXJSz^VXC50eSk2>6`d6Dw+_vnwk-2^TL>Ba+3(`)4{8sSCz8x((DFOq#7*w~o>aljb*uuXi@cw@-801oRE@C1wae?lk{F#KMrTrtMIw&Nz%aS!;H6hgs{Kc?cD$;2@dqBq$%^(7tvisbO}2{(r(*|^cf(0W9-}j*N7qaooA-AA5 z`eIkDwb->$?Aj!DZKjZA@pzql2fw=r2;U7oF#E+di-wDIsP3MjoYnhK&**;-LwMtI z@e|yKXvIiJ3KN4+a!@&bV`)qqMh$G!c|-WV*B!Z`P5S_wPpciwEvg>Z|380p+6f~8 z6M%p{d<$V7XzIws418zGVgwNs`1%O*QZ`c_x&$>P_fFx$-Sn>kSS8(Vfk&CjlgRxw zi`>FG=!@NpcoxZH3V{0C(d46d3|T@0*y1c}BgMaF(CIR%n`9s-w}$10qIRyRohNGN zLw#U@sD)mBV8snUAC>2EtUD*$NU1q08>&Pzl=nuUZ2$QJQ|8);tg3==tIXAD4>`34 zI~BB0zKHZvh)8b{iKqvzrvZ!&DY@7H4Jh4UF4K^ila9;P{C5o=r8Q$G zL~nMOVj1Zq$@bOb(JWQfd@#~XpW_sT8>eDP7+|^Eoc2@bNR;^IpD?%wGAU=mc+}DF z2_s)MQ+T)AMK#7KdNd4$s@q~pERVwSxI*{|>TygTz<78GFH476mAFoDY7pjfuJ=MV-3?ckY(9Sa#ypL~u(>qk&bv)()}ae2PXao7bz(#scRcGUgrb7b<5gfpDe6x=-! zLlTbo(9rt}p{y2MbJp)!T+KQ@6~YU7g%6v7KvL{usb3%7E1Ir*!EOudEyDVcTL+BU z!BgaYJ`U%mpA!>}{*SdNnCC}#IT$?>maYd?4Vby ztJ1F5GFD8}tnvDVo;y~q#c1cYPsfLCDvFTN{`fAWG5L0=e$8w0?=TfhDX_^&Xv_pB zAIHNm*nuZN9C)u2JZd+TprF?BJj}9Q18-VFqyD&n(&5L3A>*i#EoMsz2>g!U*yy8*sTCkz_63#-lM^C}ZP-Hy|%|LY$m z)xe)g49V^wT9MWrjh;^GYjEtq(>P-@D%vxLik5`qq-%EvNR>oA4o>4`Z*8IwO>B6p zMc?lU@SoWG1e~wd?IMfHEBKzZ?Rup4Vu2hiC#qZ;$|sd^LtZR-{vA<4>u)?m`O6w$ z2RD2}{rmGCi`Fn|ZvXdZ>}Js@m~knMZD$s-Y0IzSO?bs#$r;*>g~xC*Vnl}CkT6lE z-LInd$h#+yL(@6{2EG0>g#S$8KTG(}7XEXD|6FqH(NX8b%>lqxe3?&PIm}WF8VGDx z=3PL}*V-~(WUk)B-+ywS^E$MCDi^96gL>p7xN**n1|n6J!%?j15#UXUb~4dp9Qoaw zjK}eo-zi#yZPj2Qq9VSn6%f;NW6m4<@10-9# zpYjR>Zyx)Rd^)_w$B|4)dzrm;cRsai z4FR|89GU;aj31leKe#GQv%xW*!~|-aEl35nlIz2dG*v# zW{eQ<7Pp1P9bs{o{DxT}bJ`V#>n%4LVOLoCF-_{-styHBj3^$OHU?0Gy~MpE<$AL0&$dIz{pU0j5o4-(_<0K0C z`3bk-b31d}69T64zoHXfV7i!hIm0(jL2LP+_Yj6&X^VBpvwaFgJ=vu82*!LyG>XBN z8q*b6%8L!&9L@hen2 zPU(SEBaX^N-Y${1TjcE_*J9{2PR|$93n=>HO}x(B#z4}nZwNQXtfp8u_2!>{!$Y^d zC%|Y4MhHD3NWO*auYf2I88CR@YPB~**%JsD1Qz!0_jUYQ$_9f=_E=>}DK{wBS zz76l7I2Ycu$-TMA!?k4bfftaQ>o|qjUM{weH5S_|;7lSDo%DTPHx6Of&f~H$%$;Iy zZADJ?5C|Yev+p!EXP(r$F}XV1;42jS!s$dOb?*6wG32BPZlC= zp5F4mVe;^AfqRc$_0hz@4RN}?-8f0IgKAa6CQO}zMg)R7ki4H^=NR2YE~l+f%j@ky zL481D!vRLo@ZG4vyaS)%=5rWh)#QSlXK`_Oz(IU_2u$R+4C8^nn@r}(4gZIYDD|2% zdk&h6_WX}rDmP$9ggqZBrNHI=G(L|K5F`-#eJx^fZGFE8`1F`ovq0HbkmY7Io&^W8 z8bLu52|%+~tB$zNe3*cAsCnKuMrt0NiNz=5bY+KlV^KAkv*UNl(Y>f z%y9%)SzJ?%AsK(MHMb4-H47-Gq^Mxu~q`+uFZup zft+0DUBc#w-RF!9esJ}G?N^`4svY^1v@0NQ@XS5O9U2GYO<{Ne7G{jzByGG5{z&SEKR7N&)}0SB zdorEHM4@#&543uF8PA0J#Yi}85XyL=OrYF^EPN0l&qc@!{Ci1Go%oPx9e)?8&6&LaR&eT8 z-Z`1x%=}O$^Z@d#2Z3he9y;r4Q~=qC_X2h{;JfB3mapGvMuuQ<<~a{ed+Yw9$S16o zH7kooz2t4K835bv$mUQTo&yuKv(O*}yr#@tD zA@jDcbkHtL!K!v0a`4L~vvaJpp)vqwf=b)LGWlREI++q0iN{69pUHZV%}&S-utAjj z7IXjYJ178`RW}dwvIw+*U_<8Gk33YfQ6TooI;3q)?J;zXzEI`Kvq1B5YQTgypiV2` zH3^2>)z!_Ar(hxAz0_!+09E3oDV0R`V)*{5I|AkCM3opUPIs zI;4Ys2c9gs`%tmNPh41xhJl+aFBq_xyxL@<$vz+Fpgq2^j2HzJw#9roLHy(NilPcO z;KTFsDdF!t*t!B?`DlO#sHV*@J_JX8|37rSbzIch_dm|-HAC1z3k=LKGsFztoe~OC zq99@`c8jPe7It^8?b?MMYj>>cy2jeI#;&n;oy+%m#(n=DpMQQld|l`Dx?SgGVlvy_IH@%Un~wSA)mkWV6gd>2Xc$Q)iJr0i_XEzuvQNd zj)~%K`70Scko9;xAVkZBP(7nLYjwWvNd67`0y2l?amQQu1I?1HBB`WJFTARrd4lT_ zL_QV}GvC}QZf>K-LsOCM*m`Q2n~M~hRwogH@&)tt#hkfG^ z<~c5hI)ZxgQJ6gGg8PtjKL5ZE-5)YZ(zevj8U6eJ{Ug^6I1f?TvfnV6DMvq|f{Qgt z9dupM9)r=mCX;dbVg#US#TX|jR5{)`hA*+_x1!S%!KI)01~S!IKL{PC=1e}Q7tZ4n z^{t1(Ju73|ft9tvb8LGT>yYeHu${quPP+u;-{(uFES@hH&sR{2^J2sfe$4Zwo43}) z(OeESZ8MQ_lMG4k6=I4crpRK70zP*%pmdw<0Psh7omL}<>e6zAhRc1ha#l75`Svga z{cvwjqn>fG2CubT(s*|oJgKe>XBp3EpO zh+kmWkfQE``d7n$3j(gi`q{D#ch4zx`|Yx=dkj)kTUhap4@=ohMQ zr$b;@uNCHXb2(5hn_U#Ljxmg+(cyr`Zt=GPwp4x7e@vT?aU*0PRpQQ0a5((YpW0ya z)!so-Th3x@6+kVq0BVWBHoTrt(3HyDUa;Mu}03|DK!+IHX*(_JTH zd=1I%F!N4g3RG#LZm{IK*dC7qb+qXMcaol~Y>_n4_E*5!#7pT|q#0dVQulfeMcrG* zsc&PTQg7hXZ|A5GHfu44D~4H!lush%vsnCOId zO41izb?R}2&!FU#^B1m&tdqr9YcbY_QfKy;f}qZB4`Qz=`K-SuizoXq#ITOzKtaoS z!b7@3E(dj(wG{b@IRcsOD0%iOzEI-lc}5Z+FF;A0CAh=;P|{V_qADiq-ApeT&isOb zi*Lpfs)c`0_pvXT)@d{sQR>8b&xlF^zUe4z-Ed&%?I^d17%L$Cx>~^fI9^M z<6ap|w~YYJiJMdUQUJ9cPPj00v52c}7Kt|5_M*;>{s8RLUJd4}nPGKLqZ~ssigP#O z$Fzpjp*sui9fL`2UxD4IKvwrl5Qs<^AmjQG5+qr{k<6EN+kutsvY-3sQ_ZZSg4*uL zS*sN_TeJeNwu;RNol*vI3f)6o>&t#EvfqHLI>0A))EPA@Eb2q*<^vdyi*EV?Uo|-) zO3`p7i`)$NVFhB%28wnL#?ayt+Gy%Bi4PKEs~SpixR*E#)+6~I_s8@!g`fpzS@kwF z!0aIvPcr#!=$K?7q6UemQV}(ny)9&1-HhRUa}BVx>m4ghLQ2?MbmYtAkT-<^CKokDRw@f@CGVIWAzpbF~%Mdm6C=cf1j#w1P48SEEuiQ;u+-jWjGK> zVX=fYBA}-qfzRdv)c17^8rFLIJ(TW1y_PZEZ+ox{LeE z`XM5FZ-# z0R9{BiZw+WtfZ7fEx}>1*=3Gd#7>zw2PUTvIens!sq$hs^|*WN3}NB=)Yqo$BvH?a^?y^cfMAUBo4v#Opmk4in@B&JNd z_hCTx@-CwAiCs4!f&0=>$(`KK-B$2zy^J+ZsOn85ZnPW%l$sdVhs)^h$f!Jas`sM* zPc@cD8g>DdY$YzaSrQa3Y-=&SXB)z&x%+Y6kR3M%U^RI6I)K4%{|H-1cGyUbmajyV zW<>;Fd^C)8REYWgxvRe&m!VqF;T>;Bm;17%X`$hF>em%mmp69d*^SeA{{Zwb>S7Bt zv*v z%;2^_8Pxx>*;)_;nzC_>B#d4gr0@~SX(eRHo^LLu-854=i)nvSaIf=n+cN6$dJxKY zPacQk&=EVz5D#cQSwnu!w@czn8TofLoyoO!$w+3@smw*yaZz=`5sSvRH|%Y`%7+7v zd5Ej%1No^mn+#3A;D+uQB<@(v4G~A%!J5<+EK2x%D0{3>DPkzc>i`yo#`_;IGnX*p z96lii0}${lMc-=)DO&$>^r-)E3remy3fe1Am5&PCUyH9H ze_<{%pPWq1ww9O{g~t?_JnQf$g#Cbe)`v3zlA z6`x-tjNQ@-z+0NIpHi$`e$-PqU?gw7Db)7PN8Gm_cG?E%{3p90vjt2#-2YRmzCwk# z%?S>#8y1l4UQC8MRgxG}Otw)!nY!b=WG6DImlT;>FqTfP)_V{d7T`>jEXAU7Sn~t# z4)#%=jbl4P#!WayFC7w>ej(#koS(m+g+omyY(x5P1?sK2eh`)ECS9&$CX%|<5J}z5 zYT`;RUV30rMW4h^&>IJ-wAV-EspxVKz`**U3G%BQ8~jHZ`?a6J2TF#Mi8H9Wp9)z% z@Yq4}1$4ouAE|fn3FZGYZqG|rP&cqrQSiYIvc{E4mwm^A*VxQaT3XhygiDFPk!1M{ zJTob6#Z8RMol6k<6rygoNy%*6BEYT$FX0=SOL~gc^DL$-Q;_cdaEQeG6?_Ll(`Tu9 zoUqR08|YqV?<#AE0h2Kx4qMBR+PAYUYRvy<6MpwlGg;7RIum)?X=@M~2fsvY(*SF* z|Fx}QWX+|SlDbFT$37cB^AXIu;o6Vu6HdPOg>2P{bf;FE^B^cGc)}C3Lj8r3C&wb* zdw>pMC)?==Rk^Tl3DeXpLR5DN!l*|zoP}NAtbGRr9VmJcu0}$%ypKkE!TO&PH;0xk z{IOtEZFXAJ2R{Rw!ZQX|sJaJ>?jaCN#Q!()na`L@<6+YTio3rKr;HcZFh5-mFpI9y zwx&BScn4ERy_#0D%8vYT}fp{ny23$sL1Poi%z9@Dtx1cYN2 z)x){rT5B#AiC2yR+cayc>DJza3n%f(I3f*2iPIa!=}nX{?hj1f%5prz$!YXJWY^t1 zj8vK`KL!`>uVx~@ag;wak2;x&Go8t1;g20^^Lr7r{jsR;zOe$T4#^7EzRT0i@YKiT zCcqp2K^0JK{0sE~i|;aoPryV6}B)+W5lT? z^YUqajZc>moh*QFG|gHDbkdLm>o3zmJw%s%MZXAlLr_hK?QgU z;mz1vuA!usf41Nf)}68h`iSi-(h4c^r%HV5STPNucGb`3=FUR<82ibydb})pr;6Tb z~qiOdzq{d&(Bf79LAu6jy6PClK%m%c7?gLjG1^Hxf3j3nQ#fUGqXE*>6s(38S9O^ zcVTAua0sk=k!^BI{Pu&XQ51C56CG;~btF&RcYlWA95RFA6GniB82gIhii_C^o`GL| zl)`p3Lq+{Xg~?BF#ALY!6P4Dcy%EHOl6sRWVf-x7-@~Km?anQ@e!we^4eekE_+w7Ua+PA$U?_GSK*xO`4=U=e}F9} zQ%-0piYPxb7Ro2uk}FE#ZY`ulur3lD1JU~B3MwuMLkd;lTNA4=WLq}g#*FJK3-bZK zWK-OlW$HivNacAS6NOc{Z>=rAMcPlsT#&xK^uYUpO%e6TlAvwJ0U^?x}+O( zlz~~yr*iD7kwdLWZ4qFyM}-EvmmU4#n?xMKagq2Y5d)W%vJE_Khf_TI_DyZLU#^vJ zST!Z|JS?JHQsUrla#xr^iKBj38iNVo1in2+J$tH&CE@||?4T#I55LF9qEqX@YOj9{ zTT9ntE-;*!G5|==768Z{yYm_=JzXqS-=h|v+TbNLcs^>@^%)8^SExn>U*w*+!`o8o z99V5e|56hsB3a3EUf(eq=H-=+C)+u^7~{kqMJ?Fe34tHXsELSK=tUEoc9w>dYxm{m zzR>5vGLA2j6Pfno1?%5!2|DZl)E)!i08^5wxEQSel`+2HmFy>=8SL-j2HrW!RWs2h z;4QWFKA`)a_MKQ3+stkuk~+S4gwVrb43APl)B`M?S{un|TMv#Ow>1#k8j5Y!6xjZ( zY?eV0OM!w?EGYQn=S&sbDkKM!QV(CsS-| zhQ0Dmhep}B@iIh0mrLvaI~aWJgxNQaZ%Fk&6_yAtyV*M|oJOUfQlo=n8 zu;j8LoqmP-O#X^=w zZ`4uAr}C|>M>>`EwRnAf>+7_ZJ#Dk1x&qQ;{5Hof3L?N zj0pS2^By^X;`i~YT&kv&E}_^BenF6rd}>OeQ~w4$>;2jvgJHAa!;cwv{>t>B+m1>_ z5*iw0-vDo2hkgTruZvtMiJ*4WG`9@~R{Hx1RsKF1A||4q-FOWTKVBgDk$piP3Jr8( z*=0lc!??~Y<<|dD>V03NN$KT5(9ZBR$%qXcN8z8?471xh=y^$= zzzD`0zVF+@iym|A%RNY z2}=Wv-ZWSV#2+HG20&d`T!PBRy!R@>DK&+u7DI7ANz6P!0ng!O8Q|LW5gc8i1xYV& zB32W4!(24Di~itf+L$Kca@L8`+9K19`zX8CGZUF=Nn~os!}F3Xii2U-qhLE)(zOmA z0L{IFFg{D|Dc78lX}5!ySQFl#AJt6liPNDuUk%+ba6WXTr zzmlQ-0VT+yS;xez<1lb_9}9N0KW?BaF}k%Al=ayriY9Xk3eK@lJ>)$Y$yx*X{K6l+6`%^(J^^dyY)_;NE9Bce#zEBhTWf4m&8-Q5 z-_TQZ{us|&tVAN^=#C@*gsDxPJA#ECq62uPv6`4WczrGX({`*3_>!y z@uPUmwBv$#HWG4w#kaK0y;1C4PjdSA8eX-<@d~!G+Gg(^=E118B?J94-tDavf7pvZ z9L&TYjuiU3F|v3+rS>*F6D}vy{tq5Ce((Z(Qzzq26c+zg0{J5?g?{VOyX3H+$pVkh zCJVqN-#y5O#=)wEc>X6Dd)HN(d5Pn%#PQcu)SSV9%Vnsd;eSV5u>+Vn!yL+>v*fv( zB@7`Oc!h+2_>PYu!zl0F6acC|pZnos%xxCaSCo+F=EpeM?MU6*5>9V^A#DIG68VwC zG%J7~LlX$irj7v-eF)kK{~i$10`c!bir7^HK&<4S92C?&`5nNW`&bH^-w04LI&3~Z zX8i+;urMk!L>Gxt@_JWdk-4{YMoj4H0Z{QA8`~GFqA}bQd+|`KNA|%i#1H%iK3~cS zZh7mFwg|0DP0{XF+gSH5Y%yfVxY)Im7jDekDwLVfTgQ_;_A+mBRm3He>kt%}nLh$; z>1qCic{l?gxWKmxLq8zQy3vb~FW~5O^uGRMa{1D{0k3SVO{@T@hVl#8VK*h=xD!To z+aOu@Rg{o%6%B0Fp0{;nVLNOetuxY+A!w^28ZPf{P(ojDlB5-H0A%z<$n;c4{miYo zRmBjkWur{Z0sv-*YZUS~&Iie3Bpf(yLcI0wOm@4x)7F)EB29mFE%?ToiRv*%vy2bg zc7cqq#?7CPT4urWRZ(YV%yhs_ZuGM?J5#ftoL+YP@#?_$)}>?T6n3d+wIppvm)uae0TCbs3JLHWKmT?y=am^nD%bM1f=HqGa)IPiWcR=7_G3LbVDnbf~f z-<9?7#XAf#l2b_F)9807?S2H5=+cdk+1rlPCXc(;P2CP*C)e#r-RKLA^jXjIVLiiy zox1<_!nAV@dxp#6rwV|skd`Pudma@U(vVHnvsNwO+NQDNY^t$K`8O{+_hS$XDrnTm z02CbjoQf7L$1-sFy$b0WJ;$y0%{dC3xzZHe0=bD%2$}Q=*YINImPlxHolP~wmeoqJ zWsTUf7Fy;%LtwXM9hhM0Fmh8C7J(X4`~D?+!nSZ@xCEtEwSLFY4!SZ4dQToBreHln z4?PmcO!r1))Ry7`;CN9rK~zm7+cG}vlCJ)Vj_f>7Sq0^imP&Rl!pGP&-@!;7mn}MSMsJIm+m0Sbq*f^e&$OR z;sZSUQAE;81#ns^YC5HUW=`IXmDKBCA=0?PjTuVR95Lb|X5%S5;3?hsw96ask8sHR z7ogSLj#h(p@QA#?MYO<0vYVK9hxwK;dr^)w8Q07*gbg-PzN3^2!O5sIo4d)!Cl z`ZLhrVh_84#Y)Y4NsB2HgqdgaeBY)2i`#6dB_)oAl;pq ziDwm_)p*w6S&QdqJnQhRrw+||{%!4l=KOYhm}v0VWHD=E1)r81J5%w6+fccm0cZ5* ztazs}6ohKXb8}dc#G*1>^iY~vixq3Za8Bus;ga53(xerzIDngs;i;@u9^u-N2U`Q= zVcrsewAIv2?}CanhZ!Kp#CkG}O&Ehk4Yq1$%3?)ZFe<*-B34%mDltL=pGbGqP9ZYJ zASUUMrCeQ!6LS{iFA6=`&D0{L_ShGM`g((lQMh zPhN&ni-(b^?dUasp<%rz;F(DIM~?DF>PJHdj=(zc@NnQ(G#aO6K(8xzVTbM^ElzVI zb=@eww>!#P^om@1p2n>B&tWlblsP>3NSQBOC{G*!TU5~(m}O5UuhhHV)DU$6*=m|; z!3L&mi;t|urVJj3HYi2s z(d_^WbLaEIsQyNt?o|q>5!|2Y5cNZcFG;#@o!q_x!9Hyr8-# zf(szKkAa091z#+6@ngwV zO7y-B3cTM7h8K4KPDZHBGcvW|`Rhr%3|-04D|YBJgxQZHf%E4-#^Dc~W9vwTNMC`r zcyCR|Ic+erQHoKQ#He4zsLKs0@XR>bESF+Zm!q1pQP752z(8*~oW3p2rR*9!N@b19 zp-`ALHXI0u&3MKF9mA>+y1vdpsIJxQhddnPgwdj=gUm6PcJKHkC^_!T7$d36zv|o+erI;onD63I!})sS0eI;samt zZvU21_a==hxs(F$W7t5oCV`hcs}(L4nw#Txr%gR1FbKdpu}KI2=)eUeS2#oJ%I*Lv ztScoSvOX~K2h$|^_Z^5mc!vsKn{GR#EgFvDkIP|B(hN^(n%aP?DGX*ld*9#wKsc_! zSHQhS4GZzxuW}PoCp{R8)VpG+qwg1d>>LAbhrEw8R(z4w*s71hOe+qLrotAV5ZiO6 z2KC!aHr19@RLI49?2#nV*^fLoGyuh6Me!l;%^Ox9!M-4`1?Dgajq7?=nW&@vW=brN z#g7d=DD}2c#C&LCBvwak`8Nu+QT4qF-spY0b&2 zAx@dz2jLd!20p6?Lt(*&@;mTU7QZ_SzKXqnGyD$hdjg?-pDfBY%~=a{Q^95X+UF2hY|@^#0jim9M@;QTm3-%&|ob0?Df+56V7W4}C3I=z}CNC%!?K#OM_Pm6(@e z=PQ)#pKw72`y(jeFye#SS0jx6rwmi?I`=6+Qy?W$WT&!%A<_A}F5q;FH3NlZ7~i*+J*GaL=rk~JCpH8HWt z9L##*w`LD-kk&ITl!jn~kz)FOf+R#5+JQ>OJ;V+vI=>u{ucGD{w8H-LB_vhXOkoWZ z7kFF()WF09MzL@u{}7Yzg~7YvzFXTD8Z2g5?XgY^(6~`=Dft|ByL50O9_Yvn{2gDP z?V=uIt|E_T=ph9fOpRZ+XHe%^uuH~Bd5+#MiH0x8_*oBmIFucZ1Vi`RZNYrx&|ddd z2=8Bn_hCT4Dm#1$*uE7-)}Kh7-p>NS&D~#HHiukllIhqo=K5mv{5v*8!tm$J)DHd# zi=8;YrD*K<=vWFq1v7;bSPXEXSdS8-8L}+DM1EJxfZvDqVRW-o5Yx1iYIMh-#E0I) z8dyNJs^61M>XH8rx>h0IF+EXznQ7MicRXO1Zl58G^iLKPdU-7-CzA~+N^g5o%Ruh9 zI?kInHC%KpwB^Y$gvRiH5&IUSgaoLUCS;Q8Dta&LX!gOC;@Hwz$eS6vj*HS! zhxk&s4N#>-TC!PQM(ow~BN6KF1Smw&0a0`i-WoJrlw!yI1hM0R*zu4e>a<1zx8As9 z@V`IucYcCz-3B#c+b-XpaywkcIASXpF5rsxigH=37*0WR7x7NaS~^pKn;}%tdZpw> zs`Mj#f|%njRO4L0Tmho2*z7RmpJOJSmsM(V*vW*0+fgIrvY{W3$QJb|Gms~(^?X9; zQB+$g+B%B1jc^7fRD*vG9^4}pW-%h2FH}W+$3qlX!iu0X1Hts@_!wZk@t9T^fa5h_ zh*62-FZ-x1qQCWYA&);G*6Fg8+Mj_&h3qhg45=_bAf~*8=F*3LsL-{xwF$S08Pfn+ zhT+hPS)b0eHg35b(V0m*O|_9D?iBs!Ac0oWaN zw4^?jeD%AeD{gB;iW^9_txxcB*Hppaos8QUiC!ZaRVlFtJ55%#BHKF=T)eJj^I9UL zN`&kbA-hD#ZV|FagzOa|`v8GL_KT1M6fb%zWJu9n>X}e~&x})W&PsVPOotcsd?4FG zir584w!1>4+-De&iObx9_la_x*x*Lm-K|*~5H*pBwibS*n`RQ%dS7Xz5akJ?Jh3ME zy5Q2n-_0QQ<07?RV1M2>heyOO^%Oq%nhk`W_s3{*T<(fjHy8=Ss*F2>-WtPknSJji zpeld0$H$Ozfv~VoPaM8gr22V2uS*+qXJ@ne)Z-Uk%yH2%z~B<~e8)^XwB%#6d>e4Qp$;`bzTMut`L0LI7v_s33IJyn&s*r6BQJgDGFHqfIU>6fs< zdq<^$F!V_+Q;2(A8;X0~D6^RdN+@<_oyyu&@|lU5=*oN?a(+KwRhZ-Ac4V`|-e zgkwvvirP)Z1C4R0PyyR$HwvM{@IE|I?tb6!;vUBOxyH`mm*FUA&;XybqY_!Y&j0-b z1_J0$U8sf+>LCX8q_kTDIh|_#YyNMj$0QtFuHTr4`gJ*H7mudmzO0VT4aOPa`j}HI;Aj%?7AsP9tb#b85bL|zI9V! zdP+d|sV)U3A4g^wy()ZJ%vA@!WRAcIO8SNi!%E8Dv_zq>aHSE?KVq<5o=^QjE@H|( zW{pF^zH{Cq46>>LdM0)wvOsZcI_1u`0Wi=cw8#F}6deQn^w_(dnItfMxNZdi#*+n< z(l{J@dI%hNK*ec0AN0|B)=9JXJ&51#ZwDbXdgQ{7Qw0|I&XGW1s&7c5^&s-`v_uhi zBB=S6kARf0n+dD4i`qjmE&V3TDvEE`McCoc4vfFw#?hG0PF`d2Wssr;!iqKn_~aNQ%oc7GMH{^YS^U?wSqFL`=f-Yz+o7& z>{e8i1o{c~ezF+2y6=ZsLi{NyWPJlH-S~EokZRFna=YzZ7tlyKS+WqyDS+5QITi9? z%toWh<~XyM;NGoPil3TG;G;Be_x{J?&_p*ihc#3j=l&~e$uYK+a*$Vg+Wcw29GW~k ziQmPeroakcC`br%idy^)i?U@B9`?4$q_C?=%U%B!?l(}1_hl^YayUnCVWSW;3}S{+ z%A92B06o+V|<;;;9><@WN&aYs*Q`nYzSsQ)dI7c zSo964*P{bxp}HZKKcj)u-$RZ%DPM)mE|WtMMt?qr(H$6oClF5%#pizHfoVWleqDLR zxp%Dzfu_wSyZ;VV{oh(gE(rVCQ@FIS%H6lD` zlg~fd$kAldU_?I$T+!6RYw!>tMHJ?cfscj?YVz|Psrmv9E!)V2+p@*LutYrIvi;0! zczg|Lpn}wVFcL50_8P2Uei0-JOl;ZD=QG66^bp5~mnczQfRbWn1ewm1W(OJX)~;QF z9iZJ~2Yw|~AkIYLo5zr43ekQmR%n#=S7gfSMcvN^BBF5hWrXee^L!5e@Cu>r0>(t$ zM}#RlVXC6rB9GK{1LZ7ch8!KnbAY2(<0iab{)hbP@F0wLvcS=-98$W}XTXOIzh*!=!4YJAnE4$^`78}o9KXzM4T{Z_8ed#~FGXLAPk+bGvNlsP>Z3hMv?SqjwjIikpYl<+R1qj)KRHm#Uvr*n@#^otah0Ys|yn zz)cH0_Ak=gMd1!%41R<*r|hdo5#2Wk-(|1sFkDjgV?rY4o35m#&iE?n$WHSo_hA|n zaUR7DaHpV^Xj=qSHJwoF3P(JRD1YlxlwsL|?CLW$sD8CjZXoKtfWT`PUgHKC00$F$ z=Hj>A)M{>wZsNF_BFSAOX)Q#O&Pp;15J}K5(N7x5)*@3LUgO$!A6D90TGWE`36|8Z zIYX%v_-fkKZdBxzWSW?E-}x+4P3g>QmWe3!s@VX=NqZMExZG(?n(|1Fs)3V8rv!fo z$Lr_{Za`42hYADu`~Tp1Np^M1QI2lHZ<0vD+4_36(ozAcKf~1t!j6tz`f?7(JRinH zd-a;aNh_u+Ws#6A5+HCGQ92vF54uhzR#)VF^buyMF+X>Bhj{OzuuD<+;X8%W1+TlN zeS2ZusjNEGL4#Fj9RH!^llCn#nQhia8?BTA1p!%P^=GL{*~8qu1Sx0L@j%yvt4PrM6BPL z%9Ul?I%8#YnDGD@M%Y;k9;TkuPu+s!2L0U%U?JCsSyvtYWE?uPb_CKDh0MYfm-KE6 z@kk?b)Bh%0R8J%Qr6tUA@NPMXT|sysj+DgEb<}3oHSl_6o8~lJ90jW2p7j{z#Qk%T zyEqR#@fMG{D%I%?=&AaiiE`1vuQvz~2lfc)Icz(A`_8k${hr_9{O}9DWlmU(dFr1z z90eOzkjup?F2eOvZ=61Ak6=gBd}4NfoZ$bx@qeVdSW79IwFIZ8Spl?q+Jch>7OABH zr-8l7#81<-@-wY#&xcM@^;!6nVzkNbISr`0h|$=gdu113-P>sN{Dx3r8BUF+{fzdx zwH?S|fA9a$eNr!gekA^2ER=lvL*@JxWRb~R82QapdZXQDAILW&1A`geU<5ids0&jp z?$dQjARE|)d%FAp1bzw7+WM@a#L75cKx=4xyD}uyZ1$Br$+I2AH@N1t{iJNxn3~*i z$EtV%)tjOyhE9I9pZ;HS37M69QNlYMlV_3<>pLL=Bbq=#CmFL1pQkb{IdI+POhqXz zPSzon`n!odcY$A9G;Q4nq$>=-H3(@e8Zf4kFZK9My@?YlC6r-6%m&sr8tww8C!H~kwx?1N zIxOQ6(GCGU>b?k$Gaejbb2CL(nDI4y&Ns=O{OoyBB3w73v~UBJ82$0uck%%=*4vE+ zp2lX9+-Qtt96lQs6~bauvf?^^m)R8~iQjV4J162g6!mIWiA|=RyAM{MJ7Fa}V?wWM z*jb=zYOq*6hJTkthZ^K}_%ilNkIQ^EgyqygrN&r_?_^{P0sZda_1tmlF_0^8)GSBX z*n2t_si(^?pk7@uDJ3XN>Nc9Pwz9e7c58p|D7@Zx>SA;(jqK z@sQ_6Yb0f?6cpx(f?LRgDj^$Zg|3f_RdnbG-)lt{g{Mc_+tO(ws`y)Hp$voV>=b~^$vhwEeY zKA6K@G&EP*owGo$Nv9ZfOZc1dbK}X|viR+_`0WivINb!2CWT#fpyK^kWz49dIT()9 z_lfC{6sL}#f`xjuHNf$v)^Hir?PL|QM=c9PBU@II_UB%bnnH8ifCBAXiSr5K&fhQ) zU6=lZ?x>fOZIub~yVM0Hho-61`&gJ+p^<3#VOAL$S@{BpkK694%na2wGTNI7x2?i$ zn{eAM+;#}JD&e+Mxa|^dyM@~x;kH+}?GtYMh1&t)c2Kw-5^lc;x5L8ih;Tb9+>Qyi zk+j7)K{`Q>41+-N4!DU%D_4y zb@zaj0mDZ335!2HK_R9F0rn)-w?c-k^=MGsg4`t@<`Hxcif584Q5Im6UHG zpZJ;2OEF~caRFPuUD8=@4+U1&e&>7$}1U?h_kT0al%7Z0dmc`4kA0|$^|J|q5 zZ77#S+IE=OUxUw{&zRR&u>3ABs+jmnR9B`Wr{lbU+@Q=*Qz!>0B4B9t1OUbykg-41 zNnMT~`*EIl_Ni+wdQ@Q=uwo*aH=a|2#)M8qq1F~Xx%Pd}xoEHOsj}!Z4IJ!4fVbe2 zRJ})}-=f!&ph611vK~7++WxWZ1#RpQ_*QgAtY&^IlbL;J>x7nFN6}u{(0Vi=Mz!N3 zvs=*oul>I%!~i#QI8YfopY>;B z8!*|NeEl239tSfKy3S|6mj-Cn)f4ObQd$HYk4S&+!rbqj2}rL=ng?l?$LUk%q6eOctdK|b`qdrXQ z;1B#Aznt-?BM5vAkfrM=v_m@DVqbd=&{pp=wV>#lM>)E$3h3~G%J0B~oJnIo^U>or zjxosS5F>JSZbfZE8N7JhScLgX8POGO86SNGbXN)xm>&|w_0WP^0^wR$@K$hr=;a5V zxri?ffjL6RH-&s1p|6Ec{)G(8111Kb;ChQGR-Fx1H_v8saYv+~9kp#5feGnv!KbKw zDuaj6OOnZKUPPD+azqxx8p9zRC~G%Bxuv6D9#RChtAj-yxo#6iyonBv9=F?ParIgS zRI!EXIOz<0!s%~6hnxazYxvT^IVnxvh-VWOpV*8@_0Q&DwE;%mXOh_W7LAz4`+wa0 zqktl*7JQia^gNH>e&3g%erX?|g0!E~$D3#@Yk4CQs2a5RPw^dBelel+Ax01x9xlOhr%xWhsM=IDIRytF-t119oz-q&ER~$ zA@cn=5mAv~!oiB`C{SIuI5t0xhp0_~7EI-F$2f)C>aKi#=e>h^**_F8gprnda5y@I zcSF+M1cZK7Efs7xu%sQBXtJw28FnsKh@Wi4PqyMGJ4#j-A>97 z@?5|r0`>E&EK0#`i~BGXr$O>zJ`HSw9wQ9i&xo<+7H%JfvyaD!KNx9Ad`Y_A@F^FY zhAlni3JQvS*a2Ze;ou)|q|Lrv0O_q8kCLj7k*aJSk8D&Wk3xPmB{%ZJbnkwM2P9sT z%wW{;4EsN$-YH;nE(>{Fea7Lc$)h~+s5!;_<&1n4Cn)Q%HSXz2pRWQn9KIEaO2ghE z)O6IDuGZ_8FenReGYw%&d&annZ_UFXs9H_<(J0kKD28Bc@1105QwiZUYzyR#LBi1I z9S}y=PlPNgeKlj6wJ6ZExl39axXS zQ_v8<2y3bOG`UA@Q9xsoJl1@a!JSNa*BIH>ETP2GEEKI;8-kP342-ah(SP!oX4@Mv zcwbOTV8jF@Xj+~RZhe;toABHBj0Y&{2jUq=cu8AC^_hH880r@%X{U2>RtX2vs89agLU8^O4|1vY5e{O(D24$iayf~BKE?qeX&I< zC$=zAW#vfV*8McBB4+jaWGZ8rzZK37b%iCa&FRK2WM;1Z;(Y`tFIEn9cEnYge zc!EYc*MpUZ-9L^y+3&*b4scNa)#; znm@FZT2Mrfet3IOc??d$ zkGvtV6N~s4efHt<6w*yhOIWtTxOVRTQ zc_xSQer0+Sisxf>2|!?sYF_~R9kW0ljyizqoh_M2Y;wLDVbT5sB&~m#24*|phmpwj zms&7gNfD(?xyLr6$Svg#6%=_JgQ(e5?>|n>8RA zYN#bOOp|Xz=8Ue?_Xc~vRl8f&vcVz*w2=T&$U*)MReMfbh1;$DDXPjSRj;Scu1mRX zWsGpDE`V@xfbR!Oyy!9qfkITZjO6K69cIo!Lhs)Zj=b-JFs@34HqF7Vo6~|)Ecryw z3EY6N&*4je-nO6kMr@V6O3_p z-EJ9pzQ@}!sM+hn3k-Nv$38$YrM!=n62yn;nKPv6!DM#yg*SNZmrPBZ?eJ>5{S!im zH+(?pSKBD-RkQ88iP58AC21cy?OcoRx;c~C)`3?5gNDv$`{L4(%|nLBF)@xPYw%l` zUg7nav45X}m%^K2uqodjF=Qb3iVVaU2cx`G1`6r+0gckZ&wFd$rIZJ%Ft;fi^y1%KA zW<8iF)fG2WiinOPqLYZ|3?@zYhqyR0l3X<=HmhcaNu|+$(J9PAQt?4#&~G}8)!j2X z8VggegF454bAK~Yg@2N$!kvh{JY)qu7y|XQW9Fa@+)_bf>c9!9dIfdcdm0gu1zXUT z)M;e9<~v?}H?=btZ~jGxFoy22@D5PrZz-w*fU1YKTZoz?wr@eQ2&o9e8VXH-^x|j} zodo-KkwQ8BEneS#&ok%%vl7Xjt97f#_3{>cx z3kKF-{YX0(*2z=Sv1T8cmOjxrMaT6Dh4?HOh_pu%1hYTeU7wePAAf zZr)(?+BHS;Y2dKBbxT0da~~o-Kbz(`C5R$Nux3cw8R~NI8gx<0Jex_?yGgg@ij_zo zZYI)4SU8wli1Z3F?)n$2I{o9jA4RkaUCkS-OZW3=k4t;7&CdLYP=9%A#U~9WU#9HX zhMX#G`_E`gvwp`=)rSe>S^5lM*7t5VoR=*pREJWOq4uB#RK$7btuph;1q0Dyf=wG|@70g)Hpnz{~pRA;>jx%0>W?n6_gv zMoB4b>2@1jDki(|dM%jATcN}c95ZnHBEOr~n!bFLZ016K`xqIC=#zv^9`g~;Cp@2F zWczR4#lIV=oAW&+h-qIFwGa7?60HCSrL}346gGl+j7`kX@ws4ow$FcLvg&0At|n%x z9_fZ1qwLLfk$>>V7YGezEzHHJ>tfUm#@d@7;w|Bo2qL7J8TXpufqtL3?E#@#6RD2kj|x;Z>B7 zzJR)3IfM-A_fNSw9z&{uwsv(xr7g$wW|q>u;X(t+nzyQWwnv|qh(vBCZ_I9GN< zm@gYr-Uyve+cZ{T<^)k-%m|aJn7YYyrFm@ySaeM~g5X$5@fR3#TnbBMIhGJbrax?r zyp@moW5tF&?usbif2lCNB|bXb=5yA$U=$#=W^Xa>ir9A@kMFJrGzj%4cj8WIQ5a=j z;blG2b~Oe#xD{zy9LL`G>K%wt%m_b*W%b&|l7_Dvi$sBk!+4$9K^HKPa(Uof zA3eZJ+Ed0jOY$(%vWnm}b|}ZG;vj~ABZx%>N?euz0Z~*FC#gR6JFpy4U{1;B>!ZyF zr_sb6?UB9tJe*&$^1Qj4Y*v_LD=t@{16h-IEEzg?REpVK#q4cj_I5FQ2kteo1;-%4 z2fxEmK0?(gvoICL2&irEy+&zfCr!I2V{-?-C<>AMh=;CFO`LWn;=+Lx$!tpvVIM+5Euf`s)?{3yCe{haui*5^Y*1$p()e}V$F z`f$2J)J?I+`QP-BQgq)6a~)J}!N+3aB|bEh4_M1!^s0At=HbvwYh{uDFObh;=I~Mr zl+{H~>FaG!!D9y+v34RVc3&TcA#w(w&sxPdt#k71@m1|H&B+6Z+5h>&s)sXZD`>G; zT2Y)`JPMgQmr^FipxQp?c`5hRp9NkD+gF|Ij6+GW&p@k zSAM1lUk0QRlPLdBJ_tRB@xl#%zeqN#2Tw~r*u6X7Ljf+;x*xu`*UbguY5x@1c~g_H zO`EKhhof=n%faGGxzmFUTlMXP-5ebbk31JX1;205>toy)*ctjoOjt3@w&noYgfn zc?t}~4cLlTuYp#uKcb<~XIREfN%O8DiX8eP0on#`Zx1SKD5UBW6l?Pc?_E6kmVWOy z)hN?ufANpOc6!bHAm@HbjMPsDE>4=iz`eBli6Z-}@HWYC2ceA~YVBBRwuKMz7T2N) zXu-_7ljU@C%IdL(H;wc6bi}xyJkKxM)Q@uY9-*^1vC}2Rf+_dFG^m01?OA4;O;0SVdOw8k;dgL)jD<&Hy01E-P3|e2eB@LIvj=| zCETEu`qP9NFz-;)14`bvkgNY4Zvd3xje*6>L5<1#)^QlDG5m5+DVF7nWi7Bz1pAAe*S3^}bG%{gLv<=XvUDP-B9-3WMo#*kIG=3Gru1{BjV9{S&&I&YMe^z3l#YYXs_@{czMF%qzHz3d3 zNYY$nGgsLym|gI72)W;A`D0b-cd<*{v#^H|ZpWNln?by8qQjnGpG%#m09u^^!6a=O zPu;ugP@ui}--tI>HdTnTk>YHWI19hY*Kjww8loIM5Mw~w4)<-4#&Lx?LUlj|TrvLN zKZ-nMq40@Ee;k{zsA9PV62WGXKK1@pOPg%viT7H=NwQ zZnF{RlyI0^=jm;2*0Pbz@Dn%VyvK-Is!tS#ZsOsdKMnNvk&T^YXo z)b~@6rG!V9Ja*ZlcBbyv`CaK5@7$fA==r^2UMl7In85npnII z2xU_*#M;%ofzaN1Cqm7*Fa^^<&Hf#Rx7?{q!MW(-B%{SH;PRd08~H;UvIW`^w=pSl z&=)FoPQgqBbUcDa*UhJ-KVBhY`rDoe^XslJns0PKXZi$M@&r{sA{rE8pjx6ph_z#AB zWmbLE23DLY$N+%Otnnj4<8=fPVM$!^h}T$uSh_AdD|m_HM9E6vIcZ~rF31!rw+)c3 z)bM>h2ZhgjOew1u;m3sr)bzzBbV2i%Nn_KijS^XW+U}O2zU0&I6`UG6knh@+eBsLN zd>&Ntlh6mPJw|&H%wmgLN6BW(e|8Ezw2Y2>!cLPXg&0SnbnR?vJg6sbeYI=SNz#(O z`F7sMY1hj6zY&ujO4YMSd&NRgjeC}qa~3!fE|9@%^viwb?p9_Bz=y48r5GwNAB28I z9-52dqt4$(IQVK~^c8m#9LsR~b?jp?_6e@@9^eiwAjexLkVK!EWOBCJB*+t^_H+!y zsOQ=u!MigwqW*iZnUiYwV5Vf{eb{#+rzpnSR1Mjx7i>bA$W)7w{?ifv-oRAJT;>+gZ-My?B;sLjxrk4xTc6x{6=hA(H? z8q`6TsC%nf$m~Cd*%-xtd7<+joj@wL^Tx+F7cf?}0O@PRP}II{nB~Nan^>+gazCHr zevj@WjA>>809P>?oFi!~x%e>nbv?$QMSo%fgi-#OMlY*}>}oD%HY7>jlzrJ3+rafZ zcTRojKD1?=Koff`$&^ILOTbF`5J9DDayEr9SA!;805RGomGqe-B~AjI~$_T`0M3hG~DhABE6Bb*V3+^om&u$qoFnNs=sHHy5w- zsq!x~h`7ep+Jk6qAaJ5+${*1jFNG2A+{xD9{a_SzMw1H-{IY53#wFES4~NkIlE+-5 zjAhdi5+;TRl`UY~6ox~b>?^oDX!unhq``Lc@Dg~U2g2N{rr1no0W>Ho4zHT0tiUtg zV;qj3KvEre!U;-Ru48T|S|LWt?9nK;SYwU7_uit$c834wtoi=l=jC~JxOeW{xl_-ael*v1D%hPv@bsy8lwQsP zV!VF071Hd<%P@`afyQ=rod(5@h0uMMWjk9qBpNIgQ7D2yL&?*ICg{x3>agL^2J`%O zKy*C$4{CE7<&O^;(sm%7uxu-GoOd#zkT~@bUi|eurR|0w3Xs{HeZS<&`|-@)B8s!L z>L{)WLD%;q_-yBOAR-MMpChKE5hly{6E@>14e;5$8ZMnU7o!Jn4GvH0!VL_xo+Qo< ztNRimK@wsrQEkFGCNnqQp%%I0Fp|ELmO{!nM%)`q_8Uz`6PjWJis`$QDbt}|7Q;mZD<+A`ZB|3dT$z@G7Lb@KHb^0c$__%k8HgBog^-F zMBMF_lDL*ZiKAKd=+}|>jUs0Y27rM}S$x;f2)`x?7Pxo#@g#!*d{JllP$B%sfNatK z^oAoRg%MYLKSvgWyLx`4GQH)OW}xeA3&7{HM4{;_E!hQ%uJURhgH_5y1U=c2z8END_%M9u@iFpsvd5VGOtJ0Xpr)Bm@q_a1qK$ZJ_nG3<*YOok4I}d5kG3H* z}^*e^{IeYrU`Hh^e>OF&yY*V%iLjsP7m89;Va`O zT}JA%g&DcQ4ZxR_KxamD;s9YW2evW}HF++6KT!Iaqj>lLv-$B3#-zb08l$ZRN#fqK z(SPz9p4#zl=YetCFFAth0uhuLuI;aN;rE76naN|A`vsg~u!@MubXHO|X|j z;SZtaFGV9u3yMyBi|j(>e1K06GPu{`F4e%??lb!-@3{dNq7#?^0vF4RDKX(NF1AcV z?CCi;TXerb0U!e_v#9JMxG@&rgB@{@L#xcSzz;4lEbd9Qr^wElk7n2B6HOXA8j3Kn z{Na#oMhrLHW-mp)U>;C;5&ZLoC>tq7R%4N6OP-Z$SUws*Yc{G}4y~N!f0J#WR;VlB z3e(bchf%W&GeCByxR)T)-Q-#$RlWgquLQ1UAf4Qwgmh5r8$5`S6JOzGa_(THJ%>EU zYZ(Ak z&3?nJ=aXWXQ=F&ZP}Ygbm|6{~T`%8xc;fSGiK3oZTm#Yi61XBz#!|&zR>0`HBLPoU z+7_5gE7*#yZi?|~%|8XjShqmsV*@G6q9stwTlsrI>I$D2l$8Ehs@K;SJxS?*Zf8>AqGmOdv1h6ni zaUaOe);Xw{q~CXtzI+QeMgRCKj2vw!;!QNlBt_uYoRTg+`ZjoDf_8yYQ5WzUG`g=m|B z4>FpoFd&-@Vv{Fj#W9GB>D>n(uRe|68EU;Kh-U@P!k+;P21)Q1dQ_4El`#EW#9QO|>70~vR3=a#DQE+E0<-r&*FBpfb zxg)p;(rRx?Z1)!m4UJDkYV3Z}QXI4r2kVN1*5Y72W<8_?-olenaXhv;Y_IM@Jy$ix z%|Q6AP>|XqAJPJB%`eW9fD*Ib^C(Y{;muwYiP~huM|!^}b{t@V|8VKcM-QJE@l}{(q!?LIpta^dU1|N zB>OM~!{FEd{ub&i-nC(PA@|}Ur2SemYry*^P3RVkx{{U{0VC2=Kq^Uh4#N9!9xmPu zBj=PH+I@I$##c=+04uss>XMZjYY>m33gdRr|k&mU+`UduLLJcFrsvU3%h;F<8{gDBMc2`p# zPrb8~!lHIANQ2V049Xqz%em}mcrC#}_|FK`=9Yi}6$8;5|9Jd>cB@~59cW?hZsrdn zmKQp?cgtd2jQ^-0b(&IEzyVa$pEcN*?v$YI4I?ePMUcGVv(sOhnvahpmbU>5zKh#n zXu%Dw(qm0TcZ&@P}6*9$Pysp0`{FJD6-!pln0puz&n+nCZy7Qb%*>|9{N z+MM%iOdH-%v>bc74D-+;JOgjNYD`%l=UTwM0Q}fOb(cYhhmMhxm^(+%s`!YdD7Ewu zr9O!G25L%w#@FP=FA-I!$`nVcqlQnomM;KJS-56Q4Tx3lF2iBroPJf1iPGe_q1JXv^0BRn$ zVm_ADkE8G#O`}dR15mRVWRP8d3ko#_f$lb^zEpdWTvwTdx!NX6Sl=^Z_*Qg2W)O6w z0^yyi^%0nJQuEHt+e#%${0@?UhE(Flkg>(5!&n||=e)*LYu6-Oh^EWU%-pf=4G){M zh@e#f@3}nX&q&j(SR9&tyeZO7W0EkME@k9!eiLqWAAV4X!VI(8)ueZ22QhA>nh*1@l z>G)+($cc>@1#M&eY$-fxDZd=0VLYr8+X>g~^{B4jOM2{y8T z#WYqAsi&KI;ahSac=HvC9as$MXRy*41)a7~YSVU53veHBfa~I-?fi@P}!zgbk+IfhGho&6Ba zb$NacX?%(;mPE=YPpE-qcG)01scFpM9oTXqQ}CNgsb3jz_6waRxs&au?T0KY0FeM$vNYuVCX3_85zT{@s|#(|7C$EcNI?uN1-XqO%IW z)zlqfc`=zq-A$WO^~)bhGpNXr_W1^`!|48(rJ0S38x+%qxxmD&HF}!1j&$i@EQhqg z3@2=7hQ@{$l(gzC&W+T`C8({aEmYmGL|S=+kcKX9$UAPbYNH1t37R#qqx@oP8SB<_ z(K{55yr#n;TUvk-DlMdr+gNkI$xk#Od@eS->*-7@y!-7B5u0z~1!I@GNSpnphs&M8 zH&&vQ?a2$saeeWmAxD*fH#(#^=8#f{=R5I86RU>5o=|FK-3fP7zE8%~gHl!}n3;oe z!Suy{io=5*IU@kJUEr6$$N#}}O~wT*w1__>d@S=}4 z0x)bsAhPU6-*sis>?V%w~xk4DL)!hexDa?Kfd@&GsI7NdZwGfW_A$MMW%j{XauF@$Zyb@(ZSa;L0Wzv0z? zLP?Vvgv|K-;Yd6CUWIVn!{!jK6AiafVDnMR9YGodAe(Y2SU$GIl}*V-Rj zW3gCKpbxlNQoZ+7a-L6Pm-ByNoF^5*OI_W1WL#D)XMlQ`%{2Z$&8Z}tYYMCR1-ITE zD6!59)+PCQA7yL?(T>Ic-W6|;hNA-vXb8^Y=ONILs>g+f?WXRPo|v}@vu5I{dg5=8 zN&APbgSA>8im%|KbXg7Qr@=4>=mce_)-|o=-dSC-H#`xBbIKH5t~fgKq#4X zp!CPdsQbY~4B1Q=j36gizZKON@85tl!KXi}UDJ+A%f3pr|B!x(z1#$%UvGPb2rA~n zg0Wk-p%nYoL6&17ATGsg`FF-4wY@e1sorA<+FbN#mj(Pyz+8kn>{x*8K8Gxj8uRoL zEPZ`<)I+ax=iftJp9QtL24F5*BTCx9I!coVZ@+avD#Ys(;`PY}l)ixpq+aDyQElL2 zTfEZHi9EcQBh%BPJ<`q|GvPtP<3Igk?|1XQMU6q<{`(`JJBY};>YiA2pSra71YIM$ z=96vb-8>*J7AsMQ)_!t5;Z$U1Hh>-D^B*Ps9mt04F-5H3k<=Wbe`&`F^tCbL=oPO` zuIr<#aRf;tN>LB2e*w36L~%3f;Ux*4wfshp0AdZt0Fis^0&3?ky@zhQDZ6rdvw**D zsJ;iPqj@kh9P`KY1*YdYh(Sr{M#j3Mt9l_#ox<8*IgbvY1)m~aDfKn$nq2Nl!-hdv zE(hEt+s98)!pWp*8ML4tu7mEH6p9*8x&Mtj3Ty2DQ`B9aQE{^kPckU98*K&c!ek(?`%Q7Cx&95ibr!O{|`Q( z-1N8DGn4189PE?Gd56%@mZE@C8)V}ovHR%~ij;&gWm~@HzT`pU&cR%lsx2(=d!v_K<(y&Lyafuo&HL|It*#&Px!{UyQE2B6wPo6 zqb0hmrmBqlxDBaVgs18U6xa77y0QpUyhurjw_T9C%}7PBLfC(+{fnU}>oSBFeYq#} zrDXdkQaz5tYVq9CUs=C<8_^5=hdB(#9lXA|u+X1cfUtihWl$ZFBVb(9y#7f%jk&_~ z^OP}YU|SCb1iaQzdTcrmILQZpG&VS77e3qsIHd1MT%7qp1$Vy#!eHxbkCzS7MWjKU zz3|BP8C8s$j$5B_e}%c2JRSgW&Pq7|C(hTKc%HP85>CUD1qR^dOB9Q$Zid{RQIuO* zf!kI-Ptf>gH9pAnOM$GTxe2!gLjTqZ2cB1@4+^>77-%guGU3#$^g!8jc|S}U`8@`p z*(p*T`kmt`>9m)T>sQRjTYfAf1hug1w&tVU^Jz46VHc!$C#sUq#x2qyLLzm z%6V!sgKDw-#vOc(U8PMMggTs$GhLIgl7;W~Mn(s8%e59FRVz|GEJZ5(y;8e@jgUS0 z8SKo!T8XP=gE#oy_>%|bvW^F47X{bn&6Hr9kENA-l?Sr2b5~sZE`Xn!`_zTt|~f-1}8B)W{!aEEkq@9v-4D(4ts`G z_kI}`yM0qW(ADA7EQQrBVYS;N8Kt<>tbFGB>1KVKCJb`wL8Y6y3JLk1_{Q3uRB^fs zpTZ;VFGf3px{^a@m=|HKK_>_9|5Cf4)Pf0=P{^Z@@%kWA%x7X0`VJ|~Z-lE!>; zYw}_Bim&R2r^;4XmIX#h%os$?#y7>BH1}pi&FlBY00xeZx4Cr@%?nUx^L5l>SQEx9 zZM&Lb;Qed9P6m3^fj&!2U zQVg_nk4B90Xc&(BezzQp2`n+E#|qJMueBwNWM8oHs$cwM?righPWW(g3;eRE`BWRc z?wtZo{oomtbaE!vm;358bIGjsxmoQCGW6Y|5bfc~hJxEVqRTF+l$$aHUm5mwbwrx#i z{Y2^Xk6p;Hu*zh|m~`Se-q|ykCLxeG0N+U-oMExfQteI3{f%)5U8iH_B2tLRTB$-r z;eN{*b2f1TFC|4Ii`Jo72fdGDH_kZ?)YRuDv`|*{gdXz*ysM%rZbIU82CCU+&5;gS zisK0++klO@QFoY!RM%t?)25M6P6B}|`LzmJsse0kSQ%S2k;PR@aTUn;lxu)J(VO_S zv>;~RUmZ!dx)!*#`*++oo`BW@djcj3H?xrI5iwOE)Z6L`HRQuxK)Uqch_NX7 z49Anm8Zx3gS~c=4^SynlC&^;oE-`O64Gc&|#>8DyvD#hF4Pv^&-%Md7pQn2zvF0E0 zKV&5d0iQq)490y1kmkiXNW9t(=!V+*G=hbW>k znS0q=lznS<?huUgWuF zfr^lBYCC*0;?_ACz6P3qe*lzvilQFo=1*VBbv?*UY+>C;hEo>Zw1rBM_|i-yz5?(0 zXKxsWL|Hjwd$xx^wf6fdzM6+2ZQeKwv-Z5>saq%JhgI+36VZ0_A^zAXlh8uMYe;{f zAu_z`>2UD$Si*;Z%Ou9O5PTVFo4&kQ)t6nZ{zu}12>1g3Uxi;p;a5;yK_7z9>|UFT zP^=<;C--OIL}t0zb_(G(H;HEK%Qzpr4so)Gf@>c`Ce^Y8XOmoK5V`5@;%V^QGNgTH zbVE(L=pS(%mK}pMEBzimA&Cqn?_fS>=5B3DezIaW82V>_|6y#|_GDG9$L`&cZsU%}{4ugC2A z+o$d(T=%#F6;q`r1@vcP$9xZkLz@HYG7eN!Fhl~2&G2};Br4jIS5N~G@nxEJXpfpS z6$@}ejjH!Mx{!E~*KpTHopH4GSvOEt!DFRGA7mwG{EqRF_J5>K5Td)1YJ9){%`mye z-oXAUyabX#Hg8KB!z_hpGzKquJ)R7|CcP=R#}tK`9%s!tgMXv=CH_GpqhAWI9PeXr%<>3z>Dx5NK>|-EEuBrU&h@TG9dk?B0u(Mx zomKClxW=FbGvV0_9%p*2$C-V}Lm_J6w}K+77-Yv>rGBIOp)U7TOC@*&3}|hMo0xX2 zXybITW&?$VFCbxxH zRjT=s41VC@n3+?HEf@HMy0Hp{h@V(D17Xwu26%Bio`TZ4F)O6nYO2~}i2(}z3`O-9 zc>BOPm_J;TLdauD5YBp!ZE)O*u--L?M9pEu{)Stx85aS@iU+b%Sk<6>e)lZ7Bpv1t zId?vbidDCnwPyQT#aY^s5Wl*3lU;;~ujsXI863lJq=@Ckn4mbAcuR5i6n^zrycfNu z8}cgu!DWwOozPB?3TFg>l9=yWPy<~fNZWtxj+?@}2Y8|NL!gC3(?Oti*i}!|u?JP5 zgx5)?rOBhj#0?KR-CSv(k2lq}t1X4)JGTD@3Lmv52Yv0ml44h%#>MxWDd}uE(6RL4 zObp#6@@{(tW|C?uYoo*mohG^e{{zdbLdUbY2R=sz&0=$NQ3}UW3QDb538p^e%sNxszOAKhlzN9fM_>Ag z-zRFlIpf=IF@9Ymi_0^`WFKf+0PURw6|ap^_0bwBduJRi?oS?yQ&(_nnmoY5!bU=YK9eJ+-EMF)ri)GNF%Wmz`}5B#fU)D^aDu! z`@`$tmqFsoV4!u&@4{%pqXpAV5l&EC!M`y-V9ms=bF_tXSSVmimRF&fv8e@CfHX1< zzjTU!n~3sVM)YUZ7LV0yC82`_V)G>&wz@Zj@Sgj|3S())9c&FW=`>u%`|XI`OW@%VAcneZ8~EK=GW=jUen$U zfY`!;LLv@>O>4jCn5o;UaGu$~1J!6i!za{r!*;9|r&4IH;}p>AEyPy6*lG}4J;he= zM#+COY!1wXaHaU{n_MPh-g0y|b^(41$?h$)an$dj5@;qGHmi#lQa7(g%@>p5y3hsB zJTuJ|&cIl+({TD>^AETvi`Wnm8%lxcQ7Bk{2Wby+Uz^wVMZH;@@!LY#CQo0LbrZ4J z5bRR3%?6FgChf3C+^@*+V|X(cPSs)94C3oP94;6zL|sZs6|rW))WZ(iC$a}-PIqpH zxyXT67mDbG@&Z444_f8V z=#-iG97jQ$kE4C|gIF)2=qKn*LFc1Y`XhYSZtY(v84%JDD?-V$+ifVLF%y=+x~G66$&&M;5Jf7gmU zG&I;m1xHQki8p&rqP+C0rYZSy+`>#HiX6RBQ2&=owz8p^%TUY$gJ&2bB^?G%OsOfJ zeCS23Wu>3qzf<(3T70K;`DCP?a}cZozEnTX!cC&e8N;x79H_>8fcrYsb;4_8S4`}Q zRHM3rlg3xJ<~1&^_=zk290jgFjG5`^-x;1Cd%obUVV8}? zjzu!B6TY85hFTT8#$?rPMhQ_r;Bk`EK%`w4nRse3cfV~A*RR7Ga_LL;nk>$@*z1F{WlCQvW=-1O5~NaZg8Vkh*MGsk!+M z2Jm>f-yBKIZ9oMk=1D~UJbW~29<{XDh4%*aeSx)bgY2wUq2&;5Ht{uu)DG|o!qco$ zc$C2Gyj=i`njB=<4Pi*9FK45{{QM=TsWyWQ@yi)IE`V=QG-phaq$OVnRm7tU)MeXO z44&%+YW(yW9(w$F9_PB}ML0}fC|fin&t+M%=y|~!?mBX1@#jnN=PPPEbTdkZ^qPw_ zv+@de)M@7;9$nHdgjEB4LmO1Z3ZsP!`TER~#f=5x#zGo(`YsMPyH6$^P5p|eiXbf7 zgp+-+7RLv71htcSp3MmIa$dk^epnocLdkOqRo0)%F@99-pJLGXkE%LFfSwvc=@I8q zd_81vvEwnXw_AVVB)_ zK4W5+Fvs}&G-^@fhKtveA&-j0zNuZStcAznNvo6`O_F?8w}YwKkD=syrl~9*-Gv=) zHl+O|?OZ^u`mR7l>JxhGB^Q)UdSVI8DDUW6Zd6170}O4Uh8u0{_dNoY?iPoB7l-zU zLwljd!5!`Ufm|y1%wdOrU8UX#Ui22YnCtqp9_+;Xn8fjI#GGs=EFGXOjC35S%Ek7C4lE z225@zvs=Y-4>YCg2AFEr#jXX=i9MOhsyw5g=`f7$WEkC45*_R*F2@?}T5u7+OXN9i zE(CJEF4Rk&q_FC2OU?T6x!)w@Z=`NpCm>bN=*|&M^nJQuv4z65Z|zueabr-D_0R@s zv3@f*qjb`Awo>WwbvI579q@CnAO`zsHz$6BA)VUx#_i;`Y`5*OW;(7t`$6Lf)@4hW zJRQ|64yk<;W>9$Aw^NF)k3`qUX7wl`mJi0l7T~$b$|m@^P>&QQ6+OYN6x}OuPKL0q z(^;6Aj{77xu%x)ptME8;^n5_bYy?|yBgeKMxryONSe#Rkz$otM3q!CbCwdP3-_Fo@ z6-uHJ4EbkN;&FOw-p?9)-WKui+ae9uKU4U_V_krn5*2Kh@^d99T}Ecz^cAN0(53$l zyiT{5>Wa+g7O=m7pE7(^_h_6#PL$4y`k&Z6~D+uH?ad)qIH?U%&%%amtc2NoRz z=X*ot$HhN_KisE;hemI<9eYZhhh+g4LW|*fI0f4ImS8bBOodmDwJ2%$Gz*y(3Dvl+ z=)WFa&a(Jh)&hUIoWPF@m-1m2vgsCXBC=9IALdWpz&bFhFYV>J4ivb&CmJ0SwhVh_ zyxOK7um6ANNK0|SSv=T0UJu`RDo|CFAS%Y(PbFr z!p@9URHuNXx%N6Sq)sNX9JazCeLqw>*@WEa2CR8jQe`{-ijD2lAR1O?-d z70A%HSy@CaXZKP#fo1D7GYt7&&kCTZ=R4~xVr`KBD;CIOvYL6!#f8s0>gv22Y@Ysc zjF-6GeZyiF_k*TYtTuVQGaPD&SYtOS8FrdrLJXwVbM~QDZRjP_uo_Oi$EZXkfg2-5 zZbiTY4-g7nc37jxq%QqX=a`)=xL3VipkTR}zr6-s4Ko=XMbF@o&sy{oDhPkR4;6&k zQqi1o*d~^6A>MZh;Fflyt(<_b9k_?0fnR<=p++|$u+rf+f8Qn0!;@3m0a7@(YRp3x z)zg3y-J!%CS_dUsbYQOBt8tW9qQMMgxQ#<*(6Cgb%?8?Fw2kla`#{m|d>b`$DIA1U;+eGc)0>pQNGm zVIwdt`pi7|v+w%+2Fi`tQjRq7-)?B-wlg$xKkGTzXPCH09>#ZgW@ws@DGMu_gX`GS z@qA3r9Z&X08AEgRzQw!e*Kn?5h#IL&%QkH5mi*%o-1OZugynu7MgY2|_jjRY-O5b4 zu1FmPmdYO1l`vlVpcEH!YEPJn3%L}p3PdxOYRPNnFxelDG+Gv-me^wsNUO5*kowjl zT>6t26nOL~rar>U1JfM=N4^o}d^igIxtzmT!ECU4-jZD=6CY%G!_n5>K;|4@o**r+M zCFmG1=3wW&&$R1}9UqyCn%0u2DHb(tK+x>l#U8Z+8g{|U@*mWv@(5O(mmR5>Ll?9z zPKvC5QF)BXhv@jalvbxTYHR(f2hspBp1-(~LM30Rb|b}RHbg&)X8==&nuVs*b|oyD z6mXf|539WcblWTLyb9Ylo+U=KxUvv>>L$fACO3uUuVNYuJAorP|= zjbU9`{c_Yry(-#+EFD2^gRX%eA2IO|AXeeVzo67!?4v@Jxu<7i8oIS(I<=n2 zL7X(MB@F8{@kVU@f+m&cI28q z6gL%@1CjRHJPfIqqXqhyYsM#I*^rt1xvulp;YQVtkz(>dgdHfrcsc@-dahd_n}v~o z*Z=IYRUKOLwAeutR9y_mbzc-fAr?G^YLevIjy&38q|ruwA$DAJCDWW;lM*?rn~`Nu zQU&OHN9a6n?4dv$VTy?B$wd>~lVn7en)Ko@RJ{6-J$y6+J}vNL zi!^^fNVNa0OUcEIbJR?srdPIO1T>ASu{eCLzXMO337S>-Z$T06tjG}#3ihx{2Gwf( zgP~bO%~Fhi{246QxW5l7>cF{g@I zeE3d24aOVJBYZOiW_5buF4k%{7}r(n&*0kiO)j$;A)LdGQ*YSAXNvC=_?USD{hO+M zlxULRi&UrmiqtD+5XQdxU*3{N@;wAg2;>HL=z%V{%qymZM{Dr)O;waMa14yM{E80$ zpX{Tkof>=7Vji@@c&$Y>U_jU*j{0|8#OvB<`$ZO;pNP#*DSY{66mZ_9<@TpMD@VD% zexi&hEiN9dC+$^ubyHv}3=bV3q)8*Yi!gyePr|G5nmQ^B1OXH*`oEX08&bv4SY#SH zLBcKCg;LP1=Ku(foltzj{9||$)A=XVTAfX8TbzZgyj9z)$kc8-3c-zTyT3wYti*Wu z=R&;nDVUPNnM6sM=Y!Nfc_f##2{9K=R%XHAXa#LbMOF4~$vHlpH~k?E1|`8#qDkHM zp{QZyHWYR(0(eVULSq>xU`j0GuP%$6 z@L0bx#-jG7nUHgpqD`JBMgLNb*%*mvZLmzQK!M2j190ZIg8;0Z0f%QhPfB}fhDO}_ zhkVA_NMfE2%H!kM_&MnNk*qk;!tV)>Np}^LT4Zf2>be*EUsms<;Z6Af^!Q{2AYn+H zA&JskFuB|X7S>jZlILI~+T$zj4V1KE4nFyN1P_?%eoGK#>ZS0ikEQ<4OSzjExQ!}i zKIE=ld@Y+fQ|!m*&_qwUH4&@3>+hImS^YbHd#GwE?|GLApOK~xuR`iQ?I=v7b12k& zH}1;S@lx$d((G>wJ}0J!l}5;}rv{IjjoX7^@QpAcX-*D%$uxTokH+EI1O>AQGOkPm z97=kA3uCeODD{0%7nuelllR6CJ7uM~^oCS@ynyDIUNzbbhr=H;u~`zEK^X2?DvO7Q zu}%8`%97NyG4LM zX5AjXi#(2crIL;KZ30#MC;aSe_;lF zV+3T~#P+R#ZOi*2+x_d1dMwXm|IYjeTAH;la6ZszJhp#(o!hM)$KTMNw1dqrwok^p zQ0Nm#PZv?PM-x2o+sMal!S)OsB6ik%=!R=jF|4VV&2b(7C(|q|GpX785~&l#T6p93 zyTf25@;JG7Wm3Rn76V#?XNCg2aPqnF8frUX6l6C8xfOTpk&X^mOSStbC?^_k+YY19 zB^?=0^4h30YYZ-8#1wlOe7&sRk5N|da8q_dS6*F1gw1%g;A028wCV`u1T@9Pzr(24 zuZeOk6zOcYK@I}QdFv-j3Fm-4I2qng>q=tO4N8tn##Y&11?97Xvv}*;9LkC5BN=Ff z40}Hrjwod~fEkH!cuLAtAXFskaoBB|bi+-pEV?`eh|T4#m_L03<1)JIuo2Hy1CNXd zN6ku&1x>KyS$C;Af>gDjt$FQQ#BFMX&;>9VLFfWs{QU6qr|jIm!2K$qhfcEF7gDQX zD}gFC;X0XP99Fc+0$Pz5dIcq z7~~_1_T`PpaOVs26P~lfP1by!4r|RrxZi82Pa&bV~Zsj$}- zjD@lnmAgV=S++-H*lfmw0~<_3+PrBJiX|TeGk{P1(P1B$xt;zWr%+X=cm4WimQ1rU zdmi5nc-I8wt&8B#Y%0n}UmdHk1O8i#5ZP%A?91bS#(M72dndM+ZR#E5*k7E9)ahqt zko$IqgXf`7S);mJ$cO;q%v7WK{oPQ1hsD7_p>S)SW5iLTnPZ$ssCJVH@lEQ8aQfI&Ey zB=g&p7CDID*D9vTpnw9V3__zq=8Z+o&FjqKfv}_jrKeDd$AE7xWg^CpK{H~`LZ`_H z$SOCqr;@Ai5+zelSASq>Veom42pQ`s`HS&C!X$U?L@9uZ%i3}HIEPvW^HHxCqSSyj zq^tOw{k|K!L5O234$ProA3ro9=?Orhw0ALOcDs(-f(eXM#lk-u7+?jB`Z7`7b?SJj zb`GgdcTt+T;AjtP|BCq^$5&uIJ$cO*5hE5cK=G~#;vNPr{~0#})-t;1S$P<;4+y41 z>M-%?w!4Bt*PNGY|7uO{dv5{)HXC^yHVVb@kRHkPBd9}dCcM+xH9l?Hs%|$-gpK>z zYIC93ClvcFg`x&78BPRZn1aHfStr>dT7sYT9 z`y^q5Am&>qF{`UgF`w1kWvq&km`$w3^NgtNyg%B3Ma9z zOzbPC;?)fxG#a*k4T|~NJY><3@2?fIqj(riEv6=YTR57LPUt!gws4c2WMaT|lg(+} zex?C&cRDH8Hz#9{G1g{|;$VcC+7ep$2b)7j#BaJE>TR*S6(&)myn-~$q69f<%Qqm^ z+OJW<69k|D0w9res2AlrpTotc9poE!nS0pH`wGep{*?*-A-247CX}WFjfTWf{TI*< z+ww&UR*}<8aKkg-CR1f`4Qgm%vp!3Dib-)tX7H-fn9)RU-lm(+Q-`0RNL+}t$vUP`$n680~LCIJ_}=4E@Q_>@dL6zHU=ckV%i}b zI$JRA`;{Ud-Zl-XVE`jWaVP%8x-0hWgzK`KJZ?QdfkPuK!5Lg`kcT%m|A1GRr2RsN;GXhvdWhl34wYwA<$>MAMJhej&S( zP$)Ea7~&Oa(?0QzjG5jXY_Y%^b}A6DlgXp_XoQk6E$E8-$E74V*q^Krm%qc{bo_25 zURM`BQ-lCTip+Dz7RVom-+0ogo?DoUz!?CQB5)>nr?=pF!JG=W^1)Sngby*N-5mM7 zsgIY88%_Uhz*Xu3R{(qLNiy%~vJ^nH$7Rs&Q@>cuD=6kTm&__lK>pjG@LSS?dUs%a zQP-`#g@}Uktin@7Jt5uGO{URI-+T})x*rbN$%_nJJ%owb!-iDw=?+h=ap3oIJ(y!Y zeulZVJz9)S;mkj1&iO{h5(j$lOi2lRtEu3yRg{oInHPF5uN+mn58Fg*3PW6L6}PZ@`cMW3DF$rHLM~8(0f08E;a8 zfd$fQQmNBUYdmTGOGDgdR6^{|r;sOM%>Zg1K8-H-{S&$aX#sw?yxJDIWv#QJ`Jr1f z)Ka8i2U>zLoRGk4QtpEh_HAPew13ZD3LeQ$)0@H;wdpL1_i;eIOM6n{;h#Z; zY6oBA_WB-*Wtass@Z zCZ>b2Don25iIU%f6(=2mXWb(kfuJS)40>>Mb}7o~v#J#u(YgbMZCnWkEGv5=^O%}H zL|fx*max=i-k%gdbT!(w+?z7%Xz@};)IIbp&vPNrfPDMQGMJ;qX`2C_<@)KQTQl8U zq%|}XX^li$W08iaP8lO*L{#$mj4|8*e{MlGsBHQ&%I!4=IGUr$HIAW;Cp328ykt!x%Y!*agjY2l7%7!`9U zS{nL;v@-o+gK2iRXX&n?&Mg2h_{UfXsrgXWPQZ%2oP!?gPQgeU;QP$?sPq=%bZ%wV zV2eAeaQj9=Gc)GO|2;^xag2NE z8r%ci@i61>Mkpa7f^YsD*K@(``LL}67?VB>fFi4V5mJ;U)yRRE1e zBpR9Q#U*4$J%c%c)nK4EEy$znq@p2Mm>$({C87O9Dc@h>FR1GxiW(XRGQ{Q}!*2b~ z+1On1HCPuQY*quMF@x=~VZ{|J9iN6bk*3;$pA9Q3BdO#0JkZ?oM(U@igAmlVvEr#6 z<=OHf^0f_x*M5h_WNk`8fgz7~VcI;7y^@8O3#_Zho?-f{=}sy+%!g5rRqv4Y+Q-zE z-^p_&GEs<{V2;A z$K$HkVZJ<9k!!Z1L~Gbe{p<)8loJ%?kiz=3eP^}BQ@c(*Ov}?l zSHb;UKM#2U{on9=k6U9umfZr9RhfhP7Ml}rR<_bHd>`#ILrQ=W4 z)R;l_L27?giTR$iMT3&Db^k$`X^1hLRfXGjEe68a-NTu$br*Xm!CuMfCvxD7rPZJK z+OTr`+L4`E2A+G^3})m;xFK*hLIVgy>nUiz5&J`WPZfbUM`YDJ>fW*oZ;=6ynbNj9 z!3twI5nuAB_4mI?brWF-3)E!~Rg5@GgI<_RsB$0hupr57HEre zC}|1{O?Q`4dd`1Q=O@f(Sg$^?9*y^27a+T9DY(uHe5(m%WH1zc^qB^#_5g;c7dF7! z(bWD9x(ymL@Yx0q_pmx3&)Y1yBdZjoy?6ufDJV<31XZR^D#u4J^uw<|<>8bCR?mNblt0UxUxgT|D zTGvNEB?_!}0(ZeZhC+4{WwJ+d3%mOtVWay}i3tXvECMPY^@&ybKopbxAHclOMe{%m zW$5y;XiWSmrYctsAlp?Estb5I0k_r$sP36O$GOg7bjahjtBDKizpX@WY(ZU>18}Yc zd3xedo_LX?@I>EyB|Cw*tfUOjMLZTUWauxMe3|-eD*`JWyAopW&Gqoi_bY`j=!uJ< zSc+begz5von~k(tpJFuAc+Z)V?uFs;-f~#5U*qw_0+C&900DUo{_l@M_Fh6M4ZsVCa-YfIk3K>jvP(8dQZ)T{}+V}P*LFh9iET)qJh5B zn0?Eo+7*x>4To#V1}Yd)Ko&?k1?WoQ59vZ++&+}`+m;T66Wh+CcnDQikL#KvMj_MN zxOKBiKncC-tU_*xh1PjJ-mF3FN>^t_^v7*qDVu5Gr>_h*hWPzlfloICJes2;zkbls zd)c4tTh+ru|AQ9jqY$?#x3m!VWdSCm=e~AKB8Fe>1UMVg9={IYz)bFkymq5LNdsW< z_{~{s=FS7i>#Y9~>DXONnmD@bM5;P`2PcF2?v_9xWaS^;R^1e31toO)q!F8W@ESW>79k1`0L+afQ z7>*bcO&Kk2b4d+b&9$5v3lUL=$MaCq`4XvIHd%rq!id!;w+5l$^65@w^CE?3R2Pxm zl)M_dfeY)^CJ9ybt)%A8LruGL6S=gBL#6tUR;-w1JgSkSBglAuge=Z)7v~XN?HRZx zQsP%?I)d>%!@ek-reSBd%VxIJ^YQQCYv~`#G-29KwBFz5jwIesr^GYk0cK-fqCwR4 z-D&`6`=xy3x;>bWmg~njGRxAlS`JA7KmMwn<|H-`Z(xX|euf^}{ z;D1zi*rJZe3TBv^6=DW%VnFX@Xp{MT3jN7P<^lHl3S3S99L@mhQ1pFoEcDSk)#UMb zCmbuE!gA343$=!(ww6NVlycT-IU0!Q3*Kjl~ng zhAL(-x~VYa0CAV+VH|Xm5Q8w`9Vn8Ru|8;d&aRWtQ0dd@Ho&>_m{WMmZxN6X@!ExA z$HhYvK6zCeWa?Klq>udhAIY1dI=4svy0vUf2?;A8d2#MA1kci{_)`RB(R=$sPG?Qx2QcTq?S=8ST=B2x>Mw5*r?i4Nu@bU#AqCOTi7; zTn24{k+MGqW>hSHc)X(wL^Gg}**Y;h52C)waa7czEpw77ERk7oD(!Vh*Cd%ok<_ml z1@jp8Q5M>Dpu=7E;x-Ei0OLt*0JoI2uP9>IS-CDK)Li($8G_wA>sS1K!_ecTQ*N^<_vQ5fkI&rHn+%o&pX*t44+DVuDvDkESC~fkKtX{;9QiCvOUCG ztivUW>Guh5PEb(F%_2Ywm+B;t53X@0tt$6nKQWWuq7ewf7O+ycBB%FL0abk-Al~ch zhhp_33-WWR1jKs=chl*Y52L0Bt;sma%0e9b6HDdTQE}{8E;L;7xQ&rh@x1wI@@Upa z7V42gJ&Iy7Fl?B$?q)bpM$WZGvFQ0*%r!7%sEo&hSmOe`Grc>FUw>4__k;VHlsY0Z z)?-CP!6RCf17)~=#m&R7aA|q<5-PCMee;9m@!J6@o(xNMAV;hyZoL(rx$XfI3Q#EQ zC2m?QWC2EA!Wwq09X}x$Us^tpa$qS8R%XWygvZ0F6#3trK@3ykAolYI2K znK=4_TD@^cj$70?qHY~6|~V4zqzw<2&%8>YR4(C~@q@Kj5oYk%Rv z*Y~GpE&o;6!!A*`NvRlO4tjr2B&yixjtzXU2vuq~kKrnc9s;SAEzeN#9;UqQ*R@0% zw6!I?B6QxAiDnw+Q~|^#7x3Z;>DCQ1nDDwkt`n0RF`iNQd-Oj3vU@mJ+@cU?*ps0O$qgbA|!0=Zs|LOu2mh1vi>e z*N}!RfaYQC8EP{0foY=Lr@mt;xap75UAN-{cYxDDF;#TEPX*WZv4o-J4}BCCmX&tgNR~mk%8kA3Bq8qNYSw$F^l==*1{_Ib|8`k5fDqJxDkL>#m z{f482J&MC5q>E}~mfU3QqL+!L^t$dR!v@M{Ej+cL6F$E|bzt#ZI74hDX{h~b8&uqM z%W}LL7|kN_`e6Uxo`SarMFE4AeF0jg{L&luUE}#AReO=)Fru+`evkdTeKua`GoM;X z>!dE!an^b8D=JF?p5PU2vdOWtmsK_}WbZy;VZluA;un;Eag-)?VkqU~I2)rSsuqKH zVw&nUJ10mT5XQq~J=bQzUnryd?JVSx8R=wnxFm@!6*R?{sWZ*YyZmrmxeOMV`@2yV z3UeDXD};_MF&V_AE&27^m<((XgL1iAW)|C;v@<*|9g?9Xs_U?+j);tc%k#)+_s$|R zMnuL^T(*9S}#yQ z--EczO?m?{Rja%rEGV}*^SG78#}n|tFbtF4{%6uXe`F!@*8}It-%$Gt)^gM%*$eA; zm0mJXoMR5?f=cp+Ln<-yJ_Wc~qdN*u{Jcn?e-GMC(B4eqQ?hwrGDxkiF#$|(_W0w5 z6i3=mGv(ShPUN|j7mNSrx3aa0VxkyHtoVnu(DQWpAft-kWTVdw27om>5G%v^d>V`O zn-ueTkhb~=K6nGl3Hf9ryOV5ofqE3T2NbhgzJ)uZzTvA7HXVgcC-~bc-vBmoq<21E zOo8zbcx*zA)a?!*MIp!P0V~Ni$pTCF#sZYuzgqfjP2|33W}Z*fZKasfK}_k0dP4&@ z% z&I~N$6)eDplr%U1FK5i^rD$AR-GJIH1k+M>bRzXHw;2Z|pQS^U5G$dbb0d+a&sz%$ zyi^g7YrEO(krlX%12fCAXHiryrf9l1qn?Une!dw{3eR&lvkBgpWc*T~@6oqa9Vlw+ zOTmZ$?DH)|7`EHd6zBCwLhyx57e3sxOPKHB<~3Srv@okfZfkY8brMW=wYo6|5s`XU zMuV1`Fv%4;t_h~tQN}jPum+f8{g2&{nR<&c8ePZsP!ft94IX-rMppnH2Mw=*P{^a# zVhn$m^F6R?CnxjK7XF-3vxvr3Xn!*V>)5{%w>ev8U<5y|0D+Uq`p>yFJoObGy?7kE zeJsI1Y4y~P&C+D=AK;!5PO-VaA&I$i90XIH8NLn4{s_HaH`|W54yoqjs9@oBydaMt zP3RF>H2N&0GZb_$L>UPEoY6Sw!asZjWObWoauMZ|Qy>ZWQVJaU6JCwj!yV2~14$1} z+olIKxbs;*9Kg5W`}Pd#+sv>=-8Nl8edqk2zCilK|0JJXI(Xm(`?;++{b?}L=m|%- zGl^9m{4Z_ASu1|{}~<|Q$7J%`5ke$K-r&~_RKX+)M0Z>x!tdf>Zt2i;}|I`M=c*;YpwL$3l)_?Kd;YP@h?|%n-V>x3C%axRJ zaSTxUQ^4~tzK5~H2l4h_3fRk7h5a*7X@HJ5IzqSL9uU2Wv3zeAIgbB%%=1H;kbs@& zko$CM>!Sz2v5j>=rt$NiNCTVA!2(Wh!nVx&(y8y8Dk$^lRP2ib=tw3k$6LcZrFD^# z+FC-0Avek*w|M5S>TO4%*CQ^j#&zsnKAe&oTt_T%*p|-tW!9Sv%ZTWwU7Pkdy*dA~$o6?h+T*qgEufL0Rr#jm5V7hNHSV&+SN_&O$ z2ZCAcg@p^^O*U8yzHoo?^Rj}DL&Py=xg@luq|w80u^WU-5}CZTM#uE|w)eW9beEl+ zN#AylNteX<7kCHfovC=$O@$S-;v5hBfp2N2r!v~*cHx_{i+1u;^s(d+qpV{-Za`{( z>-TTfdC#7L4hA*&11)ZxfL|izFI=s#w1i#sJ|C#tVfX@6OhE=_u%m+d`>29=Wcq*j z8N+DQLLHCKm1ad*IIbclnbuRH=R)Stw`h!QY)f88**W5X5n@24nHVsVf^r!kMIkmZ z7N;+zx?BXL%iooPCffO*HhoZCfM<#x6u9d(E*kzyMVo@r%t>9|qo`&~Ali=l4PKq3 zW)!h$DTL{9OYmEY-!dho-Twt2aQ*oy*X4Tiv8Bn78P}?g$4%>@Zv>A-Sw;XT)Q*jz zVmJVboq4RpqN%>e;{p!ic|KdirX(WGnco$y_?S=Xsl#OW4vWq8!Tn5oO8Ai@QkO+% zqUoxAzWlkU*E{fRz*@@K!yw%;vK(n}N+L3wETy>HV{!459re@?;8j=1d;|3bI0pi4 zWMcVwhLC(7*fUMirXl1_Nn{moYNs2{`_LF5DRJPO!=Vn{-Q6OH0*Y9u*xi6w z*xlXT-Q9K7Yu8n;-CeW!|K@n#_y0Z5_xX4hd#~CnX3d(JHERa(_KW#uaiH~ANG21; z&O%H!ZZ!eMvKxw0eq}Az^X>Q#ykd4@09WxBCNaT_h)UclP7t zy)6t$Q4^RbPG7>H(_0VfOQNTS%(uGn5IU_5h3y6t9qqcp+CsNO<}vd1T1e6TR{{fe z$meqD9$E#uyj_5dUT@scNT=~Y_GRQV*$}uOc26myERM0d4#g`;Lx6%{k zFoSH!o0+Bu$$ekxp{D>qrx$64JwdAKwTBY9UIz$ag1!k-fSkPaKy=@l597=%3SWGL zEMH)>ps!tg0Pl8j6f4QO4ZD6LOuti%P|7uD^0}?Za-lo)X!r>1_BqPElLSgG z68=Hqe`hSNVA&&k@8xDZ4|Aw*_Xl7{2KRf6NO|BVguV-|BB#M(N-|?Xkn`Ujx{^nw z{1kI{L>Y5lw!t8T^$o$V77czE<~;;wSs9c;!I?P;xsMy<#oEAvra=#^i(B1S0I#Uz>4k|(}mm2VuJNLg> zYNg2w){`bhNRuL^Nm0_IXtb?I9*SC6k>lcA(L$gyS0nHVo{G7mQrfx!-Z3#}!oDcV zn8Wg_H*lGIijU{s&nHD%0|Uu;w2md~dXjp5iA+kfWO-A3Dz~9U!hZhaoZ1bmQ)x@? z`TN+Ug3n=IaJ>e80fVSH0}7(8iLR+M%|V(bm!<)UL|Y)a)rS_)-t|pwD9RKxYWF@w zDSF&TIBcK{y>O3wA=I5E&*{xU@%SlsA;BW~lXl&xeAvTQ@NJmaz*VG67}7^jkRRsn zj@fW%+y*%v?##t<1-@s=zK$;MI}vYOkdRmM6`{PvZ6GdC#r=Fof)#RAeuH*bO9wR6 z^gWz|)$Bnbsb;S;g*@hi0Pm+%IDa(CbzAxxQ|4AiwPXkhlkyDHm(ejGMTHu;MRBr# z5Yj)@9g&_b7a^=2G8dZfWAA_f5JMi3Q(1jPI$h0#%eN|e@h+L|F`^-YBGCEszZ zsWnTW^5fpB1~-O@7F+Vn14oM8aVamQ5VOtbuBH_h%I$mjY%f2GzqSLT(Za7Dk}YeJ z5H|Mx2ceQ}U;_EuLtPVpg|-tYL&J=_!`}KJ4-N2?U}(p-9RrTAEI;=3353P-?xV4$ zQ%U{7QIMLpqQa2F7}oy7alzY!2E1;BJQmZ`+Ig^kI|6Tsvmu59U2uvzt%JM{upamv z4NAVj^hv=3&Z5>^$!H-RI^CFL%@diku`&6~ZI8FqPdr??kDL)U-ns&z>UV2|5uH=f zz5HGjaq0njTwHDp!%HhbwMj4WdsVlVqTe~dtV&k+apdk8G8{u#IiWY2>g&w&A)8Fy z((oXyhKmVkq1~`fWf>|LK4_tXeQukxz@(ug4Syd{u7? z243;9f|sN_qjaP@qsc1A23eGoO0Y9pSddGX3cR|;GNWg{VFo`JuZDhsiy?XJV=&Z& z<%m-4K4=1KU3)5ANr(AXQj^P(8g&0QRwjS7dT@M z$zsHI+ebGT!rDoc(u@hPD=CzEU>KiFkZ^wk!h{RkkgZ#76c4_|lq9WwB`yhvi;ZCW z>TL%w6RS^yiTo!UV^n@J77cTuZg?KMS`G$5GZdF z>;+GA`7`rYS#0Tp3a++5=uyVo^zdp9V?f=_j5^eDAGY{>07{E zaLyS41fJ-#1}Oy#c;2mcz={a>p>f6uZI?53_&B3m!VQMHhGZG@XCmZV+UeJeh6VH( zQY}TZakq(F7d(I|?Z?nrOx-mUg}jfjvahPfbp`~kHK#w!+1B|v!sIhEK#_}9d*7EtsX_P5GaysmAk*il*I zYk!I=0{D;jnKmx_sV~Z6goTrS!sd&vfQj59wi>yNj>Q~^`1$J#Uz|)z_d24j& z%&66EjVrDv>QY!R*ONIqUONSv5_m40vJ_2>uSB%-P{u(4+H*HWxr44wQ{4s>5X)?^ z?O^&la3gDEk=G zuh~g^@cPAohAa)`uGw7~fLQzPi3mN_eCg0HV=kWKoKE1`e|sO!6u+6N@pY#uv)^`5 z)VcRfL7??{!RsK^nOVhKKS-6va~9Wo6+*>67058Dfd&{4AB5tCekg8 zZ2!PvK$|_FJ*?$J8Elo|?9myg=%%Y={oyqfjCDfO3e>(uL+v!BC~aQBSkKSB1ujw! zb%T*6F#xA(@k-wDRyk6_be5c@frVoj&piGbCbW9&UW?V%=OQy8syUeuO4utv1}*x` zdxJABAHoO9^3^EctuOW5)=Q|{MwTVRxzj$K%ivV$2TTS1q)c;=Ai~?}WaYx7tY;y> z0uDYJw#O8w=qy82*QIQ=&F;->JUjoGh6~B)QRMbVDAv6%b%TjOP#2y|Z`Tg|2f!85 zi!53`#H(dfMkESdJA}TOCjs&Cr3+AMjTfo%QW5Eryi&#jHji!p0P%+!v0vgy4XYBj zTSW=eoRFoD`o8E0>Y{Q6Pjm3H$H?FTwKZ3+qh>`*0rnz9>;jO2?*cK0^Qm>9 zQsReuq1hc5JcO{e;yRNG>Txvo#2G9LmB~?=Wc?C{@BZU%p^jAhtq3!%5+Q|jnputK zxF2_6BoKC8me&Vv7hryl+@7`oXe5U;!`Dwgpe}dkp?ZZ?Pf;I-CJjfzmrs*|?kH;h zl@X_P)M$iGw;+%~H5pcyWhQk;aRM)6tkmxykL$>J)~KPeYA?6k{lr;B1&04QhsyoC zEnk1^eE1t8tpl}6)a}cnga8_Rlk0Wt!`M_+o+jh_Q{K+0*o4QCkMRq(8O{G-X-&sO z`T}jB%u8L7)oR%VE#!FKg-5PyH{m;F7-FNY&q8M^y>abfEEZnOY@B>Ulh72m67C?` ztpRRQblgnlJ4bL6EphCGKk~(gv}P-L(|`ejKD;W``SF;#g5c?VPDBM6S7b6%8Tn2f z54I>ME(M?cDg^T~dZb!xmQ8WBF4kY zj-zQyRPH$$vT^BL2Kj7Q$PH+kV1QWn`~t|*^T_W3Z`)>lDLix@mbJYvx5u|veQcO| zd+^(f-#)Tzy$R9LyGNs&wbA&+z)b3PKvv=3V*q+>E;3CoU*AP$k^~Fz4U!u2kBTeU`>M4h|bl~M&@S+oqMA;HCn4QhZ@x|vd6{1HlxxE294 zKgy^TlDwBa5$&b-BdNu!7Fd}T1ryQPQXR~nXbDet`Tdc{-^US6Z1jx6PcWyIk=KBd z-gDuh{z(Wcn@K`DQU@+!yZf5m<)XB3zO--wrBq%e>Ua;GZJ6bf~7sqfWv42ide zCqC^v9Y>skK{SOZ4&hZ@;G~5{pMA|R1>x>zk(eAw@pn4oVS|#=pY9c0C~LwUyne!V zH_S#DMpmKsQPiWDr7k`*?u!yB0Sn>hv4)gR=VS(wSr%6EoaHEUZw$4r)t&*Buiyc8 z+)G`x*K!?CO=9e(-Xe#ZW&?^SoQ>Q~8WxW3L*)8hz395zB(Q0pnh`^gy0 zf0a3-cdzldX8HISDMl5tUQnmb?4i;1=5U#z)L{o&cYX&*22gQ_0!1q*a@?;)nY__g zFpZX%{+txpJTApY03{RQQwSO=a~g=!`A*XL&XjHJhn?QxQ5T3^8Ug13Kf)%S0X&WM z(4d+5e^CWAII#s@ek*E(I0J#w&E?J+YVfg5#4%_<@+M8LZS9B!k3_jX1EHth16$eL&5p6 zSkFkxdP45=8FS_yW^&#lH7N%K1-H(Ka=it+pF?!^iXiR?rIW%Xm@C{XgdTjFJgUlTCTor!R z)V%#bF%eSV6*b&r^HF@7qS#o);Z@#=Jd@YKLDwEb^6Gj)kp8&~a}5=IsF7U56mojk z;RvIrO~cTS?m-#TmSg?3Uill5l_d&MAMRm?s_`QK@Q$lj8P4XuIK!X=AUEm&&Svj# zC-yk1+g4N&T*>9g9odo$|+8fkDTQfeF^X!9*=F*9B=|o3rhTI@= zjP)?QQQ52>I^Z3=L;Q=^(i?vPkq@id4pb3X#p+Iq3lzT94-e_1sbDr^N&_szQYP&j zUosNb)M00m)<;R}qseQX86@xjYU}rHz5}VXvHgWuvVJJXvtml9mQYDCguGgUj*gFu zr6_&fBz@gXR!3H7k(qLGIC82sL)qK@4mltDavIDCD$yChib^>n?f1M zcOPLtaEi6@9H$w==7oJ6ATb5np-4Ae=q-bdpmrVbgC2!z+*mzxjG+xq|7cf(>Ru+73e>;0gj(=7DsSI|I|f$fecLjIV1IFS`5H-m8HX&u_RFo#k`^U_Oi z_m&a#+dl@=Rfjf!aQAG~7DUOW*|}_B4rSIX zc?IjZw?C|vT6BSP9@vq9D-)b@$Y{j+V?tM|vSttrgip79$522ye-grqF*6aV#!B?> zh1ZxbQ}KbBw<+zfGkEydjB3Bk23T9nTF2j*!}B(_MOzdJ*-0*kq3DeZ?swr=>MM(#H<=XB*Ai4l;y=J0!fp+Io)~bep7T(F?~uh9)zr9HJa=zG24RRAB;%Jt0Y&$5;1s%Pu4vkjn!n8eO|9PZOIN8QWrRr?;S`zGP6RVkZb*r5 zgD}`lELm1iv}YTd(Qq;an`Gm))!ubjkfUZi!*lYc>j>K&YmW?eld0*_OK5-FoV9qh zji+vX7_Kc+d;kB+IKI{oK{3Ku6Xq=2lCfC!(*My5*xE=`fs4zAl^a}A?2psvzx$#h zr9@$iryysPj1S@ZT!2L~S1p*dHPoIRbQ;53z3)%l;lVOnJOl?kEk|$0+zlJ>4b8EN zV;Fbs86=a+989G$IVCFlp`u+1c%98uk z@HlSRAKyUM?=B+BcYPa_GK9|0-^`HNmhxnbaQ%e+*yYO>z(V-!-_S6(9(4opD)F0^ z2vWTY7G=idxwt2;+g&J?F0>~9=NZVR><_7$`9LspbyX^-<`0WVs>CGCc#?Iq*kQr!|OEcup`3!F`XGJ7fq3k_JU{bA)Iu=bE=EMWRSaMvS%P+E81EG+eh zAF`!axry z$ChsnBgV<`C=OYa4OP05=`G3hHhQNyUd7Bnzb(74!aUt^&uoVS#q?deb*xNC6N?9 zUiD=%1GpyQD^e`|i85kpG3UFTy#wMT9qh&U!=wQapZjM(8{5L; z;B)gDQQ}!%#mTQ3tu?myLg+pF0>Uv{SiiR7d~?B_%&UKLMXrknic&k6k4`l1jlw(g zD6g?CvKF>njL>;F&S8)%PVowfizBFQbJoML%^|1fdkk=zSSsnY=Jt}M@kitjdm9CC zNyI)Lwd5GyqXlL#t1i<(JGPQ)9$<&aD6h`U9_IoIh23kYZ6@YMw2h?>PhVinlKV0` zJNtk-{&gNgEyZ;}#?-_AtCu5RH-?`Lx$V(&>mlptBNUUSM7^qL4?bsAwYvZzf_fb6 zQzulCCcFt`_>TY-Gvgr}7961U>ySpSu%jfk8Kj}K5*dmPeE1PtxMK57U0v9AfyNDae+B9^>L1YRF|A&`LeAGqsaTN%H)EmEfp74(>$D9Xpva)BIDdJ=)npGS_ zIr-!9s(#-eL}ODZH+hbMjOff4xFuSN`07Atx5!FyU8b0~g`|YHD0O%lWwZ~)!|Pz& z_~x~1e*6GJSNS$wsilrSj+7&oK1F)rF-lNf!8ctuOaxUGdWR87SkwvVur%({70;e# z17)z0R3UBZLjF_h_!C`9Rv=;MZzl}Dx;-wHMb@W`;kMA~>>HbdsucIGW42+v*5;daqiRr2uN+Qm8&SuU_KHSRZ&p~Cr}{j zUsmvpQYXQEAV|M`d~};|kfqiRMwbx=ZjM53;qkN zqyt?kWfW7#*RrXiS66h+CkwZ{e!$wy&*vDcwt$Ij%@;Vjpyxw%tcT5c~bcYxBDv|J8H!H(oT0Ge2DSK*4a<$oMQ){lL9 zF8mQ1-7y8qk6BR=Xsd=ZWgG zt#E@C$MGxj#Cj0e4t|H$Z!N{IHFSz5Xa_Ub--nyz{J1|9%AU@(2IMpAI)H&9$?wc`QP+locA3d=o+r4hq4X9t$nUgy7fcw~ zHz22{R}CaRm~>%%FUp(N4LyYax9FL3(B{!|$mjeK_0>eBTnnjP#4F2kx+$Kj_RCEQZ_$JG66&VUR0C+*4I4#PnIlj{06hAZSdU!4G6;*@I!$=O~a8c{#iw$rm)`!enZDFJ% zcRkF1EN&0s3h!`J)OJxaOH_mdaEy|VqX8(cY)Wd`13fyj7+wf?*uy(!2z5&-VFoJ& zBy0po3)@apo-i3{&BskgsJa$~P_tozXf7>aV;#KR#;cZt4_Kwv37}jHwctcvOP(S+ z-FP`dCmbZAKe3+?dJX!Cq2^!hk_A~2FtPTj!64F!di7vU~Q+r53Tf8*`)l7_MqjZjmu65}D7!j`$R_8TUAU<|j*{4Mj;iNmrG=0+NV@F?h# z2c(pGLQ5|6P5UGQJzIyEvSiEAuRUm8kA~k7<$brOAbkp@2)|-{FE;|eNGkhz3H50D zd5Y4EQQ%EZ-o~psuoR_oX0-+<<@9x~$sbj^KyYz}r1)sY6}yg`ftxI+ao!U6PJ<#X z)Nwd#8z?fv>N^yd$9V(sop=xCff9ljA*P#9_UiR;v@U#w ztX#Q*l|!A6{42V3C-=v#v7Y*5k>AE!GRSbrB47zu>2(ywOr9A^&mg^N(2o`2XTT1o z(CjLH*T`v)X+23SGPJMKvS(hnqPAIZjYzGs8%M3%e!Mq2)LYijX zWD>4jLVh&bU-Xk^eWs+~0mxbU@(xynz20Sjk+*wafQ#>T!WRwCQdEzDf)aLl4nbID zGn^qTwjpSEVb*C_u4=-=8E|4S-sQb0Mcxh%mq*gDcwG?VMGwrOdFawr!%jyco3XA} z`C0g#VM-K{roYMl<%tY$Cy%9r^6|rDfeZ0A@lx3qMWi^(v zY;l*iH6mU2-IYo0%cb@mL8W(6pmCPbOu$-}Lq3KoHyq+W;nq9x)ubhqFpF29kA;LV z=Jab!#f&KYqRD)vmipJ6|0YUH<^fzM^2kMhTgf*(<9pOc@ipJc;>BacdU%`wPwV+q z4eXU}QK4mAA25>foT3n+?qzV0cRQH}CFlKx9La~4A+2JSEuIyT^K~Vo8%8!T#y0FL8hm#je*3A(lSA0P zyLIn@oIwr7qL%PzK8kDOauI9G<^xo@#tCYQ%)0{)uDlArYW#-dS3@y<$DvfxZ|y!@ z_>Qlsq#Ha$R3}3{6jnm)G+v2U-zRZmHxi8BQcRCJP*_PjexgMw!){?Tu3jdek#N}l zyB!SKv_{0o#biD|o?GMQ2ih%SDwDy@)=>3cM&cHV-P$Gg0nAqUK?+Ozipbo~fync7 z0enB$ifyFhD<~kd3^BI2&uM%O57pk3(I!V!0oW!7;Crc=9xkn}AwOe%eA?s%1=W9xdCn=m zhu3e{$>|F`(xM6v>oQnb0SpDW6w;hR9H!`>i6!TDW`chw770w?$wPqGqt{B6INuPE$l2G(-h@ zdhk+9s>ysyET(cI(%aNz0^&RugO-#oKu`H>hRtD#B?z5{obkL8gcMpM?acS7A{vTb6ISb4wY+D+RLwqn6t2ZZ9h zLo;ldD9xOLHQ5|S5n4fUD&UP5@^Lt-r>ZHS5bf?scK6An+yiB*UWP%;Ew@iI z5hBqXtr!IhXZl#Jk;1Tm3CNRt>IuTs=jSny4=z!9>HrZtX1kBPbXDiui26!$Pnar5 z-EWhJ4lG;s`Ava6S?wWGw;76*T)>N9Bstnq(l)G@8fkvjP#oXNgIX6qNs061(IjxeQHB%teR8ypLm$CX3>XeY!3$K@exT4TwsJbhJ*K`6;aWBy{4J<-~U#?;Cu z2}{`=K9&zLU2Ji{jkh=cNA3-C0LXAj=Wu$25jHUlH2bk|t+GKzpDGiyqae{62-)WG z5|-?S*$$GnBYh}7iFbXQ@!o(7mtT({ zIxB$*rRY6amBQg3q_pwC8V-$OjNHR^APNo)&cd^@*%{ofY6P~63VPQ^gx|9%AUtBG zy5Kom&lREV*k-&$9pS|hAn)c2yD{70C{fzJoxB{k%N(Vae=tQ+!sY%&SuJ>qU=Ah#klXtuE+e6Kt;_O|lx0;ki4vY}+ z9eJZn1GJp!D%@p^K-7*biLdjjVa?p&@Z}`+}J1Sbh+oD6G6)EtSeLMX{A2$IH@TX?m!RWQC9 z0Z%pnz6vHOJT{DmpO$E8U<_7)9m~T$*O1Z~+=E#ga^HOtS^RhKn$B4si?I6OS%h}g zj3qq#2k1&Courcr>7-IRsiNV;^l4Hv7AqcUN9o19GDat9`;)O|EMniJQilrd+{u?L z&}9=>q?n!y@QbpZ3=%rpV;T@dOUEF@B!9}lQo00qWwkZvVW-!9#>2}q@C9Va^i$*A zj4~V#*8HJmoxSSeHP(c=h*=BCuV*P*ZWB8 zeJOd#5Ri7&^}hpAJN?~8CP56Yi-Y{=P_7^=uv$o=rVEq+M{z8*Yc&$^8@=v5S~+GG zr8bX6`=(J&6A6&=?I4DB8SiucebNLN0}7un`eW0KrT7D<5Zlqkf?IDF+6phujv7&N zdI|2ccL*RnA!x{G6I=q4fmO&JD zk@tf5Wfa~W2c1G{0^H|)=WJd(8t6(-Tj)qni@@*Mp2XNXpP#QMxet@vD|K4Cl3NJ8 z%y#-o-rq)|zW8z+u?TCXQ{YiDJ$lp^z?l9V3h0eA@_`5l1jIqo4ux9%m2{l1C&O zbxVdRJ7Ap;ao$IK)Mfe)@%X?-w9<~g(lfZ3X&f#>+Q3J9_FAjAiCbbf4@e-Mv@Ea zs+?Gdyf*WBLkpbx9AUWy6C2KXS$dMP2tx*n*=q)3I*-ztsa45DFG&FsT>sB$yJ}2l zkQ`N#T{S#xtB|j8=rUf^nlW=l8I<`)^I&E~CyV%_Xc+ClHJV5UC-4V1!T+y+n z%e?h)hGUzRx(MZCVmN$V59mP=Ov4v766=n7QR2*f7`?rlsq#S(r@z|GypZz`;0fkVJU_ysP{Ss-* z=DNL@1@VZ#lehQm`k|YgbJd60Bh){P}~(rorLAnD5Z%J9W1|_W z^SSz2teXI;5&qsm6#3pn=D+mG;d%Lgj$Ytx5&y_FZG+6Xz99vDuR;#jHB{E>018+f z^+f1GxvA6&~7$+4MVWaZjjikfoRCpH66pdd~jZ3(o zAm_h+YK1R4l81_XJo5nW(f-U;565=yYB`skak{1PZlhVX2)EcoX?{m(ekV$E1J;1C z4S#ahXOc!;W~VEY!dFY-YozeC6awSP0o0pHutMYS@aDY1iSjnU5DNI3OcqplJ_yt` z)X|mx_9XvX3!toKOo3-hunVeSxe7LbMxo51?r@d60+}Ol!wDYG4p2-I@3)g`DWS3i z@j27yqp9C<(5Oy(1uQ01lWV*oXh?S-$b(?tL)r?57!Y8t?uD&Kmx4;M#9@jO0x?vi@L=So!+cH*1Tp|j;Py=@~TH7W8GnD z{b)MUEJ`;1fkcSSrvoYS;S-|RAiF+zqRhWPho)^1JsFa4YSbF+I20IJNFFpay zfP#e&06~R>sGq?SZj*CjeSN9P zd2+RW$P*Q0j1xV~?YIqE;>goZ0WgrZL`z#@$nGjH09P9}01hPO4sXyx&QAPx!9+nX zkZ~b4*iQsaH4IAdH01yL5Iw56>d3^S^1B=S6T>E%ovsw;Xs08^IgxMrCYe4Qj-s*^ zp%|u`;qO>8W(bq70aYJy>T!vb}Fu>>D+j-ensmg6}GQ$*8v6itp=gx526l&jP*Q*bXq6f3Ft)HOcQ zxQE|;^11;Pyyv(_b{EE&M^N_3i`t=7pE(NtJL{#Hl=X^IN^((I3hr*#qn>Up@a*U` z8DZ#lhTKfO?O14Ui*>LY^=Z=*4e>IeQuoVH&9j+ajSPW-uMtLOG{QC_bhrmv9`~wY z7Pd-a+RAmY21dc)h{CL_ffT=$0LhLkUd>Y=1Hz!a=3h}L;GL_G*tBgX^Y#x{}0=274>rYIw$ z_&7OnP8vehK&BHkWy{36@mLDIoB`RIO$}tyf_&_OYF`D0$Ul-%bf^AJ5k_uj@~?YG zYI?6Fgl&}vZvubZA4 zdL)f{4D2%*OtoNujcD+eBgp5FbexAdsf!0nA5~DYX(k>{)l&2M(>YVZya`~o|Va43Nkhp`EnP)1oPnhEy@Gm|lx9uq8p zAUuZ;5~S1XU}sT{lBu#_gjxDOz=n)49srEhIFPAx)$l+LZ+~Fcz{}ybDBXn|FxmV# z4B|&k57MpMiL+y2h!G8dD^4`MWI66xxSuM4#Yb+OCdopS#zW#6`s6&i5_p`V#{87Q z56Iw&lI$)etQ&yXZOh5(!AwSib~W~>By`0E#QIMl_ro<>o>wzEQPh`aeW#o(h|j<) zya1620KWMS?Mytt>vCiu(=wKBmpS~%XY(M}x!W*{V^U1Zbp7=OgWla)?9onGroTPt;>tyR+2YHD(J zF&3o5&)1+0K=ook4&|WcbU9PQ!*6auXunO4(ABjb2GlQ#mr`W08%$RV9b+l+0VCi8 ziIlP>O^bA5_tYRm0}>`9(YBTX_nIy8pms=s4HD2& zcT}h&rrs>nF~Ju$4dw&aYL>ua&b&%#UKJJgbj2Z?-20AxeU^#~lr?22>iiTSQtn?& zURaI3!}VA#_SE(y$b^?(?6-9?7@YwS7WHJIjN*_Qx<(BWp*nPY6daL7xj@iw1vr22#$#5sLB{*7{8Tx{MhkGu4$^ ztbs`c6<{FX3u}ZpW|FN|1fUj5^kB&kTxCJwzwB*GSGH2eo-rCi|;+s2gOLn_0gVm&=lMQ+B->q(6# z*uq@vn>&KJWpQ8KmM%`~r9b%G#0lBn4!JD`Kje=EnnuNF8PUd2qUYv;d2%D$Q4Rg5b4GgE=K0b zz2N2|Zk1>QkJGPTAwo3{6v)es$hu(xrGI0g;meg&IS{){0*>N-qb9Fd8RYu+U&CDK zBMfRxIeXxl;)0(mwL0?)TbO+14MQCVj0DplUZ-0Aw=+ey-i-ASoyLNjny-2gzb_O0 zkYW52mOXAP#<#}o!%;0n&QN}`#})iIe9onYQE&LAVxX;5LuMIo`H}k3OI@jnxsKEX ztW3beAk-T^;G}4Y+fCh^klo!dlP5yH9gAJb$0YBuWL@3ug;?^1N}Mhg4!w)|I(K}A z&ArpLDJW8zYk(LF^P2x9L^KQwavU3NZjRUp7oZXOhokp&k)d$t_On>A2GTch!rbvG!ote+t1<8#WhJhH=MsQFCR@vwe20inZ{Kk7Nn79USAi&cgd1bS#qHPG7(=!G zd>I@z_>@v|ry?Pn+FEHrw{zSyAFEa_kJHzMhb?@|H>?EFF;fq4f2Qt*Cn!d!6=D6bUZT%KJq}lKbFVMK(EeJE z-wG(Kk3$BRmb{m^&Gkg+ao{CFKgi#4xR*dqT^#<$Hw5bM@PVbUg=uZMV~WK;@Z#b$ z7=8AS=0zU;ijP5?Ub_b3P3|!I4>t(_nlc#O^e)CZDz?pgyfL{Hbb!gQMTYuzyq~c!oX4NBixoFAAOIA1?{|SlmQXaC#%~)pQsFTfwTW$kF@M^tMl>T9zqWuj~y;nn9LArgG zyd%K+)u%X@E69^!dKdYfjd)w>`O=0fve4t<#q_y97agR+rsTQ|eQXy%A(^qr6{fRF zga(auz5mvy?*cY>Vz31G_<9ux+}Qd*(WzNGNM6+sti362P(axZYyYaLDAkQc1-)2< zE83oN4VgwOzq$e>*2wi6@vP|HP**1&W8iGkRg~nP4WLYX5Ao5hnFPt!;qOC(%#e`@ z|D%L6pAgkS%@|8*JP@IOXd5AnB0enwnJARLr>@VjNrE zUrTrT`!q%-crx=K?l|LXQprXDDushMr}uqsfmkq)$!-`Ih;YlPpQ9Pf1CMMCC6eiT-elUyR5I6)M3v@hznw-)pa`O&6bPuG#rT-u` z_QN2&E?h$vo0)=F6bCXk1^!9Jp{5?r;BU(Kd_GwB6SBFUC$E#0GU-_&zTq8=y9Br< z+GZ2Rexxmac9b?@4l1#kt;b>-mykuQZxeOtAmX~{D}>gt?!&9YF$NCUx8vO5ya>O~ ze!sdPF7(Pf(GcFtqgUZYy>YUhl-AQkO6!F^qQVqs&Z2WqGEeV>#JsRT?At+0cm`eC zP{u=+VrA9V*KK5G)rfKzKSv(tY6wqBeM5lc5l!`Zoy(sHJ%A#Sp1h6ciu@1(J)~cfKPtb~1FX(dNImiaIec&eIDwG(>|V0$kGN zFuKfyS!Uo2VrC^|8E>kI2g~rC{qXr-yy?&Wk?EfXIFHjw=7XN5zr>`Sr`s^4YkNlncRrKZrG zg|#_IE~HT_DZg|f>eWr70f|#_cw^ph00W06;W!jlK1ky}0x>mXDL~|@Q)pq2k5n=W z=LVwLeNuI@;VBEf#@4n1o$*ss%ov9I6vHQ6Nz*r;{6{(YE_VsI_KQCflZ*01olv-B z=P9&FodSk8Y7!GvgRh~;iZh69-iv3nZ6VaMMB5B*J5V^Dgac_a2m^%ohx3W%Eq}Oc>RSO#yK|`iu@f6|Q27*r_8Jr)BAO z2CmB9J_658TN}dAL+-au=;ZHuaNC`LNLNEEyr$Y%(QA*m2L~ zCxc~qy11%$#2fkYhRs9ax;^A@eS;A!At47)GRa3i)9;1`0xmq_Zy}$z11=N8e5iMi ztJsU8pX}w)!HuceETN+Vy8xfzOYxbF+hV*5pCOC9C7{f!>2=zu|RcS{jrvwVIC^Ing;(0Qq4e$HsQ@ZWCZ|o1aw1!``A1dVanqdxEax}~x zbi*N)kQzfNAx+TYmWS7gsWwpR7=ldZTbvj+6#))>Vao{HzwQFIndrBA9Mq0-%Ak*q zet+4-`eHh^q>^Fz;&$LEU<9y`IBkes~RdEg7a_AD@$ z1yfAdIy_7nKu&9lz-_^@aJmk3JW!DVY7=yE*_iSMwS=;2i=%!hsGch7Nr?mT-GQ*G z#>=;}`~?70WySlFMwx~%!G8e;RXwz~Op2|;y<6XGCYLiKT)25v*C?`%H@Ci<0Vdy}Xfz*5;VrmUSFUJ!wi6+7nR#cl3XBt##0%I&P}MwxE7%p#D3 z*1>zssNVSG)G$&vDgfi}JB&23I5ZjuKMpE?q)fD=Vc|F>fF9D?F?f%KA+_9KY@LxG z)p+fFnA**U(;hK~+Fe?MMPj!Avt0TS!(~beTLXMPX)l;W;rK5&z0VUBK2-kg6VSf3 z?-QgcKb=Pyh#l3!bw*TG&p}Qkw9U@hbA&iJi z0$eq9#3zM4N#s=k{jZ0a(!(sOek6mQT8QTup>8&13>$`Wg;Fn31(8@3Fpe1w{9T9z z;+IBNQ(tQ#qs!VG_>kk7H~-DO#m^adSIj;xNcEwu6NWug>zB~en*B)@tYtLhGd&!6 z!XuaQydPI_lhX zf5Bpop#7)C$Z$Xao`K13cv_hC%~(oOpovnF5kdn( z>Fo^BQl!GqJT9e9i~!ZCHS7YTi38*NuI<}ky$*0+1UPp#nkE)PVp@`^FNI!{LjSgv zLa*ycp*JYzU#6*Cela!W)5%?wem?hx6GgBMq*xAXZ}?Z_iGiKl8psln5joG%kUU)J zoU;P>d|MEH!IYfP62jwlhB!+WZJ$uyD_+%&^G!HB&x=d_ParxMJPBeC(55>n<4z_H zd*#Zt%&K9YMKjp{9a9RAwz9*|p3+b7nD=_I9ATdk>+wlX1$QOAwpwtajJ2oH_BR<6Y{>*`)SfSR9r}`- zyDicJq{}ctrjrgQqFFOg?FbM2G{AE6{#;dY>8Jn$W__d$YHhEPp&_Fr9$TBAS=!RB zi%Ma(R|dUo##NDW2-1bN(6(!fJ@?sRU}n#TE;4E3D{13vP)~R5@$Jl9N`A_!3m5y5 zv-2+$^Q&bFBce%1Ebd%4=1?tj{^jtIng>NbKFCmThFG(%7H>|8V4*NicOBVuN9o=` z01W7&hUNHJ=y6_wHjh`y*e9uDg@5+oZ*~qg7>C|(V3$MY54glQHUoCgK)0YV$4JS&oTsf4sr!;m)5H*=HSuZdeo%(S$u)a$Y$^hB&+H@N9bq!S*XJW-c>yC9kusl zocHnEdF}0j4ddws>FGwm;i@;>CNJ}$aMBwHIn#(9xcIr9x^|d|A+#=Ke!%tOEt%Az zK;>N{>GTA@e<|CF zdB2zix#)3r)DAqi?9DxqZ*GP=THrIoZ{RI5{)sFO#XDp`(<2-;o^pk8asEK|{_6-^ zXW65CM5Zf}@U)SfDHNR_%6sC-HnL=(x3`3OJBj7G|8 zk;P*ZRQ3jTk_L7r&8aF~Y4LX6C3F3%k>=HQI?NWu!6?cqL3*7}>07unU3L|smlms7 z+GJU;5}~{-5S!N zEvL_SFwkux;?Rd5WWSbeW;#wO=88T2Ew)>y$R<$+>uN5ofIr7B+7_QLdg6>pP z2i*Npkj<$mBqsM@HQ=+`C?&%QFx+#$6C$0?mjhR|q4;7Z;1gbFGT3Pbz%K5L0~oOL z!|-Lx_GUu6YScy+HFjAg|Olx05ZR-qFBvsiU>w2ly3phB{tj0I`eV}+;nn9t8 z-FD(&V8|5}T(6I973Rd}X*znUg9YO}b|l6M!khOsOjo-$*BY%(@F_z{rN@3YnXUO` zEJ|yxV^i^e%=g5CURDdG@aS;}S==X_gz1P!F z&R$*{z^B|hM@`zwxEr$}QNh?6tjEUOczqS3G8-0Qsv_&Hk--9-(8h^IrVYdZS#7fA zMk|`X#f!$|s;;SyIn+dZFlzJOe-@SDV)ZM|*?f2*!Y)R0fwde?ef}dNhPcb^0&DWj zoC|CL+WFtHy-~TUyon=2BW-g2|0z-;Z>z`44{B=uF2TnTmGiV-hBGg88p-^ zd%pa?!W6lx_TgryAvuiaz0xD{Fp!B~(|?e!{ugQ?E)pcu!PIg`9un0CvoS4_&p>jG z^u#EI^zJGODst*tiO+x~NL&LVPT1FmlA1H?cw`_oZ2(qF#HTDZy--2YZpb!-N$*fTqkv|t9s_mSaYts|xN-GpYjrXLlgRyNRI--TS32E6+uhmJw0 zO#CjB8a2nhW7P(ROi@wgpQB36>bX!3oIeIp{;dmeq~4(ud|`@i&&y9T|>56!Vsy>8V-^Aa?+gMtqY|ZY4LsP?R*!X z_ROSC(^62}zRfuvh~-#-I4f<$+-&18O1Qy_fZHFMQ2TFS*+lzWR+bguKlg2|r1SS2ZWE1Glo7&$u}z}NhLmtbEGxEhK` z`DrS?#*~xNB~DLXAA2KtzJ*na>pv)@;bLIYv^{d*_uRi2b(wb?%MJ70y+YJ+pdx0v z#Rd`;+_B>5%C$d{$Fa=`QGx1aAJ79Q2BjQz0eTgrq)@#>7z!U?nk2VbC~2N+jO=ok zOkLc$#R5sksRGnm2H!`lW$}I)Rw$`$Ux-nXUog3z)1EmbUYrhZBPtTB}I1?v6;kS@CSAn*^d&b~ij<~sw3f{Jtv!wfJq z2q@CsjX{Wsh=q-T0Rm$88mnThv9@bt=bCG`Yj>=<#;WJ?e$M#&KkxfIFAv{4-?$y; zo_jLtt0{N+yso+|ESG*_Ua)nj%^gQ8-vt0&)gxB2?b4Z+$ijMODMBAP7T`+< z@e-t{4Bqimi$DgjARpIppmQ#R-5i$Hd9jV0p4^hlL6&td!%C5kkw+feXl%KCCG<&? zr|BTR#j$zFpzxTfl!VUU%}2uRwdF7j8w79d9WC-AdY7;NJghYlQJ#`RHvPu;wSscHi`o=ceE0 z6jZIzMDiZOE7Nz}4TNnyC-Nqmmr#PRw?Q2+6xE~oU^2n`p!@>nrDXU6Xs9pzQK5J@ z3DU_pAT(NtoTfgfl2L{4hWWs1&$9!YFGGFz9EhMrW@&dpv4>vwo@QcCbFJ88N`Ay?LN0|%;25Mnq7hD~@LZ7)i5WbQT)%Y0 zQ}By_0B6JM4j`-2#}qdoh8Ur$08A$C#6G;+H-MBM1F)qzm0_oB@{M9ng1AGu8JPgv z19yO5sOU)JpJ`!m6#lrrj7E|vMDbaSkT~2`>nt~cmFPTN`+rlT&E1~(mi{dVp}Q4) z+hZ|*YJ;=spEMGNWMGp2_;`GBZjm4pj_Aj7XFR!{^J8vLz|y~Xz@nZ!0f1J1;jVMr zBme?%ZWDR(CMHl_MNv#vsF0xH3zOPC|WPHKQx zXH=}i63FsB!)1-U#EZ|Wh(Wlz@3#NzI_Eo~3gJ0bCOoGJ&*>D@%L|!$?V^yu9&9bR zu=fwt(DVRhn6l8DS^Qhh%cW;`a{ zR}sJr`4MB@Vhr0KY5PC&k~id1#oa$BxfujIK-Awx*~k9l18wM&>8M8MMYtAI-=Uw7 zZCd~N?7S%d#R+V3V?N}_dXf5d13tL)0;M}_FL@O34E9Vt3i?E=90%O1Hg*CyN&Ug+ zvWzn`(QL<);oNLjm(BR#8lhv4xn;jq7@J@S0&-rXug%i|zW~)0aIU!F2h5ieMMp8D zX?wdBH>GPl_}{jq{3AzhgLrO_ih*2~9wOz^tC05qoRp0~WV?)BXsKr6ble9YOvD*4 zdJC>U093_$jBD-9!}wx;iqCrqCx=Of5K&L1e(SkIC$)YGNRcqW7z22E8JTScwuWvF zgp`q@1!*f6393HRRw3l)D6ys~ z9n3^JeIJ$Vtvlw^=3hV9slNN~Qc)6K7z_z;=HAQE-7X z6Gqy0!B_QFg%k*I(El0pc|A6G%2bpX&nWT5?I5s0>xY{-)Jh?`#lTn|1>WFIJY?7{ zSwjQNBl8fbKAeMszA#W>B5j`qcr2$5dc!b*C;rPK8G&h|5GG$B34AEo6JuD{tl^bD zi+cIzg97VtqYuk=Vs2|@E`{9>J&13)+}k4;Su3y`_}yk9{>JlZ0Ifkb=0^&-Wv;6j z5s#^eLzr;%0K#@N?a`*O`(v;#Y6EyP5B8{(W1xcF1*#I4$V7tOF-V)F&j!{qf74;y zL!YrHfq|qjpSf2{pBnO$4?^yLa!Y~(87V=2$_KGW9u-6EiSThif9FDwG$QalG8y17)k%NpM`KL*Q9fN}X+FSJL_pT7U!i2wh7sa5-pNDw=8CBovv!x84J_c4|f zG6kHuDCGE|wjvzxw}bl%U{p4b_VZe_J%uAD7j!LOCLH!rOULf0xbbRg^$}R7OuLx0 zM*jhLPo*KRHZrp5wTA|5_eaa!p@XZr+sx2FIDBCS37X%sRwkS}lZ#eBKT09|TOn*j zEtQWs%N3OV{$G@&dOAh7!N*)L!c#>a<5W)jm&y^Davp;|Dd{bw+~b28+$)Dy;j5<@ zWe7QLvB6AiFc%weQ1VOl#`{DgSA;be9b_5`S+ySq9CDI-p{Rydpyz-;f%@J2uCM37 z{+a`e*>ikmstz`%v$8n0pGQY|urm$<>cfk?hZY^uY3xXJj?;smh^EI|o)l>lbwt6w zjd+)xuq+&6NE4~3^eL)p+m9>~N9k6S`wB@W2A4r{9GH&JWDRZ(9FFHUVBHur0=42en^@L91f!_Gv;M(N+AZIkjmn|HKwqhWq8%QjK=zXkqsi((7uub2o!&uKpsikEHD=19~nT% zFze}63HG+W-=Q3>KfWoWt#K~l4PFCI0`xPihQi(K5PcC^-B^Uyh|uvOw3b}@1t~;$ z9aDaS&Vv*y^O;Frby%LD&4vY^0bq&gwU3dXwJUJ_hAG%C7MW|Fw}ZH^AsoXwpNRyJ z@tn+4%xlq1XgVGyv*%}ZLv25oZS!je^kX>dK(fOG zw7WKxw|KS1U?k8gkHcs(@=II8)6jj*ZwMoCSOFJzC3)QJD-&ZtBkIj3lHS{?#GYrE zvJbc()!5`fX#6k*^4)ud_das(br?1k9+FRc=8Wbhs}P12Ge5XD1UPT_^3YEnO40VN zAe+UPBU{-K80S5*k-D$5M&mWEeRV*01+0D+U?cW4iU+Tu>LJK00Y`n1jj}sc*|h|6 zP_!=(c~@sKb-?S?Z!iHniGr5wKosw_6yo0)Hwonw0jecH>S8{pFV3aVPFGQ4+bQ~# zxS$rVu0~Ob%@-*aW{BqQm&&l;?@d7bPVHF`s>MVy`q)owr)AkSmSkqTa<#Pt?1LdabB;6ZP(7v2Zg| zLByGj`T88u7&$$0V~p4Ba$N&MfVqnfDMFsHegQ zC}mY1d6gO~#L@MzL%2afW|Mi-3mu9*LDt@e!Xg+kN$it}l5&PyU?kKgnRN93Py<90joOx|EFb6zs&=`oSGTve6%?eCH=v5|a6A z>e_Q4=q>#X4G?`I^bA{&e{mD!X7&=^omc`v^ZRv$uwSPKMRkvBJ>+8ab}@Q~2LM*bH~u?xC(Qp;-z=5VDMB%QX5AroC<>b z-a#%MN2Q|;c2*~JGWa*3-%0x8BIemsf(D@RZQwe z?T&ZEKA|5H2nP5Oe7F0Z$I5eyw?fp7&=YkdMO``NI2Y;&XTuf1;-F>TK)yM}uy-0y z!&ZI=nmh*f5wTnf$-2=V7Uy)HaRYu#opx$m)^8RJxJ1PB3QgwNRe^~SIVZ& zBUk@P3O!q>P*QH-2?xHqi>{E+1qQ`$y8p1f-ZHz=2CkUHlC=8dFRMB^?nTI_%9 z5k6a{HKrc647JSmG3z~G7$2vDb=GaNI(|S--zLz+Mg3r3T{QM5^H&V-l;-DQ;0p{5 zD?3v6z<$<*eBBRlJMvEr)<4vl(4LSEz!_13ZW((21NEak2Y{*5JQ-1-W<;U*`U2nByNbNow zzF`K#;hWujG$!aA&LDYAn0)9@whqU5>N(9>%qU&lm^pY||D6K#M@f2ilo(cu=Zozr z%ft$%<1y&Va!^%i9+j*LML+lsgB_#q%f+CuT5L?cx_)Un$L~7%_Tn`VYA}k1k{+*41Yx1TqFgsw(r7 z7rHyOLpwx?f#(SDSBxm#e=Z(JzrTnXHvCZys^!~{%*x;6rKb9>WZ0S7eFRrd(*K=C z#9QL6i~U0E)h!DpdkQ{r4REL5bEagE%3#c2S(d@4zT8R;K6ElDz$^2ebqM{w{ff}B z#R))sXBT)Gq_}A}kgQ9UF=A?)XE5T4c@pzn=Zz_(*8@~9$&$jXexP+lLAcsb`$2Y+ zzcF?E?+z+t8b}T=J_3%TJY~&h9a8UdA96@pyFjM;9dy%p&_dA-ZD+A6fs8_LJEEv? z%g)Go7}UPX($E{q9Y0a+4uQjwXQK$RsNIK(TK~mMw(nJ*NXp`)fX0B3pY^3CzOazc z0WUqkFcQP};%oDnFsO|FQRTX?&<%3)QDe8=9)`-2+m3}uKEm)a@(kL*@JW66_8DnSeuOOj#wQ0ACeS*WlNYP*wl!~Y0Zp+_g-&{J?1*F9YKaXp}tQ!|ln=)36JaZd{_GqLA;e=~Q8U3XN(-noC<4s|#yVkN4dgD0bg<4BVtWt&zs{z!osm z@>Z8J$GT%$f4oZW?SXKB3D2=1UtVK(3|-E0f4LheA^Q*9oZ3Pu$7bT@#XTB0r37{N za3q_@YcMLF0d+9cASPZD6R$(GsWbNM)VMyF=dZSCC>7>!OvpazJ0b=7K-6gA&Tm+sFfhVn~b=t2|ca;0v--sCLk%op8nI4jd#D-D( zhOb;j_rHNOVq!!sZ-$Z=520ah%mZ;X8pmG~?&GW@I~N6e5VpAa4!1VOfAR;9H}J_I zDteG_z9CkE>hUw3)q?Dv-jZn(%6-~NmJjCQEV$9Kxd!X03>Fh77W0w#$`C5em=r&Eht#4)_zr5stpRV>aQkIkv~FAT+8u1vvF%1l7RdY?fzhG|$j zq34g&_%>`|M}*GJ_{7+K>v8M=$^%na^NE*BVg}R>c)dgjlswvy>!9rSv(CJ_afQ~hUjkeul+@kh2AE%;BeDJMM`hof5 zl2H2-EQM;*(8A2wlp1&wH?R6o+37>KXHpP4zcet}mMO9`CxODCGN0R9NRdoN4 z!s3{<*0VoFjx%B$KeJT_*;s0Sjt9ENG#;7N3_cHCQuR$1sc~8RRbM2{)e}kcIGaZU z6h@-N2e)D4<|3QEw<%-kINW^tmLAX!PlbXhc6l=A3#x%AT)+wPi(ZTIxVw)^Cj z!ux*Pq-un!Q{bF6CtqXMm(V`CiuU>RA=it=Pt^oZjDZ(hY z1@D*HQ9%e3-#{A)c*}XPlql4PRXnnq(m=th-McHeeGk9_h7%IRi7^Celj65lA6Q^pK82yYkvqey=nuI#oGcEfh{LH=cx4X8wZLH&&ifik!gZr?-2~jm z8KoziOhVLNT>$WC{JRTa^{UBwu7-1QSK!uKF|*_c-_E>wa?uSf{d?a35-vMAZH6fcrXYk60F zxEk~K*#Lb5p`XOd*lqC&bXRd{Cr&f?x+IR{1Us%n6I{kLVqprVr=JO_eo8*77oPzd1lrluB$+rphW!7;_AImP2*{n*2ZdNJ zvek8Y75t2zoG(r;pq}MWYX=Hrk%yW@bgqWneSZsJOf>8na0|)jBfK6vHex{>ofwGo zp^I{%og=irsL9*dpOgAZ^Pp4n?;Y5~i$Eu6*HG;aKIyui{fpouB(ZQkVuN64Ni8)m0Kz-oXVJrw^gRGgr7bFD4V%fbC(j|L zEuV2J*ZqNlMJ|mRV`dnU$HL**TRlT#Fy>Bv4myL|pwjzleuZ1c$vAdy%0}Lyb?fB~ z4`IzGwV3qWZxVkO<0(!E^Fh z-L{>YIRSBdsu+}vzVI14kVUtpxL2+^s*qU%4kxTwjBL)z;fjGbkT5MzP4%4JjfJ_+ z0wH$*EY0l+fuKuIspN;JQhDzo^(GU{LZmKO7= zl>a^kk$rFMl!~ws*UrWC2`%-*h__pV>vxJW4MMr|uR))2EZ*L>z*L&WCw824*qe(-CHR^T&SZKXe%5#yu|h**1U(u zg$`T@jIE~rh1lMXpff=8G3*aKc%89C86yg3V(ys@|ifb7<_BvY<%PL?f>N5E>Xb2*< zL{BDSdy&sm@J&DNpah2}y76g$y%KV~gJ0DAJ9(7y@zUb`ho2~0d_7mN=r;F;?OE!-)c}CWat9wfU9LWmi_BsT4tayM z7|ND8xY|-&G>)R6m6=XJVPZF#eH((v%F5F)hv@Nj6&wIRBQ2zEV2ywFJotxLP9q~& zz0GBuw@gG&B~RGRRM61P_mHZi1ADbjYVig47O($b^XDG@^6}micFqBKdVnV-Yubf^ ze{4c6;@06>j|1E%yd67&96KCC)VzBYIo9Z096JurQoN#d<-=bZC8u7YcP^+ zf5){}v|R^S5$z#~DFe`F_qaRK^&n{~d*6}N{f~pVi;ekr8070QSo9bIn$BtmK=po< zTUWr!I~JFCO+_s4gcK87P`t1OXzssqF=l?vC$2~vJ&$p++_?Nc(E_kr=r~X4mV#VXNI);@1y!2rc zY-21X_G^opUv{7hQ(Ju0?re)n^jgP=qg@rxFPFo+6(a3dRD--c!3^FppAvraN4<nzH32p~6ecIh7eo(bKR@I$frDzY*UJM?oxs(&w#3G<~;!~LL8ctZ9fvX%*{v)fSO z`a`(6rX=6)=TPMYJ!i%xPS{fC@8#A((CXQn0p=s&P@eFOl{3N$yB1yDJ;m+ z0lpfNuKui}>w^I@(eW1fjrojd7Q5OYbghF~H#ubu`GoS#H{R31h@i@am=NBuSl}H% zMGkR@*XK(Y%qCN~&jV-GY74f&r!S#FEF0Va?Np$W)(to+Eog=d$L$5Cl=5P*E-TxW z3{N~;BuJwA9&r4&ynUwqx&+_{y%)FuPjQu6gdL`+5%#iFU{{kf$?yJ51Mj^+aFD0lM3(F<*VU-9@$~ zvlN^vZ0s21)prV|{B{&KFG|4nnS|o?*MqpMr?1xNLB^u}=goL!_?jyAG$83j<8I(; z*%(c^z=G6Xw{?I)9K^T{B$Yt(*UhY12K8#KTFYb$cBF|EU)m+?+I|349 zp^2Uq#O*+F0YpN*{LeK432lgJ4ze%&>#k%AhULfWcu2Z8Y!Dnmaa_8WKB*YoELlFSNI#aa2tD1EN@ll>X&c5NZm?os%%Q zrq{^nN+fCqM$uAkLBx5MQl4xBADb|krJ%N<>+sg4vKx3i(b#TU-|T|#9_uJQl7T_~ z^<|vDiH;iL>%T!JzQj>%(@4yKO=M2-FB|YV&+i|EPF040>NceAHxjcX-;Q@^pB2y; zf7g%PR%C+Y+IH?mysMqCQ!W~<=CKQ4>#H(fO5Dt2ZFcIX7+#orGP3V64j04%L*=N? zt_zfWxdJy&RIn&p3~Wg>jlwCQn33~7V|dotz50gG>HR7Lg`r%AiPx&O31j8qmz|MY z1&m#!?q3Ylq4Gc^;%R1biEg1-koY-07`k_{e!;pml@`hL4wnVzfx~oP@By7@GlZh= zFP73kRgIM^@G;J26hcQ^Ou<}I9jsEg!GS2bbz6xJ_1$_xQaMn7@phJ`g{6kLAk3LV3xIADHSrfY$RHR$$byTI5xgU=nIBm=RM z!+h@$d7cv-0|g=7$3Ud}qAgGNV(q6E*J03dn{%(kO=W_~o)YT$@B<#T0}AA#D~Ya9 zne;x}2%4Fz$l-cRQ1KY5Ige^5ZuKy zR9AarG+Pe~z4$k#bzv7=U2%0IbCY831?MK0VNnaMaS_lxZ$BN7$M1II|7|AW^?Y;~ z^MYc_dZ292nEp@^oU)2qE@z)-(bqL-$I7+1)=?LiSy-)I=CwmSb!E7YQNi7*UUC#O zwXEnm#x-iq17x>&B`HfQxa>gVFUY|04r+Jo3BGhRr9sW|k%7Y(!4d_Sk4;PvFJem+ z;!V7b>u*Y&cL3ND31N^VO`h`ZKorpXs-4ORzuGjFs$qH zoXcokjLNEh!|~^t3o;D6NuFPO@iJKV3i`&pb~V+Xc`J4vwwKF|=voAzF{ZB$C$!ta zuUxcXclf(g8~fwP%l98#Zz#NlC$cNsLGiY)k%{?8;IROSn(i zFB5zBk@rF<+diI4@ij074H4m^P$qftOkd;#h@3!qtjK9a9`BREtf}}&k&~Txj;lvr zz*-E8VR@{cF*LO8NOXj2<7kAwF-yQ^3b8nV(vswp5#c7}i@&i&)~CIlDe6QXUe%2z zhwwFsk@BTAx5M1sPS^jcZxtr+YGAMxJ}-@V!h;m$z8Ngx!HgM`#Gfg)OKa@&xD`Rd!Q0TMf7U{O`av~;Z82cbSM zgRfG6*f^YgW}vP#x!XBdY4&w3!hN7W3k0ak}kIpA92WY)g8 zGF=8MlSRge!TX8~qzWJxUSlOi4(0vE7U#MbtwnBC(KES|91cF#59L)rPM%jLKGs!ybRKj0-$x9!}s1Xf*&4+(;FFpl1CeJ^5!^z+rWqm)6EQ`%7@YX5(sk{*%U*G3~L9iD_ zhMwYWbd?K0j!aD{T}A-(rIa!c_&H#CX1YSJxtKlyV^+v`?99znvBDZDJiC`kV)jQd z`(N^o8v}ZA5Jk)wi5L@dsLj*XSdkHr7{`iod5`<}_w}gDpQ}JU+HQ!q=0(kPooZcw zpZg`U`7X&1W_&wBLu9!m!VY4;Sx?C9YzRfb9s_cHO%V?nS|$zP{bJb8EeLH6&ct%+ zIl&fiN`2v?0YgvZ)+X;NQutk`kvoT=lgGE;&t<3w%wj@PdJpJkfe7_s7meNd5p)(a zBLigRz1v?do_9Z@%}k98dnTuH2WPr-u^QbHh|y1pkdwIpz2aSu?|9@Ss~3)y>E`>_m_2ap$|>5lv4A-OobWg8 z3p?EB81bSV>U#nayk0;yxIhBl=h~)P61jhYx7&V?Ow2SV-{=)G@l{LX%-7%u5(rF3 z3Hv8V>E09vzy3?%H+hKU1o5)=6m#ba-e-L5hA_I7Cd`<1C=5a9T6qVJF$Rc< zDZryge?H#2ghA9KU>v!cnqc%qhYE_!WH$HACY1Q3hk}Rc2AD>j#_mNeTdX4G!^V;+ zSnqMhpijAUUS}YJpXrI<=OXxpTm-+QysbP!nL8RIw03`uDd&*+io47^ViJrmUlMmO zQ|MsO1Z3@jaJGjZ`=Jf|;D*bcvK}WOUCuiwJs6QiI72-98371gp5B&3c0G8uiaCda{V5P=>1mp}s6MU6}Xr4zJ8;PZt#L~++M2MwV^a{k%s}#{{AHJzpU(%hG z^cucFux$?B1SAhZOKta1#$l$ue=fw;i7I+`#1LtR=A%F2DEeX##929&Mjr2jwVD1p zMA8d_WslWJ@78XT9PXwl(V5S27uHhu?H}0?jQOo7e06>^TGkV;o4fO>pzI-~K$3Ij zu<(sjzX5X51lBLeOKUF^+lNr_U-m#xVrB!dl`b8M#MLWdDOBu;W3=!hZ$M<0?mYk(MktjTyhW}Ui>(4xzC6x4F}-?$GM&iFvm0*W2^7jCv@ z!$Wilct)5y{a9`wJB3*oKVFd4geejT5neWrWMaz?KrLpB5B%bV8RIb)yw6K`)FzCU zrBEBIFdnRu_pVY9Nvf`7_NYHTI+~r=byBo3)6$l%qf8CM8PBx^k|SysV}!Tg!pZr7 zwL)kc3vCkvQ|h^R6QZc=`y$jdUV*Uvzl?-C?%R$oR?k!O`xpCw-9-Sr`(1+!M(J8! zrK9I$pkn@ildJa)pdU@hdmIdCJTjzy<=vsLCb@Q{{{0ypG5=!#RPwz03;}^@3k7%f z0>~ezS%t*z$H;m6Ksc_M2|DaK=)Y&w>WK`%eeby}4UiJ2mKl_Y4r+$Mt~J z)v*d7hQjP5xu`PGW5(nQUY+>*mNM$MVt}=Eo)DS8hCWkuJqCQt(|0z0Rv*n;_D}-v zw5m3j0(u5g5kLbeUOQ9)5!lGn=Eta&6r8wufKA{{(~<{dR@pqn~%%R+HD-p1YT+g z3%n2Irh4&Y*AC|f9GNHnf^S)6yrRn@v?x}2@dEDEZ+O+W@#urF@0eK#2aZd{9#&m% zkLu)GvO9BsiK(V7^r2qd1~(3HzWn}~u%)B_ zKI8gAS&3$-wAy+F*TTKEFSeq*=e+NXX!wE9;rSO6=955!3Ogf9GdiUL5+a2U0}qeG z*f&M_QOX&=6OY-iCqUR{XySE94x0C6(yP~FI4ih%PFy{YLsnlGyy@-7NOs}3CQ`l~ znPuMMazhViqT&S$DXcmYl25XJMwHwY)@(rWeApQ_Llg0}VK>Dt1+MvX`VNSqeHmm1;k5hTR21NRtsJuoJmC(H^~HhH;=makn{jr{l9T|!!-iqedwaB! z#GO&%&S-M$9;I8gv8VZ%zkL!ZXM?GxLu1MDNTv={fypwJoi_DSgODbvUeNHG)+k6h zto#2&iCkpxQzsWbZz(Gw9n|)L&zL?{bB-5=S?{I@qgMwa``nSzO~of;apgh-YyB@n0)E1uZ$j4eMZh5ThOc-)*URb8^^%-CGXx#w*#J zx*QG`?*0i$qV6-^p>j6eNcA_%Zu_2IkA_B_J_e9nw-nbhkR|r-!RFiiID7fB`aB)^ z`#l_w?n@ZTXnp1yd)AwGU-upf)&C^Pgylo{CYy#&aVhM=VRtF6{+OjF+X1|~S3+uP z&Zoi>@7fw;yVaN;sXm$AmZ@n5p*>dBbc=m<6Y5Zh&aKLNLx{v5r39K0Z zGas1Jk^n=6DoXv_1RskRZa`SDF&pxa>ih|~_x@r6A7ofxof#eORuRcV??aX8p%N@E zm`{ZmGIE0{XY`TmWHA*?*n}9(3dt(*PbAP>;sMB6ItKvEZFmeP>DCl`cR11pJJd^f4*Eu+UCYqxZI7YCG0u6C6MCgDLx54y*)l&0o|%XHuxkwD zQ%+(z$X>jn^mv^%kNVpwy!EOFO$sjPgU21k*NENJz9}bB#`HHZfMgP~4UBsOL4nN6 zoQGzwj@O&!^aZARSS!Bm&=1^K{a$%t(zw2aFRN^x^|3#mB8(qVfjp0Z3*^k)jFZ^& zQwK0gn%$E@ShY!K%t7mIUvM9CJrR3OM8!BHsQrcV^g<*v0~#?#gKx#E#)wx_$dkqO z=oAI;b?kF@=i+fv`5Bpp!h;wMj9-2YiI3UQu;Zig7&dGkI;PJDoV;>OZ1AFwRR@f? zCY7vyw8EoCI~GOP(>pm2PXTeKP*>YuBpNmz8A?8jsL!4PP;Ql>F_@70 zNUD0h4qJ!;tIvdfs6(M$?ohkQz3`=baaUPKN`5f@=Z;dcqY5wW+_|-$kr4_p`7QTo zSim@5@|s@!x;&OCYIbY*42>&Xv^H-~InlM#kN;0N%3#WsXp(`+SpJL}gig+HsG z8bNlQ&%}5d<-)i~%>h^?^v<88}3%?%jCz3misxD?HcE4q)W*24l28+njff2WKwe5~~L>4TpeX?At?p20n+K%gh@80uZ-N&BVX<%m! zndNRnXe|@aacnIYtreoRzG!VAS{sViP`UQ;(#^Yw zp{RgaONy({Vq64UgF|u*O7I!L;L2wn3vq>;SRhha5vfl>q03?nx~XH9ehwyiU#BRF z-y6;6xtwGkQT5YEtfSbJH|YE1kwuafFsygfVbu&wt42@A-QXo6gJe@(g>ehCnZMZQ8lo#%i5suc5(w+9wk`%0FQ&y; z&dTx9G5&EsU#IKPm^0Q$k=SV&ru?NDxMt#-MV*d)#}Fi~Wn5RYCR=K3K(5hAK<9vL zVPE-Nh}AXaJvOP9!x@Kde{Ki5!SWEpUWdvPNUAh52Kbj-NT9UT-vf0CG6@G+#A&QI zE+3d!r~y?RRgeQ_&T~e(?CwmPsID0XN`mqZqe7bP9vG7Vvvtf&3~%Vo3JsQZUijj) z-U~@_+NyU@h*VQ45;HMr4>0(cvPt+HJC*UDF$)J{ge;R7cXWv373V(I9hg=Dg{)-x zs$?JrQ7m|v-5dJpyzk%b0C}7F+&vb0eGy-i-B>1U-h=CU1W(a9ClP0PCJY6K0%T{) zsoiyu;Phd`z7qq7xaBp_q?7Gc;=-9L$b|{fp6h8~EQk!<~1Y)(CTw#J!$^ZLDB^UoiIu)ea-ZFv6W!Yf^XjCU$X)F@1Vq2Ai6IvAy z4c-Jwcya;tJ=Yr~!my4QGKagcgWuRg2I!4+qhTv5>W+wl@SJzAU3f>K=iecIp*t=Q zDx72k%CYOfos!7cf(0pGfEd96MTilC$r1cbfczICD@JF=T_Lk;b9M99awP*dujlm$ zyMO1k)?Yge)zyB0^MF`j@s*~BWDRSf_t#7=mNya00VY%*8#AR@_ebja3~RNeuF#C^ zdQEh_PEo5E$;~|my0p~zE?Ld~0gT>5sQ^3jB*l}T1P*83k1dGPYtAuQ!)dafXNCvo zh5t&zxdwveNw633busxKpDPyvCNwDYogJ1{mtSzr1%CbcKBBvZ48ZcxE>JOlH~!9X zyeclc#hD&tBh-EYW@xDV6Qx?=z`{Iop6~7Z#Gq0JJ7Gj09+(f1c~3?iTtD~K^@V5J z3x$~WO-%bProptA*S=AbxNuQPG5ze3*VOa+)JiyV%7<*7~Vv>^5iw3=lj zs7*_240=>tffT8MkNBl1Z@(!{`bYP1ot*YGW8-4+g(oHbhJT?@`%b2Y>{tf{z>k8u z<~@XY(7~SPfj+b5oIR$TLp_!=f zA^p;%Ha$Dj94bjyQo6c0`S;N6%;IG2wPLLe-bSSfaWkH6}4eBX+i*tQ~c# z8VEe3`>i1K`_NHW5z%qRdW3GzJazNKYuXo};o|h40^ULM{(1{+!*~GfEfiEPmEfFE z8SMcq7|O~xw*}XqL5-p_sqFnLsi6kEk)0Pfr;!dY)7|$Oc8azAxkF=OSLw1&aP(y? zUO{O(HQkc?b-M1pXoOQdR@e2DygPW_`GGlO?pvfwGWPHLm^HNr4(MvyQrqplB)YstzZXHoM`rez{4ZbTY+L6S;&U%8%L1w1Q%$UsEQT~~VYd@v zFdplB$izr93fgf~YM3F^1#ryB=c}Ui8_+E&d9d;chEKuR@3Mv$RO082wOxH^C!7DV zFK>@{Zr{cr48A;!`nPZwX5Lc45xC7CYY4sX&EVVG+wR7E;pa_Mk@tAhbAzl#UOl zAk@6wr4Y*APlDD333|B+H+-eW_@ablMe1h=01 zSdXS{Q$FTf=jdQ#a;kyY=P356#6BmnPmRSAT-X>j2-l}kJ^W>@sk-bQ7*^(mI=o!d za=l~#r>c>v! zgn{Cxk1@}Kuokqm8))v`L8IUE2=HjJxKKyIm3}BO^H(+c>T3tA%ko-lVT@hH*d4|2 zV&tEne^>y<9#DSI;883aJ(oQYlsoZ8Smpc-_kO$oLt`L|(pQfWMf3d|bcx~YvEG_> zw^;l6|CY-CD-@T1dVb~{yX;16cpu0|6jq`Mm zd~>AnTx`Uw#D(|r!6F!~FSgf+?c>GvT0>K6X%&z98uz5wByb-Zk!;H;*q7W0NamUq ztB>=EPK`~O4*_M2XTB^J*_BM0fTb{WFe8}N|BgjiJC`fyK4%9ONj!yK?jYG=Z?2%2 zo_zG`_t+g6dR6~M0KOpt5`DqccDeZs&MzUpTkG zpX$S*|_K4@QCIn3~6-f|}-T<>U6Gbw-hPlgL z1K@b;x0S@rDdOf-GP}HtyTjtWj%;hQx)w>@Qkk|A7`X!XnHM^uk^kvaR%AII%^iPw zy|Es`u3FW;@8rJ1^dJ!6i7y~N4^`$ImQ6Xeo1A|=haPj83@2D3wtqa3geCJK>rvoN zJ#X{GQ#OWI_gA>_@Fitp1|uP!xew)H=0q`bQp0hI`1cqxnsSYDI`d6KA1eILbEY$N z-9fdty^nj%qkS@=w1hfe07xKe14z-v;B}rEQ+KM@@n}2GU<^F?>^g*@`i$h1{N4&v z#4~yXcWHe5PC$S|yFqYE{F^^scfgFT=-yZ-{T$F5M}SNPqXSJX{oU18c+iY&i@n^_Mj`Dio1gRHx1c~iXjeh?BfSAMGUG^R0|$H_{_Tv_#Vo_UR3 zEQu3`#EHY?EzgA6j}E9!#5qRI2zk=iJ8rG`ZyRD7bCGf4mi*$E6MT%d3vvW>_q7^zSmn~uTFv?Nk>(w#}GCor;;G1*3z zK<&0+50Uhn(V*2hlS-a2|Cv?Ex>ZtBz;Et`y#@LLfp?+?mH-SUNts8>R zNr#VcZ@0b=dY=Ks-F+7}*mvKfkuH4@LwRv4LYLi3A*;wc0HuB{!;48BZXk3# z^;6hJqsKbEM&#SiN{SNS9mwu^8a}JKz-rAGp*U^YlKKByBv4ID`e054TVuFq4&&^<$0xXpJ z=!@{1BK($~faD+rcZ)+;geOq<9s^_%RPjYF)4&((E4iMF8M$~|mBZ!~1;D8+bk=3r zh^jqAv5FNK`c0DnT`L`Q-R?P*L0h|D`^Xi!I41wHg29Vd>IsF|_p8{qQ0!Y2LEhg( z(5kqSYGhI$MG;2CNPXobWA4sx?13G6XAAEfab?P zc^uoLc}BPY;V%x?>Kp56F+K*2V*o2&gj^j=slzGWjM8et@c8xwSuRfaxprN{m{0AO z!BDnM1+V><%P7*z8#mK?km?!?g(_?TKi6J__(sZYCC`%BWQLxx-6tcoE%}PjzNZ%^ zlw-qA+&hoFr4X9cdMz4}RXTBe#|Jh1<68|Wa7?6+jC=cyHAfK!;pF#kA%J+R2nW1$ zo5$np@39WdmHd0ZVkI=~K#t8v;iZ=)i+F~9SS!U2fHD0*4Akoem|FSgE}9G}@oPT?x5t<7F0cG7Sc#Pu18NbvV0FlhWlHwLJQkz&hi%B7FRS--=$0xPIyQHy9 zNBFxQ7g$0wU*eTZO_@T($XSos*UZ^s}!^)GLW&@($nA!e9}8BN8E zW?}~11uhr_D58$Xm4GXe!czL6Lwa7MiILACVCnUlmwnCUe}JLs8fI}+ix*b1Lfge3?w9?isj5998hlNwou2fHNL>pKu?p zvotvJ0~INcV!xF z?}6v3pz5~_qRs6d>LOVwc&RviTM15$ZbHaq0NGk|3?!Ct%Ow5@^I@WKkAEml)dlDH z;i27;#O%#r{uVva1>?J-7S{yWomq~qi3wp$Dea^ix7Vo%nnF!5v18ULkUu;H&Ns%_ zpz_9OSvV}2!7R}yT%SpO~?JCISz)S94EtT*x(z=Ub4U-}H+pA*gIPs^#^Ak{0#HOQ*#<5XQxX z;!{E!H{2KHj>m+tMfX)+))!`b6pX5d->6236+p9-XH7=>M=QyFtwz?H;?9R5O=q|5 z2urt*Kv?AxN8GKZH{3oKN><4oPG9!VxD9!g6X`~Y{ zh&qqFf^crK7Q1JX?<%%kRD7LJ!lijoSW_%OeYb+oy@Vg(3h8LKoAWBIa zus?wJuP4WEM;Rw@G6*-Yff@%kZl}9`m?!oM$~(`bUgII;c#*kt&X<@v=N=C6p#keq zoAx?U{|;k$|8+H71nA?cc?P%=(5wcHv0($@NxQn>qvbJ%^s4p4^%ZcTfyKRxO*#+Q zfMS!<9k9I9maRbq2- zcnYT1V2eqWto!VNCds;~TnI z?*D*$)qH`wZb@1>=pHq1*6Iso5n~r17V%0{w&()@ssmQ8dTb&9?ph-C#qTxZ_wjn- z_gZXC0X%4j>}itw1aw(YA(X;ABne_R&+g&FlY3O#r~`(e>?FuiilwB?=!ASzVi@Im z2350S6Fg=;W_wpdo2-PfmcTxyj4f;!ga~;x6gz`AHfvMf!|fw-5V|YduuEKz>rhr3 z4Fj?DZ{)_R0&;RS2OXbj28iSF{+^+zlnc1gs^sZiX&@@$7W}Liz6JU)+eKB0xz~Ry zp8G18duh83T}Jk^nD*pR!jm;%)G}1TzM6WO@MafoP=m)ZOyb(jvSIZ9Q1uniQ61m^ z*|!@bc$~1CtY+h$5aRAmAc5cz0tpVmT|)3;g#rZ%#jUs&mm-DY?oOd-(L4En?xx@0 zIscrqllR`to0&Ir=i1!4SKYH557h_GT8R2tz~5LtzCT}=8tKWu{Z1a+pa@tF$eN^( zrtuxg0kYGJFx&@!rTC3;xLCKJdL3f|J)!#~e7m-pj-_(DdE9>D@>s6>>FQdxAHd?_ z#9$aRS_i45Z{SXT&BqBVI!X=|m2ALC%G&eqXJhu*@Dp609b_fh zj#ZTWZzc$VU8|{h==Qv49bpazOJQbZVGWm{-ik4@npHST7K+^QO*3FX65DPQ4o9}5 z_?{CaJv8UnDSiU0=#o+yEvnp})xmC~HE;kyJA6%aSQ*9V6OC{a1ZVFeSyI^5QQT>>+9Xgnz zGuC3>#v=-G!JmlH_JCCL&zJ^?LEU)H4^;;#X8`<@#@7dN@M}fJT^;g6iOOrI$M}+e*(lsL2gYnP{aofvJQop%IpM7afU3b(d687!x$z3*``5+9q|2+!TRUPc#;kP{IFPJjNhXGr2|*wx1MatPe4}Y&-eSYc8ufjOZ@EV&HXO|6y0% z9_e#1aIN&Lkx~7VhP2tY<1m5n8UburSIjG>JRe3Z?ir+m=H}n;-r~YnJx-IZ#qR6N{Lf+z!Q( zA5BEsOn(~R9esf@+1P)!0>_@FR*!f`z{Z(${bh1^@E~IomQ=#>ctb62zz`GoqQx(Pl0+l4K>-6s(XA?2%F^)%E`lO90ts*&1Agi*LycoW$|#N2H7bdZDZYUa#8lH zC|e1mZL6K=!MNUMu=(KaxEMChv&nCM2QD`8r!u^gcxf5Z@Sj_;So?o}6zRlbWan@y z%(Rm%aV)NL7K*9nVmjf5^?5Mwfz($Gi@sPx4$R^Q5Q&N z=uBC6SSl^~w-*jbc*wJH>YyWy!I>y%(yE%FhMY(iBJ$TcV7k>254b@x3{I6>VxZ%c z%rPxRXx*hQls$5?X^x8HB*4;d6?V_7b)bNZJeQihcDmG{F&JoQ}O9e zF|Bd!GtvubApAJ>pb!{fK{!E-FmJ5oHL#a3H&16q^S6xvnUwFdrKUF2dW|zW+h7c3 z4O@dQy?aF?8-_#Bv#l^`rL}b;B?}wG{F$jR7qLCeL~J<))%h8^)8Ow~l-C}iz&RIj zVRwNd->ie`yX3}KRM^;+9A8zTd2iPWM%i1`6sA-oJN`%lp0;c^9puSs7=FV^ugzA7 zfJbI^M8IQ8H;cnOsfL{~$#FsH>ri)-lcWki%&QW_#>_~Xuww|PX9EGRxvdWQN&OH$ z)Px6>r-ri*ImlOurlP(MN9O1Sl-FlG|G*j1+H z;%*zcu)i&<)$=i6oL$KaQFjUZPoC|BXL}HYWVlc%B6l^bnES794h$W+s~`H=`ykmJ z!ww+G)}m+VqQ?_^iu-aNwO3cNfUJ4AQ;zKr)DY?Q2Iaf##>R3DphiF0C>IGZeMm?q zk1Sqz{fa+v*8|d67}w6UXT+cAIvZvEHeEzcLi{{b8#8Pwx0asv4n1iSp2RnSZvsp` zDDpKelZb$`Xek$aFl*T?v?!k(!);N4^7m7<%n@Gk3R}W_eEG>k$WYCLgUn!CR^{q; z+(V2PGoinPorj6wmD7|WO-07%eR-sFVHvd_x{>{rII9kgIPRYfF}H&ZeWTzPrK0e2AKuhAUgt8(JNQZ3!Gbpm+Y=$1IZiPmEf#9P_~khPSNPC zNd5LP?)J~G%biQI?1Pto-$=vFFX8FvUC{tSr<=@R``xmUc~JgOEbc<=?c`x4BCO0r zgf*aEMAWHAh8c@+p7jESoNh@G}y zO#2;mrDQX)Z~hcAf-LhiMZWAKxA1@ql0vwQ#)hfvOIvat%*f8|*HcK7GoGO4KgJ7- zKr)<$I=M|A0+imxsneZTDWa1tXj9Z2rb_W^8{qAA3lWj?PpHduw_sY?gxbH{%|;8F zpW0yC9iCV_aR}3q6&~O$jeREJwZLFUz+$uAKcJN$PvGW2hMk0W1xO8n<$xM_%{U!} zru5&kk_K9 z7=Z1c`3)~A05gfBmZQ2owv_jHlvIG08Z?mVT2RK&X)9>;UGBs+Md8 zblB%dGni@mkCB(*e{>}42F4Y`Z#51o;z4MWDHz~r18>odEhTr4U6K+f!2ird|5ZLF z2HG?HkwR1^Sc}R;*c6#iex2Rq7S)b9;N~H4J(_rA3X}%XUG^|APlzO! z%gl&)7YA5~14+(iwiuAWJYHP(&KO2&2C1}-M|r=!etPQ<(dPBtEsyD4-O z*Lny#v1|~vsmIJ_ly3$2f$V}5T>Dr5h%`8j%{byaoAYc1{5%P7H&i#G2&XT&%HEFO z4(j{q6#C)Sp8S__2op=JUd!tg*#^d9va%#lC6<$sli}P4Gn{x|Ll~nfs>q?1Ixf=b0SHxg5cT{8__4eFhciSs{a<6TNbI zne_UjmxS;hA>$(0-mtF?w!R>bET*JAOidS<hs4s!!y0B9v5$ar_$lDdz6%;$ZqG7TBuU)>5mCC@rH=;Vq^y6{8`d#AQlE(38jE? zM+VLM(XR!>*-?^UYm26F2tvj{%k7kF=frV3kuyx=FoRIpVo)4zg2w zUBaukN=Q5HCL7O#kMF3&UQNOkPgz?k-pd*!t@(CEO|@{`+7K}jWz6grzkH6=CGjCr zw%24gT6hAg z^kV~!;JJ=?#gIP(Y51aLj1&I?Y^I!$qsN_vM3t$&y3(9Y%QFL_C_?68{ac5HnVH*Wn_BMqLy zOG`a>3um}rbz>#|sH%RL6~|H@AkANT&WTE2iSFdgUyJHK7m_AwgWSB4fRC#V2?tSX zj1^2Wq~KlTG$#qS35p-(H7n~nQ_KkpRyj&dp%19+jZQqcL7E9O*nSTT(Ssfq zVx>W>bQdd))@{W~532N73sZmZdyVCYL~=Qwd@S0?&BgUC;`&zdKa`I#v@XN1JGrFR zx;{!M>nNeEFqdb*mX%pI@HxH%DPz7DkZM-9G^u83IJMi;8I`v9n>$<<`ib|L^dnnY zia0MbGg}eoZ7$+`$m2Tia(eYsVSRf)FO`Bsh=R-#Cq3?Dg$1~{%G}yAm08Z<``jjW(L7&$w4NQ6T&r&wTu5YAs>oTB?s2 zOA4LBEDF@ItATB!vo zYIqfe)ME)oiwHpBUzrb z)r=wAe;LI_1+Y{!s0G>XWrb;Y-7~BzSv?WgVZOa!$B=00jO(ms%r)k`Ta0wf4+ic- z(y^i7hrB1k!`2^F6#b305FP(zEvLOtIIiuB5Ul~_Tw=kWp&_vsogKXoYq_2cn!LA~ zw6@(OOW_nu;jg>lNumpl>72>C%J69UA`jMIH^r)3V%2TP+pD|c`QtfMDm#XeZ~6qm zDOdi7Bvt+Y{O>BwiA`DVJ%s~3K97}iVh?UVzaXzmTP3kPL@W=bf*H)fcY0zitHIug z^H>lh^i6l?2W+N!{SNiPR``W~$t;c6%>m|O#b&YMH?d-iSg{o!+ypYb>_8H!f8E3@ z&8z(w7M4waaNDt%tv@^Uy$-qBE&V!wvO)bEZX7V7-XnU*#fib<1j1v*S;V3T{*PZ` zY$JZhrZrCPwudRLcCs8N+GVdVk*huPCE35`a~&1Ma-bjky}#p;ehX`RJ?{)egt>7v z^mPF4jMbf>zpLtumh-tE_2~t;CVC_KrtiLD|kMF^c%UkGQ(=YWv zraE^klxjug%*EJzA=}?p;9*evk7(3o2o3y|m450inQ|K}u8@>|&;~etE5S48W3UB> z(sB7(-1ud*1b}?LLSc=u@92t!yO%k}*psDT>ypaG;JSP|19E5`UI@?tA0UV99h>Nap`6+s?5yFgna`qw4jhFxXi#W9Ll zmw}Ni>WU?+b4P_;Tqx=ivoCH428>=W!uF$`oH|Xj!d>U8-?)V_H1HgAF9o6Jd8EU~ zegpQ5n$!gq4V#Ekx?*IiDxb*VfeLZnd5#m@xVBU)Mvl2bkbSWRU%vsfGI3~A4E;Q+ z%J&4k$2Z-I0$I_XNL#|)1=#UFZey6o1Via9Z%3gYMj^*>!wsZOW-(S!evCC8rE(qg z7wy*rZefa}GXBiu(|hh} z#8rgF_l-yLEcDH8zLvXaJUkI4Lw0;YTKTmRzTNjLwNK!WuveLm_4z#umCWi>@bXHm znbcOBkyCIN)|0aUM0PL2{zJ((8kq|(EtaQFc}A?<4zO zki+oK(yNwco(*LXzsUV~2G(AM+Z*W3M~>)#jRe1W*se#FfvFp~aM0ftKzHiHo3Z=O z@@w1ut)vDd*}}^Fk`EXHrTG(dLw7MZ$PCSmL>g1o ziVfvvCBq{9FQ``CD0##$c%ByinA@3fPYWPXWwFSYYR!wX>y8v~&&pI22j@1Z=zkmN z`i8JdgemBxH*(egC;(}wQ&G^ z-jx4ExwAYlGhbi9ib5qfOMpj$t_&f0NrPq1R5G_2w_!VpXW#yEKGJ|SK1@7ggYQXZ z+2k}(sE8{$JT<=Nhhn*MSK6PMn*yDW-w_dUSFZ=J}#v?JH4nls17 z%wSfp_MovfsW&BKbmdk!O5zjK5!#tM4=A-OlY(1tr!xMf!mBQH&N<_AfoXd0t0(g$ zRWH*nU)-}UDD-Op6@Am83+lIdJkmbrivU#qB{2X7bLjrdx3K!y?#Nf9&UZlmz$Of} zlUpco250_B?ojs!-LTfZJf2}++?!&4lThoN=J3eEOV}=n2gR6#6OuiKQqO%O_zkCd z%vyBwoF$LOUARYU+^O%qMx<+(dcfblpB0k$&=d1%nU2Mo*qA{rb;6(gNiV7N+8p3m z-A@jfwZxCj_MV4Pk=+6kr~^NRX)@$1 z-_K*}k4-{!AhvTqJSw=u>Y{-=Cm^keFv{W(QcMO9b$R6B^#W~0cAAL}bjRk+p#&_@ z6|k?7t#G5v{{P|ykJ&l!Vurn7zxgOMD3mnoOpK7Bp$)9mOVS?$xEd`XZ6y4;VFZn< zs_~Mi^KKmD+DjS3?_vP6D=?(8k3C4&9DCRGDL|y*zR^FF**P7Bv&W9c(8xY+CRMZN z0FKN)t)X~O-Aa-a5LvD2pzN4>IHk`^x6?V3wzB>1iNGhyk-UynbBe4m^tE2m-L^dh zOM;CH^6(xFI-fqr8w){WeLyA}Zl*~)9!f4yC{s&?C~PMR+l#^uqOc=nWyYbRwoCkw zc6EBjn8lFTKv?bhkH`4$AH|d%g^i5thbVaYn2C{k&;h@W_;sSZy*sd2TdbG{LM?Ad zx^wYB03IhS$z#`K6JSjEgvxynMawi4v?LAJ(KoD-wn}9X(OzQq(Aaq|(zr(9_~IpJ zD5pq)+u*F{EF?xvTZ;vr{DWyGt5<^a@apJ_0|!oK^~9`&DE2lRg=3C2!Mk%E$o15? z+ErBBbuv7L8>=>7$TNW(jcPjpYf3g`C3WuD7xzJWKK$>zJ)h!Z4X9wXEy9H|AChKy zURJZ8G7s3J@yx*s@yK}tXSmISj>VAz`Xyi=Kj3IrJPJHI7g*;6se|ug&mX|2FFs%` z!lKMXShNU>X&}O4aT~|Pd6Q)BNF7%5-oThybMWpst!W=Yxr6DbPg#(;xIa+buat}X zgT(#86me~_97jFd+TmwU{+HLYG9&YTjBF?s2aK=9HsyPN#k)gdcp!&r&mm2Y%EL^i zB?(+-*T#x!@%j}$q+1Kl?z06}fr?@r+z7y(uic-r4wP3|gH_e$&RSSUm(Nz=d2`>- zJbjaXzb)Y|FPDd_=++c`sWVP;9W+Ii_BxI2nq@7;vQ}alq6feGg~55s9!mQ>1;Ce4 zFb@Q&+iW{1kb5`V2~l6ul8J(5>vLAf=_j0)i}-?iBEAKM)meyG=HYoG09%n&IN}^R z3Fo*ja|cvrV;VF9Da9YY7eO_6fKSgvycey=)?w+9|9F$r>ex%nG%mglmr~c!N}o2Y z|MKo|lR0&9aJM+PhoVy%NyRVgg@WrkQ<)Fje2txO3OiOIk@!WCYT+nLmi4(6_jayw z(SDL>59?>YHXaCX^aTzJW5%J1md6OI-`WwrgP4s`zgPtFgHRiQr!honbf?Bq4mpyP$Dd$;I__A5BCh50ILk2eXDsvZsy-;MpiWbG3E1aB ztpQF?KusVUFon9C`QxclX(GY89wX&K8-T*b=uvVrU*Og&;{navE;Aeb0tF45EKQYp z#+}CYct1*c%P8eqPpTC6knLV{T#{Rpm*%WoOjM$s7AskIk|{$#Oo>MJpO3+5ZqG7* z;`!M~jqRH=$5HxXIc~;fGG?|d1qK6ycacF*ofgigAtW0i!`ZVFF#x!Mi=8k|K8V

dlSX(_W0tZPawFCf8NWKdj?m3iD#b`AdJOVtf?OTs)_dTF4GV0Tlfka)m zCHzZa7fp9^Hba2BSA9%Yb-_x2wQnUXp zx9X`}JZAS7o(C;tV(4!2j~$EbfEpg~>_(N0O+Iv`;oAZQJx5UJe9&o`$5k@sHpJs*BY8vv=2KSM z2$_!BDe^G;wr!}i@J~Q{_Q^%a{dWl2ekw#^yE!cUs=x0*Hhc=_z68(GV%QM=N>$Bpa3KcG zA<4>`d_R5S=rOJlO;Ba{X9pl@4=Uc;0(WW;Z`1jk;5El^=i1^C9MWm4<^#|?Pwa>M zIxGv0O{y*6c>U&8z$``I=RhUOpXzZyB{A>tdrw90R^gd40#KkJ&&w?(F?_Zd zK8GSYn)9Y$*@UJTCRIQyi#kjMalrogOFU@%xC(^D!xH**ETYMu_+Rq95LEkT3^ft% zsM6~UJoGq=Wut&-UL=8SD!9$+yQIH<1!NxE>_BceZy;#)1nkcFzhKTR`1cZ=4r%tu z9Qh%Wpj#;)k3MUT)&Zs{=(!a$D%q3Q{gZO>>nAhu>t_W0+5=&x+0zoq6N1-mih45z z9T@FLz56soX%C#4c>$cHN+AC+Eu}`5RPdx7p35Vs+bBk)#+dBq=^`185xBn5goi}4mBi`qse!J(||H*usXBgoE zb(U(qP=j4WFv@xz+afuLr9Elnu~ez%CaBEHcu6es6^r~3GI1|J!dMyw+&6&y>Q&1n zXYsK=g+7^uHz%4i{!`iPz-c7>$z-+|6sG^=HfT=mc=}9VFNueb#lt6*jr?Aos&vOuZPXejsTldz;SthptA2{d*k56nc-M(N~@T7TkBWRfw+flH5q{zh5yo zYiK6A&b6lKdM5!>V{l@4OueCaOVfNVPnAAcDVNu=g5h^#JWQSX5%ZxMtTIoi4ZgI1 zX{37LZSIL$Z(*|Rg>yNpUz4G^wNTK+lN*7h-5uAWnCCJp^fWscfys?c&L8F(yC!! zCDOPB%sM4FoJ6rr>2M`kZ4Mt5pYZ#P-xvJ8;`fcZfBFlfsnt_#P-{RnVpZIxj!t?Q z4+T~3X0+Y39TmQvFUjRpyr(norsSUQA=8oFD`#E=p zOtw-m`%a-Hn=lc^SI*RZwj&BnJO|Pzg>E3fytcS)({~@pjV6H^Rlkm_0pGdy({ZgI zatl5{;zeu%n1!OFzzU%nrqcPtz=yCR-e=5R9wC3ow^%$*jF&StoEoO&%SG`{x`7EFvso0&RAwvmDto` zWNGNg!)fTd%Tg43n~7o{)C5{Noi}@%Ugz=Q+$Bp09( zqd|!@4%t16ZP=w+f)*B1Z07_A z^hjMF`E!l_qZmL#c3Vqk#Wcu=k%i04*Lak?dJU%Pj2l!cM|q_cU-^u*oi+2e+0)g4 z{Lzu&xSkZS9+tpf`;6cyykDo_eWmAeQ?rIn?)VSa!+}}mW-7!0{@IJ-Zm`~D#bNTR zo+~%UL70R`tubn8agF&vj%~*;+$UrB0-$`am*pU2s~ssKJ|4>{uL|&&HwhZb@lwrd zVcm+ndyh32N3$)((HwC!R~*g5rtB)N#(icoKqRP}J3heWBz}KT@ot{grVFs4jfIrI zQEq1enm^E7A&&im)7Hn9lkRK@cH)g;<`8SV*Uyy1pS$Jo2LvM_+1emd{e2eaC~YY8 z;tbT&=5=dWS%w=~83@ZEcB5nWbb@I(QyFDPu4V@!y>PIs*B;VcS1W`U?8XI7`e!Bn zi>}$NF!jTs^EMRjwus@ecgvxm0}dN*;W}vDRHRW?0Mpog4WyjKC%B=a{dQ=`Q;VIo zffvay*#XZ&%y5Kk6nTX>N}}2d=K;66F;8lLhecbrThsX_W^5L4Q?Vz{R@t;MSa9kp z^6mo9n}@oC8|cVeicyKsVZrVUtLK*_l*|2#2~yx*Z7pg}KDOik2t&pmMqU-8_rnik z+)h^JE`Lo){aJaG<^K!Z^4jT+az)L)wZ!b58%nYcz zEd%&Q*{|TK8u$q|dSz(;hvyXQ#>jSl3mSEIhFl;{r3@OntS0H0{ruQOaB|k93}sWq zJnR70BiA}r;QQQ?c;Z#_60ObJnL(uo_mAY?e}UvL(1=SNR(SiCcLtpcyB38f;oDl^ z%VR$ShWf+Q4n{~z-*X(2{QRBZC?mEn!m=qYMT8R4=z22IN&KX+oZYj zD7_5dgqO*y2$2=V%u{0KX)*H*CEE-_y)lM+NZseum5I)o)c5!CxEnW!Io8QG`(UJ7 zMkxpGV3@8vrm?><&uE-`Q)*l@6(^9aVdM~0QHCwklzAUyUKG4xISOjFlVSXJ6wDst z3>0De+L<9Oeh@R3scTPSWQNR!N)8$mF&K~3lZ$zYLPKWfXW86L*VxQfMj0Usu*7|P zN1#B^P6!Gzl?~-}sKSgF#vNgx$!SJfMFD2W@a#AbbC5}6kq>{*koHwHd0R8QYNzC* zGWa9)^82{=8p5J*(9zC`vZjPoIu>}_z}Q=X{~<8 zfIRS|WWh4Rxjs}_wHKdl@tIQH=3#fO!*SO2ILEX@s-vqs1S;XXhQj&-#gVd%@s3to z1U{Ch-tHs!bcEM75Qpm6t1`G|Qxuy_=PV#V>y1m1o73YHD@F|&ZF%B?Qdmliyvs<) zJ`6hwxS>0^@w8q6ycb7tjlZL^+=DG3>loYFDMUHDP{o#!NsAlZG*hOA8b26sc)eXD zi8Ui?##5EmB^;Gf8PoAJD7FRCN!x=k--f3>z@wA^$`iIez~^p#N(s~h*%|rRGDXOv zij+H$?cv!QCj_%0i^w(HAzd@ znTFKyeJ0Yx)KFyY%B2=v>S90@1yp|H7%ud)$$lM^WuIoT5Ryh-=U42HF(L@C&tf(; z@FKGtk!c3ZROuf4_9AFhcidb7JJc#G1V|*M2dfENlx~rQ)A;%=aXnt!0cl(Syfw*| zVnZ@3#iVl@yYv!1$l;R}G7aCqBlS9~29*}eekDI8;{yLfJa&N%BH6c->xMYC71nK7 z48GFK1=}eT!pS=i2L1bYQNXB&_@V|e6#2YDst4;-Z%S#wP;dA z5;!NqKsH(24^_Cjn=piK(?hTqSO|vdY=x}?&cO{AnY?&O9q`a+Ddd{Rb*!m)C zJ;-IouS`IYmOFNcooR*6NB0I4$R<3Y_+xdEoAI4bZ9Dd1h|v1zO^lSEy#xL`Qo8_G zpeNhI04(V@&mb7f=C!A`aXm1yjYmVd^%@`P(LE2dk+5SD3cKxDR0jtr z2O@~I+znqyA%@SOW9D#yaX{*fo-a9yI$o)%<)dvV-sg3QWEO`I6>Pe$+%tt|9^nPQ zyph+O<#}y%3Z+9oP$f>`U>I$tVAS0`k|i@IDhLXa8K`vQdt}%JUPfv^e<0H4zpw#M z+5_sdKMlw({28>hvV=QS+F>tp2TliL1WWz#swmvKC*7Bcwx7wnO*vW?2Udv#tEs3m z44+fxdjkdH$}PB9+uLv!He9qHLCSaV0LA=>e%Ask8H=grRyh9q*BS*!&?DdR7a^hL z75~dFG287A!pqM6qVa7BbqfGy8_}7K H`Pdw&0b;tjjjO1mhJin^e&`fh@5{Sx> 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�mahpnSG&wXYBJ(YVH} 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%0D`qbZO-mDbz?@@-+k$=KC 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

    sZaF-Rc?Qh0Hd%|(fncVQR| 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%0A93r99Egs6+4cgQL}fUh{*8A7>R!Osq8l63d@iu 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

    d+{EO z<{tXtxJ_3`h0FKi5^Cd{_}#({)g|oc(f-hS6r^=+13(!gnWMIeRn$bB)W<5m$0bs; zbQVDvbRcbuWVvX2O0@k;Nxmg)E+zQJ-`M48^F8ovxBn@I!rps{fx^fDYXshCHv?7U z#yE%javcXkc}%_1;g;q80&#yKMNjI6`o=`S@yXY^dOFUyt`Fo|A57xXjrx>$>6Tn! z0sEL=%20ylV!JaW9_4E}uag7)l%kVJ-G!wSF ziW1+z52ozEQT&eKcbrtC5&(N#v&P7+fZ60db&%EWpuj5-1IV0wDe3{A8-62s9`kNb zhI1#)h?zR|f349RSuA;4{v#J#7K$y4uqbgu5#y{PM?;E?5O4(H*(^o(|abz1npXhiLw@H0vVoV4HW-=5{=oyVr z>AxJI{WGSsl2=^?0Y2*Cep&5kxCrPjS&Q;DVcJc}2+zttcO&%e#BbRqw_k5G0cGlqvU!_?`o!=(lyKbRC}pWGzI*tFOLK0cj!e<59eF`7QI7RA8ikip;YwISk2R-e{8Q3ro zC-$6vA9GSRt{c7$G#m$|`-oqT$WSzglJC7n#hG)O;8S3*K6bGCn)$F(5Ojdq%q}OW zN7yiYY8S8%;jq!ez<)VIrp_1e=6-A%vIe!}b1NyE=kbUoRJApDICO&2Em`}|@xeER zP~7A$sz+tvWQ6Uhso0Wnw?|>n{y2}{1xol;GY;RKEa_whq23xJMl=SZUF;9Uo8B@!m&FS!@`KPv@DEN?L~H#_Ng)-1|~}gg)80O7(@AJ*rw}i~_;yZ_Q9W)u;=%rK3X{LQTsc zj890pF`DannhGy&#pbrAG-Wg*9?HmKW-Fv}JXR{1*C)-_8FJx`p{Bt0fYuABx_vCZ zDmRoMbm&_MsNgZY+Ca?l(-U+2Ay1wYKutqG;$vB_P=pqhtQ!@4{{{eD+ha@dY?;GY zru~fH0v_{F(EeCXHkV~$Yasdjk%;xz^T&Bv9C@6tCl||Q;70qDqlv#PXy_Ruoxax~O4IOP)DrpkWAvk^9Ss`11e51Ci+{w!n zgKq6asXchJwmRPzyDq@uDmH|50e-D0JYXO`v^V(&Vf>9%SSK5C!JHCDYz5n>sus8m zTN7_;+z8(bqI6a*EWvriqVJR{7pAu8kK0Tp2}6Sm&=h!^h#&p~59?;r*m-RbZ}#sb zgbr1FZab{5i%|W%Kh~3nY(AE$`bkeTGkW12>;&1Edz5tY5fedUzF-!>`YXWI+aA5h zb0+Nlp1Cc~+=2Cfcl1a+qO8ovGDlJdl=6@&qhB-k)OpT73PpVbkz`7J4pi~l8s=gv zR~YG&ixYa%q9Hg*ZK4z?TO2w?F)c7ovZ>|9WD2X%pr;C&@Hzsc;@B<7oKdWL7Be24 zN3cq1@>)hP&pMMshib0U*FKJ8SFnD}*?Q!7hP&n+0oL=IZs@6`!|)OuSnI0CYtYX%cx&;iT&g|NfXW9zi6xdyyM+ITM_BCPL&13iBqe%!ZsekQiH5tFk#gD- zkmO|V22Xd)r&UB>OMC+N-DYB^+QjJIk=|y}DonK3q#9{sn-Qg4UAT z`>|l;6=!dRBJW5leo!oPB(vn_7!Rzp*ALKF`-D5Xw}i%{Q1E6gjW6ak?Qpjiq4SnZ z42wwHFNw4RBJCh$1~a6{2eTC}gQk&ds~vca_^@5B2UlY4&QP(_G<>mqOithUe!GWg zp%5F4#0F!rp^n&4mjc@Gkr`x^UAIBK294@BXwaZOx*YfJzFbHSBwJY}QQ?a*FpID0 z-1vVvxya&~i^X?fsGc*$b^pY(5jH3u?Ts!ckA49PF>8#NHCD_Tr=-9?H!)s3RASfl zVUvOA)}zSkIHWDVL=GRpQ3C4VH&4!BzU(b;1)po%)cp19eAcy*9Cj!^>0`2cHl>tL^^&+ga(c8fe z*=B|Jw3G7yhAPP3emm|1W5CIAx*y_07WYONnK=S&W|LLd8~AR$;u*p`1@F(8Gu=`1tY#Ej%BQZWr4vHs9t|^P14i>g$n~Esu7dq;75>EFNu~)jsQ-IJns>aeTUCxb;uHdm zLkQp+z%`2+kv7!M9`Hso55O;w+Wcyb@`rEP3D{s}JOg>%w0Vee|5&CF!<1r}y%^>Y zMTKhUI4mMt-*-r%3_ifq7(8e&ULr=0z)&}Pi(d^qdBP<$&i1Ue2tDhA^P?9)+4Cdi zdi9~A(34ufrZ>P)oOQtgZ-uKn~{-nc17%jhAuN%?9uvm7MLI#^MDub4;EXg1Ec zy($Jy-suC-weUwx6u6y{ITes0a~kzIm&0`qfcmXMI87m!!JCn&({pRcbj@2W#5dn1 zyld1GzZ(cM5KeZIFatx;&rhx|cGbYjZT;~e!en#y!y=7oEv7-fjM7hkKo;}YE(l|r zFfU_1q#y5m@$gJZHvX$IXVJji0E4?wH=E_irF{ra-3z2whAX)`>$y^+9`HIf5KGSN z@gYPxKH!@oxFm3-KUQ-RRpnS>9FpeF!#JewG-Nz^!8)YQU*U|Cb0~xxfKczisW2j^ zm|=MFnFsqW)Kpe`i~Kh8DG_-%4kOf~r9P?udB>8rkg=1{`PMLK=sljXEwheW) z#-DhF=582F&U@ElL1h$D>V4g6*cZT<14`4b#;MVvqv+5HzH(Ag@D&r>qM6W=JyN*Y zb>RjauHadUox$kA!bUI-`WUg{{(z5w<*%`sKD{NMdvYLyK~X?z&+|WaxDC8p6_gk0g+ot=&voQiOu@WE*kK$#<%q4e%7nXWjGc=JFfU1s&gdI}7QFh4~3{b8C!QVanL-y~ci zEHTLN@wXD!nN#+GQUR`{wLW%3((|AmCyMamIiEZ1 zu>2lEm%sOcc{T9R2CNxBTuXsvI3SN*&S4S6I^u#n*&byvqQk{#KE9k@3baYs$HH*k zI>~`8pW_PsKx1lVISzcTuI4Lw={ZopnH6~OUPbl>pLAjwOeq*L7<2TuDTCaQ6>$h7 zb;e-QPub(y94sJEs@EJ*X?NFcc|y3I0*s*XamBU%4eNcOFVy8!Dzd!cgYRehj=Cl@IXDQEU%EKYT| z2%QDX#7#@kWvd}wQM<~~8UkmmK}dnUw}D*%>#|2PKnunFV!)gm!MY*Ma=5wS7QCgE z=W;MZ+&S-`{*tlyJeoXO;1=oB4q#$DfDeRxeDd0Qm&fjzCq<|Ag`m2vYmt-zN-4+$ zLlxMCG?yYl7ihIpQK0v)9&pPxhkX5C%4&B*D)S9J^LtJmXSqY}G8O5l<<`i^bI|_C=MJYX)1JKQcx3Dr8@LCS3 zB@-XxT2ID(juF0BFjUI;eu&XtZL8B$@@&)_ux4`?8sU`8q-~>4C@Q-txi+drDz9%k z;Zp5VIASfLt|h!!T(;e0FIst-%mgd@Y=^_j`~3(>d;4oX6=9z|aWMtjEFQoHeN7-MLMB$Vzmq9txp z#ZzFbbj)eo@y&>H(mSAE3*``ur<3+DA`RnVJK10adDU%4+H8uE*a%G=JLVn zU1A2{=-e+>(yzTj*?vygP))&KCJ9$RtX?x@)3&*-5bg3ryC&FR8GZTQll`K)hHzy8 zUb2FU0%MWdVh*+5#urfvBW5B`=Uu)CeJglpH*4}1Ve<-0e2x6j82#zJ5m;Gu36JJu zKk{021L$*Ba;BW`96DD|lEsqGH>M{8p7G)7P@huo{ioRAJZqgoByMEeLoO9fnGayG zXFCtK+fiPZ9iH(dD$NRY(-Uzu71`Ttr*uyq+`b#W;W}_i!*O^vHvpFpl?~}Bj})<2 zMC?_H8e0Piwq@2{e71EeK{)i5JJ1sEmKX6HDQEUaaUir9CSzopnp zWlV8Hn6I=vp0X?RC6oG;b;T38@}AuW{cCoC(HBzY>_k-C>3<@0eA8SGV>0Aq$Nh9I zV!Al7&OqL0+4Wbk`0=J1QQD=wWuikPio2-5TbWBw0RIY|nbcAf#(^t4SV8U5w3eS; zN?LH2JpbG$H4+zEQrA)Up!_kkZx=aMhZNABQmvVlb8{u7pLvd{C^y?8nLs&1;thIm z61kuMh_xB|{(}V5x3ZvkC_Jn{v0jt8`~LSvGMZyq0Mc^_V=n#`unXLRyWEKeuAGfE zG4LFl>`cGIc%k{ZVubb!ii}{>9LpKk!W$~}KQHL1%IX=>pr7IBX#S4}NTOU{ z@qe%MIB38m3n#B5G58R^dKXfs+fq_u1(2(51<9z>h2r~XV8Rm&9gxH}VI{(fi~z8k ztXqAB;~W|vav4#k#(ZLGGXCIdo&VDDhi&4b(4E4m8Tg{=y%5u?g-`>x;=`6P4WTs& zz=k7tl%jNlF=w+0JSJ=8z#npzW)(sW=42C$L#v zdJW)|zII3ONgY%n;a<8npZ8?&M`JneW`RO^|)(%%*<5i8^O8& z*#TIHs-rr}+4M9dGr1LSQd@xbh0T7qyUhcR;H1FpX0OX6+_!_q3rlfB`5$n(( zS<6&%e!B;L;hUV-6HP8)Gwi6+U0{Q#!KXLedi|P6{Uen)$^1*sAaiBQA?$rN`%^Q( z>}I8esLq|gBXnALjq4P4VZtsP|M<>m<=;#zs^=b4V3^@lqbZ+P!PD*lL|N_Nrnv9M zt@=U6&>42tHC6SX!*8hBGe|CTgo{1K4%4nOf9h!jjcViumB(CMKjCR`Y~X`XWv5ig z=K1}|hdncZT9%<-VVWNt)3 zRxPkD%Di%6`6Cn;saELBR`H6C%?xb z3{0+FojYN!ZZY~&oibIkMg>7S8CIgodft8-87Iu%&C#z99iG%YMLxsrkGsBr1 zux2{Su&r$fE)6-%)#sHR{+zkAndcf)#1PQ;vSveUsC%EzSU5%GII2uH=1CqpHOExw zn<7Wd_$EjelEkj@e#T;Pg3(SsJYONV}Qnd;4+t zji;tTY%B+Mj$eQP7OP9eYM6oB&`U1P!P4EiofO#(LO)rT6dE>n9O&`q)Y^3;@7vBD zaS&#~&48hS(04Inv%KWu!i!y#-ihIctBFn;o;C%XI4KiNIbw~m#C4$wUiv~~uLm~( zd*|AQh7dZR#Rzy3UaUPH#{&fK6G zw}9{!wAII_Xs=ZWV{Si1X|rl6?B;58Fu@T&6~!C5;aj4~U2J5n#~`T`MdSn`%6A_Y zkjxl*;q~w0;nYCN$^9zz1dGFlVRe@?MVNDqBV3E##K;SMtUc|j(UPV*eb;IJ7W6Xcx-_yhmj(|!c(r-0DAR97$1oL$yPr$xnnC??0b#~ zB@NcGNm(xpb5(iM50Oow)o+F|w@XC&;PGAY*=->uRSv?dW%qJ~QHK}^pHEhRfg@e%C3(16G3pOjAb5R8;KDu&@PGifRv2uN+%s@o4jxOiWt_^G@lU&UYwN z1O~o9vvxD|DS+x_yETX^-GSduSl?QL63pb>kYqQYxPjCylqY0hM*unCN9Lu!@Mf`? zF~ivXaR~ErJ95dXvAm;(!(T7#bH^~A)t-`Su7PSF(?k#WPw4EEk|!`(e@fp1peuVh z6TT3}8a37v2DlK(i{A6s4BU+ELw=b%fRy+L`k+~jMI*Ag322ErLDEq?5 zOPKA({h_WoQC2&g0u~KJy(7ObKnm{{senY4NAKdmPIvqhNm4-D7Jz7vqZ{V8xVb%v}yg(6utnWX%2pKsc-Kt zz%oWCYXO_TQ&i8TNYLd0YdKi$S;yNgqTnCY*fg2)TQ0{po4yQr0>Adaa3p2E1p6>$ zsWqFfzq$|-8Ak&XXXd|?Q{O9)${NC_y1YMFU~S!cpp&LcDRc{SGyQK-nFV7|Jt7t% zH2ro2p-1a{tag1dtu1-X`hbWykA7(9QtXS|`o!YIs3qGOiy1PD+~%^;TlZ#%B+>5! z3iz4$8$@X>&PoacD$n6#t@qs~7)kr-3xPOdUU_N*6KCR}4co~=qBxjvS^=K%Q|RLQ z&WQ&IFl>!qn?@M-;CyDenFY5(F>Y&SAauX(E)|F&7szA#b5xyR+z4&kbi|C3kM_am zg7AH^K->;yMre~Iel7SecPKaQ@+s+>A}R zf*K8gc~v=n71U}XJ1H3YbAzn*C;6^yB!yrkn>R$OZI$HF@`gf8y}()9JG|mGlGIEw3Hnf!e`MQ#o$zWo z4u{Kw>Et&8^#bPjutMGHA;_3)(F6@YwS$@(%229(hn>GC%lnu+c1LHIAWk3iVVo2N z4#|&6NTRNI`a6k}jhF5eDX$m_wq07c8YYolN*^Lk)U3-0tF!DtnT%BMZi&l&g=L$w z`nYb7C3ojF)V0qPsrDhRyiXdUBOi1FuF;gUNjH}nyeC5UA3;L{Qqi@9S4Pea#P(o(n3a}b>2vG^rXjH$cFHDI{!>i-Ao7@c;o7XNjmP3LF zJG}R0Zg3d_H?Mj!aTVsbjSeA4@lGgrv_}r7bVH1S&uW3^Jl{z?ix&Ub;l=e$(eLSV z8OwSPaTmTL-LO48Amhf4go8Nk4Q2_(7cG%$&p~Z{P&k&7Y+XxA{I*wC0>9>iBt!8B zE=Pto=R*Czuu(HBHyMS+ra~d&E`itYYJeEkZqzi=1fjBDkAmNI;;-n zEE}eC7&CaID|aRRnB9N+BBVTfTi006w5>Qp_XmspA*3$A{c-FxlX;S8-X3g=^${rB z{$LfOHK~_p0_OHsG{$po)=`9mpHD~Vk%eU_CI^#M_m&uK?OG-YoISsR-wlJSFMDIk zGVhSqE0u3^yT8!g>nPl9grte@kP~#)1jb}y&Nf2IS+KOJ^B13LG#`QZ7)peTT`0*fr zTSg2TSHgT7z!BPC?=eo`f{00Ig=#+VMKBZx{RwTCn&T8xeHGidZ3rk-$@Cm~Z(Xe$ zC#CraG{x&!SD2SqlY4_7lIUCMOQ8;rQ8EsdsI9Z{z2p!><02S4X$}>t&H5t!d|`dO7rdp68O#BB^NA|rl&m}w-F+F}M?IwR)qEhCIgb8cIH8)f5DpJdlC#+YUeCgJ zFKJIW%S6W-@|&EG)V7c2ac^An!BK+V_}uMSOo^$Cm;9NDUl#f8v*QHu_1`lG$^POC zouqgdd-8E!sw35dW-aFwo%Sx{e`ecvq1foU7tp5aP)av@$(-kcYtTNxJ&vxROl6*z z!2BzQm_uKp;CsnP9(rzu%!$lhA7L;p?e23;j%ONiac-uC`0nfW6EtzE^C3nrvhr5K z+j&9IV73-pPfKPM9XO@?x+F;qpa$f*5CpZ5O(4s{6#n4xv74b-yHl*)CD!hii?x4> zwR>PktTD3&f(h5-Yta|gmhlpRSF|luJ*QH#!Uo)|L5G+p<#&jjmvslvR3v}lL&Q^i z9H-ol+2LZx9Ey9yh}$2vlqPU-kJ7cf(aw-T{eVde~kZZ^*^;^qgML#`lmG$u{Yzj;}@^nzj% z(k!qg{{wDrZMHF4e&Z#iI=UaeHUZHxDz>3NrmrBBK;aH4G5Dy>0FY^G zL#i`CVvV65zF3DFs9*QSZn12@*q3S@ELGOqj4a8v=8_60=RHatdkl-}j$lpxwn&rx zfbT6)rx8KA6u7Mi!R`e&EuyzCf{U$}lW& zM^SK5juU+NjMH*|AUo}L*C3T+&^?6C=|Ct0t0Cd4frM)T`9?29Y|ni~*q7culd&FN z*OFOmqE6PMDVZn_hA~6e;lYxq(88u|qZM)sh1lGiVqW0@mCf!?=}k|73uFGzG8Cg; zgY5(;WLS=u%95K1E!#6UHDLC8-t01E4k!>ABJwk#h$<G4zbTo!$_)#t( zVOSUL=C<+FbHZ_S)6DNR(m1_?4B5UD4PSczZ=*tIV?Z1#@5mgf^Iw<+$>AfAjI#y! z)@l^I3>p|UsPZ*C9h&*OA6f+u$8I8pZQ}P*Ssnbb*b`P@gCMCc5MQI&p@F`%9 zCO92=$Vj%AO=sjb`>ESi?X2VkQO zt_omTPPW8pm-e2|lVo`j!n`+OSYb}lCa@1n&J#>vUnWT;^fea={bVwc&|f6rc5K2x zY+Ik!?-G z2tLpp=Z47j!17g_^whCA64#tZY)Wso-nOUWby z-b3Gk8#t7L|IJ3M`PhHC`yQGg7?gyTOdntlaF$2uZ=d67^ZaNiIoq`(!Qs7mpjGGJk zD{4n;jCMTOXeN~NFYiz5)v*X8dd@@J^S@Bj*leVSVFAlVj=zDR$LC(K)aD}AX({wY z17MDUkMMhp-xK_vlK)e7J=@iL3G!+E$obAfxfNELcl`uOyxI&a$+MsrBA&!Tr9|}x zi^2BbS*Fw}IlCx)Q}k?qT{jyWAO}s>y90O3xFg zW#VEDg`GGl;S7<*J5aM^M^?sfaX1Rea$i`(^_1+_BXUih$?k{KCwqViVlyEb1E+!< z1EwPnj*`Rv5ykFhA#_&zM%W733zN7Gm&J{A##H`8zH|$bd_Uacnlqf4*{ST4%HeaT z|LB>xt;Tpy^>_(ZkE;5&iiS4uDh{v0PD~ocJmI`bt2H>79iLSxguXAf2t3n2h6+dq zyihYDoEgP}#CMM5c%2t{wA~53RuiSgCt}1${L9BxzYQBugjRkGF#%tha*Qxofn-_V z;T;ePX!(ud({CqCSZ*c1PG|AC^0Nlv$dBQWdz*9A z*M~P#W}q8F)3-Wh8~Ywz@lt)78=$$&=C3_%Hp|6U4~5w3N&f3Lq9<+FhhW_ezt$0H zw5H>^B_72{FnytrGQ@P;WXT@Sr@2SUP3)zK&nUa1FOMOZvQS7`-w>Y)ZU4g6{07ve z-Zs41-#7&z;COL1PEPqTAwMqUC&*LmW@`q?hI#19sT^FL#x>!43n{qe@ZSTHd9fXU z4Gi>m^=-yGz@NN}JHhezNq-MY&^wND`wlMxqM;7Al#9kzxC~-V0d>r{xoOW9;8e@_ z5Ram3lvHWYZE_xdQOd&nE`AO8BxoE3jfw#}o|0<{jjuA?%Y#LM+dm<4fE^VDxn7S2 zJdJMIPck9d$Q@9V7>L5wdsCCx#n4D_(eMCkzr*fbDRlMcKgKRfTY{Cl=OR`?Gics| z*bSM-lGBGHFdhrffXKBR&Ip8N*19_>_;iGY_r@1hNOjW`NV zSn!~FijtdN#>3wSDd1*%JlNkO--0}VEYF_csfpuTD6CCC#77xZqW5*yf#~Gqfa>~Q z*?^`5UHBV^PfX4@6gez)JJ`6xAxPhdx6=9F5V|c&Mj^d$VY7mn%=OUB03D3@&XfVh*+WThZeWbMZk~e`=upIrjOe-D@M+8@ati2-?cn~w z6h0Wid8P1IkRpJDdj^p9k;%c-SQ}vQDw`Z*V3`Iou7R}2lc5M6=DePzTunO+N8uG! zY@H?hrY|3JOYmC?rrar5!+T4b+;ylT^{g{K-3MFVY{m+d8~?K!E!gBj>5b>$!?W{p z8v7*~XO(}KPJPF0p( zNR~0^A=}1&GlEOeyw%r3ehZK_wGLf4JV-EnyJzh57ng~~@eIMO6Md|yM# z%ldMx9&*@!5|ioazXXPPQw+rJRIxiv?1t#5WF-=wPNX({^q}hCwgt*`z3xIWz$?0^ zB<`IP_s&zK;x9%Z)b(pwVjMZ1Pu7Ytux128pY_i1#JAj@^q)4u5&*=DMp+!=|eFAGl!YQ2_g|Q}2`2 zI(MY#dMlQv%r{iWs!VDCM`^NyuZ$?=;X<_H`cDe!IR+1&Z>V&`WE{)m?hc2cjvO-W z_lxssmUv=hojXQgGil>)C>T2;cki7j*(G@!<0J;?nSI^w(4mw8upmNDuK@_6>@%07 zMs+E1UT0Le7xHC$4;UC_424_{`pXRfZGDDKMq%Lvkh3?UDi>&c%TlSy@%1>y^Ytuc zwMVGn^eGt(O0;!gFxPonTYy9t!veH2#-AHKc{OFsKZA$2aC7kD78)A)x&u=BH1&{+ zA3928Rtg$!?!@eQ)NDTktbIKffUGNXkuGLzPlR4p$5|meGLU6G9pgw_-ydVDfFU^_;C$d~> z@umhuQnwC6a3{>m#ZxBk)`8XOfxo#-u3)uvpyFqvk;^TzKqk7cp@=UZP-E0$9x%0K zAj0rF8&G>@Gb%c%MvazDsBpqaXt-ExVF9=L-Zegx65~f;k^E_kD`KhK!H}rIsJHvG z#dtP9$2fxH{?iIQeG?-JJoXZ=#UFW;toBjTkUYFL%}$kCg2XsN;cdU7x|G8dU2298 z-U*K|h5wN6T%NFQFU-+8pE<*Eu|FKMzpemjXWWA)qb|UWouA_OjN;;0g1q!8RX^D; z>GyyHc8)^Q*8tJX!qx2k4*=u*HX_9qE9!j6kF`v@wJnsDlUWrL;7ZrQSZ^_hnF1U> zmQgj;?Q%u!YyeqoA6zLZJdUYuve*=B)dJVJG-U5Mq^`UUkS{$wu#&MvqwXk-WRRd# z+~e%Ihj~^0DkaMjm;WdL(wu}nE!TcH_jyi9h zg91iOWyt1YuEwml3}VJ)-KDr{H;XR=;e*eSD+t5>8Xy})BQ>L;J!jhC4!1*f5eh&5 z^GBZVjDVv#XB=XZT6=yKtcJPm+OGpWmLI1BThc6E2**R3P4&Q)tHb%#T?X^NxVcl% z{^f#_mz;zG)4=&EdmL{R0du%T%(x)Crk~-sdrPt;mr#asd}r;eamha-{BWZX@4# z=>CJrvzNIpj)zmxFE&o6o*x1)LQo77W-Tb{G;2att|!x-YNT@S0>IP1irinR<)ZR| zsC7+L?f7=4-LV}Q&t&@p)2ll=GoK#ciC{4P;K-(|?)dCONOu1qC6i-UM`-@6w& zJO#LY2r6y4t61(v1^1bKP`?G44U%(uddg>Glk&}YNi6FtHIR{Q=6t;Px4w!n!roSn zw&fV&2gR~FhMea!5QFPmK_P6T@LS-PQE*ZY&wbc+mdPeHJc}F$zmR$+TMP|YvJ->h zQ@&mjzkmiuUpkI9kB`JJij)N}kU?G3M-moqg+&bol`&zPIE%ZIyRihJ)hvcM_FKc{ zdRabX|F%BXj7Gs|)Zl~vA}ozxiCIotz!b*gbCl)M1hwV4e8p<-7QPkeZnRT8k`=@r zV@^%U;p=#bdh3iO?68&xAmAW>ZhAXK!oTo?qh$Rlw%=8>J7Qi}z?IQU-*V3e#QlTM z%8l31S+}!#5-vi=^!7qj$4Pr7GkYq!G811MS9=-?-7zd=keLDK1U>-Q5Dciy{}f>& zEi2`6AR#dinKYUmMEQpMna5SS!WM;%Ie7+L0A^f&>YLPQP{)LvzP>|mqYgF%Dwuvtha!$EnSl1#_xf%3#4(Mrf3FOG z7`Ip{?yn-R3g{+0JVW8H7hp0nKj8O~EDL@sdIfe*LZoUK#%YXB2QPL4`1Y~|m-6Y;kE1T^_8`Rt}Oatkv&?7uZ3_WHAf8(Cfd^jr^(1wbLfdmop)t&H2S9 z);*udC2{qvxcU!yygp+f)&%H@HG%jAi8XL_A>*A`lLp7r3OJs|!GK$%pHWKS4;??k zbQG^}o9ZnH?LGVd&yk>d{|yo9(0T|H-Z>#mKgqm%i3-lPZX5Ke?EoXJJ8iEj zxnAvPQ4GD^3AOkbvlBisWHXEKE2hpH(E`cgA4+s$3`+BzDI~KoPY^l|9E8wM5sW6* z#Th$eH?ocC1ysN00aKnMdYps4N&2`l(AaGz)WsUsT>FUg(0N6g99Bmt*Q7q&kT|v} zMJZk9cO3JLh80j!gSL9NCS-?Ga?)OR#-96kz%Pr~7|aQGq|z6ytL!r{Ac_(3jH#$y+Gxi*9F;%*%DWQL(C z&mG_xpFaz;Ct+wuVQ-4w1O}^Y?4Oiu{tQ?0&CabyD#yV_095X~e!}7}kSV7VU*rb3 zE0Nj#Aaq(P#{@_=(9XHaFxuOt458n?3s@Q!nQQQ@p7j?WzZe*8g&r@M@lZ`K*+ogq zD^byLM{+W*QJ4tJdr0B4f;AUHawBoB2hBYz>A^Hi+tZLdNB)_Oq3pgNzXN2S=>%Oj z-5+^mD&=C*1u^L&vu@5~0;k7O!UBeGF5ZkehD=(-J1g|4zvS3};ySAlXTRhpmNQ_V zp8?*&c4)A8BDSnW)k&r26)C5#(*hqLd_buW9{odz`afv!oyI2PvLMy%ss zj5sAeXMlfTB6YUzEmPB&Z9J6f>|b&_(Re(Xv4OD)&E5V$;$8JeOSL;-9c7gfvNTMm z)Ri@8sqF4s%B*)8-oP-&qg>~(qn#0xM@earICS!njB$xE`~`4rVO`DG4}3K2x`q7R zms8Xx9S1l0sKDgd8b6b%NLjAWP4j1Am(z;-3cXAPILK-R_F&WC`5@g@aW(pS4OyjI zRee#y((r$+BRj&TB+B9`Y(86WMhXTC>INSY zvFDD+{HV~HP57FMv50a0`rcUN!&ePhzOB&U{MI>hOsfF2gG`DjUn=}gB z*w*a7#rXgIqu8qtF)%q@7xPWnh~Ma~daVtvzb=P_c7F?Ldb(03+{b*0P^&Tesi2@I)VUY-GGA0v#4 zJ%!NnvlT*Zr@9PBJ*vPz6|;9)!{;WW=VjZEVjkTteZaHF;%_jBA1oGxz&Q<~Nj!1=45A}m_P-`uwO>ep@p&-1xn2+Wrr!T|d@IbqyW^cfxU zF@k=>7Z-}K25l+J-cOoX`0vB)w8(^Ws$qEO{SQXpTz-*b&GYiP$OnhHoiHfWND1<~ z(Ek9A4xc(;JwRz}_yCk+x1XABJcp!hj9G5%NON?(-NVGHU$=MIpG`CDv1w(ysVNNe z*^qfnDW_;w9EWeEPFL{F@ePf7+7=niqMGYgmAX=}+osfLKp$8}eMz35{=^7Jek;fP zCtuxxq~?}PA}C*{L6s6XCvcf{-@)q8GgkrvzYSBg64xGzYmdaW$D|GK&fpTzH7t?w zhKLPtU>wI-ZM!zSVY0O2arQPnHU`fFo}?kPx9Dwv{mR8UzXqD7X9P7jm)^MYQxJ}} z54;WThUDiB7Q}L-4!=?trDlAlrqjCP)e4?O(Xzs942PQmbOK_i?bIQFxM8<-GKY)D zb%L%2^#O4)5-3kSF`9>NMZ8q|52oSRMKF)+lIPsR;4BqW#3%>!I{!dDl&TtW8}k`t zdL0#N>QL`Xb>SYp%ZWn>gBmV_MxEQ;BAMvp2yXT~BoAxeoteoF_h5Ki59gkvMOU0P zZmpB01Q6+q_~3D~jYdNEnwu>1$otR@FHO@~8sO9r#3XRkaN`%!MS6(@kjj)IYF{9e)Iwn1CV0 z+z)OLj8QKEiY>|?Q^yu9ki5&@S6E+7QoK-Jtrzb9GbZ9)1F7(5IA1%w4AHG7ll4kI zV;tT#qtLT$gY1qUFMPR2`t}q5WNu z&aVs92GwXp?tKM(Fd7g0Dc2$On)#9jiHqHt2q)_!n7aesbdkA zA*L<2z ztN2|b_1#+r!XmS=jOqHA=8k;1W@<6TCxxI5YhuY%u@7bVY<-L|2otP38{I|2dwbM0 z>T#?D-_(744Ll9?OiZ9ilgCUWziMNkkk+`kh6AiinA}iAIRW>Wqrg^)h-)j=f%yIO z1#H|b)kSb5bI<9Z;ooTzQvDtxxT<%XWPf14nQ zVSj_7UBPQCCCL+sFK(sw7UNJs`MqM`T%B2=MRKsB?m3H3nNlHpdwP)3Xy1?J<8NL{H7- z8{oI4*|J>31ou3KFl{@-h9~V{ihSYk33CnvZ6yL=8!c-quCrQ`>A3btm}sAaFz>=1 zgmDq|xto8(hA$+i*tVwAFv>1XluQss&EYW^;zJ(0f5~cBk>6HR-R6}w97AoqKzrg~ zP)+y%m94DrOq{z69Rb0SkqzZ6=Y5+0F9VqLeNB0~U!Eq{4cqu&nrjPwPJApMpMyM> zA{_p>A;N%^hZvw>|4*pWwU|Hb~x3 zEEp;lz!{V4364+t!VZP2s0+ABOUbUoeDo${Z7<1qAAWj6#FJ zEkTNW;|iYRVbuQrF!t5qQ6ycz>7I!YoVZOgGnt9Z#NFLJB!mzWf+aw3cS{JexGxTi z+v0AE!{RIsi!E-8>*?Iz8Q%B1_x^F8=gyO^bXAwjsbh7@^}7t}_GCLJ0J(W@3j)hV z`z{HWszy@gls8EA<`s<{Y9Zz|Czmc`e)3xlgQ?#FvxOTdqNgb$6`ZAEFRxWJCU9HAU z(~A1m7AB1Rh|<9WuyQ{IS^3?k&JU&uF63nb3t~6cN;lR~;`j%MJnC{cj6}cBH_HuDkJp(hnS5D}`ck5j`N zZOEw}!+qCbyPz|R7j1(Ktn3zTNSAy}ZXr$FB~9E7PK1*$(z?KS<|{A0Sjnk|Q2|Ap zQ0x(!61L?Jd>9{tI;!4g}NCOk#r8wDDNPi zL*zD3 zly|c+VwL~+8{ewVY2gMf!bXZxs+{1_yNyEywvD5NtkKvOg-sGg_T+r&)?n2<1I|XCq zW&fFZXvXUqd(5@r8tC4A5u`Pj!D#w{x_XlTgBHltW*`OUZxQRNEvZ_8!=Cc57`&&P znaZW%JjUuB8u0Jz+;x;_uKW@5Cl%oT$#sJ!S4 z+qj_>AG1Dw{sI-w84`dFfPFh`k?~~ z_1i^oa{|6h6ixl8dG7~5SHlFm)`(d3J6M;Z2KUu2>V;Y1Du2WKtl|>oyL;nvbLAko z5l<#!S~vs@2Xs+4_{La_YeE;Wx{HtU;CeYis(Kr|5^a)U0=Sia7wemm|LZWB5lEwG zm<^~~Ps(X*q!qeb>YEMa;1{6pT+IxO1KUrGx%j+ELMI_p{~LDPY#Sxz9%u(l+)Y@* zePYq$K4Mux-3jZ%JygcDT}&k(r=O<7qo??^&G=MYT_YOxft}y~njkazXrl6cw z50L$zlf*1@YBOLqzE@_IvmSR!^mnAX*oz9P4b+&nzA4}I`hV9qA#07Llf6I^T8wJe;ztib;My5D zVsH)KthA4)Ve1CiM#QFt)UHJ-0+qoXVO@H4Z(&_uPYVBPQ(SS^*d7&j_5kc~ zCgJ&3otVSk`iPZx6&OW_1h2--#!O{SX*Q>N@}re3|!kk z8MAbVG8`t+Sv>&UuaIgg$-~?M#F*2rQgpo>Mh}v;5IhMdb8RWgcpg$Hvc2Ts`{UZ6 zQ$WcZU@p4m?*?8oVGNVfiBCFnhq^^KgFx~(ycL{cjM(u7qqvH5`EY#;3m8@;q%20= zqmI4Bd+v8Wd-nr$v$OwY)Vo@!B(7BfLsOL&!K!Tce6@Uavn?D*# zX0AM?@iUXmG-xq-ufB~0zJ2PDi}7WOS~w8i*f$Tb%~ZV=r$hrFMsq z))V(Of*x<AeAa%ncsvCoc>W=B%w=-&~wig1DL0IWShdR0c_9~(GyHJ+uSy(w9~ zV1Q}0%Nnjz=r1zXwsiS?-BdCeA(@Q)S**{BSbWV&ZwP=jI(;G7hBnvtA;e?XHWV2) z0|H*`SI?N!du{?OV&=h?KvPOS?F{wVv+cR!odO-vME^C7#b|Ik>L&3Jcg58b=zWWE zYmk*s+rMSfw>JLLw{mLTO^e8uQ-Hx@SP~fv-sMg?#=M-yxiXp^GaaNPdalroVN@q* z<$(Bmhov)p1@?;gF1?Xt%{H>%_6eU81Fyroa}K5cK7n~5$aL@!Hmj$3e2xK&-XFH( zc3Ma~Ev21SDgDUmltJCh>h)tTKWN=b5zWvJry)*^fI0f#gX@(Uh-u*c6)K<~2EyLi zZz$Fx_*DAf|2v>f5C@4&St0A99unt|Q^`nZX-Ri@;*=ymJhkV@=2L zaw*cwNQ(5v`L6*TWIE~lZt43TN^J^_MzJC86Y2@l35$oP14yE%HO#af2E_-zBH)a= zv5j~j;v&o73FyR|zr#&js?i58qaY(IT+PLH7%ocRe#KVx*J9DAJ+*BQiGgT~%kS3h z`?-_pTCYWV+nvl#&}K7aNX!Ou14K22S?np0X8*MYQGq{bdkz+{CFw$!%B1m&5vA|1 z3lZP$5pQ!XU=|YidMb@K=PpwvPsI)3r0@0|#{mD4jy%Hqtxfol`L-*jL7N1XmTqd<;o+#NyOSUoOGwB7ssAg^Y-!xZ2%~~i2$`>1_Qlf_)z9!l7u7A*v{C_dX zDZ-zoh(^Px<{Il$7o^=srg97F+HW1;t?M8l29T@%>JIM8CQ2*h7G{*Z!4wi+;=;ds z?|3#v&Ql`CZd)jN6B}3X~HlxY;)IfORSAQ2-v$m~;zbSq1|6z#Sr<{s5C@8P zI)Q>$KBqp>Oasm3DaS@iTKaX$4(SD$3$Kh%Osoo1x zUdD{avT9mwBKdYSQc1oQsAXtmilGT$wzti34jc_-p5x9!YSY-|?u~@6Y2bVp*#xgl$(QZ4o!XKQ%*s}XF8lS=1 z?C#n>MX7VoI#?s|>5C7ePg3j`z!G86LkhhBhR9&baN7d^i%^=djp1FKWRK0|HO04k z4Bxn`qj>p6lj~-4InI@X6SmnXz12 zvKV)uFOilkrI5}Y5E@&fMFj#rummS-Y-_O&6?bmU-J^LvP%h=C8EI2sF^|zk?b)$> z_S|!LIhg3qkB{>3=*<+Ov|$a*iv86SQSyA4F{)5JG&8cr0ujKo$oOHcM&1(y)MsT6CC)gFk|tE?+ZL$KJpr3H!Yh3XR=~b8!j*b_1-E=%NQ0IEw{Ba@^2Wg`j_$oct0$dBwwu4cu52mF?SlLj`^jQRo94Pf| zC&cL%$6ItpH(1rh;wnDY2$)tQH?%uGhamEs*lquKUM7HUNE*o4cmG{DSq5f| zZFlU235lav4wLB1vuzg3Y#AvMEwF!@Hbg%7m=pgTJ9knxvuyrwpv*?^!Dh4(?jVKc($B-+UTe1Fd=;pw zu0d8fNv5s^Qc<^wg1@_?pNsOBU@nU0zCe3B-Z6}x!t@Z zRo>hP*A3QArS?N8d#D9U{kV$y6<$Nz0v5O;;|0`x)bEIt{3q)Mo$Uqz!^oNNYp09> zTIkjcH~{Y5i|KzFy0)&TPsk*XK*=LW@(9K?1E0XWT%tv1d0M^z_zB;?3JFtA^+01r zJZxdW`rOVy#I9{X1!G^Lr$zZ1>ekH^0E9 z1+}>J8fa0!7^r*5sz_nmv>p?L++Z-|cH;PsFzhU;m#}rbH0cGrk4I4Yxz3`@3_R@- zsE5X#HJHE))ZDoV)&AUaEc;w&;Z*v|a8D08jTy$ntn3fdNZ@3IkCR)->PdFPVSgr9 zgf%t6s3RAk(KhDmmb ztmce~U(N`8VO)|a&@OD%7~$X|#v(J;jYik1e#Hf-mIab!A%-<$*%1g{UU?xMz`o_b z7z&>Qcn(tk+kYb$#gle$RhMF9f@F2h1iIbbxp2*-EwJ>G@X06z^rBWA&ajoVe?j%C zq*f{!OQT|}5MbA<0va&YDYOLc)Ia(AHIqK#N_rNiOU;Rp(nXCff>JPSw{?xp5A zFR@}$Uo&s$?q^brw?Q8WMmA{B0fQ!;e`-@kJuOP8<%S1H*<%&s9WK{vfvZ~Wcy8#w zxJif5!eyHqQ{GbE-smb-HQ$41J^fZ-$xawI7Gho3s{730@+@OiA@ccjQIkP&`7JQJ zTD@hw!KsN3?GM#^B&t@?p*i(?*eEx-Q9m|E0$U-pih4%f}cnvZaK!|a6x zxnwhAT|L5_p`YtyB|MJ9z2RngKSq<@zJg`zi$8J4aMJ+*r}1rWAbgE4^*C`CkT3TB z9;QeaxscZ@h8EGkv7m9Bj(n_O-CLl{1C5Z#a^omNkEt(igFp(09ghM9!R+a1%yeDe z-tI^v;nKeXFT7~lkWI-1geM4hMIW42>OqwrwivE)6O15Z)4duiN~`C>1kW09=&+Pp zHZag2m`N~wYLX~ ze7}HN{}_T4wo?wkO>Sm}u1UK$PsETsT0-`}@Z?d9oNU|_cEkW4XT`(sd1nx8iNK!O zFJA@ebQfxsy%l+P?Ztg;^%6(9F<*vez@wSlSnLQe@fWLUyxLFg&3CefYt<5Cmf|Uf zb&vtrliQe&qSUT8W^Gli38>Nt=}4rLbR?=i>7pUqo3M{+&nNLHbv(uRV$Z4dF)2JX zLxK8kKvXqy09M-AVV-#HVg-h zscX;i$Vyv4nqH9@YAO1N6n&KJVu#}^rs@1nXjbCwd7@D_N;T%PGrk)1HnEAtWiXbN zzjZ7^6aHXuk`=K56Vf?>N$-%w%r5cTM7Hlfad)Wy{S%?y-@5<^#Z`8}x21>3<4@Lx z^|8!_|1ZHJBYg{`MqfcNAq||{Io8_I+9I6QW%~%kO>zR|XA_*I4Sj;zu5)o09cW$^C zU`&27o6+wsTb0m+6yAdjVA2O-3lq^66Q&9RMG4zx_P@)Jr|XAiI8owt1t4=4bdSNo z63r3pz2XBG_^cYPQ!f*^&PyH}#>pj+Eyb$a#lX#(SB}cIoO=V``yalIx_aLswSRMX zwQ~jtb-O6B&p<$@-5c@zPPt>A#IcFi_vP?i17-yO^0`Cx+`Q~Rsr6ZtWI(jN%bpVf^mU?#Pi=C98f9_UU zEfO*Mqn_x|t{@W{^Wz^_=IC|aaB|lxA{?iH$AEW!9_{O0iwF0dzOm&V^htt#`j_^= zlwTAW08Gw;VW^d=f4)orv&Lidg`c2I*9#2dSx`_)_{2ukwx5ESZ7TFvCgDo9cZ zxu>Pdpb$vzpU0y+;*Ky?v^lxyR#(CTz?M^W5areYNmg-o{yoYZ= zyBOyW+iZ(uv6m@41T4zIxJjnH2V&(DS`1DtR!zW~JW%tTTuCn0sOv5PDDO!D5)y7c#J@;1*hMU{K>a z%ZKTI*XNIsr`wwDa;d{0p8NhEzM*$)!9ad=0p<84yUV37J*6*v>7L&R6}~kNA>F5z z#?soc(%Ny-+VRrb3DVkM$gS0BQECHfe^@`(e+lRSDz+gCN(wrSM27;&r62F`s#d#2 zso6hx+3zBgtkei9SUE_j`-LpdGFWkX{wLH|@B?)L6jsiJ2JS=g*r4MJ<%WD>BHnUg z=bv*W^&jRP1s8ox+r9RympVs&bn8w}7|KM9TaP7Y& z9Z{`dzHhrZay!!>3$iiJZFJgCzA1Nk?Bru8u>LGqZHXAq$30sFt4O_zZ9GH3yb*UN zA^)(J0`wTHD_bLf^$PG|(dg*G2N1iq9kdij%tUx$dpG1Jnk*yrrkPwR|A)ya*`|gZ z+iN*pqjZBMzJR+|;LETr;<8`hr29#G(Yg_2QfxcTb*i0Aa*aZ2O{*I06Co4HO@Eb7 zpCL#ectS2pJ1fgWlL+Z9(=#0Nhfi^iC*Z?6FOYk)|vm>|i*FDtz z(`jCp{@%M0?3BbGoi7`8yE|Uvc-6s znv(Jb&k*f(fbx=sm2eZ}k+Z}vL3vLK59Za1xW2(=tsUuuXUxkSj zgXt~BM5Fy)UATn7`yJr6syPGK-mDg`tL%u}$P&}V6(U@8lI%Yz<6JggUahBouiv5zyuE15fMV`~@Bq%Km(eC5|Cp9e0gOIjbN;nG{!0*F z7YwXG1f^FOGb}E-R8M6jYY0m*5+{y?{xeXD7r2tv4)c0qo{YMb^+NvYh14@}tl&Wd z_kG|Q6GGL}XaT%UH#V89BEjNGkaqH?2Y&fSJ04s-H^Y38hJhXM}z@d|M#6l2rr{?9@&(#{)t1Z z59ZV*Jc}zegp}6}jAOSG#)4D<19b`KWKxe?IE3MGaK9k+35W9QJrSd3J%Jak=GFnj ziui&`41XU?<5 zEjPG&8YJRh$i5YDqs*a8#*65WSWc#|ZYh&aUXe~-MY$m&5>LKM<>ionh}O5MCgPiD z;z$8)C*gy`L@KxD#bmhv8wk?6b-w^gS_e~e(zxxEv71SiSEESVK7!4H7mgbR#-qs( zEUe!LA(eXn2|xwK@`a4vqV~>b7a00@{PQB5I4yxeWzIWyAooT74(=b<3BLeBORjdf z&So5hZF9j}rOG4lEeB_L3tByZvm3tEwskXnpY4y~-?WbxVn z!<}z@=5CMH^pfEai!izkY;~<+MyV>*9B7I*NiUOH>X5B2W|2(#MK1k<^uxC&por@3 z2ZXx0u=m4s|HqT$-hzkD!?CBKBNID2Ab58=%MSI*ak|8edAk(V8dyb1hlkho}Xo(P5Y+gnYIFDoD}P^$dbUEw~Ds_907kOe44v zf38H5lAExJRfCtCUes}55w_g;HNWF)dDV82gyP(H7!3sz`M=h(Qp--7RG{+ z2VlQ`M6~jQ$Y2jPpaT-vY!&qis(?_?Xe9hrpM?n85Ya87ZA9DJqJg;kL6Mu%_++!tLr0m*8{$sSKHBbxrMhw5 zkXKIU0m%IGXUcUou+&2gr;1vNi41}wzB2PSw}xk>qHl+vghFMXSg=Jc-$WwN^X~vr z8a7lKHjL7m>JSiL{RXaOd^}g&+4nxzB&MK0z>P393x?lHFgwhzQ~E7#_;YXa@7e+w zU&_ljFkP7@XG~+@02N$?!$*_`)FIA-xxI_;;tHJhczJ(`l&4oSTvRVnU>+p?m;!V} zIM5nTDTNhHVGJko4CyXT5!;whNOdx(_Uu2;AgXQxj;zh?27@z3s{rPLUTTn^8xAw? zBKI-J*>qlYc3%(|l5q$u;G7YqGv@#j;=&Mp z;NEs{-J)19vkZuhcQDd*cu1+CLom^A{*Gr81yq1C794iq*@xH~vF zLb3<$yYxr6qF|>8YBQ^CA9&O+Z*iBn&c#_K*S^r4j*v+c=Sve8ND~)Q;Y;xEFa(NO zSb(Z&!+)A4_FK%#IsUVIi7vSRX1pDGO>7A6;!)5`$bApQf1qOXcLyT->KUKFhb+mw zhbnezfGtvVSx?&9EScztzOX!w{*OO@1Q9caRH2S9$5QykVQk|*<2J<@yCZ1gZcUiK>psvEAG}SMqJ*Lg zK0*g_DPxgONm()$aMwk-sET$Pjj_TxBGVRBmCevnwbx1}hb1hX@bhw$3<+~ecpXi{ z{l+4Gz;3EM2R1LT%W|l?XbP~5jCz4Io{&QsX3I+daJ2zmtv4_J;U>y zEW1>3T5V-p-sQWF2oWMEk+ATD1MMjw-x4n{DHAAmKzd83!9N$Zj|KF}K5nMuS_#-MQW{$k9es3~7)UG%aG-Ye~xq3HO5 zkw)cFMny97Z{c>Y%6Kr}ut)|xM9wXKy^RkgVhhIAS(rE$YXyu0Ay~}^BeNLz^aY=;uRV3C*A7{!qo`}yA{eM8yC-Zs zG2%iZx}min6=@G6pMEPc;Ra5cEx1sa-B)}HSxyn|EGx)aLxnBk@HJ+_76!htiz5)a zpprTb<386l{Y#LluabVZl_*`P#7VQEsJh@c4#uQF)(d;Cl3mgVL=4Dc%*OsICHirM zodc-&{RKe5(WQj1afezWa5T}LftQ-%b`l# z#<-p+RpDwP+!+k6s?sCf7#Fdc!titSH4MMBCq&v4S`Mt`G^Qe&R(BEktIw0&(xE6$ zmBOfA?$Zzy;4bqPrB10>M{jN+(DUnaxH`2`P*U>oOhH91#fK5iWA9zCk^8tgP?91>F)P)s#F%WM;{NNPC(K92g|7Q)Mpq2)k+$_vKr=;TsFQj z0cv23eMIelkgMnQ8{_afj@g zF&Ag(TwF!TZw(gC0=-aop2qBf%~{iWWZNhn(KJsRpk9s1r@c998Eh^`Sm)`TA@ON( z#tr+O^D*8Flv9C4QeFfUI)onwfIKD(eC8!8REgRRSVeK4njltM^IWd8lSM;#R1F>) zSQWwD&LEKoRN_2f>!jC7)Ys$$u7m&%BjQMzRnjv~fP`oZg?{sj6epYP-Cgzia+|D3_Y&;`|l`&1CIX z8)s&@xCZ>jH;T3E=7Y|&19Q9kv#ki$FPS1Xl+Jdbh!(R&qacdBa*2Vk?H*u2BI!Jj z%cQZbrLm>b*fL5ESdE&TJO+=aa!jWJbGJLxLFZ;if-iGH<$bAW3 z@B365Z_8?+qZjVQeAbV_-ASkXq1yoZQ9Mu+{*v?qBU%YwFj@$)cjk=wvupic)g&nc_=qwB8x zpp=K^h*mv*5!?`mOl$xVCqCm-Nf(O2F*(@GpGmQ}G)G3=b~3nD{8+-U&YZL=Q<+p` z0%%^n#S|aH3w9!QN^eR%&FHAYXfZ^I7;gOi{E>QHFB$A4lF!Q7|D}PG2EwX`aCoLA zRB7+<3US)})&wJuAE}n|9MXrzLK|e)DsnmY3>RErzmb{Ohd#R75Ey!Edl~WEH?z)o z);l9;Z5PykgXJh21B~p4CsN0lw?qDuF!qz=l-x8MmM5&P-NXmCv0&D;gIIADk4ej` z3L%dAt_E}zy<#EUILIdhRfXN~O}7^aJBmr(odz&w@!|h8{zzZnlRT7pv>~I z0pqe;!)R|rn-Y}Q90IK7>*0IGV!g6A6t}buUVh7_oauug@T!b<0EBe<^rMN9F{~Nk zheIQVAL%~)El6vFDe)hseD?RE+`-d%X_a<_@$AVI*rW%qjU?EifX%Wclq}{m5^@5{ z3nx5C;l_d?MJs3k;#c@G^$j&tl$l%h#+14zSJ>S&mil9g}lNh!ZywNk3WAPq8JRGdvxmo;HFd;@lNpfCotdXTZ1An6@(%>bsw(OTB1vob}BR z5LcVTIi@{)hIExD-Gp}Ja&xwE-CGPXOt#)xfZ)83v0O~Qr7}58wglScbBa>)O$cn? zgz=r`_c1|4nLp{Ocr%X~a}2KA1y3|!RC~s1B5W$)#)dA%D5c~*K@~1pk@aLB9u@~( zCB8XLWb88F$7{U1?qT&6ZC_|V^cSV>Fo@$f3JfEmF|KkQfinS+^qhpb{jrFuu^oYA z1J>l?-M965gMjrFnEYPJsKCUxKv49z4x^#cU&mm~vkIT;fA{a5kiXOQ zmS(&vF=*I{diny`DH}B~mINKf3T7SR+KEL_N@+iW||&R~w^*wqgR-qr)u&nIx|93NV6In1;8PXMQRbdxSz^WinZ*_Yl6Rct=W|UksX-56} zZ9>`3^*s=yz^XgSQrY9Cg{Iz=l{ErQ&;FCSfR;}Cxcpetrx4V|#ZE;}M%otUwFO~L#l36vr$zN07dy|o;u64SJG_4kE zZrWIB+Bj+2c=DQrYj}U9>}H41Du@XpU$ubBlhCIxsMx0{YI;|)ddf>UJAqL)%NEz+ zx-14h6+o&5y+B&S_~ZN?2-LjnCzJB$NcnT6{9h@r^Hq#+<&z6S-AL+xx(H0dh`SER zu=E(EUuF2DT0WWu%^`j_(Hl8W-eEymy6746LL=NaLNl-%Y|)zSF-&}?U52Bb9u-A` z3;A|{O(MZK8kP(9vETxbWIh#0OHFl9ZSkmncX18X$5xp#dw_T;>` z&p-|0>ce70DPxkUe=WcgxSIlTOjhV~26aPBj&pR+DNxM;mvhuo#7c>`fU78gU{eNL zfBuj{gU$164F9Vvc@B6td@}Fu+UBq{-*Sx9vKIW4$ zqnsJgWB`TcyasJZIvI*O9qWXuT8&}lYXE?UT2W(5A^X`}TZ|Bb?w{D7y60P<$3tzg zu?aqxL>dbl3{t&9ir;gVl`hj;b04Y)7`Vym+grIcZu<=Mr>Ffdg4FLYMH%6-h$}Io= zk=EUX&)g=;tnsaQd#q4*hRWVV$;^%F7Ln6Gv;L1$Oz5~RPi00rV5~)~GoMmphFfME zfX|>GY9~l1JSl!_I5yWjSs?PV_H8(NAvJP~Z_*k+?RY{KyIh~P4G9bE5| z1K>t^O-91RP-a3FPQHqeN(%$8awNEa06M4tK@$RCAkl)46S;h?Uk@PN%*Yh@7P+nl z%#$>Zq;WnigN(p$8KuJ799H=BM~11TI_W0@Q5klfaZJx;qj6*UG0M-xZK_{zlr7y5 z$D>XyNPXW^;f5r(niq@%!!{JQ;|)5~<3l725%=9A_1#OQ4Mz$+NxMH=gw=v@|6*jA z`8pVNd+R~X_YH)%YtAgVBXdgOI;ZhQLtYnFGAD(CCNMzD%N~JD^^pqETG~BkFTIA)ynNG44V!cwVDGa!hCtbKE9 zAq}3(khAvpi@fVPZ$2r9RsyzXlM=(Zw4YljW{fDAc7giM8pJI*^#gAI;?dA4YH8dF z@3vnU?ec6@2iI%)NFj$ZQW?g-*h7{cj9sWpufdJ%R)fGU{xot%Im9?_e~c5Qj)yQ$ ziYH^WB_t0*oWS!q;X+}NYz#E~1)i7Gq7_g+(X0$cFPQXs=~8U7@Y>C5DZa1+ z>mIDWNSYb$(BsuVV&Q|2$t_eU&~q0OxOAh6A)RHEllHlLO;*wE64S6 z0D~{iG&GisXF+~4TQY`8D~58wsx%ubbQ2`~@PlLqn&pt3t(;mtC&n1_j-lCD7f`?8=;Sod7VM1XSs(g>lNpz`@ z!IEoM&x9Kh23D#7G%%{=d(^mK z>S7%IF#ITHCQB2hU!aV(%=L@5`OXyRsAFI{KE4He+LmU)7!;SWC(&iPqs$!%sl}=U zMjO!)S@oIDl#IhFMhJqAc#1k5#cmx9u^71B?+;cu-Zg)9P{?G1+IMmVV`!-=HxviKg+J}<+WgUvi zDB~%f@yky%I3J7}ITfZi;S=OmZY}W1>dgmqyz>h_s^NWi6)^tFZDWKwi8_6cg5;oc zvkM$)(^j}X%NnEbEL(HDyY~(?mZ}bMw~)6hmyvd-C;H~mFI0Zb8{Vpx9&lZ5`5Q9; zGJ|oYAXDl3HBNve>AQJPeYS^+!W$x*a`7PK9BIx%AMN9Na3k#hK!ofIlxZe2;}wll za?rQ9cntlUKa^YMoc)8<<=s?w;fe3ZTqD(+$(YzMND<@18u^oJDg6C6ykrHFO_+gy zp_(h_;c!c9j)*LXdJZdFt8S8hGX%_0()s2%>wVbtKOhrF)#8w=%eHIsM6Ptg%_m@1 zZIk$2dG01eX6T1WP?PQ20|WiY5lU0}Q+aMGoNzP=KhB4=+ZiZ^EN9p69iQfJx)qm( z_QF_~{=porGJ$tCr!6aFrpVA|iY>9P1V1YwYXX6ZmlK=Su=QjLEf93}I_|jXdUTiOf zlVwc`PYRooR!Fa!eGNvN`G;kx?UgALp$VU@U}EaS4ASiFXC`F~G8i=j(w{##j8l&2 z@L0gsI%FAgRqvs^a;(?})K_sAjn)56o*QBWX;27xl?(t`d7f-1G3avIySX0lStA_l zgRl4+V|NjMF;(7rCdEwSx}=onW4We`1_DjOUtk6u-Sr6^ z{tl!VvzhU+xLvFHa?jM~;qW-z&V%c|FcGeP5Xq(EJEh~hq~p6AQb=lR5q+&!P}nL5 zyu@bKC%-SgtVbPb#51-08zsBXMnYXHl_*V9NYk8Y{PXq*@Y_2SGsddk0=z4RL$Hrc zb9g({P7*d?Lga=n!^q@q9gR((sA(~#mGgn|3{{fixM2fq*NY9Htl9t&t`X+S&tZvf z!HNx$jnpW)T^uQ$A!Nih(6b|3D|L2g&0X!cbP50K1}PT=ALA$|R*(EVT6_}g)=NFx zlJ0FhZg%a%FXCw=!s04| z`qf~sKY+^?RNoQW;$EZ9K%fPq`mn#mf=S=2pA0pMxE6sdT0h70g3{_TP=gq;p9ns4 zu_gt^AsRO13uzlsX>KY$xp-ym%+=R)S;pU|566>zvIN*sT=r^U)3v+-AOjl4h zxUmj)=h32}4bc|~cX$hq_4))iuKE>RrEybZRz`vujTLiIDRQ^sA~v{E2BkG%5$wHHFupoORM&kat1VxV zPZv{W)v3d1+`dE1!?*0#47enEFLD&~c&g4*{1?Up1Mero+S15Tyx^4sVO2qN!TG4k zr{Eo7eOWYWM7fUJ#NY;0nqUv)%4sbh15hjv(Fgn->;DfI%S&MH3B4__a z2V}-(xiH224!*b_w^5@NuP7lq9=(_h6Mk4mMoWdde@QXwtsK(|=FR22tco|5@FpuZ z!nw65MxB#adGM65ihKZ%RnA@m${4(b$rR5}vXh=6I0D!2ftBrtrPtgaPXJhn84MIu zpFW9_O&~U%iw%)r{Z&es%8Scu0#8ND5Q8+>X$M0zr_=LHP!N9P?hnRW=ZmB-V?Ckh zdpl+2u!{y2<)pXQuwaDatMRO%)aC;)wQfzpGnEFH*kCmLhLOj^U?j3V`VZXL(?bzs z;X;uz6nSD9_K#HuApwXS%v5YuD4sA%NKZk{HeDy%iA&g|rbAvRQigYUfzXsM;K*el zZsu_?w5RvPhn7z`d#i~z;VMk{eiHtnQz*unt25~}o;MWW06U5lZqWd_B=w@Gc?`zf zylkO(1CteAq8d2!4L_tx*D&AgiGq~%(*K77<$c1(jlq*|37>i}mYGn*dk}xXif6Uu zf7+@ZqEu{+E$4_1w}d=`8N%x_X=Adrv@wN>(-=&4@-Ks{`u3i)xrezbm|vlYw$;e5 z`As~xAf`9N2Ks;g{^P@`Gpd-t+@<8526JMH2mRsEK7ul{9LQA6L>G8N9ao7V=&G+X zk!4nIJbfth>Nk8z$e#gZRM@PdoJKwI@v|0fcK;n9{|*cyG>2u@SGkyKH+eaZ8uSz# zzC{#uit&))YiU5)SttdXQ}a7lxTWsJ<}#_ODU^glKUN^GpuTweQG|XXmP!2ampD}g zEyRH{-#;MQh87@VTjWAHU5a63}Iy}{?}d#I=JXhuvt7QoC0*pWg4tn@XF z#j-3s6eXqrUT+?c{M~lr?0CmKoP?p|eO&&TW0WDS5Jf%AnBTxD!TG+@d_RiT0X7Pw zS7_j@q}nQ|^_q>O4z4Frw!K7}0f*#L%w4kt>}R=<810`!kyra-t@ipG&s{wCAXGNl zhysVbJ0_^f5{DGAXz|x$=*S-cLaSBaFl6aMK?-}nU9y9s1az}QX{MenN*k#Y-Y5BsLH3L z@FTo$AIc+51gmrC8nuNUOIIqWg4&oU??5dtB{SpMrQ$pKm9Z zoMu8~1FeeFkPnsR9TDnIk*b@QAXy}m&guYSrB7pQQ+w1w%*NoYhPi|VV<~b8&(@+2 zm*6T~F8pM&g3~?03<1$sD^TSL<&<{(ywHj)moj*Qxkvt{b)Lp^Olt9w;=j#6Knf^4 z;2mGEZkoJ<%)n>Z2i|ew)+K_ony{By1s#X4gzGkEn<%yaMQT5h;&0Cezay;`17oWa zhB{6Sn0(7{S_s6g3AI(l!l!?AOO&pD0Q<#NYk<9Z*Un+G*p7LNkG_NBxl-Q#?jm>{ zHVyLFS9vU5D5oH^azqO@T>t5IjB?Ml0+wO(0jFI69d{b|fj;jTlfj-NV1o+t?~Ue$ zJtx1m0eESYNZrjs!7kL4uaQgPzewQ|rSM7EJumo(rnpP2vZ)C6Sn}g#hIBgr9VlXECZ`O`OJ8^QCm#8vjbt=GLtK- zxqnoYav#aadtMvxN3iadF{s33?$O1&kW#s1F$#n9rPJzj@OlL+aOxBipa4Ggu3dy9 z8#1b0X9WbV;4$`F(YTr_rgJUTs|;)nt=|qHXDKU~&3@$xS?^*6Cv7F0&%uurYCdiu z+Cul#lP5#4Wdnd(!R;fp>d*zN&?=g{!Pon%Q1_Yqx7ETEJ*F{gSbH6nzdV39FUwvp zxhYOtznk*>%3 zDF?EJqtlA{e0N!)zr=RTEOVjV2}p_SXP9GehwDfIySBWOIqIPpust3%DlW#;ii+#9 z7?Y^>qw)>hR^@}afY~0_5Ftq2p`_LWnvK%YO6h1P3d{FHTO+4XgdZpYAvcBGeO3br zI7De3M}e{IR+EGbT66e04L8S;>bG1^ zRRlK3W=hgD0&2=v%%GW`q3%fInZdMOvEeY2?mV*xmidsrSc9$kV61d7PC6J*sXJz% zI)C>k*Yi+H^*B#~)4Ji-X1*}HY5>oqK8xE>xGbg4A*BOrpu;Dkoz6CFq4E6m=~Is zTxMozIv3{BzBy)~ayNM9Wz<%Am@Bn+vfRMM_DYYhRQDk&y&PMu*m9cDMze0(ty46Vz+((G-7Z1iYE1C$Iu6r*H!m zZwgUJR3SsDK@fPgABb$HVN`Q;ZSc8GoGsje3CG}CH|2TaeH>V}K+W6p*}$@{XAqRW zA(-o%A23O%+f2>>)w55%l95|*`agH%<|1119;R0^&qMo0`1dF!9&C@>TP*vE2-H|U zlwm&M@-^O9T6{^x_|+RiZkJ7P=4vRFjkFN7&;wt=87qUI;f#y1fp~)+uG=jUth7p# zXe6{$#lv+vwMaA;sdXGUca}t_U=m3`0`*owprN=RLLiY$fkz_GvIwD!G1rr8Y z+iu9=64C}S2l>Hgpi8ONqA@OHsFMTSM}JJm!R2MD4ZY=4- z^;3q^m}z_Q#o|qXp=~}}aod*!g^^aBbPyo>ESI3=Lq|#7WFv0Bur`-$QSp`|y)mkT z=NfRV*uh%?1zNdc{X3D%`~D2Bv4eiaB`ViL(X(4?FeuS$hoUy)hEmC^2dHjSC-Ru^ z537a+CUh6Tb|23ZPG!{WeA?^0#9F7PpDgMVMq}&)t>4_}MesYg;%G8K9WES_E zc05)K7&l4RXQL7&2KJlBuqU7@p$P8NBMVpPrDNlK%?eux!8mge2dw(eoe_i z!FLn+v;rIE>qQE?5rOKs-dqKksPn}vtgUwysdTeSOr&2w!%&m->lf+QuN0Ov6U~VD zgIw1*iAodF$X4@i=(*Ieu=KT)p=~!xIyG84RV|&Wp&^H^0(`|7beCo)lU-LHcGadh z#!Yl1j)>CieKH8klc@2)tE+(QfT17)7H_ZMF&>4l$v5AqjkpP2T2AIY;A8DqYF|e@S zF`ky?%v;ghgVf`x4pU1%w2w?W5hI<5#Y)QI;kLnrH&_eagUrx%Fw}?)@;r~olJLI- z_m7%FlhF-1G#o)`BPOFxYQOV{?^ZMq3}e5|rs!UkJ&s%=EKClTAk@VDsPotJLfuT< zzup-sTkWR~Fz5^H*xU==ez>GYQvh&jG1s4zyM~#VNR2Fmd8!qx_CXg_J>CX@u@+{; zn05)dxD{^r9O$VDX|^N zMTU9UOegqK8z+n(h!{UgY_J>nU2>z{NO=M%)3iM1RqAc*_y$#<=LgVH`HM_3sH#h0 za>?q9kz{oi*g*$t(I}X5x*tKKlcSi8a>|+XxS>(H{2bG^qAg0yZE%X=&wM-!Ab#$I zAYCUGF~sjN5~0Mq9%l0v^9_8eZ8lcd+E&k#K%Bck6!N{L}rzl;6x3;-yb%&WH0v5v84$Cah^oLy^+@f(%M5!pb_a(17xgLnmK6>K33)jL3vug zr&y3KOeL!}9}(sxl*6??vlgyf$S9dq+7rFw|ISEEY(~MOwjns=B}Az69V=M@nq81u+z+HpZ~7hJ?wjMQ zFyjVX^?-6?$^M671Mu@2jFyD=Z-=C*lPGe~|KjVdsea^YT@duc?v zJERc|Y)}EQy9>eYv9ZS(b#z7@JIAiETgM!`du`tDy8fQ$pZEQ|e7xIp_TFcoeRiz9 zdI1}d%GGcwyd5=Nx3H&Ek@|;7MIg#>Cw`69vsV0{!-VCiP}zD40*g9zJ%($ii9F41 zCqkSon~kN|(#N=U?(-25g!hYP2M{q4+=}Q)FlnzL?R91tdCwgpgZnw}3tuKO`(g(z(ddA4inL<2ZwMAS#;^(Pdf`A%%L-1gkpvb8y& zCnqdShsN)9xV3Kwo=+Q;R@(6RS6Ks5kv;ZP#J+3z!rr0Othm?Dv)m zvU?4=b$)4}U}!>KCWoM`5l=BqrsB!@N6FEU(JOTyR)MZxLatq|D@6EjsM#7yJ$5uP zYl#fb&%h&E^k&Q<4l!%PL2NO_x5wc@)r+}`#-a(NIq}LrvD`P02M=-aB8A)lqc*n+ z57`yzFlu$kpLo`}Lptbvt>_vAIQc(B!wLL7Ok z#OC-x;v+4Oqk`3J{TB9b1K8__FP@ASx6Y!N;uE-7m_xS9c^s7O4k;8adeqNm5JpZL zO4dcp-}WEIHgHXBVT>Jttr)#K54Up`QoMex9Mpt5pJZOU-5(S@?5L!sh;0YqzN_1& zJIHK49@@|B!qW5i;XsccQu_3A!0F1BuYvztzTmHNGmTV;!Yl|E%n%K-CF2EAL4$!m zjni4)Tfx#8>-*7U9f}q7HXnDxwlPO5#HJQ$q`wQAFGU1Wm>Jg5;4e&P25l=t8h2a? zww$za63%I|efux6+^ZRaWw`alsh8J08dg}&lgp9gRdNBT=jH=^qKBQg!uO@0rZ!{n zp>mS~a=Z5kCw7R6AGUb=4ypQ$o+PZlfW2vfrrdsU#BPTZ&2K=frN6(>sKHlcy>x26 zU>>iPkYxqP4(Lho=k{XbRD1k|7K*Y-mCeO%E98c|jPn5x?K?+eFE=@7c1jC=*;h+4K~3 zOgV+8YO;DEbsg5&AOm=`DaCv9lG*&3G}*538@>r{1g;JY|pa0n8lP%L@oW6hnQarP;5M`An~&s4R^1{UGPgSo z@ld;op{20jO2HxtuLa9pDh#E_4L?xL`_@%SJRMJIuNZjbP7l`&UZXc#CTR*2gl#O;sb_9tpFyB%5yKFBzOR~PW_ zmtg{*L-n>eNgoAHyEb73C7xsW+~=Y-zCx2qqus2qc$CxNGz$1$RC*^oGTscorWEyv zQTNFjvV(jA=N@8If$9GbrCxXmRq63|kEQy(#}?qXkdoE$D5yE#S87Yim1pr}>ZGH1=0P{I@9-Q&?k)b(XMC63 z`=;WysJ0o>l0s%X*5p#cb+G0j6t*DeIOcg3eBn;D-2Vir#V=+&8UcQX(Wd!Z_^{zNop*v$ zW<_y*df+B!zbDFs5mkP(M1$@}sW^>SziO90HZf%W^Jm~r+wz4hb}mM{zwmxc-_F>r z^Wu#dQSSy_f!Su}F#%NBi65QRn~AvK;@y~DkAJ~g>%b>TnfQeEou*UUHdAn620Q;f ze8#y4&es?1J2IH^aJdis!3qaN}VQe8)aQzNw7Nf0zU}GKePStI9q!BvR`q(dx@$rL04Dj(9 zxP^ePx(g3rJJl)W1RGEH`~b>ccF6=I*>t9E=lJ;yW92MK0WB9OMu1CkiMinJ^AEtX ztjkn$@^1Q*6RviJmO@6$QdEhIg$9K*H~;~XkI7D0gzpjF&E4pP)F z@)jM=lG+AlE}|)rFL#3%*bn}f=fZbGddyI?Gq9yfQj_NrHM2}=HlxjGiIVq%G|DC4 znH=*lLW6S&F}f!+(3}v>!7gIGR-s~DcPMR+k%gb5lp>ivp zyyx*+^Q&c0qKXA^&K7%_wdWXr&uMFhMt~yaCa=bAd^M;*X)CPqx9)^`g}nl1JLGMW zjiT__fvA}?j1n$_2P5sdLH21akgu-FVhWcRM(A$?@pR1M`t@)?z_h>Pz1B#>vdRHY zqBVC>IIROBH#r3N$H-ZYqssax(a900F?|W;Z(5(7X`EAs4cs>fmvxgc=n3%pIa zw3795-J{+BanBnF(-?SuaRiuo-kGADSo%BG5ezn141pJPiENiKKz8c6nWJ^;{x~?@ zLTJB)nIm`ZBmzX0Q&l^Nr6x7pv>m zCz415q1@^w3e$Ux#p6C5I^$aN-%6mk>1P-KxjDcFz7XoHAsd*7Gw3%23AhK@PkOVr zD7B#VNL@Qa<1O5}8Dx+?3Nb!TjE@)N6R03^0w%&Rj>02>NlQ7Q_=S;Gxa`QK2U)Yzym*dS2$aeh)dIloP zj&i$9;aWHU!UEDN*Wfx~-w+Ii%M?>ZlO&)eNBiNsYhc4z0~Q2>C_Tl zH6wQvbER(#g*^1kz)FTg&%=WyQP-5hPp0AxZFiC8kGYaq3N*ydPKM2Upj8&~?XoDW zoUxA-cS;#E0~fbWA-Hl0hQ{~yI^4pHKEMG&Hp#rkmBw8&g`7HKr5XjjiYX`07x2j0 z1@Vk*KR_|hZRtuZPxoHKfg^XH#yxEjb02AsyOF?%tmoA7bU7S_9-@U#T~ob>SsmWJ z1|UtJ&62y!hDmtU+ws_Q`_A(CXlh2HD?a11ATPB9Yn#b3=YBLYg~4P_=b2cUJv;J3 zwjKYS>#O>}SD5MLIAMB)!tQG^`mx@|7@Ho^)3IXJNi?bH3hv9EK6plJkLN#EnZL%n7XR<0$&2*BYgLK+0B5&g!8 z`_zD1^k=TJ>t#yyX^f|}2O{)AGhc`m7vd;!ISY1<*iq5}Hgq@*Khse@EW8Dm=X)k5 zJbU*#JmcydjJ*w}WCTQXSS0%pS&Gr9B&`Wbn{6uRUMnAsW&iu(37#l{4k_Xin^WKv zZyvuYo|u*!x+0BNF*|MZT&jS9giMjIn0GhYilVmZSPF_y7^&e6|3=Nw=72|1OZeii zuEDKk+H0haHo6tzIhS{z%6_&pI>x~2|K~3paKQIXA2|g+MrIMcAV|DfW4_5%ST zWbYH?HfIqyRADRUqO+-QpcM;@TROOia@O*4v8e3IgJbzsr-h|#w!;Xq3PHwUB5IZ! zh?AC0#7Qf0(psFfAAWaJ0ggzYqM9POCIsm1tqNMuOl<*HU+N3@I#8A0jfm{R# zcQXgIo$4=GFp+1)7z6%(au;zP_(6&wdt4*s{GHfsD1gcVDHmt!#8q}_h}(%FaO;?B zAc}754vgqw+wtC+FDa{B2T2{%7*MpF`;Za9r~^*8aa@$dj+@lSpYswAY=03C*taI{ z$1pY;OTNxcB=Kn+l`rLwahe8+KjuXB!8C~DWSBB@8tdX7_=!^dc#1uwLM=BNsL2;@ zK*wcj-H6F4lV7RB0w@s4R!6AAZ+-dV2AtEq!^}FXqaXwPN7!COL(X-Zz&dYU0))e5 z&v8k(U4W{)ktEuiQ|{suKqZPc!S};qn)DH%QEr(*9(gKB^n8L)kc|N%LkHEOA5jIc zOzDq{!F?$CIU~INr!)aDvTM2(*Gkjw2s+GtlThHw5TD{xK&Pg(S`vu)_`Lcy4Rdx(NJ(Usy2eW z)3r|pc9eT*EjnlQ$sZ4-*RurmRRSq{lMaD#de_Xz7-Pvay-V3(RLR=+7asrek3Qu+ z*$s>;^K%pAs?Oz^;0%OxnL9dS*&O6qc3HqTjuTw)?#u=wuzRu(==j|w-XAeQ7F(#} z;K!(_Dg6t(a<(9QXue~=dCCP6Sz?D9>o}cSkkda?4D{?l(2%8`6PK1fs|6scSyG49=h$!pYN|)+ zvwuLh*C)`KkV_0{gFGlX35KsHX}}S-M6q1^D=K=gyRI)D?PSG-3}c4rc`K>_Q_61m z@%xrBW;trwOK{E#JAlzA8;>B{q3qDmZ(j-8G)bV2EqHx8d>_s}dVa!V-m2=uh46_0 zv5CvQ5ynFEOlZJW!s!A=g)c9&oZa2=yimZ=G;=b-()rzEwC9mkM70~4f(tNWzID-K z16-$V43b8`g;INtO3*6|%H~oha-22_2X&`kzCsq|k}(a07+{r9`yl}N2Q;4ULhbcu z;o;cNycbqO%CXZ07gc|e#<)xtW1;P$c>1 zc}I`Q8jZmj4G(b!26|0Qp}pq{4QE3=5nn}a`!}LT(JtrF%rs}p*wGCS^yu^%{0FQ4 zOfajb^Y-+alPinYe~Q=JL0?Qmc-uC3OH?VZ-WE-IV6b7f3g_P1UPEPZ#7rCkh{@AO zla1a|cF!U<(hz_|`FC zx0kJaf!?_cT*+BE_uEfJiWiELrM-1 ztR4fc@G|vqnqYK^kA@WA?O5ONe^^Wb_3VWzwhgc7<^9R^o-h#E=S}oP_61Y&c4oRR z;lOhKCd1QAzFk+7`rm`RSK#tT2S&B;JtT2;6op+m%oQ?hDD5uWqG`Nz#mae)^|5=* z5tfj>(j-QD1DqXzQpbUgFg5DX9X0y~*Tcrs;XdnXK-<#U?;-+MwbYZ$g15ETcm4vIDMA4l*OCY;!P3xH9didH`qA88l7qefA*{>j;4s~BIYe))tNVzGzWc#;ij_G6fWE2cS*9c}GH2oRpUg!|uLA1opPvfxX8W znE*?tLp^T8JyxJJYa_)p=L0IFmj!P9H54+B;kL`hk4XLCC>v|u{1a?fdp-8Wb>`Y( zNXztlVi9Tc!Ky{2r|ocP1kAZB>%~yvvwK(vCLL&k?Q8%w8znRH?OHP$5<7|cGAkxg zB3u(hQdZ##8IU2_DI2-xXHtga30%B7O3Hs3j+S1U#Y6YJB^J2}_4s2A@?7&P6ru&V zaTImL19*yy{RLcS9$bhA-~Udz8-L*Ai=fQyK*@HyxY>@RJU>fep$DA}>*Y3P@XLt- z(ElHj%7ejw9^bPC z`~|f?u!D^eEX^6iaZP^!2;%#CHLeq!@_DG?c&~vkGLyj6ffmXl>NtWqdRAkw6-n(A zhPCD~6PltG<7wjGY+;$MrZ57LZH}0bhhdCDbZ;xhP3IJK&VpktDr2PiDE0obXLX`-+Ra$V1vM=uA zQ>g5%CCW#v`ij(fM!Len1l|^kNj$SKzH zDD=%{PHkB>Q$!Vog`5N1X9%6mX;hCW9d>S{{DYIwq)TZX^BMV%T#L>cir`(c2;MD%L0<*$ zCD(DRnd$nquYt(l0qjBK@1&q^jnKzl$4-J&uJ(vUBk5qr8dBT)?a;fX4M^quixJN_ z`~UGOEt0!6ptwgEQRz20dikvfSy%9eajjySx8?3s_yTWvNGGZADInK|i+TM3?^nKJ zQY-nV4!0?)-+-p>4w^ z6taya5`kzX5aP_e4A~z}rL-MCp};w=TQ=x3Qm5CJM#A8RKF6>Irl8@oKQx_!jhmt{ z70P_jDXzbTbl^uu!TmFrVs(x5Kf%_qQRF$rj8C1rn-pTiI`ldG@jSVif(BkU1awIF zdnB|gYWDE3`#B6i!-_~6bRI;x?AwKcV|p=G9&!-qkrX(ZBL4AGs9{nw6~AfZG@=Gi zshdq>W{T^l6ZL(@CKzuV>3B4krpCej&HE*Aze)q9Idq-dKnJ&t>6t8^)y>|!_ViEa}>RY z@#8sb$Z996nxQD6@jwZpw(c$2!Jqn~r-3bFBNX=8ORisp{l12~;Pk4M5xkr0=>uy^ zcnoB@5fwc%hlt<#&vqEd^0!L43|s9uQ$ZVRC`qZ}J$LLIJifxqt<>T)eo(@++LDLH z+@`$2bVtp*41~Vu7f^5D<}wfP?IbGq){VF4d!1>O$_uI?=swoW8aq@g+qxGL)x!I& zK(2hGZodR$yJ+1%pd@8~1{%1ti^}Fk;H(IG@fMkheSBD1tL69tlzGQfcY7=3<_t*&u>Pmdi@_)yK^6-=P~L(col$Rh^F-|NzACGfmc~p*7JFyltXq|ow#CPr7Y~y zFbEcd8ID?AbwX~c%V~7+z8%Fi*`iy-md&Psql!+cYH}2fAY*g4{qN^=c|U%K2bwD; zAXQB{i8OHGDt#jZ_}X#$Fc?IeVT2@MmOKtUhDWI)^1Rvme7<{Cg}&%mFFNreu=vi{o@#Hp zZiu?rF&5*0v?b=T<%%3!r`ndFm3vRgch4LMsTNcIx|v|B%lcpNaCZl0Z;k0vf{K>I zm>RU){qX0IhOH04t><6RL+EGA+POK|4hmiouJ(uczoY`jz!QW!KGAg-f)b~9((|P# z$18Z-*kF_%MMyeNvo0B~G8l z8XS{~7M1=g-5H2lBd7A-wkqV$bgB3a&{IJ!x7@i8ZsD(4@j+XZ!NVPQwhX&2VLXT{ zX;&MYWjAc1+LFZ@dw#d& zDo9ANE~A>DZRIx}U(FEsjG23lv_A7qgnUIvwoSzL_DnL0?IonW0H+ie`-+SGsIAWI zsmCHF>w=00V|Edw;@)1|+1=sk3OKQk842O0+mJ^5P~(gG13Tw03_4f1cW5}h`EMFE8y0eLJ|;I|T*SPg@kG-r5+ZGb;cNONebfmrrZEPJIVmc16s zz-Vt(FB`!v*=$o_Z7IgqXuMzV-OL%XF&xI<=QOSxSVFPzWr`SyV;Pu*cSvPuk)?M8 z*w(0%y^uBXVOuPI-<>P*>qX;Sz+#hIl#}(^Xl~ZlFdkK! zr|m=<;(JM!n^D}+TG4rJSLP?-r~Za|D4&!|bo!hedZFUlPmak^fpVJ|fNXsP`HNR18gIay9%A zWnKq1E4_b5S^a(i$<-PvNhy>+p$;o@)G3D4&LqtWIjLDcG>!}Csv9^wMe1Y1YDq2tKplhlbF^S^DvSR zvP#EPq)zLbHBjqWD-iHr&k4>%L&x&xx-VqBVtADqYK(v9fsyq#Mo^*auf_E@RP^Z{ z3VUp4+DMsZVF=w>Octq2A0oqZ!)1l&3(BnTUh206Y(81Lj9RY!j1B62u@K26YI$xx zI`1=wG)hKRwO_sft-1!!=|N+mp&+U5(zvM3iir4F@~R(?3L_r!!tzYsD2b}i6z&&; zwz6Rzk?q-t)K|~4?>YCi&;V#?M*;p#Wt_MJ|Jce6o46s(EB?-3?Ka_Doc1uJ?%_RxWLX;c-tiqs)j==;AvE z1b@GzDAE(z9Vo?R8L;W}cqW-zjIltPy5bE6D4~f`QNIyShwkvlGqDbo);t#%k3S$D z-gDjZwybIXKh#?}`d?j+%F(%rn%PSK`_qRmil%t9zL@b{%=lp}W)MZx_e3lG=Th?T zm27e~psU;p(wqgac$N^JP&~eX#kg<1B20*#7=^m!k~mXJA#n^cLOoev0a69?b>O%n zS1*FJ!R89FQzdq)jcCY7Pp-6QKYORC@K`H(P}Sv?$nyWz706cLGdEzn;XCgz>m_9w z@+0=#!*+-)sz#TFR8qzbJzTtbPOXM5XM`i?V=gN74|7G@awXho$Ov|RO?T8rF5^RW z_Rhu4RE=BcpE4dwTzL;!1zv3Y({0H|011`p3V0MZsx#B)#SoZmf^we)JNTqh z+1ob)K>j&fJZ;pf`ZN0daWC0EWF)>d0xp56$uKEk{L^)7&HD~a0A`2)Q+ z-%F}*b?iz^v+9PvSd1<%Hh|FiR4hKMd;|AjPyrvaYGXt?G}}O~BmB7|0n?x0O_qOA zw0|dnoM}+|nl_(u7AdesL3@;{u%U zPNkvH?9daMokH^$xa1lL#gT4@edE$ntlqdf+Lny0u0pt!o33=eYMJzgHE| zM2DopZ>kBk|8E?7Hg3aOf7a*m+>%SEsci>-%6=dtzw-2Hp8CpSE%-GZ#cjYN-+j$w zKaA4>XjC>raZYV2x=7X3rTH7CyVd0kVv+~^joga}k8)}*KCRDd#_(O2yp=?fmRvXg zf>}>pWkA6LZez03j%)%IY4xFs`=^9MTm?D($TU$1Lym;N#*k1vF*DG^F^dmu%e;xU z;j5AMTRRBph`Zg8TINne>Hs4coc*u84Md))$V0rUyhb9gF~yJngwpJ@`P_uv0}djW zvw&B%WfkM9DtPC`T1qClBf68i>jn33@A|I2HE7%@;IP|6qd(OmLji*t`&>tu$ zI}!oOT=SyeaUHzG21;mAtFNMkNpY0>pgZ0)`hX>7r_7TvROLi+R5JL~Ktcc`m4C#B zi(?ai@Ym!neXx65kyu z=KEiG*D@@ws5G>1y^^~3{Rk=UfC5JGvObp@=*zOBM5?ccaPOVH8|U9$K_Q1`;jzFO zlpe{Nq)NmSG1WK67^)hNH!>AQ`{hP_(s-vp3;pgWiphD3>cGmdB{YGMWqc za0O{pe18;hg?N(e2wye zDHf}Grk|m(gl8IXRVboa3W_7QSfkMqm84qAE8p|D2M*TQ$Ov4k|Ck^P%lq(mwALAQ zX78kUo34P;iN3dRyZDC|H5US{!j2_CUB&{*#&84I(K^PKM>mK{|?j{yjiT+lU*g@ z(2L^wZ@`<^yC7)McZF=|MDbC_QQL7T)39NC#-K3mEA`nQfLm|XLK$EtB54(Fl9cC= z`nOzz8jYeUMzMr}-TW?85>bgS3J5Vqach4+%&f_0>h8|+uHLSdNTUU`MNl=6JY-%^ z@d+o8j{f5sSPM=kmdM^IUTE2zF%#3E8>n?_vGWob!S@gjfVn=*T3U z<<3P&mD=UJ_yaoSpgoIg6m{k(E^5J{$^tJMdsFcgwZiNSaq<*{n1^ve&$mdUt`9+4 zn>ztQ0@DT5>){L?mT=i#f^vUhjS_{PJ3B(CIkwSr*-Z%<=n9CCc9M7hTPRXnU((?X zuAh$^i~OM?f0&+=fnEb!@|*V!JH=U^&(8;q#NbAhnd0o%KJ$hPqA@_K|9y(lcYP6! z^<2@8J-&_@v>v`b5-C5+2ZN;VMr9vn;c4Z&?kIHpMUCsgT}N=;ci3!P``$kc*rpc( zv-+`?Kr+Pf1>*QZ3Tp^Pmz1cX;SUyVKY}e4=eIb^pvnb6N%_7fjM^LAV)E`z!kG z;$nd7Si5)VeVs97&TN6({2t4BWJ;)_?M&PT9K3*1Yk%sT#mm|`-v?<~Fi6Q1QZHb) z|1$Jpn-(B969L|XK$RYVuj%%(7}N+63!eKyayJSt2A1rBpf~(U8Zf^SDD0OUMJtxP zLb{hR_baZjgT525WNrcT`Kcd=Im77Y1(Q zh+|G@<_t0r3;q!cF6tTNQs^XJ_EGOCW+`vp)=p*k9+UIrLThE=vjQMmA!PB)%^qfG zZ&CC7GD>gAJ@M3L%c3d~+T&Xq;|MzEEzbFfbG{Ur@dd9Ne8Y%3zGZYyxv3}nXYv1| z9cU8CY#G^>FcZjo?EqOk0xQjNx;_w-?83ds%v|Y@)a$5j2BP!u^-uO<7K%L~;)M9q zwO*>91ZO};d1?~$7_x6SqM=%7tj8FTOHBs=rpjE_GjUI#e*f{IuH8X7J#k`66ar=f zN3L-zy9fp7h7@Y;hIJlay%~jDchS&mOY!Qcb-y4@cov9H*t^1jtokz9pVp)^QcHdA zw^yI{NLxBR!8y_bTuy{>8$x5_xPt3as5&LJ0Ewu^mI$5v8$;G;E9#iTw2$QsXy;-$ z{Le8xq*AwmKR}(;JA7Tr)NJ^D)TxP$$5h(5B{G>1U_BeHn|GtQIk_myv0^QP9~~(y z+yECz`w=I*12`CMGT2r+x|%IgW@Uhmcnggf^l;i?)bg&R+_qhDQC~u;6~~~j=h=qA ze5iXfWQLq0i`I-KxcA?Webp%sZueooWPE~B-Y_Wf{-YJrpcUKEw0bnyS8=Q~9AW$b z6VnNHN}Uirw9{X(iC|Wn<39tDhMqodkc8s6Y52i+W84htHLd~^;Son8_PIcOGO*wt zV6ke+0H#7jqYTRQ1s)Dj#Rqci_6bcm_n9U`*U9hH86K~&>#$3LmQ5JN-vgH#HY&dO z`B5*i1I=h)pd}WxCx_R|6cRL5gXTIzCo3)FCBE*-LK@jSfZ=`z#F{|Y-sn^fz2Wxm zZ_LlAD@jrSxvWoBG}jZZuH-spmL%f;gg~CLfzvmr@BV}6P2g96KFP5gLJ9F{Utlv1 z9HinkP#uvQy(f#ud$?($K`4&BEiJMYfl z=!;Kr7OoS6csC|KWM0qT{-m6<^(T4fH}WjJ@*Qq@8A9$ZqXBzEOQbIF?jfX6a6D=Tz?8f6B3^HC zWC2QC4dwtV4eaBJ)|o*h*1v?!N>kn24eOFL`n+^ z9S|T3_X-^A5aK(Ko5l%iuytDs-N%GfUPd9(9;f-lZ{_g{Y3R_tct=!k^6|L@HmGlu z0o0o!Z@6P|jw%Eq80?PXdN?5Z=78D`Z{A>oH3r<|0lRrODgPY~ zyu$B_7X}vF{xYL{wQVUeAPAq|e-`uOqLxpU29srz)>v6UwAV2}Z~yH!CJAl_d)%9f zLqj!v-_NslYl4xUNJB_Bk=7h+vcL)kBe7RuA}Oufj2~jwK7p~mKIL?HBx+Hozi~&~Hi4mI4L=U!fK^Z19clYN{$>QhW;8 zZhM4npuP`}h1LUbbbZ3oMc-p?@IqPggNm0kW#hXQ{dS zV_OWwKe2Ei9Vh;Y7yl$s;tWP=?IB;oBS4m z)Rl}THl*B6KVwymw)u=oUXUe=!H3BE${U!QCz3_fJLKBJB_G&B+C7YrVS`mXv_Y=x zm>mjZ5sQT%7Qrwu>=%Y*0rO{}Wy?oR;Iupw_rA4v(eptATEkCMYt>MNQ2++mlm~H= zR|;!JsBCYV2xExghQRYxzM2S##htwL9w(z|aNP)udosna zN}sg!9!2Nuz{LztD%)}aeI1$uu7m79m{JqJApiaWDt^F#SlQOgpc$qV&e~Uc8Hhy( z#iB!ip%jtnfztSH2Z5xxuN^Lnu3bdeu5j=CRIVQbJCLPN&v?$?kn`g%Dvmnlh!}#! zE4$0aFxrk^jI8V^9Iw(hEtT(2k({ZYW*ssuHUEpS>O5nCBsl1*Nnms48q!OQ-g=w)KbDBW-uh2{)9SvmP4?79=Bd+Wn*IpC z$JAA|4lOkMPQ|$y{6*R(#}Vgbb0hLLdacgvw3C*t?{;u12?3 z1(2_Ok-qq(?q?%DIa4AG)P+<;X@k?HDk?qEUk1EPm^%os-nEJ>Z*Rn_eH&XC|I}4R z=R@z7q95^a%p2d296fGx`7?&jqn>JIg*}u~pu(3QjYH9I|0mQmDTJGI&wtULW(SRS zaR#vWg3TC?j;Px_Q3v``_O|!vLojI_JIMk&oRYroL;Z6Jlv=9en5UT2tl>G=gT3Y>X_Y-%jvGi`rR))m?O{5KOLyBk&tZ zmg!4$Q>EGwih6#3J>ZTus-TwBSq;m(FTi>&6GK4|N(58cixc3lSayKU5#C^**AVz# zpe~%WYoWDV{|As&PixeUI5!VZ_vva3bCM;vj|1ZqboFIY7j?(2c8@(K;QS$qdtHS6 zSQU8@9rE}W1&zHVv1upy-JUJgUm`2hv8Wwh`VEcc2R5P+-`3#Xy4?{xl)G>at{o4~ zl{!OP_Z3EZ9lGR|!W$=Ic`z1mFD-uF`1w$qS3Qv3c_M=&_pWvbt)@m@J%8B*!It-J zU@Fpg;1GrQ{;T-D4w~uxcv=E2Ug$nEy+scm&%q6K$_*|jenS*qE4;+^EL4cPB=AUR z7eT-2^xtSEyef=43o1I5UILar{r3xeYCi>Ge+?STwM9nx9T z4LP}&p_Ua{-V5gr+j_1Cq;j;~j#qWR$AbQG%@Pzs|AWx~2rS-n(+;-(E!*`@?$r=} zL7BG5P9yhtYkhSC(f)=7xu-Kz!wXhMD0U9deyf zW+^C_k}M$t#O1NIa9}+SMa}mE|(@M|})t09IGLc#4*sPOvqm z=1QW0saRPjRzeiDas?dar%N#uT)L2Zm(=14|L3U-QyF#eDXfE~n(6S;u9fxdNa^co zfVe7v>#lEn@v2E<79w>ya|x*yUQop*98vK}op75l=A%@n3G9qBR8E3JrB8-tV7-gBd9e;sVMu!3F05qH$q!5Y}96zou zFc917u!3WYR1?k*1}AdqJVGokHBmA~qPd~E+_48ZLfQXW+q0M$mnlZMu! zXGu4B2C6#*A@#SvBR7Uw>kMies7B0SQjKIrnhO5>5uy+5oCj`j*^ZoXd7s!~&#wG0 zEQH=>O^{{1jSmf#2__gr8d)XlH>N&AnFT!DoH3;uyT5?Lw%UIb*IBnAs+YdH!}Ga~ z>|sn1|J5Qlu+9o&<}ejwHlRDV;&QctB)oQ$YdGj05eR3`xm>SDlQ9_Q=&6iZJNJX# z&t0;*(}y33-y4a%@<)^4(7R7$C`QU_A2dhQmaqoHrbLzh{pse*eLtMXbX!Xy+gAdy z^(ya$XZ^1n0|0W~?S$(nCstS<>rAa?F#**3%o}7{yq(E!QZ@}}!i`7(?wBCmTGl>h z-keK|-z1^xP5yc++(k|dM(QdC8aP5eR>K}vG zg`S~teUcjH6gl4MHR746nR?d-o zK|bNh2ST^2`;jX973w5PA)BT^CgAJT1(ukdN!e|Hff2q38){9yesKLO7r=*}XC(2; zhn(j8r5oIqDQEF~Z0S(6y?hUqx!(nNPYqqkmSmw4OT!dFsbGpdA)8AWd($z?nmUuS=k!0K9%aUeug<{dHE< zOr-x$_#SB1n58I^og?M>J;7R#22ff2M6@(c0#7Pcqv^5jS_^HaWdDQrE$&6e7k%#572upgYYl zPYI^>272}5z%eSqC}j<3!vmcXtj4o97EtKXpWOnn?4iA4 z0?YOrHsXe@xM4?rdoSsOq5_X4$_BJ=ae6bZ)83&kUTnQ-Jks!$OhBer=@ctpoSS>Ki-<_y3BuZ+YmiV_pRXOIs3 zN@?e_P{m`8BNiz1pi4dbQ``@Ru8IFO1l*SXE`;bFVb_Kr^6F>ue;x?#g?~Mi#vwNTL~T>zfW@i5 zu2eJ-Hfh2ponlQMpfk&6Q>71>U9!6$MeBkL_v|{4C8Na zmnSLcni1MBIPn5laP`e-1g|_q8QYA(PIFu2iX+D(*A+qY@Xeampr>ZQwP#50acI>) znjDYBqNNJEEzp=XprEx(n5dV)neb|8B zdR*T2Djv5Q>x|TPetX@{bbMhdxsua@`?}3P?k==TYwej6sy>0BTvkJ2sKG41ovSJL zUu;)dZw?iX_{f!&@+@<`Mo^9a`HulA`_oXnO_!lF>sWgm^h@CAq3A=m+kc_KVZ#p~ ztqK1jiv~Ltkh{-S=-DH#;@-L7wp;u=5{2${+w$62H8Oft3qZ8>(C`-QWHfb7h74{ZM#i_X3+LbAs@;X!>^thL@N zo1~H7l*w#G9=M({Bim{BkUB*jkoCGFLRcrp5aQ0{G8@hPGz%3%w>lxUYP%k(s%{KY z&4vrG(|jlvKcdXEi#!a&4(>vJl6eT1#zW#OCVv2qoLasW8CeNCkviXIJhsJdiR;H! zv`4R(U!kf4CBVyi_kzk3fQ`iqCJ%hNF+_Ip#z>OiV;oshgC7)4t#C2li}L3q}TIdKQI}g7S5Bm)l}dD6uyhmi{dxb^*3x+*?ti9JF*5ZvtD?A=5B9wDB(1#WEMxW(oa9B(iQ{GuaFErz3_%f%?!0O)4f z83>f3j<4kHU2}ngw;$$04IJ#M;t_=Xt1NnS12kCk2F3~IFAw3XZ8kSVm7rg5Naax3 zcqWVJhcM3l)Ck))G1?I?JTMUK_M&LK?P(lkX2C)oD0p!TJmehN{3k~3a%D7bH6HLy zS`8N?Ghd+cimQ}&AOYF=6X(GRggyd&>#uGEj{H=GNXiCu_L*=WUQFC5>rovyITFtK zFnaU;!ix*Mc7Uqvn9_}rwMZu;w)!Y&zg?D`bJ zJH_>!hl_PP$#N{Ca5nq2NF4$;A$2)+Ous=x;c*Faja4874fUz;_D!q=lVrH>eu73r zb~C;a7)$9Fp5fx@A-MJT|9~*{ocD`k(le-&Jv=<`>)AA{KPD5N=`bKHmN2sjajWEBB z;J@%HP>?vO>VIN-lGd0~%1R(S*a1ygu;k(=BikUD;R0LT(+z={CNdQ<;yER*wYNS>pJh+qm&u+7SNOvdCMqf>xyk3|F-W&~|8Nigo-Q7j@oL zyfhkzxK*K!Nb(;ynN@@%Z?p7Mc?+5%aI?R!C%RVb%Y>}!h_?z6Yb#>y6mTlWkgK{2 zgF(MaV{E+T6q;d+JI`@DCDCUtd4A-T>N~Y9(!S?^LD#iV5Ve~OXHieZ`2WQCXB6|o z18=Ho7>z0xeM9-9EDg8+TqhH*;=lt()^iFD)ey@1cACX~cG)VO-y`>L8{lim5{@N! zx&sYua5k5GzX4FM^xvU?Yfv~j`@*)-u8s&z>%UO=FCyR0FunMOEmjP@5WK40m>YO@ z^wU8|ZL1F;b*=rN5b=Fb<~3t9S5YnN#6fr+5b8vx*hXLqNz1m8?}1=QD#c;4*vY`v z>GWg;SncF(dJQ=BjgI0*Cvl^*xX}fc#cN;$st zp{OUn;t-!4Vo*Pt;C>bPmYFU72fvz?GbZIV;djWzLK^W7tbo&dD^fKAdr9|)iDN2pmltd^{NH@L6YEO!85!tT*nfNbk&WYL6uJBA z`W}(d8IP5Ip`^OTxH$C&4j<}_@KwC3C?~!WRXbPz$zD9WTCBvPZ1$4e(-N=@;|4I{ znf=WkXMy~faNbe#8E zF$}#^PwUG|)=lix4V*{5FFd)trwL&_0clh>LfL``6MmcNzMO7ZayF!UKl}kRQYSg{ zyyavs0w$&Xk7e-@CoUlE)9(kY-3t8aXXEWX46z&~O(!enPevW;bY$OBel(BDPDB6LQo zJ_FSlKGQwEUqq_0nk0w7< zL>tSS!JI7BJf(qXgh-U=mFob`>G^auQtL=lq;4V3I$38jp9r0Q!BUg$`chmVpVe`L zT4RvbM>U|pJYM3KsjNnf7ly~V6N`E>A3Z1X`WEqN`oJ zkFgS~SjJXt(pkR>3*^B7LniJ4-n^rr4|(UXxO0T!z8AC3Pq;JlJe4-l{{s!!?DI>( zNJ97TB%zTpx84KXxWAcz>w(>7Ahio$g*4{KQw&qm8Ac#{7h5U3_25{%;{)8q9_Who zlyjy8*F(!(5w|5Yh*=O}Zq)WrPhF4PGZ06v#F;eL+yD|+K?X4PoxV7JsFgT=xDjdh zRl&thCLdI;N$&4kUdL&9S|raa3K{GRR^$vg;eZYq@_wNGGQhL4N5_g9#3eoNx7_qHB_Q7*@o9odX_g;09==g>P z&EtJh>Bh@vKmd!E0*|d^`d(R$9dfZR8vWx4xMo!+&{4#I&u&tWi?6FF#!`a^Q}#X9 zX{b8%XJVu@ccoNcM{e7^`Nh76>Htv#R)FA#(v=6bddF)jr?nOh5Ioq$F#pB5Sa&?_ zK8F?SKIO9{I^QJs?Lhv!dFj)@(oj^Hl(`K6N>w-rl#27{j{MNOy$U@9;C4Ir1>mS{ zIeGn+ix`T*l$pWs!0t&m{zAWX%%O~V6NmRLT>?3Tj)!EO$+)-e!qqr%(MgA+cQC~Y z>X=Z4-RDF(4`y?@yW%B=!ZYJMU{d(+Rd{pqzAI?w%56$`ZGl5XJ!J`hV+ZGG2o|hb zT2loKGeLH}0*Z+a7QW+fKsnoe0Jpk)+>DZmTV}#o*=09le(evvMOqfg+iKjK!|+uO z4^6iXa2F()MHAeV=`r_b6#runZhKpg#m@8G3XS($Si~Ave}$MhP)r;oCJv^7xxCb~ zEtw1E+=uZ~_j29{+Ecu3C6B8B&yPck?XaH(WlVpH}KV=5_-C7BeM1u`({E=q|im~<2$5Ih#vH|COfKY=R7oKn<3knN~dw?9#< z&C2m8Z!&~5dI7lg9dkgTFvAO04lxnUM>y#<5Y0zAG8N={y%;APmSw;DX!TxPEz5?I(aT~STupAhJ_9pZ*FCC#W ztvTMUtR-c^NAR%CF(X4=z$>wSU5^HQiylDF>gyj=TF%I>!*3Z_r<(V#WU(ILEik() z4n}Qm16k~aMt3hg9fRWpsh(WJXc*A2y&v$9_PU2GF7*+YAbm?Zg$zy3SlLlbx2KRk z%+T@Apz!83_?%WRg*=rq-`_>%2Mzh9*#D217?XpiRI9e(fYJK#+Rnb)hEK5Wy?Hmd zOd19j$Eb6#wwHtAEos8J=A7GcEPRYMq_pViX!^+^{0_sNX$u1p-dKb;5#eScyr~E` zC!dlO;5NS|0m3Y-#+w5&$mN6$LZyL9i#m*!hQ2Z9*LPbYb)u+7Kyjrp{|{SV9ahy6 z_08VrkSe0I%7Js>kcaN>Mg##B6ELv5u?4ZaySwAsUOTVdUD$oS>NVEz{nqim@Av)j z@jPePd-m*^*%NE6S&10(pWb3*+ka{y6;jIGEqd3^7i_3?Fdw>xjc<(}jjfx5Yp*{y z8jB@mV#yG(WT;p&Oe`6Wwc{Vm$BtTolro_lg|ZGXJyHOl?jEoeV+MfZ+9OC)JI=$` zdb!TzO%=F>>Chs?FEOD39w%@eeds+9X7=VhT(?;=7-!uCtG}>sn?30ZxHN}+jlt}P z25QT;Cjr$hOB$ifV za|+v`?rx>nvQcc=WFWR|rsh?=0IaL8aeckP>Mf09|6UpXU$FV5I!7rcW(h7v_oe8%1*oi1)<~=i4+nrYkT2JN;aRWi)S}g5 zJk$F1gW42y`)8j8;4ryDR#eEv#=CD~;N0X9P_Jj7L0BJRzyT^U`G!(9nUsC`p$Tw; z5@$~+>g;&~-ehvMeqDEN@C;M#^#OwRb!JpFbr>4)Iy9Zrhhvpu)o2+G5E4J~Xf%a& zJ=}J6B30;bpO0Q}Q)3}UkKqn^*8#_xd}fscCw@3Xk!zyB*s#3*jyqRxQ+*absBV3e zHP|0RR!Y?`;de*Rd$C*X&P5X7kp})+wvlD(N`1k(jREgKsq>|0B*!JJ`#md~MyFHRyIbv>M|Bz$3B4)$d7 zrg$u_G6ddIw6zX7%@OhLE8sU4!}kaaPm0P7`;0&KRJC>Z&+Z}9*iK-Dq; z{WAkHs>?;Zf11gO;?*D2Gmc@7+G3eKljz{C=xary&_h>tY6|bTm9hwQ257Iirx0__ zh&g8wp}yNA03g5Ji|~0SpDDZh2wZ#_PU_kdS&Yb#Au?eY@^Z&f3*u$uaAGH5i+&WN zYCxzX6=RfbMqm;&&vwa9wv^xFGK%%GU;?c9!b*%y|DiUxR_S)=-%`Y4?HvDX&hANx2|*->5sIl*|c zs<{n-Hw6qeu!36oU}(LzQbFNY+_ukQBF*YU8d8Uy-SATSf*H8h)$WM+Pv6DnA7b-Q zc=_h%+T>;WzQtOwV0KbtoKUn(wk>UlGjd~~2yL^iN)fV2glrZeTSUlKa_!w4NY8aP zm>$g`D?id7r5C~R^rH||7knTYX-JPDNaMU;A?;Rl5eJ@tm@&9cjDheATyz9WfMh9{ zI)%SSzcsOx{)E?1&g7%W|M8p(-FS{Q_pSiMdA_W|wZF+}IK_&H`O5DnJY;eBRZ{zR zGXy3DJ?&E6RAEv>_#CC2KhB_d-FJ5|Em69axQ_j|1lPKqINM#^Tc488EWlR<6g)@7 zicpXFXwd5q3P^KCNvDHYKyV*%m0e5F(# zHG#sErnvQj(Y%2x6*M=&SdR{?kiy7X{!bDk_tg6{vRwHS1s%MZq3GN*2Tn{jk)zW` z^eiFY9F`Y_5x21%`@9H4DaRqN_%prRn8Q85Ps%=W7sQWl4YOIs^hG$|KWI!D$2u%K z&dYLm#UDu1_W4TH7irL=zBoOov@r^zuIy8kb)vPKj=mvvr-z_E_o zfB|fq-G4Z%d0E2;v^yT;F2Qdp+1R$iOZJa?Aaw}R;~p3B37;RB0h_q$@*v7iU^Yko zCotV*!{z9&o$@X+vwQepZUae?;OJ3a-I;C-jCIg?+Y? z{{&_O)ZPFg;|Ang^<0S5b?qTeuMb8#yv*TNB)Xt$+D z088*kz7N#sA&i(Lg!iLF&oP+)EjRf|ctRY$H4?tkB0Eu|999#7Jm5Uil&Y5Kz=dWM zJRkzMHszT}?S?ZS&}IG}h*!cwOIbjXQOL~3ml@;{e-`!{=Uu5IjG+z5;rS91)CPoQ1S-+}3Gca=!^!(}yaImK$j|sDo;7(m2xD)W zN!r5~P~1#pv7B@WQ+xj7D7xV&3}nXrpSXP;OKy(QfLsX947YtwH1cy}EWmC(oj@5| z?eN!s)@?XP_rfB5osSk>99y6TpGD5l(b19P*;zcfo*Pb}=h^cb0Oz@FhmVGKPf(-P zKRzgGy_*jdHV2u^(e1gd0BPFNloGTZ_(f-*ZOHETt5i17(a?dTK!sT?JIqhwoaRDA z-8v84KH2gYd0p;>x;q>6M)59CkN^SP?+9k#XdmE(Uo%~adf3Px=I{fjWx0NIpTu3CK?FWB;lG&rNf5EIxzIoC!)H+ zd4Bxv_)XxpLLaH5RT`wh!3BTfk;{{dve0>BPkMKNyzK<(-fxx#;zZpvq{LR!0b-?X z!=X>a8?(}2Isl}z3tvaBT#i0x7Tmxl$i1gRj@{SONS%iuo(7QWuV8j~RrYoT^2VI` z7m!0Wr?tWW&cLE3ahg%wTn^J6~zwWom->8kKm#YQ_=%EPL-(Jo3J?Pb&m?C={%qCNtD{-uLDUreall z1{v1ygWGRXZ+?z!zlpao2S&H3f88VKz1E-znbu}JJ*ryEZTWl$#Dnz?QL_F&gzv_% zB7M#L-`RaB(XSds6Hh~KEA1>JU)cq>0gyc7DC<#$%=a(Jp*h0~=aqrHMT33AG0Pby zEM{tJZ7o-i1GlUTIw3ohP)~UhE62>)Q|rmus3XAv z+ryY_%%Yk}WQIDkFF_g8&9?ELjt~-%!vzB=jE>A}r3SF$w#d+JR$n|hOcE1v~ z*}D4u@HFyW37Tz#aEU4ae`#(i#jjtEd`;R7MU5z|xtn~Pb072tsekA{2)U9rxW1%@ z?}q;o`ncTF$Is1ch!eCd9VVM$M^V-n9VFF7ko~E0m9(Eur9=Rs)4R{umP$7E`x~savVj+duKp*^**XTv1W$D0?W_soqV5f8ogQwJ}XaJt?AU zB`&hoLk)2)s<+#Z!y-oOTSq-R-BbzB6$9GitDii@uZps@Ok25nW@FR0n(hxvQit}8 z7E~QRu-{kE@2iL5R3C=DQ2RCV-AAzF&zK`NIGCuM-BH9qfzTBQYi~?$(A!3Q!knHU z9;~MS=GfUp^2T!vW>VCtg9FxJ^5_IyYck9sOqLdb#r5DRZ;6f`cR{meT^@>xdbZez zBGyXAgPI976g3bO%=g78e3!u-%HP;s2GzyfS5I~#BnDMb;`itHq+Jg)DJ2B1guyto zn=k?|d)%IhR2^z;ibDju?*q>ub~OfEnz0)0-f!XJPD66AEyFTvvT6a!TI~$y@k;e+ zDO;;4sXZUmA{Ow0C4D6nb)Nk`_?grNMLE7qHcF#WyZ?cZvG^c2WL+1NkG5~}jYECj zkLoZrsAbI6FK0}hb!`ZN3Nh5(mIG>yq@eV9sM!fIH4Bd_L_HT2^l4s=^5R_u#d)4k zz_E-pcNtkN0G)#YH2VaEt697Ryf5vS8zxGTufe7j(sOH(?@YyCyGbRK`U;xcMpW{V zVO9IXOqyH&Q0vi`<0C$j*vrpORYXd)k) zOAxu~RWW(0(LK1x6R+=3%F~5lp^ky=5~ipUFbIoi+E^$s{r&^-zvZMPF1k`k1`lh` z0f^U$jbT5Z$tpK1oWFrTx*UP-pjVkCf{BCIQ{ZrgH-CQ#yH=Cg0M~AdEDdc$+pD7O zHPQCE1$iHg0-jGVWyTi%D8p+nYO{Qkk5sL`p%5mO$n_0wD2Z?I{h5x{flnDf4UgL# z;~n08aUN3ZoJ&aKCbB$t!7WOxpU4Byn*zil&}?=C@f%eA9DDh%wRo_y2j$5*{|R(a zpVO{IMncvgLI(~(J~LLrzx#UeVFUc(`=VCe!`~ba@!d$=IxlWrfU~BH_<=HQeGPl2 z(Lx5yrD=}9bQKxZK-FP1;Lo4P^GIaK=rPt@7QOb1UI(b9A>&~GsZX$JGIz2@$~!op z{d2sG+(fe$&|8x>U%>Ao6|Fpg#bxV3HtO+s=yHFDUU(4D&STy-nX@( zp!27pDioFwiCe$PlmcyENS6`!CVecwnFHhkp@8-i95Y&eUBKh#TzQ)R#b~FXK$c)) zztVpo7oMq>giBM3ZMg(JZ1O7rc^$Sf9ozGtBCJy@`=Z}GxS&R#k(qO#KbCEvRS>>7 z&v!UF3=^5Q3kvb5aVF28<=Ru+kX3xv@7HYf?o-?XPH+_Ktf%W3u70Wwmw|h*H1ZNS zE}_H2G$=&r5jd%ob-=tpXcY-{c|#05kg`5K0BM@PBLau#@N>+%O&Cl$PTz6y{T#vx z>_o{{O^o&a@ANC`|C5lF^WWSpmk0LH<&Qr43xH-=G3MnnhZL)`i-!iDg<*I&9cR2o z;XKaYrjyQTtI`jagxmX4_`6iJll&*^%AC;Phj0Oge!tIt&ZMzE$<=#(Qz^yzEe2x! zR!d4XTa7o;9GK!NT{R09uJzw!v6@eVnSUcIdZ{Ja8!{ii1^6u_=N??xT1JwHfo0E=C?ta?g+Jw))#h1OU93*`A= zk|c(fQ)75`0W~xA1JVw6%A_Q6>1YMRWD1Dju4N_iIWN5aL#cWywYmF;R6T|4EEswE z=EFnW_aT&sI9OPGnM{P{7l(iXfS}Ecb)2VrVJ3a-E@37Uo;AYoZ0d?%H*#*Q z!us*L1BbjTD*$uS>Or;k1BFY>91gLh0S_Bs`S^CBwEZpM8og-I9KBs? zk>=>R=g`sMNfhD#h|TSCvG3|YZ0dvIMkJ{Y_3?_g@mLs{T{953uan>EP}FT=0u85q zXga(IzhWv7huO-{Wk?23mg~UZQB?AeF(~aWtw9TJ=cuwP(>X414FU3Rz_dNMX;J}! zrfjmC$`&!(DbR8Z>a>pq;Jva7LmqJ_pXnnV6S}(Zqj-H4x5)#H8bmiCX!6f=BrER$ z`i0@zDvr5@N*nl}gZa;`dg4}najOBvTCYccCrzRH!EAA?v3k!8mDUl^eYJ|_)0!W- zAq^?><({{Ry9c>y#lPE;<@C2sUvrCdOguG++=?_+YmeG4ZKT$nYGNTfs!NdRwgG+t z+fAX^n)@OB8MOTnCdU5FdOUIesKa!G`Lfu=FO~}KvQW(JUP8SYVb@W^i+R*(1_Qph zcfY{wl@^bogfQl!uenV5imy`jCo0nGzN%eTGg88fJ$u&#gjJ>gRPe$ZULB6NQylg9 zyXRT1%Jofiq@fSivnohcI;JSl8pkjlBx8OJ*)#<^Ss(Uu>`pK2n54Q@tTC2%2h2iQ zf!KWPJ6O_)}JTMi5hZh0jo99Z)kekK-8WRSUSA*I;9mYk@;U%ZF| zzBB1KY8-Y7g@xS5JAUmb(aRSXTkgTPVs~bBsO}nU`IHP>@3%CB3(6)QE4l-V@o-*9NjuEQNw#vrD{Z)Iu(j_ z+ofMAR)^Kj>%6AC=llr`$*NAGsxu|nHIQNDJkWP0YN!Zbj~a#z&x69GZlsHmINe&D zZX-??iPOdKX;MNykD-n8xgS~YpO50sr+Cu+yUxKDF`o+*SIn-EToq05ET+I6-6)?* zs&FV6z!qp=gwjydG!r#zC@64BZ4?=M37X_)O~`p72LQ+((;j)*5@WUarvJkr8nACC z`aR~pg5?tl_BUk+z>}XZ#Nef#W`6V9TD0RapFFO{f>y{# zUW+=KC>QD%yXIqW+<8`W?N*H$IH-pPAhrGc9;w^zQwrwExAkNF;xtz;DV?&Gmnm>= zC*Sw%JJx`dunf<{|Ms&OxmfP}ZFA|?-3LaRuSC&n^6U$o<=ek z$>lB_NqOZN)DT|zq&@o8NMzkp)D~Iyv5~aj7vlIK^7nzvn05ugaB#wXAW)a4JrqJy zE;JP-2L2K2j{@DM{6q7pu9xoTLTP#zyF2^<}Dw=UqW zbo?-+{c}?AVP(e{a6}s|l)WtwIit5y_ytE=up;P(8X|Ilf@<5=z*}C~m`M za(3M%t&KOhw#sq;7XN@z~~F zO~6gP=I4-x$Za6v3Ey3T5sP=l&y8XybU@#v>Cjg$(92$WC6}ONlIJ#jZ~e`@M`9Pm zq5KSpk&_($vw`qhVl9aUk>nrGkg?W8is|Qqi!o|yH68)3*q(0mbA)FFmeHi=V_(H+ zmZFYPk$&Wveg<`VcDx{o0sYB4aTSb>U15&tjNG1s;G+#5j8r|ixBlO$ zx;?2!_Cm~@TI5x$4JaYMwI5L=ctcO5afeIs`l58w)Odm20IQ53UZ`lePG=On?_kRTuDxE$C&8JKCoLTG~zCvdwrl79q+eB?M>iPikgYWzQoW|#gS(*N6b4eHy2W6PP=zeHsH5v0O)T`^-SY{nlUH%lOuA3g_xdL$ds)H(v_hS&ZJs zeaG(y#g!jG$>iP)$Nf~17)ZN5<`&qR>1mwXv<9^iEY*+`-%?S%p%D#w`?RH#I50F zzHkMsW#8gKEd>leeg87X6J0nUq#!zxk{ml zsvd#vdbKZur^^|;NweS`CLzjaAWAx&jn(f%ZNzv?k3)kPo>UiA4Ouun!8eRCN11X@ zJ^IithV-;1aFFIMMinl%y5R?F+sFG*TSihcN;ZPdEz+komPKz`AaFf>NBD zEY3|qT_LW?fV%G2r{Hn_OAMCAXqY5&l2rJTp!fRC*k#f19GwWp2S zgipF}N)2wTLwQY6O(ko4P|#WExk%11Zg;LtvHKgM(9C(zZPF>kl31}M&XBxk!i_;y zIHeibf)8=)HGXd}CQT>FrVue7?xiqDg!H({FB}_2ue^;aopUXamhIxD7!VITm`Nas zLU`E$s&AMq8^fXfUrg(?4zNKH%j0m_AaJX(pAJ7I@kyr2(bQ+MWIE?9de-|w}U-LA6XQ=Nb1eyL9K7RDP%s!W603jlp@)@@E1}0vu zhLCk>EN)eCosA7@U}msw+yn0*$MZcx!b}&#yODqPe5v|1Ip5vDGZ!J472j|TMV+01 zb<++!kd>gq0W(d@(6HRemfE^9-CAn(94)BwsD&y6$AQszf}}($uQ39e>H)ix!7od0 zJxn%6pt_FrQQ?)3WN+@SUmJ;fE#Gm)g{Z{w?kl94!d#>|6FY;mc$F%h&dI{mU6^{% zs6BvM;M3G^!idgK(L;_iCWo$!K%6bc1NPflQ~YH{aVsZLLOVXWr8%bXFsW`ZU)W_q zO?{KWVfRqR+o4k^YF{3f=%0`>ht7}ut(6iIb;Mc zVK_#{)a!t^M?Rr)FI!n#m)w$mVMZVjn_`U$!uuY^)0jZgwjQGp;WtG1O%Z;J+)pLI z_ilUgeD_ik!&|~2`Ynoed_-OAGtVX5tpvAW_o?BSfw=f=Mfn+w-rGE@gGC(^_yd`v zev#EQy>=)F_tpBNsXpEgWQ&^gjuzs3s*H4hGZbKp@IW z2ZE?W-}-oFuQB6ui+c-m%$?2h5M()z`oUSv92hP|DLi?qVaZV(0w=P16=NskDkvOj z?}NFYlL+;o_7N!9%%ucGfZd5}T*HsPN}*c9dKtPl=?WWhxHFDWcyT(0pHiL0x!EdvnhFiZ#16OeNBajMkBKgO+bw{LF9dTvm{;!3UJ)b z&*xHZU^5;fpoL|Rz!j-H0XxN?iyxjdZ;yr3d8ze|z<8 z0!JO6#Y_-<$9hS^9p{avV=_rlB##XaA=`i8>i;gN1+$+R;0cYsqZC`ic`{eILWJpNC6C7heWr- zo2Ad{LTKCdijcgh+l>pdMO|{e(*lnZ`|{E+UaCV{+Ppu~UTaSy^_&YQ{sX5`lF=;O z<(>+{U>1j94S8I2bUX{*8utbD}Z5TpM^9q;08w3dhG+K-r||5ymU~*CXV( z8cGU7_#Sgr-$yloDP#Bu>DLP<1<7zLPTLJHW8cL_^u_%YJN)d)X5eBJN%#O?jYe?& zxogJa>0s8>rW~rNR@T>9;P-`04Un4sZch6mNDLOEjCanp%158hG@DlSAp)%bvf9H0v{Pd zG?!57hu*E5ir+NSrWmto*0`;_&_XMzOIxL+rS63dSiQ!19z#s8R|qY#X1-XnK&)9v z{vFCOK0)zuc+zWDB2t&Yhq6Hs#m)Ky{aNTjC8xqrm;Dyft^x^>x|YgTGIREr!3tOC9}oB2D_JM86M$ z3`vb#gE6_BgC7*{(!bsRU1gqT4~h-=@)Bv~z8rd6J(>B@aw}1&t};+9`5?t2e4FqmsKd)teAQ(2aG0rIPw7bY!{A4PGfK2+Uc+# zMj_!#7ce-bO<$;@`2mDq*$yT|qw>Fz^{+4G=7;|7mi1tNu7BoiywR_FBj6S zd`V-sR+c>|Y!Xvo{-4Qe)pV3hLr{9eH0|;YJOj6Q*eoNjd}}aLk7n*5v;Af_!`B-( z#40w<1}+Fyh>A5iqGBy#JuO73SO>PVopceuOHlQ_g)BFp5wd9zX?8Q|=F+Se1|`nK z4x$%(=dQ@f9$U$9`paPuBUK}?uxpS@%qGw>v3(SHoWGDavG!sm4^YGxDCZcSr{p)2 z*$>*uepCcI<|68_It8@`jcbLr)jv(hv*Ztj7?1}3lJ3V5e$l%rQ+d`mCt|S%kK@Ct zlj|~mpdGPD67d76cUl@|UZ?#f4-`8cC~|EXMx~i2Sse~SVRezYBx=M{g!5h8C436w z!NsZMPlh06RV#oHv2a~pj*^7#3`I4-ksnU}#sU@1-;8=bXOol7b07*$2NmODuM_2<_eM=O;jvCQdK|Ckk#@*Of1imM1$^>WqcK{y)S{n_C#E? zJ5F8QI^oSxSIwkiQhP3C9pl82o2BYg@D%KbCxvRplDZ9(6*bJng_#r>$Bf8&gD9Gu z5o9-Unh$!k9VFoPAEY}0Uo4m3Pyy_&4N}Rvz879ik7U{SI=sAw)jzNKCMO0TOVQsdEKyFq;7kG$Rus3qaA#fAeANE6O@H*Pg>LP)wOUevimEj-B(_o4%a@JnHZU<^{g@+1jk)KX37WNL){8yf@UxGpjI%_4S@s8 z0A%JD@YV=zvO=y=0}%)Sd!&J%se=nUz;LKVU9!_L7jWB*LY}ad76S&rWu3oN{eY57 zA#lU^9r=ewZfB%x6T^#1n^nRmFm0EcIH|yZFz@4Y^EMFpoPfY*8d>gOcoz0> zFzmympgGii!*1EYnZ|5CjB}0id!}ll4I86peLv#&iEQ8eM3!5J*-RcMhGwIst! z>?qIDiN)7`;7lOXX?QX!7(Ln&Y3#RKsAl#T>NL+21aR7R{W;RBJ>1jG*e7P}$NKBg z3?=g2;b+_xdh!WjHW;}zXYo5nu2wjU)F9UpQw+gNLe*B4*{IYZ{|lg7WCNBRWxt^G z$;)u@bQ-CA;D@m+4_m!pHHtMq-yCWA@cnX}Fj|GkyX|qS3b!<4x))oWA+y`AaHP5; z6S4QYP{6AFsL47EVc8gExMxNv3JpZ(jfhv0%%AJr`;810$d*4w<7wo&S18;p5z#q# z1HDTp>y{eid+Zf5^oG6R$;+Dx*8Pq3>)rb!9{Bp%V^MYdRU3lFk^L&5i@K0nTsbeb zqVRcO%Sf@SC?Vz_J_!%M^B3cNIVhE)pP1v(@MV-J%v&s`^!3R=-AzVp z0(~2tdsl(;F!#~4F|XjE9fpGz52hxYRZY!P2l>Sdfe^wUu(f7l8?vjz%pvFII5enyv0q#J;nwNA8Opfy+Qwm* zLgqr=ypmF4*WrybzNBrswx$R%6(MFKq=pEoiK|*7#9V+s8e$WGlK0(vQ4B-8fMnE02e1mTC&4J%n}E}Xn;XC{BtQY(r9PA-dFoet%6ist z>1wtQ9oPIg#sI_Wp)9tVh^?j+YV;V5d-+kLhq1r+TAq%HE~geJ8I8IA`vT>M58`)o zhkXR~n}2*6u6>%kfoWhD@vbXH58b4`E+V zgQf_sK<5%P`g^zP?!8fs z*m;^_{CR)5wP^|~rhwP5`~nkVa|^t04Y%6&?gD6dt*nOL%jp3d%Y=5%(UdfAJj=;~09Rn~`l}-puYkd*HNd zFFv;|3!AO9e2}*tn~BfTJeh!HASvM@s;zmU9E)R71b;=eq=$K%e#GQS6EJVM>$Jd(&eb|n(yr? z5P-QRcgNnxB=lYf7I<-hC=R5Ot7q|i@H{?>^u53wjevcD&>K#@uaV6`BQ<{lL(lxm z96a#$gP`L9l-_+`ssK*CCV}3Y`;-E;+j)3)QtF7!V9#6yPx&f%%F@-h@Ib*xvB*`4 zzSxW;)zOi%RZaNwnuQn2O{mZT#Pfp=S^4o~)(GWo$P zye4Vj6dV2TvMUKByejNI(@?l~+ScAsNVkM^+fzt);A6bl7q7P8c!YTzmA5!{dv2pl z*%-o%yPR1F`YWQG^Hob*r%_mOO49dpP62SvA|1JP3Zzu>wR6!kr3QJnY;hoYfk0NN^Pihy#=0E)qNdVC?t^ zZrQY)i#WV<{;i_{{diJsx}z{<&it$r{oyEb&lR*+hyzdIC5p;_21r)A6Te;f_=g^- zB&sQk{7V1D?>pJeWqQ#ywy)mk)-7lTmIuNMQQB~(>F*sT`$8VD$O=o`7JR3aJ*gO? zoE0~5bS}J=hB0rjigls1%aZjpg%SDeAA=W~SA)+f*S=4cT~6XwdwCj`ib`aELHFH1 zyt1lZ< za{5d>>0>&MYwMQ*EnDB+3)oLWaVuWyF0uR3nD^Z?3h{EN98RHgm-DLjo(|7>xAhCy zT}nf21`OKY3HX@yb-UrM!4*u#I{c~!7YyKA7#L&NEDS6usuPP|I~~OD5ILALS0(rD zaU&Q#Gb4Un>U2d|U<4&E=!dP?>I`>GJ-9nyW=*ZA=}O)+HprRi%!&>Q@hk=76Ij5| zzrl~YNJn{FfC$S;V@o}4O<*Wrj_V$+XZR&4E!mAoYD!NG(B*?PbYE>uQI5O}x8KK* zZuAXV=}9rWmhkN6HDaLK%H0sDW(#Ds5Tq;SqkDzg0UXFqGwdkB&u;_~>$dY5`|bk^ zZoxGa)}^0eN2~Ce*71T-Q%7-husB*~AdU_pO-Em5KAY-|2*{&tQ`&i(V;n1E*hqK1!$k!M^ z#mk}+7tac014nYMiF@1ksZ^|*3zBpXLLC2zVXylSeqShNI1Xacn5op(D4U(1SA1Fv z*L+ZI8nu$Yb%gdCs%+hQ9i%T-p@VU)^)du>2K{*GxI)3}wSN?9>-+}4x77Rz@h00x zmIL^B?4_L}i813S=nD=|wJ3YX5@g!>UgWfl5vkLSW-w*PAEx%&HU+>pH5#QrETz6Z ztnj#D)-0s1O$72A%mcF;?Yilj0cZPvoP&iJ?a5{u{U0NIVKWp|wV4jURU1s8{eN&g zyyCqb8HkU*q7WtdqND(4-6q{Ib>qu-qO|`W<`fk~SRpP(V+C)Bqyj#uOQ`L^E@!3Y*u23&Y~Cm~Z?dA&bZeAo+;jp;54Yh!pz00G5<)|-U&&}#RTySujI)%vAvyig zmg%FQvW?7fQXfQQlZzOyHXEqjd!`Ysmce%%PMxIMxX-XQJaJ-lN1Vi9`M_zLZ{i6Q z$-BpLUWJxC2d&51{1HXeXE9)@pDD=YUS`XsmQ)^bN3K2$V}h;sFit5d2AQ@oQ+SOy zOd5j1E`PjL3hi~Fy&R)#P!5*qchK$y$_a z=FKNwO*$gdin`rUNnn6JHrbk+=+}(H)a79^0_BXheu3bZuSwlHOJRr)Pkz@OxbEa= z9*I#yQ9-9htWaAi!PUH}L`^-9A+P7dkw~q4-yu~e&1d;$)WQCGnh0v5_LQ(84{dB% zNtJ`Dc*I)qaY5t%&u{1vn0FRrV(5y?vV|$d=EvdO;(FDcV{fOAP@ydtFYq~}b}|gx5B}{^fo%8It1bXg0k^l@X&Q)U7kn3PX~C~?(p_(+CRL+a+ghPOxH z0|q9M?|IPLKyZ`%{6Eq!ubu;zM5Dj2;%)V8_SyxEbgTl}28Hi!WdL$jm)|-kQ@Sff zQXW5ce>Dq*10K49Q4jAYN--(C=3;x4Mvz zvIa8K-FnNI=o+bLyI({6vdOJ*qEfW3MnoL)t33qjWHQJ#c^7v%QjSM+4KGk+xFL=i zInVHWj^7LXUXs_4C6bsOLyd>F0swOx8w?^l(xe7z&ITtf+ms>$V!LGjXIwEpenKMRX*fsA+iu_TFMKj%<;^qe0!8^-H#yO=~_+x7A;079Ex&Z6~f#P_v1HKV)fg0TJxJw zFZ~1`lGtpn=I}Vwq(>bJdb$s_ICrMd9(8e{drZm6Ik-5?lH?O|IDC@0DRAGe5MkgZ zaSIMMdRpJxVkta1h&%7#Or!O6bilDX2LXHGu45ZmFw)r9)J!jEOHKQO(c|UIl;K(n zs32njue+kOUZ5CFGU!x5pD1*BA4fS*0%Oq;%_4)>hKdRH!~`=pMy7D zzO-aTCBGr;F(X3(J`G^aRI+*lB21!s8Hp&P@oFH;#*}_HTPh(hA18&Vd}<&ntH|Hk z0e!1^lrlYE@{4cMU;=a#ZUQn5F6ThGklf~QL`XeCGdab0qy9#WgJ3%EJGA#QIY zc8~9S&Q~d_W0;KVww7U*^#E?#;kFAeA{Yw02H%&eE8)zJeX&n*7gKN)>Ya84$8)PI z3=W*iD`W#7Quk)tYITv0Iq1&UbFt}TXUzjUA^X~X?3=HU?tPtxVfSk1FBOq*qj>Dm zp$G^CyO&<%Id&CzF1~d*#7pUk)2P*!Z4j{xq8ek-H!8|Rb>$_irD0^dk5`X53%r5v0O*pT@>9UxHZJJp2 z6NR=Hlhc}&2m}l;Xl?=~LmVO!LKFA?Ej&CJMBNrLa%g#T71GqDd;+6aa~-qakQZ8eI* zn!iCkZYyiU{Y50c*6ymnz2;XswwcQ>Yo+iR0YFS0c7O*cJ6tB;ZEbi^Vsoyc{|!5H z;r5kS337v6sx-_7j)g#PhmTwb!N;e#;i-Fixzd=U7)JF-M%$h9NH?uE{27;!pUwvv ziWAiI;T&|!srF5&x&lJs$?yY-FLmbuymXoxc1lGxBkSD2ig)mK!nL2lVk~j#9e(f0 zzYKXfFQ45qvVC(O=jU3Ckt%)av?*D`fA3uuvm4y}67fLRD zyW@SQ_eB_aIG*hpg4OQ$*pR#AvA+TfBz#;k+h@iQgm;X2nz>W%r)=x!uMM zU7X1%tH~MCK3r%7hC$9Ek+WFjEWx;UU4kc_?ZLxidMd>)9@s!Nsr3Jqe7IdV(;J8D zZb4b>S`#=1A?UT>B-@$VMIXhLT;GxkuOG(yqYkY=8WA3f57h=&;7bj$+qA1rVjHCX zX^pkiEr6klZ*`PZO%!g{f+tX_^4PeI8c zDC@Mpi4q7DTFsNEVm{!)!U9&Ox=*(xakGg0gP7}EOGoLO83E;>TT+ThwAlu-hKEL=8)weGIn27n%c>2eR#%EJYe0X>tC$fEyv?9(!&2rZs9(YVUhUmr%wL^~<|3{$ zaLj_3^4TwAkvm!BLes8E3O+WXsSG-cfg!MM;Z zbt`6OxGwxH`U^?Cu0Rkoin;*JFZ7|+(?Zy1xYRv_o@i&Sl2NqT?yCScg&(|d-Qlh; z9%MY2fbYn@vlu=3x{|aB8c77cBDY{)g=p0Ywdr)n6k^x;+G5uQ8ddvGjH%;P2idqI zyn)<>G2hSxF*Fh82&ZgOLDdDgHRNsMSJe=y+d9UmUeZi`XOqU%#!9t`@Zr3rf3ezM z^!WAc+CTLc`>x3RS&1jT-akPT^>c11;R93wJGU3jGqf4IlQW{62}i?UDNfimw68f${{ zg&b-M_c)*RgQXsu&OHk1;mz!jhG{Sxmj2E%s7(bgy)Zxyr)wHAfe!@QomGvTw<73a zg9m^lt<;aPcd`qoVDfuTgh?f=mn%B{4av+Q(zwr4%GpL9)XQ``UUK-SgxSU}P$dOM zO8N^UHl>n=P3;6V&FND`4)e zBF);@kT1Y)vkRZI%%_8Sq-WR^dXB;?A;rvjM7-HRHPZNca|Um2kQ1CU%=+{b!{J>3I@Y*uW(1T*p(rbX(|*-D`4}|3c02c<$baM8JSg|!H?D4DM&SAuCjX< zcpE-8ULh_o5|`VrO@cf#h_9w zlV5RdmJa`y+u#HPNN6M|p-t7j1Nm?2Wdi>tO8jtUIeJG4svWST1JvW-9pvFCNn8&l z@8$?T_Gp)Q^arK1`pE?3uruGme=$+(WAU)JP%nI$(SQ zzt~GX5#T)!R7updxxixs{@#W|neRaC3tLtl0Sv0xf-1VkP~xFj?4+HEJf{c$fi635 zvbt~a&{0rgbOJ86b|m}zCD>#gzcYWMtHm5lM}b{27K-6#3K&|9PREph?3F4IeXKJd zQ4D*K|8YK)h4-0+k#qG~iEGb8G4OQ003yyu`aZbW*&sJe{SHXc&)kH9)j@dGC7+!3 zo>dqO0Lt$dDT$x+$uFEKK53zz<&b>>H|mAYkU9(YGaf$C z5t=(qtB*nrvTKv0kgdCov68CqlE?Nd%IeKL0=bRKP-!cNsrWEkhg@Em*_&QKUQnQS z>M>#`lLgxF2&RHXU=}sD)gWW|KgW=Ibb!32=MC~{uv{8I{`u!nQ(8Q8BC~I>l4(swM{2u4K%c9R(cZwT;ceprmQ_(K($N6+|XaKpJJs+&XnPUv#4ub=&NV zyY2^#nCZ5DG51rQI9Zt(8&{#ph<@!$X%wE@o_9tQF!Vc9w2jIeBxTn!b*xXHW&G)?aEn%1kgIxm9Y z7=PsQ*$vCr`!r?W(=S=8$;=+|NxdQ^Q%vt==-ZeYlz1`*nQ2DDz{<7J`#o}<;{lmS z9Yj~$dQ1gn-v8A<--3>jQ5 z8p#F)6!EPqs%Th9akD{>N(*(ME#EThFW$O2Ho%hC=w?!vs|saJLrQ&6gcmdFg&@s; zc@(Krdxlz?cuTpakTz0qOgwI5{ymJECSr-?Xl2}ck1WNw_&s@u>-1#3UbNe$o;(?8 zhOA$7+n(&*-TB^Y_bjDYJSr5IzUzLk{QfI&7L|PtQ^gDb6ys}DJo_aw>>81C5fu6B zB~YH}Pb{RSw!Nh4#qhQN1Ow6T^HiXv`Uf!>+38%dW=AA*Xt-WDegaGHE!1o}8Taw*he4cfjJD5zZy3Cc zPB@7M0$QEYyLU*ScED_nKefbr>Ybl479Q(c;JMdkIMIa{Y3KgOnAXc}!xAXckX8eD zZ%l=Mjni}g(WkiKyfYVcCR-(M3D?6~aH4D2l6&YHNp$)}k^L^S3?X`beXb~N0H22M z%^6~7SK59Z`6e!wvODGt- zmQVO#?{NMphc7BJdNTZ&x_DRN#N=<4%)O7?Jw%R&>c>LL zet%l8!^{X|z_z!jDs){3q$<^);FQ#WheFI6-cbKr=eM1NcEB+7#Pcn#_e5~J-T#}f^ zbV_V37dD5L#uRm8jhqkX8NrmYsVCArilyQAZ81%`l}Fj^XJb5cdQ)Z^G!QAXP@E~V z42m0pBS=z{EHa&Yvb0a+A^7+T^E$+!f;=yb z1itjIc={a9S-!QvH%CuPw6=9Dv#UxkpGT;kc9jW_b~l#dW%$3v_*|Oa70(s}8X|1E zBN}0tA{Jpny&V8Si4PB==jU>%qZ}Jc_FVu~R;?QjZ;Qhlw*u2^Q-UGxcN4NhQOn}6+cb^WHxNEuit0$zf`-|-Qjbq7bdFC za{N|MdhB>W?r4Lh`r$uvo&PzmT7X%QQ*>?0N_lNf@=PlLJ|Jj1~Fu<+q9EQI{CGXN92Pb$YpkG?DA;@By1>@=PiFjdoZ=KzF` ze~$or3dm=dj+0S?x|~M;=8yR7Lp;ERUI4QV$U2v?s-#18pjPbSboJL>Dt_gM$j%;5 zkxliJitd0QZ54wH=B6-`8#&z`BUs%BzrGZ?A`Ve`H@is+z!l4Qup}e?0C<)SDFXLr zuoWEQR1RhxCtbP`OPMB}1P{0cFGuH;P}aVy=h4b!W`!{SVB3W8}OXJI~`-%vfmh47%pGlFRMLC z&J}AJ*eRE=-_UyG_ihCYZE%;<9WThP9W}8I48#84KP>bAji8`{KmgIGfUjuD_tBCOPV^1+vY=&8-!d04(Nn3y|L4 ziTmdHkZ+I^&yG;;!Vg@e-Islc4v#*B9G!eAs)AA9R&I;2fya$vk!sqrWVpw*|C$Sa z3^XQXYR20e%gM>q16Exa=CqzIV94yWW*Uz1mh;^)WyQ}<%5o_vn029}E;56E#v&T_ z6WmlBO6^Yuqg3~?p77u+*>fN@b6huyo@`nl+{k4OqUA40`2*1NfdPw zMWqxte+DKq{tz=RT|Qig*es}&@rCdrHIU>E6F$f)$bVu2VzS{68Sr}JLoQTto?nzk z5R5?&px`|dUJ1*-qhUwGDE&f9d{oWiBwiU<+;Ft?Y#v_1?>t6|UVSN|_hX!I-6rxW zlGxEv2DPm9`z2Fc2lwZ3^eKQ64+x|@^9COJnX*m!NePqIB5_76)7$UEs9^F)prG}1 z_`%oh=yHZbA#h+^iO-FbDCH2(sNyN_L9ZW{n8=Xfx9}-)1?4;{M5IlgUhtazQjQm^ zk?DXWg?rMN?%Gs|VfPyH9_y;@fYV&AhWt%nSOF=>Ir9I^xAes31VesgeqUdPW?g4J zS>r#|5ub7=GpEO8&L6mWul-8$Yo@3CoOkVET~MKQfNn?x_r$dwyhV3w!Dlih->Jnu zy$kMls)0S&J|ipmd~V%61%k~Ud!O=vXBFPX^k(;OE35rLi8@x!Ju#X}o!er?Ny;I% z)->81D1;QajqD?@Be!Su-(XVppyZ1X%E|8fg4s4fVyo1QW?vBTz5yoz_NL$0wPo6}4q zx6I+&J31701|?ZhKMOJWKQ1ElykpDCOf4;#LK_xx7@=<5HXiK6nQtUu?8z6_qK>-| zT&H9ki#ij{a5&@0J-VFn4WA3G@v%;Q^36Mnhx#AM{OM%t4)sEdE?C59 z(HF)h&j-->^bD93LbbFvLl@`HeBN}t%zf{Yegt8G@~livF5eiU>2}S+BFTR_9na=# zRw8umCBX(ww=y0LtxG{yeDUVxe+gfbmrP^Jl3C3lUkI^gR!UG6^jEWFUNmfKF%sAe zXVS(^25nC42N*Wunu!h+5XTRy>tr#0EIub5evdF|E=x48w1J0SFT6UgamPxCy1)}Q z1HKWvY-JT3wHefI8*QYN)a|es${v-5Sxi34+zk7@R}5u!aA;|&lDIM#JDp7Y_K8}4 z9*(c+we0e<|CR>;m_1J|!0sE?`yAqRrH~}!?7eUX)r?nD)T%>xn0AURR#fum>wn;I zU6v!3<>FG$B&m)q_1hMWWjHL0@dxKaUyOvySp(s6PPm-MBv;w~;#IV_!R9b=r;VBH@I~}L+k9@6^ zVr$TUNj}Z>j@+p4tMGkReJZnNCV=K&8n6a9th}7;M?A%M&)B7gwI9V@g(U7;kY5Zh zUWNQm9;}LQU2zVKs$q7I=HLlQr1t}*pyP!d+wcTRT``Q3%9%rd*^NAM;O}MMcCl}V z*te6sbsnPcA2BV=R4dHRXkH^&V=^u6YTV zVy<>&oGQZdJ37>_4*YBTGn{u#d4yt`PuYmQsq6&Jjk@HZF2M)YV?I;d&-a1)9=yp^ z@tq%9C?l&6Zjzh8B-`noMkbVfC}sQ+H1pvQ%Ky%qu)4$1#$w@3vG7)XV>yV9mLSb# zhL0&C0LoXg{=F!7ZUoQ`^q%Y{lycLZj@F_gPxbF|aciTvwFxWtaWwC?UeCxv>x^$6 z({m+p`l2{}iIiXTywTA!q-f1Fb`H&{7cw>1YGl-J~uXa=Jwv3DU{ zYECy4NAtze7HGAN`ygcWVY^#d-N9(1X(kB9_1g`^`W=*W|0q5-OVbM<98TW+Pg|4T zok9cu=}oz>e&<==O0ID;CDFA#VEG@sM{|ZScyeq5VjH)1G`z{m-#W)*Mh;?(fuV;O z1OGhZH=@EdusU6Hnyic_Ai1&(ZUf@=RE6?EG^zqC71~C_d2F?thcZ)SR0+7}M!0fX z)qmvw>ZmwDkrsD8&`h}R0r&eO){gI2XIbqfT#=|pwAyQM z(bRTm6y^6l2I4mK+iUbEqd#Tb*o5WdHLxAr4eWxWYraU&WlaI|AzHrp8(ppILCTkp zxJ6;zA0kilQIf?sV)tnv-H%LH>YY;7&3%yY>nm?V1f!xQ^L|^h)P@E5TW&~_6W6~PRg6W zZIk1NIJu!{q{U3FSs|GkQpA95$Tw(j2BmjowDHYEN_IMnQ5|StihSX1OYph#YeQ-V zhQ2?goofy;i{>^ne%$OKkne6nWnsK;D;67paj~ErUV)dx&g}A^l&9{1aU9?30I-k+ zGLSNY?%VR6^I1GX9LA zfdzW1?x;o)+S12pUgAF9z5UbxaFSOGc(rVcSHIr5=z_wD5-pj@9W@A;fvg5GFO<9G{<8JdvDSZ0>>ZJ1JDtTWg0J~-HCGoge zJT9TsB%ZXSdQ7GiA4tWnQck^NgiC5sW6Hge=+@(fG|CAMf(-?ELaHSme?1gytE%0gWSQ}N2_XibOdKQP}m>4%u2R9?{`smd7uf?W2P!*5wG#Q5!_@T$Cf z5}}hB_rN7cPa6#{(qT@`+daYuU4;?W&-7gso5`!V^3)xiXWnoRC1h8jO3WbE>+%mt zygw}7AHkLLfrwC^Iw2XPk@F3Ev>^N;qai7F1MnPQ*&Ym}JvR6?g(D^#01nC2mLl3d zL=v})e7=!i!!i)f{kCwFW6DiN+?^VC{txWTnDYS9HfN7LqNOp zDJ*jh9&!sPY1u8ToGZ7XyL#X`XdvIFiHHe|cllvAJSBZhk zDe%ZPl%>5v*{vR#fNIk3#+)Cc&;-?w&3tM=F9M7s_?@11l6if*DZGN2QC%Y`p+B6| z%MK66uM)oz>@bOep>B6~NXZTuhy@45fbp%|&_l8jRs820Dk8p)P#~OpOAhg437sFlD`Mk1#Kk zeZhJbcLn47F+Afj8(QJE??0%>v&)UK!uYV}yG_8gV(z|9?-jF6KHsrbSvemWlBYI9 zn35Z=pDDj26PXRJg+|htd)^QP3~YNI1L<>(T*N9MEODoGT`&n>#-fk<{;coH<04m62Jt@`R7`4TOPv$L`{8WyYc<>p) zEL+4hX~!qML11{*9+U~-wf=tx$l6n=!8bW>LyW%&GWGFKF4cORCDPi3k3;Czh$)n~ zfs9}#3}z0?;oa0`wl`ioNNO~u=^cu%_D1}k9Lfmlf_SBA)4KH=*}&?J7al;hr3LWn z=)K&SSm^jbR9bH;xb&I9yyHGzhZ5y9uGZ%Z=ZC_`{z&~al^yb!!&N}PkgmL&lXSNe=fs4|6`$=dE`|FawrNqzewQ2}sqeZFw^Ebek~a7{@{twhN;|qf)|*jX^3fKc zH<5ip+10=pTO8VvZTM917`h*cLyMSckhGrSFEUXz)buez$C#1E;QsR*q%Qx0h(Re5 zM{j07z4#-~W1ryaE{dXhY)0;yS)^$7ClUnZZUtwe#G@sz{*Scn1w;~cW8tnxeEMsr-n;ng4 z$Jk6rJsZRP@KcPuSd`uprMICeIZa=X$KIv5mve`>u#-F?IuK80P+ns%nW#S>oI$NIGGG}qmD{4}7$X7DJ$sJtGk}{_Gfp-X)NFe^&x5*>a>hKNSn2 zt^WZ$Cj>V_n4O%<3agIu@_#{C?W{Mz`5ehTdZ$zuS2Fy8-7Ph&pw0_G(MyhtDRUbm zHv{$z1KZr<74J;-@E^#Fij$i%(r|q>4erE@du`h$j7!&(w(_7?Ob}d!bC{OgTcAX%8e@cv5LJ-bjpMjlnwPcl8h^z_SQRzLM+pgLp}Q;eN2TRedhPP2`ZIe;nVHhLm!$eV~dju`E@?Tl${{Yl*} z1!BlFBWRrN1b}jiH8?4Xpnkv#Yyhvx%L#PL3sA;N1%peqZZfJUYx)q+R%D_VgGJX}C96F^MNhUPvP;q~ zjJ#v75*E#7k6F&esUJB>CZMBz4+9eJ7#@D82urRPgnJdh%vwH-3NMBrwD@ZVLX~|1!l-QK;r(t;8K%A%Q>Rv;l4$A*x_a(vseWB} zf-^J`7cYs6mkq>4(AXvvvvUZt4gAF0%6kS71}MJ!{Ivvym~AHC9Y6IjCgisQu=TA= z!t`%WVKbqbFa`#{J~m6ixl+Wt=@l%o+%P1L`wN*mcI~!ao{rx1n8`gbU3FQY;0`cqAy3g>;xh#2D3g%NZo2=YF0(b9l@HS z{%u+1dB`#rLnsv=KzRXp#>)d>UB&tk;Y)bVD`LoQ7z1{-$8$rCXuR4$G+sm6Yd$=0 zL*lkV?iN3sr9pcv;ONQ?2}7Ta!fX29G-@r*6f*z!H%_X2oG94?|F;CAQP$p(Qa@h9 z^gLheM#CLT(Sv|SWTA3KdZ*=Ypj-|a&qo<(5f`|+62&kDXr0cb_`P0;Tvk8vBWhFK z0hD@0^GxKjInW8Aqg|K<%RM9sHkQ0|Fa-FACFATqS|%JLDcrXc$PO=i1yYati`6VG z`tzx%?DSASDXN&Cz_m0F+~Lyry$R`ZmBwO9V0|&AnV1rU#pqSQ5ZJEIQmj3Phima% zsAL!tZ+jVGN(&a;rJDlc%3il8CD_rpr0A9!ks)PzpC%2guoM%@o+H6wS4uw(Q8wIR zZKR;zE738}foRFVO~$P3f=TyDtpe0CoQL0hP}$Rbkjqa&;mN&F;HZAxCDS@IuAC$f zQ|f!tRRV9)VJ*XrsEk7hlViD-o3`Zjg@t)3-@AeRE_+f+`N#I4R>@>IRS#jr$8N(W zgaNU~(X_D6%kbPH#vftkvUVuovoSf1^3e~DSBK}4fiL{t^hf-fxs-Z=&-dJ3jOm-d z>Y-1QJ$094;6^b^kK&*xlkJh9qpSMv3(G>|HF9~RFkah)*QK6Q0o3~)batR4UJk8i zbm=<}qUEJ(gzBe(9F?#f>LIeD(d3|G{5q`t9K7azrPMcVA>Yot)eMo{YM8Rr=6pk_ z+tKB}8X96jYYJ%jC(=9mP;`g}f^lQ0rZs|ch&@s|55+0(1P^wt&#_LC>xmn(c=GC7 z4@|Vgi;0+wv+Hp*=-umDXc$U39cSE9*hizT=KJKLU>e#Nre&^w)_8b{aN?c*f_k_&%7jx!gi<_d?*t-Ay`!5-$Cxo;^jpU-RE38{=gO~>xwU(*C?74e@ z(}s3rnj)zqEP7>^?%{VIbk(Nbh;tncPNu`oWZ2L`*&xb{!3L!`w*{p387 z4XEZ8D2k49Vu#ZZiosuF9OI=~E`t#^n|KjTb%P7+1NHLGUZ(ftUg87 zQ~lylmH-2*t*RY^(=2Z&3e0Y1g0NG2MsX}=ai2Q3euOY+au;l{&;W+Z0SmzUflIZt z&L%S4{JEex;xuCzU3S~^220j`QY7Zgw|-m9S-m>=)uqaLFR?llvv}ZaCvg=nX>e4B z%U+TJYh*dkDa(m5o-YLu01Si#N*%cu^=Yg!0C=KGF3aVX&=UyDki}4?3Cpgk>KdY^ zrZe~eb9!&a?$2Bj7x572TBr=g@805fA6#kdOMd^3!!%hPL%Qlm*d|gC#QEorgRn1L zdILK`x6KFViCht_ZVeNZG)X%e2sNX+w_CxCme*mrts~|)i%G#n7A_gZ+RmqC~D?h zG875@SnqgGf_c*gxHh+-32r|ADm?Fzg9ckS*TH+r>Kt|nrC3z_&iI*g8w?`k zR#>v#nAxIO_7C?|v3e~3^S;ltctERVsL3&~F2yY0grb-BCC5|A*eFH@zDSe22^zU; z#Miatuj|3QG#3p63fH0qtlpqm(Li# zsyG*#3!Y0lAa}Y`EYiKc2yY&xMzxa+veBA>c}zeIw(W}E`rf9P-B5r}q||8!Ko-jv zR!C-Y>Ut;*N!*fHn&~ySEj&^*qDUL4bYXl)T%yc#OqrH$`G7FE8d~f!-=oy7GvmG% zChfS#QCB74%sGDN__Cs(Ysm)QtN^sH4loiHKz1O$393nC?*PF+sw6OO6nXRX5FmcW zC%%f&Ig&927ZYz*$kNqaEs0TTAP4m>qpEhe?(?aNH;g#L-z1vZ8{;ju6s5g>J9d>k+RJ#z{uG@1x`k)-J0j)43 zHx~vhUd@m2;S)4uBJ|o4EH)#`b;((oD1!>^BCu0sEhoV?IGEefT*bE$#=Z2L0bJ=LqmR?N%w5i=Mp=M9)6t=fRpRzlGd`$&mR&rmEuo z>)`A+u%UwI%z~&G&NP8X`&VEv9xB335cYg|Tj^59OQGDz9;kaldoA zc#}b1lhz<#*zNTg=HmJIEik33$WoNzcP|v#tV&6d^c?%wB9Bk`Qo-PBz~QZsWctKG zE3*uS*|Wi875M0Xkd?QTSrj;67#=iFDPr*m#0Ry;zLR-O!KK(XhHxb?vrZ!_D1vxY zs(TkcC;=wO(u7ezN4u5!MdG4>rI6GeyP|aHON^U#YXZ-BK*~3%Y3)x^&+tHEo#%0| zJF71PM>z8a$7GJ(TFKCxhG*5qY0(!B)S-}AkNON`P#k8_6fMXcN-ZN^;MLPDL=v|P z02|WgaluO0!)Ex8<2gfuQqP_NjD8tQ#^5$Ed!O{I|Xv0a+Via&biBSl+T&Y*|8fEj7p*^`3yewg_5^F#!8EBa}DF%B?)Rya91$)cMO7G&Nk!-_-7-+;3i%Y(9L9)u7nG zcK{1MW;lk-D6|RBU_y5a%ou>BrilZ_eWegjmI60S_`PJjDRoDwev(v2cemRLNN1;C8z8WGWd(}w9IgDWwKv(;*P|H_Rl(Y|V@%dOkvR$VrKR_=4 zi2KYeG3wNl88fQR76@If>w((xNT`v--pMlRJn#udV*FOdo!b;L&ER}@64Q=Bvzf^n zvaXWxqKYpdY?8=+za^h9q1V7i1}&qaPA9)&;2bYN!1}Yn?(?xJcoiLuXo?*{s_au56T=VBX9<1 z&RBO25I|N$Woy|RP;yKDj({^N10jD%ZQnJ8VydRzBO?mJ=X_|#0MIcaEzqwh|-mjGqK)*nF17Rrl}1f zUBbz_-36btV@r%h;c`*90^$!*xRRm_BT>Y}sYk(YQGvqF7c?{fxekV&&l-DD8^&Hw6%TSxW9cX-ikfp`@n8#3j9Qp?U zLoXM@O!t(5Xb2r_r-85VMPvO!ZUEcCxFhe;-fhLC9K9FFfd227n@4ibZU!tOzv&cA zThYxvIJ8SWmLRM1KX<`v_$1svlgn*S5T-C5T7dY7iSrN^eh!6>Y+f=G50Y#X6&Ehm zuc70-f<5e}V174`r|{qAq1w(JX+Y?A^wRPp7vMOvjZ|9$wb<)K6?^_M!U@q2zyA0Qz;7UagDAq& z4t4hjVway+h&=i0j{?4#>jZZihN(e{DYs+2Lj=DL{sRnuuvap?_o`K4mUNk7DJ&LahT5ha4P^BR*;X zpKw0EEyw(%8TCZ6=QnUu`AbAvPsv5-{3;lscKn|hgP5jUz!l!ZH z9axRl{ecr7#Y10-p|7b;RJ8s;>z7oH6y7g**3yRJ#E`ulPfh=7h}S;D*2+|*zK|yq z78@vYKVy#`Yo|*M#km<2Fv1vV9WPR*%$=veX6G-#j4D4?vTTOy?U>BC^qq8c84RtE zvv2SkJD<8W3qd!^-Z7k2Ew@A%)(+>fEblp`Y-1ypNA0Ogy>^HTHV6;6_V}4xvKv%bIGR4auawjt8xuVY8pfZeP_JL=3&QHA{H>v|4 z8>@fTahI9OaN3)L91D5g7_Jh*8-7kn68O@x^NYylU*59`Jvm$Aa}{robMXD&`yP-T zF5KzII>0sMDl$LM^QCiil8LH^}(M@_qAe@3KoQoeqPy28t8Fcmqg z5T{--Rc;~_v#iMlI~F6RJF!SE7Tq)yi*Av}w69#&O^npv+sPtUt_obe(h!&9Z zSIBsTR~T5!rT<`E4r0wE$#)7Rp4K0NZDwA_yA`g>I{z<<@;tN{U<|VL-LM=vQ2}PcnWBNUrRD?mBra}_NQS`1ss%myX!%REMyCXdA~%N z*-rR5> zB(}%}1lq-8&Y;pJYdolU(=m`#rAIeNO#vWl&mgJJVIX#sXP1?j#nd$&F_1E98-5mF z2JU8dkS?TWfVp{!%XpWv=BG6gv4_iP&WRa9M;d`*HNdy*FS(vCMWhM!g}n$0ni zc;_kJc~M+&1yXE^#+*F-Bo`i8km}|C2^&=Go5)>`Sf%5b5*rtWvnCH{I?2BGB+FWN zw8~}R2nJ_5SJW!TJSLwG%g~D8X8+>QQl`K`6YiHlhN2sf5IyWuA0AEBJiaZ~_c_Cw z#xuy}sx`;@t!C3miv;`<$$WKtq*us5LCL6FOXdRf)T?v*K01glMF=LM92YV^ubBIZ zvny*R!)OCm!M=f=IE8u?O7B-iIgMW{ zN*Z<-O}Km!ze{9!IvG*EhT|b5lGQy*0c}6xJ+j$FgoOq(WX(wtYolM(sqw|A>*;M$ z^jd+B)>9`VESNrnpWnX3q$w5CAl9#Iz}(T$w;(J(p;z8Pd=BTdTbIU=1brpWot%OwyWjVSsWx-6Ujjy%fPvvK=Q z3_8p1Pe-VI1#Ng3V1%ouAW3^ckuQR=gC;b`FCU}+0@y5tG_Q*pQNMj;2r-|G!mfu% z13`&9QpK9pC^^>p2*zc_5e)V&?taIER}dEen1z{@%#+BcO>42TJ>~k7?~pUI9Ha!x5VI;a%YM7Z>UF<}cKiQeuK< z$3uvJpGm)Pd4W96f-2Q^ybnk)W)w>En>@{q9wA-ry-NCQ)IeZXl z%!W~{BAMM@W~?5L(w)ox#r~9G+Q=;i0t#@AT_0i3^nFYTMqKFr6{NJIdeHW=lIp2U zB;(qR0I|2D;ADne+Jbf2`Z0NRf_op(Qkwn#a*_5~Cepr;=BOQ90ErCH_qvRHV83Fr zg_vw9CR+g;nl>Db4nOu3)7Jxfu{};h`*e<6{BzVmMV>pE;A!@=4C}v@cQ-sM#tMW< z^LwK?R|Zg;#Kc+Z>MjU#R6h^~8#R^v*Msq~7hj74$2ThY^hPHaLjeNg62B4@^iZ;0 zGoNEscN-fC!@UsGz&6kA9~7X78H+G~ngXr^B8RTWJUg72uiqTr&FW*B`c1}y1j?|v zHK+;~SEf+>DpO^Sl+qcJJm>ENS2#>uZ1Zs_2c>0kI7%+c3aO}09<6QG37KSCzP{sqTAce%I8FZLMLHLGJrh1Se} z>ufWbH>K(ld71%tzoDf#O#luQr}gKde18&bcxM}TE1?=CRHKEeN~p#NRkcu!6{>MU zHD0JD2-QTPnj}<{g=&gW{Vr5BLN!&WrU}(_p_(C7GlgoFP|YqS&CQQ`57qt-%neDL z9fkfWI`YQVt+-<(=A{~ld1+!^x|o+i>c5UcK%%?qX(*P?H4sbZiKX)?*!L%MIAVsL zz|bYHV-}z7HP)@L>pco#K&K-JJu}GcwLL6)eSBAx|6uXDopXFt$3Q(5^Hj68rdJp{V#3kq<6TZ9qkKlg(U{jb>Jwh z=j2g- zMs5q$lHgrT?q=O(3BYU2q*f%y^>;u?nKf3^Z z=|gtC@01ty4865|^B9p1=AH;+6Zs%3OgBX6 zGWnAv+I<)8e&7z7>5@SpMO{lo8=dnctYfXoZul*$9f9IpyCQXh>pOglb^8;~aaHY5 z;g(f67`OW2U72BSWXg&w{q=QcBg|F83V9Mcrv0j#xC> zY0&_b;d}2WAYas{c95kyf6kLc<#JKEf^@g74aM^MVtE6xyrEd$h(gA9!TQXeFqKiUF+q|+ z5k+)h@^0Wu>J+&L{j~Qc+wF|WMEEX2nCZy?Ejwcj4n7kK%kG7=x&5hZ50|5iyTD!a z9b$*rhAK$S>zly=JJ?KeTpZ!tGe^U) z`7vk2#`Us;Mu2QfBXa4uQ<7?NF-FKE#25X&mG{k8s4VhM38=G>y(-4LWuc6naS%*I zBUY0olQ#i*S7M)qx9}Q2d@Qd|_G2dCHFwi=Ku3?uaC3SY$7IWMafs|OnK?RE7F)Ol z-gmt*fvNeMk?k2=pHKXWZ*~(I5s%mhPO5B}lE$=PqE|O^pP{K?Vz681I_n!8m3s8XAa6Lm0un2;P z)0>eaEY zJL$cR;Py@ol+OUNc+CWtQ_rzD*-~eC;aOFC3|ouW4gWz+r}#M=b?DCEJ_a+fxCcBE zgmISx6QfwO=VD8w1?cIs+(;bzT^y@15XYv9W78;UO*E8t`p@J;zI69Y^h8mAoW2iM z-q@_bR%T7Yr^uU(3uFa6M>D^SBjsm*yz1WlE{WBHKvWIiWFk(;#R&+Gjl>CK!CqR( zB9#HMv+5g57yaQ_3ZNnOViihQcY}OZGD%@-Nv-x_IHZPiNZYqL*QdQS2D{1S;*(#S z!qa4n6eF%rb@j8RVJ0gJNRm0-rA_mrY*Ew{Vbei;X(l@2 zlo5e*JYvW>K-WR9@q0raz1ACwV+}C&4aG6ssT{_~A&9}$<> zU_C~|y=@ydGylLRs4TDrr~{@+)n8d+6BM@sz453+xhom<3pvcRN6bsyCFOzFphXwK zFpO+-1SwNbTL89WIh=+;VDH(Y_Z+zDg&))V#ngOI0TPdn1N|li9>(to*<>*3NE{*;P*k_ED7>Z>#jOfJ`sS3a|pc-RZY zX~Fk+)>ZnAWF_}0BSH_Yt#`NMbyC8fI8fGHhKfVav_YJCwi?fl&!K?;)1_T}f;b#! zV$46Q6pd~A#00`CYrH3(W$n?kBgwXQ3+E8V`jK*XwZ=`>4=D#6TS(~%cU`xT?CX(T z#X*#w@QEoSYa>RQ9J+yLLAp6>Wufr&r>7UJ7{)la2K{RYE>+PAUca4F$oWJR;yvm; zk;H~!V#9Fw)AfVXw|!*sr(PpMTlxa{fX5r$8F@`b{;RT)dgzF7Z2xZmaGxw(pCKma zkI{$;T+#(xjt21L!o;KFi&_Th{0Dgpgp5EZ;#;$E;BKIl&AT+ltoHu0n!TI3-1vqJ zG4EEw_1i-Lnd{cz$+?Fo!~Js>^kF8mD#^p?I7)6Ycgg;B`7fb7x#J#CF#s-#S~KGF zpont3zkq8u+9Djul0V@fgoc3|S&z9Y8AEiqZk|ySsKuPyBhKw5pCt^|GGQeLJE=yi z5LUMT18X*51X-#W=g_tJ7t3SnBr$a|`Q&|NV5ao^W$1fpw%i=FiTeF65Cfk7{tcWk zK&3%{{3qW9%lIlx$cGdq-`tZW1+i+y<>E9Cx`aE<-r9;a&aoU~1 zQUhP=_lYrDpF3L-#*Ai2=&=?SJm;p6&o1_ifL-r*YL8?K8Sq5XjBqq;EMg{LoSJ=p zi?msaA4u~hgi1%U8n;6qvfkAg@p+G$BQ)=V3v>azKf+ITWhZ#A-!4 z_J_uzx(S@vecLLDwHmQjOAZzqSub+l(i|tX%>x}0Y8!#&W@t>VPnY7&Yv>|`p=lwg zHOYa7X4J>4Vz@aEg0uP%UaV&Gs&>n?fsbfx5zTfQ zfN3KczbSkU{d*cy^hyHtlQ<&)d+7AW?vy&v4NuPw;&+IYJ4+0s46t=Qe5)`9JH8r= z9pA{;;5?!t4?!X%8#jrH7QY2L+j-7PkZPTKO+nH2x6Z(?wq()}I1{<-Z~`WqU@s&8 z5$ix$=iHx+U13=>j3-h3`3yFP=3I)g$Q))MGKb?=iRF@tb9oZbD%+bcP@ZbnM1Tq* zK{-Rp0(;GWJtJF#dY!|_dcQl1_R3t6DY7@SQpT9muzN#f?I@|t39py!NZsqKoG&cX zj##ZfR6}v;D4Y~b0(;ROlJ}5`11Kyr`Z_|3JP>mLM`v*lb!Jzzqosa#1|RE;I{eq* zx0Z_It+1)O?~1`nbIYS1&!N%|wvQ*g2jhO0OO5;}d(UZo5hBk?+jaDNhIRKgZs^B&b*QZ^9^`^=TJ`E++Muobma6Em{oU{-LMW zVUR8Kci`AZMj%DY_YCraZ!JTDfB}>h(MN((hLsl+QBl{QpxHB?fw+y$#`ie|6c^6N zP2cwG5hg9?^?@hUotO2C&%wEZzj(Q$w2*nmSmxFXH!?ny9H`)amM9tF zw_f}ih)!n84z%HuC2sN2VLbh&lj2?mzD9l+i1-P|;dP-{CK{+Hc10(tUhPQAnlHm= zw}kNs!yG;#QI?u~s=uM5#vrOKCtPI2*X3C|xq&-alQ+xY1WVyngN^PI3R8KQ*>7iy z=W(#<8)puu@H_QvmDFRNDCysOl=IvQ1uJ9!mSDXbuXp9J^LHxIf#GgW<1LgJ{eT7s zkk;WDG%{b{$dXNMt461^hfI;tb9=m@cv38$lo*0^sK+-sv`S;O&<5XW;BD4B8}a=; z7!*FA+ak63QeGFT`8tq0VhB!(RW1Nh!k~YVJ^#T*gqE##BXpR}_@rjn zH}FJFMVgrj`JWqs0a5OvalKDKZvGCw1xfRd-YNN|Ia8fj1iy9+kaY#^k zk-YN$f_icJ&f|!*iFuDu{rVh2=Ucc5UDreCdI}wmrrV8;g>Fm<$T^(h$vQ}n9ERFR z;I9QefvJTnIZxnN|4oU4r z1ksakf+fs{jZcHa*g+Ctiv(qU3B*qik6g^NhjdXA>n@9Rf0JX6M-rTcdQ2WH7pLxt zQ}?l3+p`qcXsS$2ogX!ZV5f&Oa0z6CT3vci~q< z)oTx76ChS>bp5g5$T_5Xn+vMIGGxB%W( zSx2UIh8=wkdBF|RoSuhc&}BX&DsdmLpl92U;Nre+__&Ik4EX2{Ii89m%Mprdp&wxK zuWQ~xE~Xq4Q;vI)=Mx3)WW6Vz-51Xuz+bBlEFwVWDkeCc29zsckoW)nNx1T4^A8+( zfsl$dW;J8c4Y&P3#!i7DU`ZCzQG4J&#zkTS*4M+#2ZF%HeZaC!qWwImI$*G+<*JOsS6>X$5?q{MLJ1Ur2aEdOK$)ax#URy6L!mGt;avK%O3ZaoUJg+0JQ&JMA&iw5kgw}fs z7$_B#h9Pa;w`6}A+#&wM{i;A3$#JzSkfr*I@R%77X$$_VmZhR8p^JWC73prl5@p#v zN;S4d*-sXe-FO~&P4z+}5qnU?9%>|F4+CrcYZV`w_U|^C`AIU?I>Wy8HZzlpPhKc7 zLNLhJcK*Oa8T^_>=7BC0*6JG`@}NX=#~i8tsfwCJE!OTy;+K9UE@lb7UbqW%Z+~`95DDYLfr>7 z*n+pj>f02a%dGd(K{Q4R!k23G1K{QMT5!KXB)i$7{?=(bd3l%NMkx^N;0Q(4p9VlN zDIC8Diha=;`PVO^baNI`yoPu+Yx^xQRln{4yIN4iU}K3KAwDjW5{ zN7eNqk}xb(P*iFY4CR!Ql(O3zL-}YBMrC|=G^PGl=Tw@)noF9$R5J1rmbw(joJP4oKP^GsqL9SnH2k?dL?OX#7a`y1kJYjW^3Gi>7vIvv zH{7e&wtc(|qK}A+Yw+3D{wt&Wj(_~JC)ibn64X~nVf)Kxq1y&WB=YXi1b{W(UVkQK z?>~XdtgW8#{_$I2h_ER7E<*Knz%9&*cHMSKw1NUzv!1VHwcn@`{*1sA$|KG6R;)YV z^*1z^-rpp@gwwzg!!J3bsRO$u%Tj6N5nlL-D<+{0XRK-1a96xqm2BXBp!6Qf)*;~G z;@HQQ-UCfn=;2N0<`pE|Mh$fjkogE|=S320ZuG9J8<11&PUh>OVK(6kJAWXOG~sucjJd^p(EomgB5Va#7z6?>@cH zqXR}4$lr#W7%J5O!&LX?!{WC-NjQ*;&lG_2vaBAA;l`G7E4AVi#P{J*PCYsZqm%p? zzbBLxeGgGBntha_NHUG5!t)tun$#eG!cHwivZAB-9iuKk|G+sn?ARS7RxE-yVeY(p zmjdv^00-Na~$rs<6I+mIpcJ3+{eOFoJgHtgShr`hojjS$H?NUo`|(R7>W!^k3cx~ z;4HeR8^&USLQJp_6PV1VF9YJwU7hgE-s`4fZ!7O}njf5f&}NVnkRh zwZ7ILiNcoN!a%jWN*RXfcn#cU2V^a@O;PwxbrcA-UWIKy(P?s`hHYDf{odLdti{xZId=AKX>F55O6jnJ;d-Pi!vl$tyY z8J@l)#e9EmvGdf%{LkXx8q}oeWCPDKX(BvbglE88FuS3OeK-yN!aG%u0Xd}W0`1Z1 zZtzDkvKk(`ab5IIX2Oi`KM|e|canSVRp3{_XL-uP4-dxl_ZW>|6;LV_qK1#$2!^Y& z;|B~FPh0Tz<7@%1E(wNO0^BN%cR?aut6eft6GZJN@%{827xqQt?Rt~_0eF_+Tv#Ma z5|Pf|upG-HWIiLV4mMh`++@82`o@Xf$lcf|E78Vv*y1TnYQ87?aK*jD>B<#F)cX#WxyY=2{cX!wI zs&jb1v;N-q^Z&0thvzw+b7tnunK_~0j@e1&o3=v>?;&y@5RdBHf8Ark6M?TKsfP01 zRTqn%s33^m){nWX!fVw+J}CyQ=Ht>NlzXA4Yyno^$Mv#-5BdFSjO_+8WR|>XM|YSh zTY$T04$TKO->65eb6D%v^I6rG$F6cHKlzD8{UsGK+xJg{+wE>^3`2rN5#EztjOOAj z?*54n|0AnWoRtq>o$+wy`$_5ojSPLSuC=ZLOT##8$JoKzmMNv0>_>bjpYw_qfGE-F zJ{ayw$S^KsChM5TWHWF&!XsO6Kz^Om@nlfN@nmGsxFOGR*Y(~^l=|FvM!12>nL>x} zM?$~ZFz$C3#g_T-1XI3Dftwo}0k`U1L%6#8z2K^9x#^ENndw4tyAqIc`4bx2%>gM# z@4F0C#CP#VZdI6Blxzx}AkgTyg&BjP-`ZZo)pIvaSSQ=Ob(Bm_wN#9Wp>&~2N*TFBd2>_Y^nZRNG} zj0|RIkgw?xP#wLr%oBA#P2=|Kv9A23{)pMabtj*5sC&k4aCPd5W%U)LEL@88X+yYoN&>;2lkFYIvQ<21 z`s{yvgp?=$ppiG~l5z**#_0{t!L{1cL=S@;Q)A?sd8l(s2=|y%$LW>`bZGbwT+Ql{ zh~i9|J-G7h+R!Em{NRW-|6s714mAYRaJQk*4X%Zm9ldWbqL2Og6>i3q)v{?l3Y*Cr zVRRO+mX6LHQLjesRBGpmPvvz?wpwJF_kc&o)zb-nE!Mb8EvRkBv*<77Djp@v`={W# zF7{Fw;Aph*l{|d8Y`tMD(gC*9jb)JzTt*i=!$?d>RU1IY-|^vREFEF^ni38qaL(0_ zo1)m@y_A!1MPZF2ye0P3t79SZQ6AjE5gebFD}+&+6@=ceuHo!`o|+2(UD#V>LmUWu z9#P8TuR`%xJMtU44!4@i=Dpy=%RBLqd3wAz6gxW^v=cjv$;YY>AC>#G4u-AK8`N?- z(-%17N#xZDN+lmQCGY5QvUoEM+t8WolA1>E;9bL|(@NP$M0}>00Re1$ zFMbhAs;^HnqGpr7A-u4~WgH^e*5?`Ht3H9jRP?3Nl`y2%iaJBL4R*wK5b&l@k89kn zkp|URy8V|F$hdFjxptGBD=xOCn9AEgM6xrml(C$il_M{uMQ@I;>Qi81YM^8_GUWOY zprZ91>|q-jQ%wwiE!BJ?)!ruf@Rn_4@yZ;-8qpEBZ1m9u@Em_69+2Cj!)@-AvKF1; z`bn+i8b}`6I``o%-(ef`G9?2@iZ0@QvA=%Qs38^x3N~rQSX&*2wG#HlxEbka_cEXq zrK@iv+-DjDJAQqniak7UJUnAis!m;un>269%lD@w?%Cpo`z2YtZ7$xnp!g@nNWQT> zMs`;igy21ZDtPqGL90Fbje#NLW8kms`i9RjS3{AX%g40}fHATN|NDQ7Ji6Cx^ljB^ ziW#F9?MS}$7vg!n_mafR2vC7-8Tn|xf<-LLFTF>Q-DJPtNXvl#KI7BRB+fx zkA1%lc`X8;=~o@Rh)Pn|?C0K28J>dgf1v99Eq7KE8x7oo)2A4ag@n_Om>0e4( zFLYndsCH1^;r}=sq>A+@Jmq*sQ~2KJXlwdIJdbFQ9dGLed$XZEEVWiQxn>E#yV6^7 zhCR=fz`!hr>Gfr~jK**`BENN9^)?N*V0AQTMdNQk@J$Z6Pd0HI;IE#rQ;p%kPnd7x ze$hAZ|NZ&>392UWWdcSlJLLz`WX@|T*N&ww2Ag;)9;`4iGZuB@IS)!%G?eB3GJBge z;>@s=-94v6qj3tUOPErqG=%g!1QC=!9gvZCL{dCOByu{=hZiwD3Xn2?-gUSx2iK#rBD0~SFvIojco6+c7nQzL)tam3 zP?O{7>j<6#%tu1=kP2>0FFvV>AGS!Yhy8Z)M1^E1%rC*7t)&qn0r0v_T!IKu{&mrm zfvs>79gCKa8w=3co*}kNXmhFN6=`c9;qe0clmpvWlQ9qc+b=}0vTi9{XXQ}7IsE^A z6qnfs*)8>?1pj=zY_Wsc7hd+3+4?IlUL#>7^U+=Mm!C6nuC6))G|+c|8q})Mb389F zAl=@?N;L;)gqJz&v-jG_e5z5EW?)OX1%Jl)`rp_NpQs&tv^jh&)Yfk0`r#g}!~ewZ zg7Y3BLP){}pfWI%FzP%a&hJS%W52-LtIK>q&6zkqXHu#%Gy`+Vv0^^nHEA>Smf>9X zk24k->qN$Sk+DH!Y%~xVo5;15onf*;3oI^o-hUeJjECEEy$!aQSojP~#i;oVg8b~4!C>MiQPyBBqJMfpxgL!C{`Z<(ug!oC>zU-A z$XpGJ4A@dyt}Dgv z?Ty)!s+lLFvsI5%@!@uq%kyjx(q0@sh}W>qeBc~=km3@z;$_Kq>O62BBC4itVV-_) zM>Qfj?_t&t%JyCW_PzMvf};9`KxRkt=RQfeE}(%Cr#ahaV2xjM!tHVfck z0l4DuV->Jp^|5Qnw5*9OT-Q@Qu@ON`BXDvfK$RXHu7O+MdtC#m3t7$e=1#I6G7s@a zjb;ibs`hFW7d7pt0z4&(o74(^>2-Jy$?1yig`zE(0xF+F0o|A*Yn{oUt|F@fth^-X zq2SZR$ws16sevRqbrzkvkk_wQ@NLo!2hX_R1{u}e_zYTLDaBIihq0V^Hb{OsXd>?2 zGddO1DwFqBCvBRclDRA+OGX+tYG71{0v3M+qzK;riL0zuC4p&$ISFDU#>3IzXn16O1f@1upQvcyGX{n-kLKvp`TdE?6l9Nc!t;JOg*+={+Ped8MClyNgl zio1dO(Dn?LMf)EZ#JO5P!1rG$_}M5fI5nmLV&8g4>gofK<{5+QMUF^S(R~yoH{*Zc z3`E-GK$)XgpnEOeT|kg>>M~9kVf_nX*(<5^WoNc5-1{Z-z*_!w8Z|Z_NXmM1je+^_ zym3BxQ!i5NHU0r&q!Z|Bc)abAQ3LJ-7-$-_f&-C1ISD zPR54D%`?Ca2yf1q&7cY0;M)7|gXeN2PY zjs3ON*fAu&&gIaDscp4M^6v%XkX^!=ti`dm1Z}dCsW-KDWZ32SlQ$VXy>9>dCL>Zv zfF492`mA0A^^CVE=nDAz(AZYTgetp$oo+mWMo;+%E2Z^=NaWCd0WU458VDX)_eaBu za6pbZ-0BcZf;g>!tpO!An4a;okg`8ngY6FhaO0V=xY9*j>B^=Ruat=^-NY3bB!CVM zj8l$(I^w8GXS1FqBT{_=Q30{DYfU-hA%(oATn56TLCjTLLp+Jzj~NWRKa-g@cbI>I ziw*qA&?o|yW@=I5alle(e;aDmgSW55JEMUF9nc}Gl$o~>a@7_p8zW`WV5I`$65CLI z;CGxDOU_%U>_8D0Ip`jbfcnHOMGa)_VaRcvLR`Nfu3yCH`*vlC%5US)9o~Nc)qlTK zykAB=a+y?jvm@(NQzX?jJ}HZ;a8VUOx-|pPD6ycL0;?ZlvBd@RI(6~z!bE4;@|W!g0}U<~twt!C`_A2|GgspmC^w5?tM8oC+> zAWmRE%xTCG9c0V#acl9cBbQCT*m7qz4yJ+A_Y7y|@bM^dJQ{fMqhi@Z4F62ZIn9t- zy9h`LOvnsnYOL3pt#H*V_!cKvNx2Ip0V#~`r}YGqYXgSp%?b--Gn_nZXVoPx$~a>i z6&5sP#{Cz8=y1AH1gSsEXTtJ1X3sdhnUT6{^lZl#@FFLso{Sj z@YWHEx_%8WBcsSUus>sR$;PE}dn0O}YR~(g>d(GB6i#ZH5GhWI2$$DxqZOvA=j6KzXL zYZHZt(qb3TPMrtK<{;T4kBvi&Uh^sWPv#f*=sg#1*l3m@h(1UqBR1nx9e2mw)F|#oGgj<}jV_ z$!UiHP44iG!ox9}rR2S&Em&m4xSuJxZ}A6%s1jB$+1mNA=0M?Y@QHxkx^`F(F4tKn zkH_>ivKWLr+vSC2Ontokim29SuxN_@#9NgeP~>aXNaT4_FW;Ty&i0(#Ghmybmo@oB z&y>xY!Ejw~m?*3+{s-|KhDY(pxP|5$imte!2{It89mLe4C-D><`X65-XkE;hYA0(u z%z;LqU?M3SRqytdBH!)d?(RF0oF|Ty4T^BW&pTdJXRgYSda#nY=Q)^tnv=B+4fsmD z=heZ;E%NAA^hVp&Oz(FAre6=Hk`|$7>|e}gE&cr87&cxRX0S}iRK^3Gw}%$ z_^r=jN-6PveK3<;54U11)Vhh0z>DVWz^Z;^{r^15ClzyQNcV3EX3e?-6sYB-|glL8jgRA^w1>EG( zalB-kYbVY$BAF0cm`4~0lhE(->BRV;VX?n_e$m!e$ zfmsRMG-4Si0$Qo*SC6aXbDp=8CYky>Q1&TX@ZnigCW#w&DRf42Wb5xtgUmRe$en92 z(mluE8B4Z433^!O7HGvb0i)7;A#4z&bK-GqXW&CABfluj%xc3zG_$vJPC_?%6`E=Z zDQ*nFdN<(J5r@Zd$={~I9WyEbr#sy#@O5vnG1RjvxoR#e*O(X>iQl-^ntxGg9gH?pBCJ=g?!lejYmh9E z5<*o9mKstn&4z1#YV2>E-~Wdl7E98n4yeh=Eo8MU4xx_b+)d#p&Ec6*K)LO3C@cM# zLa}rWrBs_x8Qa#ZI7-c=v77<-bT?{1;6chjQ3s}wyC>)-PrK4== ztuMm$(;v{nioGwc9k-@m&p+X2X&F&UHDQQS>d2e1`al0#eDVcDE%loNH}g!@Q(p-_ zo4IFnbtfQ>*P~QL-P+>CUJ5B@x=9)SKOss@9ea#$M6)^Yv>VJU6PI~|Wy8AAalacC z8#b>EygV)*mc`Jw2%CGIl{A`>*QDtR@%V4?_#fEnDD?6{B(G`ldOGX+YkXL0fXSkP z4;W4K?3`;Tjy4rXn~9?!z`gbk<1o+JkQ_VjK_R{#n7LL96A@EoT=N^|=&dtT?tR`K zbWI_SG-V|Q{=R-wy>;3M$M!IbMprUJCNK0m2EE3Dv=d(9_U}1Ya!Q0t7Sr3x>LN{){lh-p`G2236-5QvyJWwQf-D$LYs_Ks%nB7UAkrMd*_Y5pQGlAqvHvz+Hr8YKEJ-C? z8E5XjhmY=bUR0gVjKi`S3}!T%nR4C6vq2BrI|A-?2r8+`h=4#;3aH_F>L9?`9R ztn|?}T38fUdy?y3Cse0}J8#$)l{}-gM|~wx42d3Jmf^xpyx7wV(C*Svbx~u7G8(tb z4FJs|V5mMHB{fAFr|y<=78=kUhZN397|$TSG~7YJ##f??CH!~w{ zx1Q*te&qwCnnhIhIt8(N?|g|O{6Cl=s*M@$m;41!T|9`730uVkY*v2vm}%6Y8|k(V zRG5i{8^yv+l&NO+^Sg6oH{%WBYu9y^okXW93MgSfRj~92I;gTQ)}b^`7*C=KL*~A? zPLi?YTo))5kcy$WaXtBJOW`4qN3wDaW$mkyYED6c7!KxTYa^<_wQ^8=NrgC((t0OK zqHPjsXU#zN5rf*HKU$Hp8$(X#Ne9rhTBP;V?=@ae?!Ytn{Q*F7JCmcRM}*}SbWt|; z6&?PGjB|Q1lx%dO3~u)vLr@Cw4DlXqdk;kLZvAs4@Y$I2ACwyrv#ZyYX-HcXV zwxW)o!4{JnT_d~Gyh*wHCn`kG5-rkiWH93EQ-IWp8!*{+5ZKbwrFfP>Oz2rpbia3} zUtD+pos-cWmMbvZ*60;bfvAxw$agP5Mo2REsMF?4*oYv0{ac58(~7oeY+~41eg5T~a&t2f+x6dn_)d%NwY4nP7>YFjV9O3biS$x&VHx?{@B~Zc7=EI;7NTCM$pZV2l$rw5NQG!#$sYoj*Fh z9+zsyQrPWq018z#tC!VNh271W_foD}4_CQT=;OM0Isgs#2Wb|vw67c>(TIVJ+2wd2 zg4?BI5ZqYb8|d52&}yk>F8SI(KLxCf^u4Z6o<`09V67kMN3Huh2CL!LMO@z{q|)32 zStKC{5Dr`gr4&#(*Jh?4LyTfg~YAL(Bt>9+s8AER6V3BuIlV^pMEKZ*mr_aC? z2D3TRVTA!1MSz4w9uDS={K8{=D9GvB<&b<%g5>iW5x-W%uY)#wa(VU!3%j!y`7FK! zt}o4?uoJ(KAagcP_mILtQZ`x7w1JQPgJ@%OmWu?FBk$65PwO!x(`?UtIyO$Y)6UPhCe_G9rc+W!Ct|0!7{CxX{8C?I zGhj^4z+I11+Pcfg|A~guYc}BJ)hX)dnTA--Az?7c?n~aU_sQb(XYu(9r8na}@`X25 zTyFvb)$x!S^K~`D=3qBF5s#j^&>s^heCrFuO0TAv3C!YfpFUqU#o6SR`jS`(RoMFp znX4-AV}HPDHG0ss>WqH+72mjtC2O~d!Y@xk1{r@-lyMcHW?bt(urNaJ^#Mo;+ddho z6Zd?BTWAn0^&qz+#dyy=a~{phi~0ouD<3QlV7Z&G!mZlB7q^o?kwZ9ZO4bT}Nr3c>)r840-6 zLab>?1@8*L0xL{r&_6Ew24;dstbSahW7fbc<|;QcXdA1+4_^8jrNb)h4O<5uV2s)M6;SUAjVGcL-j}$5ZlmS2Qo%fT6#C z%TVNQu@TQEa)FTq0}$QuPNd6U0Q$yMOojc@;j0imY#h_V(LX5s5ALmq5sZ5^)vNx_ z_rv<4ymu41RXfO~<{l8Y(Bf37J;gLWfK-!?k$T>M8{|#iF-7jRcnM-BMJ`0*!)-{}fd0qkBgc;r zT!T`I0Y4DIwQxKjjAt7cBXQ^mTd^VK)!!$iE}J3^MOr&>JKF>22>1*6K$niq!y`y# zTWrjL6tP{#&wy$UshznUo{O}~I>IS-ik)%5W-yoc>rE5|{GY|dAh_Ru!qao5SPX)#(WM!Sj8?qakD zd98vnAfWQbV7N%5eo?qlYrG_WCD)bA>e8J#CDk0JjDU7viNy!v-Um5)Gyb8GZCOsq z?b#uC<F_xG( zI|&K*?WVy=0{Pgio&`_Uys?Jnk|(YvT>Bx5D?Z{1bb733R6C~5dPJWTO)cyrj~17BG#zG z%^ALAY<`ODe8yBM48Q~kF4P~I#w_`c7>#`yR;uSMhU@O9XA1`}n8a9)`%_YR{FYy! zurbFF?y~Quk;v$TZ7HKzWR#F!BVJ^VWpib4U?baYVzIH#yC|)M5t>KUr1IWc3oFjj zT(U$(-Fh-%;1#Cl2esX;#J14GkqM5dY-YnGUf|$lsRyQzQy&wKI^hf4$o8K=3lENJ zg!d7HyKr-?C0;Ua{l6nw`hspUEGvw+3Wb-YT@y|*0)k9Z*%+#X`VDmIwNdz-d6_aF zuE!v$dZ;-Mj~lrly5Ez#qyCWInaO)a1?KHoh&4*v4wCgXhEi^2wH5h@-pvr)9NFar z#W!KjWSU7PVm+v)wsuY+78`bePLLmLIS*02y=)Z5;`Iwu#C$gJS$jX$f{)F!+- zeGc5Z2svcs=?9^7`eA%%%A3J;^*9V@3GJ4ipK(Rx`UG)(B6P6ML;ikKk=!rvcmBa| zKq2E!<$VfWWr%?C_M*n6zj#=?UmXZ=;eN3blp<~;uS6UuiTlBnG_y0J zo!GQ%etibRRavudkT4udyI%@9VmSfcb((Qgd??i)gaM5BixkjCZZ)T?fd}N`U0zjL) ztrdhq+OF*ZG%27KxUo3IIT{No)}%9sB zFmq$*A)NJ}Y9vm91WdigMp&P}jT^Ow zx*mfN@;ktLYyIPt*r6AYvb|R5V{9?uI37rM7fnFCrZ3Fk zyd-s*i{uJhg{Spp1g?x$sBvv&N(<_7?oX8CHkNvt|G`YqWJ-0akCJYFpw44sF%10= z$dV7KYPKmD_tj=iz@S90XDa|>r{np9nw0Pw3g~KvRE-}&ugF1srmo6{fLQNh3`0=1 zVI$GtU&v606(wV>CS}}4%p-GyAci*rDZWDG$X7cm zp2XC#3Thu<;2`OVECN+%$>;%?*~%fe5fpC=offD>e#R3PGA+W{J;}D4sISR%glZDP z4Tbt&W6Yt{txTmfYxor5iiKoZq^~pNcSnF<;@zZ%Tax|X1E@nxv}TUZu49x`cwPZ@ z97omy$8KiN*)@YzW&G8(8f_@1xru4+24b2AMI8JG30id_<>*rgbw0h!P}sLIfcSC8 z+zs#;2~!kSFcdrk)5#^s&(NPMtTUT}>wJdf^LHCr)Qn&p(w$qNt@$L^7t(B~0$t9B zzGJqxM-~}VTSEgDWL;MsmDN5JRff|*X^01Dr(Fk6Mc*xgYK}qX9q8L zT-OpkPvU6)J9J_9B-a=m6PuGw)DQ$ZILzQyIhPy)u0FiqPRz1sCB8e%tOCx^~-0JLfm5{!3?cGkaPw(F23h9E3)nz*_( z{L6;y;3NF;4I1OaYU_A7Qjcb2v2i(TrAk(5JS30{gxtae{%R*u>jOaC1y9N|1rKeyhNT?|`{*L#A~_3NN4){bsPQY8TV~{@N9CbEtzjM5(); zb6oXy#8UJDyj#tpg~L987ggnkl~^=kEL^8cZDsUK>5e*>>|u`?uS>4?iJNn3EU6|w zHVQ?R(c7o$Da^t2aQPK%BJy2;VC1_(UloiWuSFrvhUgDXt)u7j$XLIb&DB}A3!UZz zQ;R$zqxM2KXYn4JeKJm#AptuD)`hk5MU5nvTc_WJd z$it9r?+(!#Wj!_Cy;N@8`*GiI;iH35bGVwe#{qH!kIzO8)YXfz79$gG0j7j3Wq2Pq za2?zxQBS#7ew~8Wn7=4ul9!6*+(3 zgFe+xhJ~Y|*HmP12dUIm-Qhal2;&>JDE{Upg{6VeIZ(t324XE9P+{{=$aZw}Pwc{~ zvbTWZQO$@?z6ax$@8Bq?ktjD5XCH~PkHy(1SQESJa?hvV90fM0TOpfV4@xWHot#!ztJ}!YVx@vSD zNZ*WSa&0iQ%6=rUSa`sqzZAyxa6SOZk){J>OzAXTH8OpeMC~gt1Ff-)JBmy_pW0)G zyZVk|UBIxH<_rp<(7qcH&kw@ecNqnoWd>Vy`|)zNHl=;5!OOEO>N+VLi32}{LVQwk zUQDI)TT8;!no{zbf}7^51V&Lam9)>caV*^vxS7%mxQ(`tfg6+!yj^lhrnq%$q(ao`8qnC$O8O2HPm$kSnJPS~~)|{tD7?N(&CY)CZ_*isL9mYyk_r(95#n45C{W zP=NLsBRmO>+TnY1F{Q<>!plS4A$A!6Lsj+IPGXmm58zBz?5sxe%E2e0?LrQ^4x2Gt z5zU*!3gH!G0NqQD*QFwgcDXBilQg;m)J^ku-l{c-<#gW5xPg$~gC4*M|Jq+n8+k>i zU;yr&q!6RQJU?|BirDc8Ls5{0C!3PSo zZ%&UaXdYuBdIpfHE${J8Ga{L_;c@|bDYEkoM0RtEZy$pq*TP)pDV~Pub6df!C{|;r z%Qje`16)$c^0|s@XH)hJVHrUgNbtHFwR_$eN-Qk4UE?s-+TrLP1DM-@62^KIGYdyz z()8DqdJb3bC03e$AIBE;TLWQ!s-PzSUSjRG;YQ43Nc={=9_OWe3hd;J{L2?DgX=t} zIXWug=ii91^92R=Vq7<&erJ4cwjp&xPzNUWY#>^VG9i3T!3db`O3j`^%1$;Kj%Nh5 z-WG`~1f&CvCT3m{Gp|xy5;G%~5TpfuBEQh<%)<+eqh>QI4WZzyB@CVb^xNrrqLI*_ z%%RT~bU;CQi<|Jc6gfP`$M7L-0JpWS*YK{hTnhE1g;3fY7LWDhaovwSdmZI2_0oVD zdFM8{%Xbu}u*lVh+!sT=L!b7*v%3}Ho}H?|u^z5Eskz_vKNO+#srP$>kBw%GYHlp0 z<#B&z-`WMR;H4dIDDFZNhq&tliHhC`@KoVELu`F2wmzefGbKpl-JAM<hbbm~} z3u$=LDf?|Cn)mGjsm{KUAyKJ)-bWUt`Hr9j_afl^SQ?-;M0uGr&LGiyGyuqhlkF(9 z$5^72D?PDAslWR0*i^g(tE)DoWmto!$wR8>eI1a;s2yoazJSjR9FTHa>_P_RdkE33nf55MQ zlb&dr*M6wNX^Bt!c5ZN8TU?Vx%k`$@@e&;{;u`7Bc7(U*$|OZyapA4F@Q$KZenlq_ zdzcL85#_F`K)BjI0aJ#d8IVX9RW$TRmy_%5#j-(Th}QGgsNT+`fAnTg#_YyIWXwL} zI6MY^bpzg1eV=(E>WmJUGiECw1O=c$PP z3~D2}kbA&8aI|zo`1mGd#|gyo#x1k9Pe5c3pIw1&A0r1NZ{Nk>4B*e2hWJQ0%nNNt zHs$RqWZ&X}j3Rb8+C)Z&*o-F!+5<$$Wy@%V4J50*cVjVq91Jsh-Z;&d9R&^kb06Y+ zKF(2yt9!-Oed6k$*0quM+ zbF!+xp{k#8n$`d9S;>m;u~aB zc_|yq&5SG?fGY%`)Qpi3-??WM(7a#*vL`J);eRaKY)^(=zNy$}YEl1CrnkM8kX6-7 zuF{Xe48*`*27*7U!pKx4o~~tRLLN<&d}N|ro`*=fElrHYLa26JI7%!mM`2Nm%h-GU zJcU?r-yj-RyjMc{smMSq>IjvSpe4!i=}!}hNpEDLPQ>^c0TEsq&o%YX>40;6qO^Km z7{>?O;>dZvDU!tQUyUX&^d+lN<2i>B32-A{@@(|@I>u0p8i#tqsAU`k&aCh8dxqsz zq<9UrJjaZY)rTo~rc&;x=15|hlLOZ!uUa-0fv?Er!FTiqPCIfhQ4DNsL1u9Rvr-zq z34*J!eqbdWeT1X0aP$+7{=zXpI0g#GAmJD+97BX-sBjDuj^V;FLO4bW$0*?#EgWNn zW2|tD6OQr1F+n&c()grN7%QK4=?d{9z(D*6q}-hj`U3;V^5f=oK1>vV+`Ghz$pW^$ zLf!4Zk@KecQ26EBbvlAlyRzq<6zVzoKa7&Q2RWox@GhHn#t_wvs&^B?{bx{Ci~68x ztO^+E4Qw+NZm{cV?%U!mZa{`?eJ-E``~3}M1vDb9;Ldfc)c|hA4BiO5dLIPA=QIB! zKvFY93Oc}p8QReiZj(nJ;D$Bfb)X8eD+^Qv-T?ek7q4@Y;$leGID$n(}>#I!(#iV;OqF_cWo$Y8|40@#nD4b=yD7V&M<5@F#hXc*1Cx zUk89kscsT^hCg6!*#4r*2ooQxAxOuIRWm5UP&iLD5YD*f>d|5qyjpzd12;CJ0tx53 zQTE(0bhdIzI6NI+wytI1jQ%l{YS+ebhq*$GW_S=J)+3JUjEDX{e1J8yCIP)%jzeTz zIO>Fp?y;B8$@Nit2UaugV=)VPg|&O3Xn+fOF}pjWpc#EB=EOR@%(N%x=Z~<#sywL2 z_g$DYW4Z}M_xca)-k0-0=rrNglhnc12#l~jc=qCf^v{t$@$82zS0RFju3@;A{EsU} z;{qaF*hhW-T7sVQG$HGH4Ch@}S|RVyjg@$hAN~lgb>T_4_FvXPoRsZ2LX(W~VE8z` z{^kI^r;tE4P(TRT2Ddo=e?PwQ9awS|lzC7SFR3j>Dm?&4iyoovMUP>uM;h_ zmxBpqvr9G>J)TqA4W?P2;;NlNB>a=#@=VLx!#a+%gFo{!?$J#WN{|k8mT8V&)_)>` z#xw`5)%^Xpk?;VWkH{)5qycfr>7hn&f0%LAQp&*-faSIYU*O}q;th8~v-cbEVcV7! zI5|vY1jM7uWR|Ma)m~^MDjYAo&>-=IVi$&^?q4)nr1^1V*2D>E`wQ7t5k_{COm=2s@4xR;fHc z8b_?+3I)F6Ssgs5J<_^grNlw3kSsG~0W$*B$01fD!dNtxHiAcHRBXQ08> zKAeqqU92oRRl=AsK(i?&ZJC9b#}`v>`-K<`*^4?`CIS&sf8$;Y?7~+>)IIR@q?EbL z=((B#?JI|wee*!i__Lo?9}!)hUL%p#AFIfO{EEjSV%;KY9Ra4jT;G?Rx{c&MM^A{c zi0x8zqLzqA0-hg{EFw}wM5>5L6A|emB7^eP(TJhm*HOW(4L|<@S!JxJoSJd)ZklpN zft!q^+q@ixBNuidHvuZB2k5H>x4F{mi#Ed@gknRoS-`*buF1S`D);f@H@J+PF zu&yU%d}4yQ@G3KKm6s^tWLj74HtyG+ zW7LhKNGrYo-qDd_&VNO?^NCh6=$otr5Es%XP!bk{*26nqcN4zS>Jmym!o=zY6G|J} z7f~KV*{F9@9hV)^7lgEwZ%)lO@}iB(8jG9J%@%y&F#ki0(mIO9P*+C!eFg$^ou*>u zv@9)##B}M+dCYLPC@MfS&7K{GVZ0SZ9XyNAoPE5?2lT6ft9*BYv$MZE+~j{8a>^R> z5XFABqx=pK1dxpv(8yLhz=DnXc>@V_4Ks~J#RF0C&_Gl?!tV$%ykAN{zmX4!`vZ`%BqoWIfI%U8)&P1Kw=M zhs%HW6eb-7B(lQ4`-An=bu9y&im6%1%Q~I+jmF*=;Hu&mnJQs|1W+FG#Dd@zpL_rf zSd)!DS(8H+=hwkcGsH|$Ck&*?i*%k2sd|&K!NBsE_R2(Tdo8xTsRQcaGLl>1 z#1U^}&EK%aI zq~yyCb(5am1E5T4^9=8nsmy(GUKa-R6l)Gf>v%KD_3aL~*#`Xys`Jc`a$N=XV%++Y z{0}t*OsbCggz%Qb2f+1RsppJ2df?rz`9QdyRWPP~CQzISqNpj;7>^&R?1)76*e1HTh>|3i|?pOG+i-g{Z$1pA}m+{3!>7eSDEuKNyZDR2=Z=T4m| zvht@COez&DCjX{kVAtk`Lad!6)=q|a^GeW?(jR~5D08bFI=|uqE+HG8qv-3^5UR20 z3&;g{JEk_Yw@rZV8BZp`9GBb35#X@E&@RxbGBALodDoyu?KM7?PB-*`sPSLC(tHeO z$aRegI3y5{3r+ffzv*+?QecJC4J$`v8*&pVkSxam*6Nz5ZxP z?br0eIcg8$$_?8J)CJn}zLQtGb+UM95J*v@fwxOTBS|;@v?S(Kk!RZ&LviQ_>x$5J zNH7-d9>}8ILmAE^3NK;t=Z3;<5ykZ^M}`jK7s_(|_7|$3ulmGr3MxNO#z{4MsrwEl zgd#@IM*rqt$8&?SrcRO)DgCYw0=m>^tVY%1AZRXJwqFm~l?5LSsqN-k$V>TTKLVZd zOF=}SyNaWSg5m6Hx)7c*75a&`umta;#do1gSIJ^_LtF+XzaBp^7EZ04fe1EyNUC5U z72J8rZnKf!>FyL6%w-jKr;*2iE5Y#fz;no0BEoSYnWQGh z;00|$!%Vd}1KgGkFK-;kkJ6*8jnLd&L-fcep7`u@ zjj~NYV@I~!&v>?~Q4);zVLa`nvh56n;$$zf3SWhCY#<(D;XxzEOqg+ToT9jA_QT2|_+)rOA4T{{Fn0={ia9gIoLRVn zIh(@wfXgnWUnSl0R+5;1mXy|lN8d7*X)mWE;m98B=59Q_eEwbp*@KGu)Oyfee0o3o zE;&O}{0fEmWdWQpCSd@wno`S@F2qZt+6@O`t0q9+`eQLizOqm5weJPtv* z2zIN16nBpV@@|s`lD80cIaeKofA2Rpi@9s@mu??AAz3oFS3m=y?e6)Xi(mn2dIHT8RZ20 zK%5SDncy4#-VkPy!ulS>R0(gg6>Ui=pv9c~J}ch*BinDDf}S z^I4-(@-TvN^9Lfu^2QKz`p9*t@VbJ8#SxvsYAiiIp1qWzI9u0Prh3r0<7e^N zs;M1Z-Hk+WtyTch=mZ|$+lNqZxQbhGnOw(=REUDbFeZ>5JPcmXr;+8z+WN|9^30Lc zs|V{(9$5Q4R-fhW>fa-#KJoi-&uOln@eupqIg&22p@QEE5^d-5oVU-40e1q{^ltMG z{P{Z#s9J@sPSwgt!3rfusbUc+YgG>1ZhiGE$BJ>!xRl^d@CyEQ5~*}%lp&Sl<<%u> zc6UA2U+c{p+0UDjCh@wlm@yHqa(4^3>VWO&J20rYBXu#O`09ChbA}H+QeWW8rPH5b zvakfK*4~IU5+&Pl8^oA$4c!m{b|$bf>jtba5;LcWnUGtaIn5jb;@(;C%D9(2%Eb4@0rBy@A-+L2N9doNOJ&p{leS=S?AcI?t5^xJ zA}#Aow!W5#p{_Us*QFQtlA9YN8Sz&@6-XOiQ~$p6@Yy{X^_8{ZJMis}}AW2uFDRA8% ztAOssX4T=E%soy`CNi{0+zshA85;k%DkJ;yejQz^LjG0lDcETZzCBZ~fU890Cstb2`wJ`Lzhbq?Jm3EMv8X5Ii7{N_`nn2y5xL9XB_ zw;?o!PY*0+GK%Z>x&}cF=2P3jb5TOW1yr1YZCJK5qhaUL5WzXBB`|YSat31**z>0i zsASG2JvDi98s?dRT|xy^*4F`Tp}ZiAEyiLCEFguPLbeqiFmA^N4l_USVfIHK=u^A| zQF{r8|EqU`ma%wq3nS#U0%|p$=3z(NVFop1d11+{r#k#JL)?s^lreBUcG-(%3y2@|VDHL5V9Zv>D&S$1m z_jBYre>U3TmN#35D5U$&Y$S@k@)30z?b{9tgYBr|&|ax#A|)!5k$Tq>Ox@WUtW}p* zeQH@LM93%+QZ7P9i;xNtQYk{Jyr_}hx^{M2U6ko@K%)>tCgPaNH^&(JX=v#-6zgXK z9k83RzDAV~1({!eQ{YUYl@+Yf^3kXig z2GVXVQ@_yuQcp@c&Rmrf*<{t7VL*I(1Idkab*>vXZ#<-O!Ys}$u&5*3s5&T`~psZVh z8%0IG_t)A~K0u42Jhz798eMa7sRgyFS&T^a9#God|7q>Ade4}*n+;FYu)-qTg0eRL zgNsrhu{IQSTSEw%!sbLKCuR#!4*&){oZf_UGKQIC7*&2qJ58-g!JMaodG`sc}tcg*#?}0g+Kb!C6^vEnh z1>LO4;lm&_%Gt^mX?+sGb^V@AzSmk|fus$KL7zN^P-veN=0n7^+l}w3m!NcTG$N-w zXYQiiSU=?Ev$!V^rfdt)CeoK)fPyb4AnaGS|!TIsZ%TTSQAWf01Pe zJ&QB33wPDtOtPu!fZRP5wy1~iD4dx{#yM1ce-AvzFX!_qpNP9SzS$`L-9*vvS0jAF zG#d8T9HzB26QI6T<0xB@`(RsKqtRU&Y!m>9E|%Gn&nYj!j*Rs8Nb&jv<_DQziv>`%O$YepXL2BWZ$d7Ze~P#Toz;o8P5L4BH6 ze879ZD-4RY*_N_t1FBFmwrAb?8?Y&D{85Oj=iiyd$u7bI5&kwB|G-d>UNmpSJeGEw zt>M~Kl*4uY$C`ztoL?=GqM^wXc}m+0sF(jsP+{5oWAXVdhw`mYV0JmJ+<^q1^^Qtn zvpIRM2KVg4E@mE-nT;z`%WfXzsK;6S2a&?d2R6E4KGx@HH5$M04`%dPz1jq(QrxBkT6G1=EYjJ@;x1I!x`ni*Gw< zXSGy_jsvh3W6Hewd~#X~8vFGfE}KK7`G6xz7*UrzPC*;a&?e+LCRGw=R*-Ur{!&ZC zid1x}DyxnjUDpnrk75#BZQ!P__y1pEmd&r>+bOhEQL_SNyIg_Zft*OZCAJmFd@m$A zeTU-3R#3#Qqlnt8ABzW!bH?b)AuY)zVLYfJmk-dE3n;nfAUM5G$mi-1$&qx|<4wf! za|UAhd0elDf|N5r>7*0=Nz>^UV@S@J!=~7C!q4!0cY13CSNnJ_rf9O&WmywIj{6Sd zh_7CI)TULZcNlZIo+~LQ{mq^2w!PKw?a}8~Lo~95aTZdK8siPuu13HO?Z-5wUwg_w z*$AJB_09v%XL^R<-6wk`)Q1P(DMmvg9^OZ^LM`RD(;%p`wgBb#&-KN-^OD1Q?a8B` zF$$u2;0`NqkGW@Jc)ZdIcmA$`ll?|~CS3%cD4m!ETT!SVHmv_}W(D!O>6H7XCz$Lh z1AB9|Q_pc9+{fN_3zHa2a*>|l>iwn%@<{gI#uNMWK`O|z!nZ@!d7#K{>JGB#5-z$# zP~4{eNWFX~6~U+gmYne@xamjCq2i$8V%bGby~I^E=tv>`n&2a3D&y({ zK5&9jejvZ)ZqS3))leKysV$DD8c~$}0%ScP6-F>wI_MuK%6fARP|)h2ekwUOt-`Vm z-~0<<>D?)}|4=BWDrr6$3(jS6Qv|uJX(%@qsi72hWd%3PHk9|k^ar?0YXrSm)fSl2 zO%E$EY2;g!d&CuiNx3i~Pr0s)&;ECtnsu%v!;HOia25AoM4!j-&aX`g8}b28wy(#t zfpT6PL_+HY&*3^JZvKsAVAk&FfUywi?dwuNBWHl+pjG2g_t4Y4p;<;;f$Na+pF+(Y z-jLJAfA|HAXX9xU)ckxWRH~K}MRX4a+7)Tcr$rt5lau;_48+{2Z6&5xoY_aDN(p66 zN`Hl;=RMW<4)Lu-T-_y#9eh=)8Aa_*oIzaAOlVKu4@2VnH&H|*KPi@C_u=pnf+nss zv}P7oOJ#OF2pkownDh$|V&!1TkXVgVu0n2$pHalM7IQ_{Dp3TjDcoYs2&6a zMt#SG8nN{~CVt#%9?Rups9D`I^p!`+Bc$-%874QcN6Feisb&mCO`QwCE)C^LFAaS{ z@upLl#2vpa5Xgw<)Yp z92~yF7O~R4k$M;|sG27U^JIf!()iw!g}N>7lG+Yt<>L-kNys_Ae*xUsG5$y~e-q{4 zE@*vn*vK56pgGx?JgymdGD&;(v0Mxa!IaURY$f%Mf)>ST*wR8 zrRXh~^U~P+q*;0xGqK(1WvG+ofR_3e*d^;1U{;3^$a8#J%bi0*5?&*2@&T=I-hc=xEd4s^zXyyhMQ z@Om;qJef$5F+b76B~Eyp@o308=oO;cS2)0R{xSWxO&iZ`vlQaeaNu5E9>5mvR#N0z zUba1sQNdr#t#*xnAmdN!nQ1JJW2+0q^k_79H{g}ijwne(k#9KH^wvzrs8%ohU#=hA zV7}a&A|t>+mx|9*Y!IW?>hw56C`JE2Onn7dl*{)&`z|52vLGR_yRg*K-Q5DxAc`%B z-HIrJA~tq+cU|+^-Q98Ryk5JndWQe!toQqWemw5@#>~7EXU?1+5VL&_0}Um2HNnI3 zNgU3`Vl7XA{UA6Hfu_;0ctrirTBNQ`BP6kTir74r6i$cvt&_e#CO2>BD!d&tBLSo4 z{|ZNUKZIS-cSJ-WtsY3i%6H^?Wdg{Ot4k@gIaimEFa_wxDeoXU5VR#2-&dbH%tWW7 zeKbJEarP!;>g>}Qsn!Cf6jkp<)dxzP_LY&-y&N*1#>B6Be{0| zSpx}OZwtgCOh%E6^D~hK4|#<(khrKJVy1<|r+vylV#;eV1tIS1)|HDpjxuq_iF$UO zi>w3gVr!G!+ELpWcW}iD=@&2Z8pcq;rhj1`aU&L^h%^}wg)_B%u?<1r(7yY?Zpy>brOzdSBzR9?^)39z@y?Vy=$*S6& zi`U-@QuHTz9QVUrFF$u2kTtTXBbwyr4G)7fJdA&N2B|fjZlZHZLg#q|SceAR<6UxC zu7@0PdT>9ASX z71OAy<{@#l1hNoYRg`Yq6Sqq1wn*)>7}09pB*;bPJ~Y-l%oFQB;BPNH?NVneYjbCg z$8~Yd3v}Lg8u`1v#x@!Inn{N6RU@RvKu*aNSib`#;O^b^xx=1_{0lWyed?CBmSg+4 z_bri$w*$yCOUb*oeGuMuwx$>w38a!+H4QbH3^3x7igtt>)mtAl+AggY62PbA@M0vU zzGaiKOttpjc@7!0Nt5MbQUnTw&9VYh*8SRkE|C12jn%Xd0KqJROYq()>mu^ob=9>? zQ;GT-DlPo*^Cv~!FUS#k{y9=BAA25d&7S4# z_@}-0Mc)`?atpCMg*qQ$fuq%Aaxbt#&cJ*oKGSaKIEpEwIre=``CXUw+khIvlaJ$(rq3`*gwJVC zuD0Vr86?j=#QByDH887-xhBuQS>sr*KEqqc* zJav%lb<5P#7t$Me_Qlub6@EI0R8=!2(En;rXsDYUCA$N=fE4V{E|F?iVtNWLplmZA zuEEwP0&ncrkCVgWlw93-z(R5!gIbVfzQykyCH0C&Lmsb#pHcyLCTy=M?uUONjn1Fd zQ{{mHmzQ*=bYmsIPai!Sb#zQPi8MBn`Lo?Jia)rQTXyarvY5(3c;$02JqE5YP;&b# zL6%SIVK5(-jC*#2@fok%mgu{%terbCho# ze8*zr@%V#RLTc3}YIi5x9ore>*V#h{I4{klCjz#Jd&B)7gG{qlb z#ol=Zwc0(5-*&i#G^`8L8l@ko_`VWYue;w`PJhh;t!2`q4l=}QUV=gCRd|8-iYmP_ z_Wf+pH4q3t=T%c^!0ZlPWjPi0k>eAPJv46u#<=(&V5@a3bUEiii92*qXjA)Gu4jow z^XEJij=9f5^|VzkNPG6;y-XPe2W%K$Pv%2KRK0f@O3vtnsCSmM|KgCr_0AYip9SSC zQA_&82s?SG1_#F|(??(>IwhGKh;H*3wUMj4%t-9C6Fcqo#7<4^D4vI@%&w|cO1V!)~Osc4QBbMwnYFm!~WUo{2U*H=+$ zPE!U<>z{wr(QC%NL@}qbMu>UyozhM(LZ+|7$Y$JRnAAe`hj+2*$e}IYD-*MDR>ax+ zxGOW{<*3NyZOgT9C$2B{P7^i)%(ei#CdoHY>Uklt4m&&d2NN7 z)kWb>CY1gxQC5qXZzmow-D~T24KLNT4|MC;!6a0Up(ocJ{Xrq#6&L>k-1XFPuSGLW zk(9YBgz3X@4T=X7p8&{z9}U^vQc!Nf^E>!?}K9K5x@?xr(81o}nwfex(UFxe50 z)WV6UDJAG7IR816`l23Zu>ac=$GHjDYvg@-64))X`}jQo;SlxaE)M&!z9!>bVZE+# ze}^X1*ibg(i7qsSyI{-yJ5izHNZ@~RB*mFx&Ky}_fX2_uCItdL0%L4xf>os$j3o^S zT7=N`z&gVXSO^pA%Yc^X-UIpXv_PEJYTPROxA~8JL4H+E22Mc@6bm4=&z!moMB^Cu zY-9?5%4H_NgS^EIj9I87eomA-&K~dbr*Jj)N16SNjB1K}b2CWsX(&IulO+kQlOeSV zXRvmx*77bD_V0ID?G1`>z9XTYnpCoWunb5M=2N@|J^QT%t6QEkM&?2mwx(FNT1||B zs2++fUrFI=eW?+8;`0~kD;%qa3L*Z&V(zMX{(2r4ocgA<@&kR6`{fGe$+$0d*mVQg z*P%rtlnAQWgZ72v9D`oWLB=H=1CEs)dV=3mDr(H2nr0V`Z)R+{i;VP<{LAm-!g&BG zJ9ffb`!DB>^n}|-d0hvvPJ?#yfcl@0WJ}xR+;$jv`{^9bM)8`@&{Q2u#1jX<)c+>T zWAO_-ZGV=@7MrqutWSWFF|J}6hV;lg{N9uDJ-`&K{Z%1L{QrUIGbqbBJ%hK!V9)sQ8>o(5Va1Sk59B;3f2ZE5Jz!b@%B9q zGA=PqaQjVB+Gns(CiXmAtnOQenk!2n{gHehQVV9`-R*$54JRQ%E2#}N}Nt( zRrGdc;?Ab?GbTgSX=ik9usn6B#Bus1DO*nQ2f8E6_}TMWoEp@&8g8>)%?5F)o+kej zAgRtdLDO_m4+0-ehfg2{K*)77C$gI{TrRA>!f+s{hi=EqvNHrg zkD8x=>Ux!*#MT`i`ZunlBllrFt+B$dIeylF?6=$TF(_WJlU2RM$a@=Rfhh}5aYUD@ z%nfL88L%;_u9^NGl9XAwIwWPgVeapvlYV!K@j1F?PpzQQR#L=Yrr6Mm&fGxJ@T4G2 zwn}n_#_0DB;t*RTuV2TG+*URQ{q20M3rO|;56JJxSSW^5zg-8G?WP%ufwn7w-}p!L z(c(DSTxYD|vu7@#AuED8i+(3~y_oa_IfoVBPmPF6ASe*r6 ze(^jzP=ffyjIsjiOLip5U>?+N3JTbTBuc`fst(zgjK%HnFh}OC+&R#N=aC_JqCD{2 z(729KZy_BK(os@=T=#o4oF}^TkgZvcF;P=`b4I1+pV-37_FX17OZ6G%tonwSVUr^s zc&Uw(^bN(tC^0cwOpKwJ41YXyk2RNx*B2;$e2H#s$J}X+AsAc8z~{V}5oq$ZWn5c& z5KsU@$^b(EOV@uSiQLWz*au6@+Vj+}rXze12km8&y0U2ptj`u3%P@9tvZ)K=8e{R- zE8%kP?+``)b93^UvJ^0q@H~|PIV5rmvS#!_ocmBrLW}sVOmw9V{emGF-TE;mP%FT+ zZD=COKYSRo}PaIme?D;&YhR>@P~nwcVr{n)bI z62GH9uM-z}-GujN)nj!Nio2o2#qpzLS}#&Jh>l$l8NEF;F4I_U+*3pO4adm((ZH#- z;8qnGjKy*gyqF}z!DJu6Xe&C(3^~`RDe2~QSnMV@T!7o>2XLx|eSH%kZo@i2%ng8e zwDod;*CHd1@Hv;G?xo;HQNp@n)AI-a!(tXmZ~y?FHo6B^F|y%Py!1QE9Zi170BSvk@cU3VgDo7v}q_Io|P zgC~mo#=KjYZ90b?6LtOa0!fSyyR3nm_>dPA4GRK^R3D>Y6oTd12g*@*a_IQ!w{5=T z?S2?#r;1Y4lsw4;dQ92h^(jR^9%Wn*tJX_YT%n-8+ki8|5i&L$IDmrwVl$1jq=x{} z{;M)jG9-H^1}gI!nRbrAt?k)1AVJkmIHK4XK7LIb<7Heim51hFyc0duri<` zgE1Jq;FT{>q}RwAe5rM84X|Ei@l{;A>HEmU?Y?Bzei`nZ>Q{kvkI5g%ZQYtjuJx8l zVw1PnK<_Ms86L&<~vOkq-xcqbGkvJd+6g6L=18aEMFD=_bAI~;J`qi8CC)&Z`6 zGIvRQzGg!~!}|f=wS@aun*%p?`~^uc+r{FJJ?WG**HqhWnxWfOPAR!7%bupm8z| zWkk+axsWZ{7`y8z6MY$+2y}ns0kI!ut*is=lpBdzjV&qe`vc(B)Uq8IHdZh<{ud(wH{Ps-<3>F0T)vM6mY>+(qBgN9UkdXj|om z+B8GU4Mb!|5!p#ZcE(i~8hPzDvN_Dw=|zLBb#!g)c36-i0Kqm8F!OWRsP@YXYQD#c zTi_6J0Ym5h@HUv8e&n@fBT5Gbhv6fhL*R|a+k8lyg}BWc3|ZG0$q7-jj#A3&hComX z%dT97Y3lE2uxisp9W>e8)D5nKdmDW{OT2gAs&ifLv#pT#L&wkcA@-0!@alX7N%?fY zA#_rvbsHK812gh`!|Ad@a?`b#sZ;^>yfr|;Z4J~nKggZ(MLyO6u-JG!9>s{ z`v~^ZK?sde>xVqv2@#k+KcirLFs#*kKuPHc{3^(CD|bkH9`K044+;gR){R=kbme+e z7_VqO;T=CVNsLVvV_Q(CfsB1LZNFp9I~@Ih_;aq5x$Jj%`0ksYfOqukxCI1hg!wgW zDT<}rk=yfp7ShngACY#xI}m4B<^?SUUtE)`3?Ex0x9)QuU8iW2MnS4{mAfV1?%0BRzm)($& z!5Fyc{>w3B>zYe&B27Za93KrwXb5u%Fm82}HwNDp^dbtA6mu341v^USu(TNqCu448 zz_{U%EGJX)lGE&GQhYiKz3Zk|A88kyg8(_&Tj~+mNH!41P+pY_&*~Tqd0#V>^!`#G z;#8pQ>l^julH8c=R>DLE^W2yB4Yy5$k@lMT2~{}3-o)>+9J~;r|Eg{zKl!6#ZO zPe^qvsCwQ*WY$ccsBbm^nN;`J=v-5c$j-D2yz|U6;iZ{qCt*uhX*aQzG3p@gU!C>E ziYH>lQ?cTiSn(WD3qsJxMpG#^N{;F*{1~$)HD8YDZar%%aNmf%tw54hZfgsp#uH?6 zsrmniSC?8B%&bozW_g=i!heK4va>P{VZFw}1sAO2`Dv(2+jfH7z(7p>NG*Rpb4 z^Ia-21d%`GMT}x0K?~bR$tt2D(;(z`wDU2l-#4b$i?ezdgAqVN>I&5 zLodxCm!6}M*M1knqSw5s3^Xm@bpYx!+5H-i)N^#Klxuhmzsaqx&;Pa6F+NTWBay-B zcs0@_(^Xg(*2mf+LKv$pAobQs$Q65EaRG;&pJk%p8l@|lM*H^^^(&u?QbX-oEaLXZ zYngZ+O9B6?u?c$kA%E~mmXNgQL6M_*L!CdJ?C(7R-?#)VeQJRNyz+67m@BNit=l1Z zpX}{^a=6TlXQhiFM!yUHWyu)N_Bpuwnm3k<6}c5Jv(xE$YIKwU7Ca}j=qbT5c3<94pDJX<6fXv z{4b+cng12CpHeKoWg^vQWu z7Fs0w&83W~H&B2UP}Sl07*vx|YveQezLjCnu1h0HShj0InkBR4BL0ksKP%$TQLD&1 zk{JN_5z`OP)>6?176VvcAM+n=Yui{Scyrse09fRCDW>%2G2l#D>`GD}1rYd zS-1O=<3QELut<`%ZPSWMCZldx3cWRub2fM$1J8v;b6lAr@lf5K*@PE2!>By> zI0`7knF4gMv}6aXq$fX->luRLKif|+L)fbEk0`QDGSat#WPn_?d*xzBjo2|6EL(#= zpz@q0?#xCrU4!N3;_GW68Iy(HIMk{h47mXO$H^hIRED!}bCXfkyg&qcn+%BcGyeqG zvIp5}51ER+8z~~1qL5}8luQXOB0(z>Tt$K#nYuBBcQ= zutOs3FhxA*glDsqRDO23R9^d#%qKCy6ttuz_EANEgRaFT=8%=pxG)b{cN`b3!nIo& z<8$Ba5ootcDW`7QLfnr&vt3p@9d1ljxJhj{jcJAM{qX_G{sX*8w&;rq^{}y1Wi-#e z;^YLR&ePY*M8CS!?s6pZnHf@L++fxkL`(&4^QrT{$Z=r@U@|S@)u)4m zb9043&%F)e-bN}M#@k2w?l7czD*kNi69p0u{!#600ALjjVHBu2w-3^fd@QN{3$pMj z*O{cMWI85L`(9=Ti%c{06;?)_NxhX3rE0-ic_Yyvz6sf!2bBif_rfpBp}16?8>Sl+ z@64T;#s?|MTZ)|w zF(srnowHD+{98FX-+-*{bGx+r9s}kiu^4(MnWJ3XMkLYOW)%3YJ>a^mGm~vjzrfY^ zLR5iZJK&Sx75J?j0a-k+8@GGF#TI1t{TOb-oxWf=M~Z@_AjN95~L7e{;daGDGojU*SS zeLhi2g9$v#CU0Kqz}hZ}DIMp>x@{^adI*nLoA)@6Z5otZl@Qb0&OC|?5t*%!CIv78 zkG;dgTYTdY;91!eKNEP-Y{4VN&Xc-29UX1>2;=Y*J}B=n+!L?dZ4ue-pLXJ(_Bf8$ z6c7BAEV!}Hq@qsT1)JT^;A91`OW}Af4z6wCmC;$`brE?*q|L=CS5wl(lngN?lYCsu zF<+w)*&Zly8>BW6#i4B7e(Ci5K3a+a2n+8cW=s35y3#*(nQ1Ps|Vf$5B}1(dn^ z2)>i4$5B|Ucj-iJDtQ3nC+L6-aJK_tb(_D3f4~ZSC8dZGilT6Fg;m^(Gb4*m=0%s2S7+CQq8`@)(`5geero?ifP4?b6fQWq(S?b|8iU4E;Xq~ z-g6gVYmawlslchl2wyo67or?Cd^4CB)YF68Tt;{;3KZ<}$2hngDu8~zXh;)0al8++ z^P;z;&4#Q-Og>2A9s2UB9gV0mcgj)E`!|#gWdkPk)C(S8w|YE}`J3|!YXe#WC_@tH{NW8Wi9 zp2ebptb_Id2-CaF@@tl^*Fm7~M;0fH%IF}g-ACsCDsZD6bq}<5Ncb?2#z}Fne^WWB ztpd^JkJV(YT*8!@-P;|o#3_C=1T|{v_`-e?C|AKOmFJ!3=zZNO@sxhb8uw$mIib(0 zAM*_KLh2gVgdkevlJCVs$m7&IRubKJ7*Zr+h{LC~@mf4IJ;U6fRn$$S zF8_KUZJEtDB6Il@oHP%bL-7q2$JSjd`8kkp#Y(7V6l*GY8mxb=!u|ztK^J*QZR%Op zv(@=k>C5ziYeL)kqcdGMQN#d-nv^PYF4cCxMj4K0x>JEi@y-n)T1fI*#IJ*SQX|%^ zMVaZR$ZRlgGpeIC7#MII>f&9j=5ka++~1TG2NHjem&;cKji{I}Di%=q3!TQ%ms$s7 z45h}dq{g9!0RN(&NKIWT`Q!0jSsQYu4}N_qt!fS4^jg~mY2vkVFigd}d5v10(Bg^f zU2lDHZKs}1V?aHRu-)~ezvap9Q})TkyXoZq_!k6ZlPK~L6g{ZiA?}*K$oJ#`B#!^g zk%{6_us8(^fXzR9_;9pIeB3b{d6X&3OtX6d6b!2|7@Kz3ugQAY<3 z2}g*7;X0o+pWDn+1|_Dze-1#la)PA5a0N;-H5GUDg)GMD8E5e8&qJrVir^LZaqG|u zC*43#tUX#JLB|<3W*vH7hB&*L39sY|5i=jr8J!H}V*4sRv3)fqIbTHSN5K@b)CCuL zD`|KT!*sid=d2U#d!OlN^~5dziPSS$AmBYtfvk!eYB_HTMEm*UyP}iz)l~8+92a)B zRQ$F9`qj0TcmFKk@7E5*7=^P$oXR<13}uoW#Z3LzLk(Qj(e?bO2MN_Nzw8g@$z#fqiD; z-qjR7!&}V77DS<+JqQnMIloEcjeO9i&=G$ly`ag3)8)YbJ;lgJX4d8Q{3Zk%*>!MkgE59su>W zIDum4cR^iyp5gZ#QBlvMKx`VLTG{RzN*nMRJ^4~Yfq(YLg^v^E)nzfaD(tlpu($C$ z-M8(gKnjM5zVZNtgZ*0~?W@sePq1;vZ{f_fP#XM+w?fsyZ;bp6AaL?+h3YJ=;C9B8 zd0wm;1cKSUqi}5z!aKN4ke5EIE2-zUm$+^5kV((9JL^#D>q@d)6e}O0FPbOgw7wWQ zxNB&U`%0z=40|Y<-LgjfjUxl3<_PejL1U9jmi>=;Z<9F$^=Ka>;`u5II9*Pc>wy7K z+d{BtLyno*I3gEvtE6pAbw2GtNypCe#UZMST`j9UOR5gtBrFTngb6&LZacQ1vgld` zU@2kr47pwdL{SJOO-r0$=X(&FfM#`DmaJ&b4KNaEF?w(zMcY);Mp(}P{TW5F<eTqqkDR%v?~E*Bi_9pg_-0fYG)wb(;u#42sDtL`J*n`=EKolh3sMxEtRL zj?VRZlD#FH6ghriJB4&3HP8RQ(`np~B;-*eC_QMp?>|{0T=k44{R%e&q^@1}fwk@@ zj`SBt28bgADQp|ZHygf~q8CPiz)W|WggK(4hY?Mj@yR)Zba)+JatpU8U3#v6xwJs-gfK}L{V<6 zcT&Dzg%AZe6ad;K*iwDK?<0l%vmSjJ@q{5sOe~X_iYRglKg;!?vR>$z#!M13}eH#nTuH_pFQhVnf#BTf45| zcbyXAe?T~%jPH7{TrRFb-9Wvf z>Z2;Pxj9l-%~J!hy^+|?=W$TfT(%fo4nGc@z~eca`)kw=RKU@b$eK-9DrBl+@=4pV zL=w~9ifQi=my?89hwXC4QsD6xOR;gk2GpR2UNRk8Rd+J zsj>u)r9{Kjg4z|vP$9_RymggSyB5CwoA#m6inyK(zCrhnpj1pcRn{MlJXM3BW0d@^ znv=s9N8Go*rNo(YIPC=oLF|#k<~9evTo~vzFvi;vd4qTZZP}AoxXBsbMxCyNfL2%j zG;JUZ_v`T?coy=^BSSfK*~Z)8HCl}TSG!R(-kQmSlbhB%xLrcZ>;4mG9FG% z>+gmlaIOfPCj#e-zy(+m?q_>o;2g)l!N>=4_)C)c{Y5FqCUVgqEIf_wSs&kDdzD-* z5ZidmbMpTBQ5PsEuP^*j7EthyP~-}_pAYsXrZ5XhTS`x1MQ8j!8<8e;gq9l{v0)tl zXIc9qGJWisjcNht(Vb+XX(Fl597n(=)6wK)=LbK%7MOzJt&!FB zI#it35N_$Up{(`?nI+G`!{%Qb@EjIFZ}?u{tg8yAk4x*k@dq33U#6 z?NKnR@&SPnWbL*C`z0}Ll5^)8RCa*R9b{_I77xnp@|gY^`H3l0?X*&TF?X_lcVR6u_2_T`sZC_(-&=B1(oFxuNUv@q1IZYCrqN)T3UNY* zNe&o_xt=)RbrZQp!@_#cTa0PZ!Oy@hcE|4W0DBp*Jha|v^0QMy;1n1B1@)Rfd4tp; zFJBJnFgfi|BN#i@q3H|^giS6f690=p=)MiU9Uqb@G;%HEdHrusgXONBGqy}v9y3Fi z(5bWJXh?Nb5Fa=tP_=i#06?JkOrz7~g7(eBPtTsst92Gt;=sAy;@5TZPH)&VrM z&SlEo0P$@wCBh^DB=u+>GTS3zNJFOdL+O%5Fp7sM|4j?Pv}K(ENV8VV#_Ou-$yn%q z&+vPW9|S!Kvn28Qm3aLR+~T-rt~=PHS6qZ8(>qr9I1gJWiN2}zsZ-rCXhR8w(sqpN zfMM`+8~{9QUhL<1=FjYyOrC<}Cf(hnv9 zT546?60_m4Fcpr)1IcH_S!52`_7Gog=*FP+_-!C} zSq=EEqzs4Hnm^lHe7;I{3;UshkRB#-hEZYB4$NM*PcszH{v%y7kf_~vtbNH0=c^q1j;BfX<52n$ zj{i^|hFG>v8GQHtm<1Zaa~ks(Mj8t9`h|ws_XHw9ZhuOn@>KKP-U{B+ zo%WK(#~7V=CNC_7!gb}Ymf=S|Zmv;G57Nz2<8c%Kh(j7ME9r{WOt zeYi-sCe@>J49RssRVQs?lHyE&7oGh1iM3!#t-vec?WVSHkZWUE^xwMuf$WAwtfIfvwDHJwmF&rq8K5#w%SAT?)a@l4nA1& zpw#9v43~}N^g0|2To)TTsoiO=@^9!Kz=-z!%KzE)LU=e&V6jiLvDRSh5fsO>5^|I@ zudHPvGmNy=Fb$o3p1iI;L}``PF4)l{$^}SM?1{hXOOayz6!M6FDHq?X#rHAd`&b%j zra)E?*%=5Y(;r$wGCwH8LsmPL5-Q`c#aZgl1TB+q%}{PpV9p(MGJ+?6*B%HiWWEkh z-QA+Oah@%&V3F$Y#cv;Wt$<{-?6Mbi|E9AjEIovf_?TX8M6Q7t|ItW{|0Kr4FHt=` z@;6beKyF6azu+{2{WIVU3n2E( z{G^{FiJOe!(#OU z$!A(2)itEi8RsC;vDnd@J9KG=eq+{;hc1S7v#ggfrA&U>y*I$GgWjFRbxL?89KI57ufj5X&>iaUccW!WvU}|&Ne<-Ft{5Njk3GwE zjTrL_2+U@7T@LOMFvttvbFHQ3pC4i9HMhYkwLBtP9t9!e;Q0zN*m80#f0vFUe!{V^khEgw>f|{h=c(Ktb_w) zu2n(p^wDrYvBPO>l`T`4+WWSPGG_e1(lhzm7kM;hTMZ@Q`2r#ZpU&t|O6ZKd% z0R3>7OIEkOVJszTA5{mqG|~1m-rv4O7tb$%F|9YO$HuM_V^<^2`eNNgYdUAh5t99u2)T{8J=kb5ddoF( zp{Q(vpye@jaE8%MiqVJ8XbZVb1txe3o0mqq?W=I#5Of3wCb&HW3Hx$!Bk^(x1#I0Q zLA`>VCi&oVkl)cBRsfXMr8se6M4SJxyeh{>F6zD!b>E^lw(u$F_%HytUKhb z_}?O(?O?rqDuDo+{zN>hlwQ~HIHMEWx+X{RcKzZc<^DMnO)!Slb_XC1jVN%oSHkA60^iY*JeNUxx?>cLs_9b(rED{fCjPJp~wF z#FNwvAC&*t3m9q$FKCw@f8+F;X;k)}S#xcZ?{YEf4&u$EK7As!vZd~w*W$72ts6Eh zJp*HNO1%ujGaA#&ACH}Gr2$}ldOXKkL#Bmp-EK ziYju-T`5UT$QMUOX{mSAF=X|tij^b_3Xk!|z>Hc7l=0ZwQ0TuA`fovchffmi$f0{P;e`+cqB;%4!#qojgdlRK4!A?xaaiiu?wL zbSMrA2K_>*;s<|&?bQCE!L{}+B2lb)D%LzB*Zub-ap{Y=^pysz>4tjUBB)a6BY=)w zcX!0=bLi*E-v~Ho4oWrR8k6}ax>U|}9Z+ILk*DXd>&1+zawC)gS zOH|$bF@!8h?O43^xPa6NmXZy0qGkn5Ame-zr{T-NKqBh;0vJTh`v;``uxXf*p>IH0 zX|~A?;q)DWUnGV93r1Nsu^Cw;>rQ)f-!KLJ=xVtaEmmG5&neKB7?XK1tHHyX+{73v z%sl?@;&9Uk?{s@G`HZX3v9$<(0mY{8xqcYjQTlICnaP$aqz;p}1C~AWC&)%nx@H7V z_rL^R)CoK3TK{Zjc#~eY=n2lzv@%*t4yFz_qmw=cVEfl zPbaw$Wx$F7)3TAwO(e!Ctqqaq9=@f~%>7og~}gY0?We%M=9TS4G8_wfKo6Z>D)?yf2_9b-eDC3BIJ+K_(5ccUgidSS(M%&JkLG4q@nSKF#T6MioFt2f`VUE!&Ed^N`{6(5m zLwFjax1YfM`X}VF!3&X9OKr*HIim=@8Vb4zEM-IL{DnYhO%XrZ%t|Ia|3VZ3#*pz} zDv-9Zp91>$2U*woh_SZLXFR6*1+fXl+o2|SH0}wrajG{k+Yya!>WfCVAS}5oDM5W# zL&|WvA4QC2Z=Bd0b0uWVT*?|8R!Q2#!;TnpugMIAR^ln>x7HfwgM*H;>@eyVnZ~fd z()K_UYwzq2z&6s+j=XD5;$gQZpd=)Fe~PckM&`4_DE{F)j8e#wNDN>e&KQdA!<5LM zlgPqh0Tzc-_thvCtV+PcxWCDDyq8Rz(NbWGJzx`kj5)9QJsJ{s4ApwvAWahd4t(32 zVyX7pgMyk?P6opNr||z}B>YME3rhO<6#bArM}TC9W#FT=YtY#RRb+E>6ktiYzd&vb zMCvvuupYd!4GoNIcf(5gal5)SdYq0k*>nS%`->8VDz*4_r>n5hZw#D~_T(r&m!4FP zDqZw8gNlfgEk>6PRO2^>S}wG}&G#-1DeKIiXsYys#{QX&624D{AWbT7gEZ&J7hv3y zbyqQQb*Oi}g?Q$DrxB1<=B^&Nwi{9km~n|(jkVb3$6(A&%XS*r{9zV<`eUrZ$2UYt zSWId+VkK_)OJcV2CR8eAk$+q@n0xGlq{(&DSg2#?SQp> zFhxwxbgA}{jLh|t@XBrLL0&Yb2|7b5?YcQ~z{_#0lD7tsWs4i%aMYFy@|pK#DUaqu z|2iV8Btm3$!yJgL?jj3L2a}79L?@sv3F0IQytoY`ZBy@K13iV#ei+q*XGVy<3pyT( zzZSb{1A4NzCHYPUWXsg%q=dPcAw@OeT{r$xDPyn^pWQGN4kIrzvF{AxQ}mfdE~8a= z=xO@^#pG?s{T0H_e0n54J%-|QYZRhYx-DD=it;A>Xm=XN{ASwl!JbDuqGIbTov)zV z(FZuED!M6i>#J&@P;=upX@!rz*noeSWAd2zL?(W1p^&|aAT*Np%t6+tBdGoIgQ%vW z*8%Xu%PC^`72I`v%ecp3fX?$LqU<>fG6Ul~qJZZD8nmrHUTSmOAXH8`Bu2_)+y;(h z7R+lcIp52ci2=5xecwkW)*>1rbn|s7H-*Vk#iOQ3?RO$7u?F!|gZw%GRDyk2g1jH& z8?h2fKG;_*pkzH}9LAoVgoux+)bcQVZyJ)tX_f#H+8C=!7yuJ~|BSvuTbizHYI|6rT!*E&#Fcru@NUY&WHo{-D}P z2v4Ftg-DA_F5!2XVy(7FhVGZs9UADwfxP?JCaDOBD?di_t9QIP;1@=rCw~05_@M9pOWaCy+!D5|xxb1#! zTeE;nuAo^y&u3;|7JZrdu$dj8UBhzVe`IU1E}&(4>` z(w3NtfeD7<_;vt5z7$j!wv_p}9kl}@0)uT7^WYTEC zjBUdm`0b zDr=m_PAqyhder~GD&!uy_FqXM^rw;i@NT%(9!9W`#T&%pjbia8Dyi>-rRiXD0&f&u znE>pJ*oT-q)#;BZV)dJ9Gm4v zP8p21Tzf2$i=!jN(F$?2l04^Q1CbexMrR7ga)kwF+9A_$Xt^NYa3t#s77XcJ?&DBU zNWq=J(IM{eE6OlW!&B2fW08j3?Z9RsusjE-T%U{(*S@6;y#8z4I82_){!rWmhsK~~ z@h7POenVIs_G~bgY4i=(BW@OeK#3}dMO&8k!>>PeF6;{w7rmd^wd^;gXpO;CGD+Bq zTa(_5;F^VgKpI`w5ipUL`VQ9?#=Jedn;;Ixt4HG1WAY4UmRmLSA;h|l)3JqgN`#lq zD7g*#IWCGtiN%eVp=O(8vfH_Yd!MoEicCqFk`nK7-?zj&<8D-V_!gG&(6a;aP+8K1 zWyb&g!6f$5Aha0QP5D}<5XV0(ZG7302Q_CLA*)_jqk5n_NR1#5lFrS;v z5f-MNxL6-tPDlYLF*v2>(2$k97iypVEf=f)L3E-)<9dRf^>*wCvoh~T<*2Y(Z}KU5 z4XDbmVj-K$H|Bvt{n#_5OBeiLCF{umHp_pFr}) zZ61T}9GgShFd+Bwx@I))&U`iX9pp7_lJGb9?NGeb$r5-aE+Uv!OZCpkT;AWWmd^ zR%bD%J$@(jvh^O4?d)O@@XCqhvf9I>_J4`7a|+=&)%D5M6%?b`u@-&>>kPaM;Fv_( zf2<9}8bh(hNUW(N*1&8nR-Pq6GnnC9A0HW0))+fcvsWryM?Pducu`|2KT#pqH!`I0 z*^zi$)Sh=o^W{HyAzB1K#rHy=PQ(!)u~7VhSYA!q=L;pVS|L`OlKR4E37AG>^coHE zs3f1TDadcquM$gHUQ^ehtIDsm>`ZxQPNeBJzu*x`>&VcO5Unwwa;g;WH^e zjlr?gxm_45%L7zVlY?9HzjBc(V_9YG&>Zse+$%V&omp$&gRGkxNWq1xaF@1v1@d_Y zp1^43L3Cb=h}a$1awn9%_x%5rqq%)~*|q1=R{ zA7pd%6pbjL-ZxnhdEfnt^37r?(yBA}deCj&KSy@t?a9vzF_Qx^B1ze-o_LJYTfZ;B zTl)s6#O4<&B+bBSl86`zG})6dpn1w6Qte#y!}1mKWjZmmEAQ{(gFk$(cmnl>l-);7 zIb{^K>?hutJevEP4{>mEU}%gwdgk&AYj)s6m@>F74^6|Aqc>|2yrhGZAl-5=bcJ3kcJ#L z2C35;L10>2!7w%Q7_ZWW*ghf`6s}Waa_Qbtt}h0UZA0F# zPU6cUnIqvm+Y6RiMJRJ;42_z+7$JEhdOzb)G<~h3X)KN~sS>eh2C_^KrIv4iDI3%H zZu$D)F!tfMAHM_m9VD|Y$5;&M+pe5(wkn?DR|KQfIUMDqQ&QapN%W|(5g2V_2r?<8 z*AYzrPzoK-Q4xAft*xN6ZA>Tl`yWSI{+OY01Y$O$E%8@%H5)PR_FZ9!TGe9_)#wc_ zst`_+BhJfCc~RmFCd?f(E+V`@8oA0!V1Bh>28FynhsXIBn7j438!r>J??|CYnnPGd0a5vS)NVweB0iNJ$d+jdH&*fN~o@US?TEs)F&sq3;G zs7#HMs}TpM={8*VL6BACN@j9FqnUv;+@>oq3RpruTm~j`t#06<%N~dVhvv`-7!nGZ zJ(;|K=?Ex_)eR(Z!9rZHq|ox!=uP)26lQV&7XzQi@My3Wedoeh zZ3#v$282UQ5rsS`MDD_iFz01*#_m!+yTb*|W6@s3MzSd{hf9aH$j`8|Oice( zrvF31{rHf|Vdb_cqWWVu)|uU~>#$=(lT`I?VgEo7_txI9wv&lKNdy961nQfRM=KB? z{~pGHa}jQ%a5zomg_9^BGmtUjfIhppu4`^E&0sn%Xnq;)Ti#!YwD)O%xa8c0d=899 zvuvWM#LgYhE6=ddN)e+AL}Ih<6eHp$a*SCQ3x5=_dPrf18X|{Xa}94KcAcKcM}Psb zn|BBVI``+iMwehU<(BHQOiXi{wtc%3VF~8j78(#Lm@X=Nj;VJJ-@U ztJBD-&9j4BRTnX(NK7flVXqK!{BaM?#%U0xm@Q&>w7+ygCY(P|pG&+OWOU32U!k>@CkwZ4M^O&tWe-o#h!tm28pNGn#pa^Nm z?pMHf{vZB<^2esfK|FEr-pDkpW7#yh=x|MRxUNsBK#Dj5Z3*?BB6#pzDKB9+idp|% z$wUy7G5X}S=nUhYfx9d5W|YBdPzK7yO!&5*aTHGqR}5lo)Z;Z1Wnod3as~DzhXX8+ zNR4|982T6w0(@!*StKRF6$qXDHeCmmag2##&x9k(zUp8cJU#_&IcZHvh)R`A1(7$= zqK1#j3{j~u#O|dsu``F<+YOLpYJ^*VjLb7i$n_j}`YV5nE3YWJtOuU0E266T;2jMC z+ILQ&WO$J;zA!o~5AF&Exc3csfEZom*NEjpaT_6|l^q*RiiJF1%3&-h>Etqt85=c-m%kEk6xw&&*>f?3zrA9r=M~@npH4wTQ2xzyLyJo;@gLGUP8p-i18% zPGN*b^mqtmVB4m-=#WW&M6f?EVb)S$xsQO2Fp_$AnoO-^_=Ka&3D#i*1*f8(;5C%F zkb{GcJ!pclbaw41$sG{n`EUMc_fs**@42djj#kAq0R=5mBGL?5ykq)GlLWUY-`3d3 zx49r=kb;LRAdJT80zF69FpC$n02HBYTT4oOa|11T@E(-T$*U-=dK}2jD4&xrt6hoM zXj_ok$61R;xW+>=xOWwQE_o<6E!oQxl<G!xAED+CFn1eQrV{jD7;yscD?T9&*1K)Ojg(Kq-NWt%pG~=pOPDMvP_k zX+-=d?%Dy~R#jg&GepN*t;CI+u`5zV=o)T;!yf^Xgd?kLc){4Wyb07;zcKkV1^Xzo z2qdc)JMr9h`aLwt_I@fxBz!yL>VAhzF}K=pWc$zxw+UkbyRvITC>xp*EXBLbKNq&f zuMH)>oP|e;KTaaY!z@a^zy*Al=tDV`Vl!K^L2w82Q;1~I>m>-9N9o9wQbAEi6L7Ht zp}jU1VpOyrw?ImIk^+D5*!pe6Zxbn&>_$zhe}>8#!Fta$MhOK1kj#j{W5p2OG|XDD zv3lvT7>q%HYI(E4eY|D3vXbTsdT4XYsh} zSTxs&x-Y$j8%4!*q&~xMvr%V4;BY1nE(cJHWbtgR@Vosd6jqy5+~Ah>AuQM_4k5 zHqQZ)b9is_nf!@s80%G2NB_S+@@Sn1MYQi+6LeOlZox?kWxt0flw`1&3L4&KA z30Y%eVD%!~G8Jb&!KD!Md94)YHQ3G2Ys{fa3TYsW0x_YORACgP2h&ru{adtLtlK5l zfogPpG!!<7*GH0ST_StdxrZ)C#KKYJ(KkpYeio7cbcW+%j*th~ee8!D=hgkWMZWdA z6efl#*emkU9+c+?L}kf@dk>St`Z) z^L7?{k@w9W^|~T8b-chIR-ewm9tf|d@-wLF$6@L|t`-!W$+oY^<9WRXYcc4h?z~-) zN%z7iIBPTVC3K^tgDfa|I-d&aE`^ZG)=Gl<*L52BxwB(oO0*FLgD);bmKMj!<$4>` z<~{K`ZWYVPZ}&F{1Wdm0iO~S>09HoEOo0pnRzGTI-NTst>Bze^pNhsaqiVgFT(23( z#nltyD$t5s<$1)sGNiW8ze)`oQ*k)cy3H5#L#m$noxA0j3MyQmqUsMuHH$aG2_Xbx zLi@pujFpIsZC9xa^+w@`Qy_R4Hx9q?_)VaKe+S@ejc!o;EIywrsH_@QR$ONUq1l^f zps#D2HYp47>^Y=SAVj})DQZ3EYH{)tQdPsRFnz!&^bK`lCe6Bs9s)P9A} z1fq~f6-nYdHVm6fmh3^KG1|xaWrtna$kgjLZw{qi#WFu?{g{c-;$!Aa)+p`T<3^dl z9EB>nA9USyebESSzX0xWn^uhdU1#NjWj$v`?&qL}`j~>S&0XI?06WnADcJAWlXDpM zHD7OG^UltuysRFmOC32JY040uapnF6AbuQsC(1?pp8$*C|3}teKvlJMapN#&9~uFb zLrI;W58d6}AtEA*A|lv<-GT~scVD|ZuHD_;d2O#9SLf#cn}_Ee@B599G0tMg+AHUp zYxa7yjWKB~3$$|wP<;es14gwpR@WAp9mh1)L@#$5#R%AYE}#v#hLVEQ{_mb$_QnbC z%zFAGmCbI!>F*IpJ=_rdM%?j_xZ@@H$AguI!{bE!CQ+t)3L~kmCry!dOLs+}I>9-R z6uma-SPPa|4KDvMQ#01u6RBC3KHPcdH%;NA;No&sGeO1k9^+NTi^E7|v|97bvFsH{ zBP~cGJd#&SadtRP9#R8t6Z-PTw|563txv;F^RQby6csy!Ce5j@8-$*M2R1NQCRScX zP=(ufKy^TdIWj7M_45N=2LQBlN&=fH#GB3glV=1Iuz4xv_w)o7;C^x=?1C5vLh(SV zE1H%fS{3SY4}ddte|Pff2pa~8jz2m6lLCDsSeW58N?{OXQNx`pLq%ymXY<-Lp z<=+v4*Z@llHeR^(?D_=@Iu@4uBw1-g!G-T};n5wDO(QjC1fGlF=KcH$^?Jr&tuUX& z7D>819D3mCafp*xg}5nOk1^okBsE0r>V)0?^F%J&<>v!5s&y?i2;-=%peM|_TO{jJ z{IM2T?J0Acb9k}`197k~^XD^(vb3s%aO`e96Ht|lDbru-NrMG(?h{w?J+%Y374ru` zHqyJ}Gh918)Q0LQr-EXm^f6&0-sJ)iLQB{}CQ^a3s=nf4$txPS#-0bVL^cH@*Ssak z=kv$zpR3_IFGoCq@n@ytTyJr%k2u$tGW{20^S(x{EVY5Qx>Wa;45##zMS@lm;<{^g z7Vix$(fAGr35D2MOyi={W`f$39H7?Y3-Peq>7jr#hbuf?MUU%HOouD8&~vK=EvTY5 z`_4JQZBng#BoW6dD0t!(iGq?O&JeVw=MQ9(esxIRo%Nt zVPj6A`Rj34G43N$@4j=8hWbO4EeV4`SeP#LIaMPVn9{g`j9LochM?O+mkQ$g|HSp!W7SMo ztuCfY%b&m=cISdM_(ZuYA2LwKQ)b$t>jnmz@Q&DVpvU-^s&+Ho87&mzyNR{bK2~G2 zpDnAy)8Yl2kjk|F!dTm;wF6}kx1Fsb*59QRI*JCS-RFp|Zvshf%LIwrCPuAZ%_=0~ zo9iTt<#0m~08U`VK<+>$nJJU3CoqYtoPD-&e{z|=3v0P7h~=mBXRl!+R@ou%r7D5;^m0KaEP-9doe0epCYf_-cs>XHOxsOE@}&UIP<8}Vt|WI zJbno@ddmt)17NH@Ynsf?QrvrYY)!c|O8JrLm-d;A?opiL@n|-O4z)9a5zvTR3(?f^ z^H_?lyaTYsVz@g|D#5_p$6RhCp;A}1YHT>%SZo=Pa!b<%oUB}b22``rD;y3p1*S_Q zt}heJM9CkLeSk^;<#=|VgL+F|q+?DMH~~(Z+<*R(h$G*TXZkvc_-F%prwcgg_9}%f zdVnUU?k4548>mvW7%N(gBef;OL*NTMo^M5+5pmd}flMl4AznHIJh@dDeA6FCZ0s=B z#v2S?*$N#od@gpA@OfhRd_*EFz~I2Uf^z!?OJXR01e}SG&!bhXws>%}cyNoBcyKH1 zNEZqSzB2n0y!bBTgR7Tx$-!+cwpFM0z4gSf05L333=7f{!-DY(A)k~P$faGMNOpO5 z(6B6zVx)@6*gu+FA?G$#%#;Mq)rBIk_47@Ft2=d_&-|XkU@<(2KnCe4w6zh_ATa7* zfP8M|GY!R1y*M6u^1~4+3_;8%V}m$b&;9lN&Q_egpR4e;F2N6}^2Bq7THNfiMe?Ghj{)c^>G@BjOtxaw8h2UO<|%FSi@Ud z@VpzG-Nqd=cdy-*2_Q9Q5K7FkUC zw3zY;sYCl&a5r$8xK2lm->YMyCC2ZgfbX!Jm#8-2XdULdhTo{d4wKqozzm*wZj(kp zUF*=;{T}BwLv$OLGY~n=n=vd@N354OW zd79dWN809-7k{;RhYl=uc;xGLNyPX7M8F@7$+q7(UE2=)6uED$lZb=nP;~JMWOtE$ zZmd7DSc%&ZPebH2>*vG;n!kp%IhSO2<&%*%%#>ko1MUR(w9*o%zkz_$GT?Qs(|EX` zp#(Il?JozE;5yC~BFD@lttAK8nPT`S;3q086)wFnKsAQw8Y_ewo`JYdf0J_5J$xS( z^Aq(B_v?z(V#OTI$Q3-{Mv{v;AC;47@g1+Me2?H-v0WF%rAxsTOBj=XX8O?F@h;LB zlZX6`-?D9>Xad(fL98u@ghb~5op-Io`vL7uQ9#&i4}6;1k6P~nW+RW$KqjYWQpg7> z9tWyO9Z;qxj{gD&jjvkb_-|08sy}>$srgHB%`3`2yBVwa=eHKr@6=>2@_A3Bqle}I z>uVR0UHkrwwdN1O;`6!o2ZWGeBpU~1%x;U%J_3DOWHK$9b*D4Z@-6+5My;8JipQ5y zZs=3o+UW9D@3L$Z(!}~)ygHUei7k5yT2ADgk|u@A5@o>S26cbq&pTJKEZeR<*}hnd zT0JhaDVE2rlL&c`q$OTYrs^K&fK%*z9`o2J$`M}GsHYwcjU0-P+w@>Sva~&=8FNL@ z0DaM50f+>6CSi=PF<5o(R|!(Y`}JdVKdp`;d9k{ORSvG@w3?1I?KdMz@0-4BcJFeb5O$U0E(Ka4!_G5Ez&;p&y3s+3j>IfLWHgOG~vp)uDh@l{qb z+m?Sb0V#5<9qw~ShH)mFExww~+c>2(Z(kV99RLHUJ01bx8&IaY_M z_Y`9RiHqkOP&eCoc;Mym8H&)Df*NF=ucm@tpz}fO?fZqI9DgA;s8>oFb^Kg}$*_J$ z4(TU^PI{El4`)qD{#}E;``@+H+Vct1Vw0)9Ss~WG!^m}jYIXEjsaXFCO*lAR5{!8F^F$ftorhv!Lt`<#w}UmVlkTwG^CF1b4yqr( z?Y*t)*>=(EZZ={}xlv>%l@#v>z0!l0a3Qd@YWO?MiR1oVV9A{gr*M-xw{?@sWC-nf ziZQlY@h=z!pS7$!)`u(d&a_5+Sm?z zSP<0x)^S`9sObYn)OJxCXNpUOiVE_sDn#)ai-K;zcrLcn|GS5Fjk?IlL=L~IZ8Z&# zU`Wt*Et=D+t_jK-YCZ_5`bifZapfa%6DaVXl7IIY6lOzIZ_M10_cNH{NMNd> zl}Qob5XgxneP2=J>Ou@}N!)NqOuKfugfVe^Or4e-#B7b;xgEEG8Hjj(MLQd(Y>-pU z4MB{vkWjeoYjma0iNRp;WU}J_$)07C8if|tSc@R|wxe_6r5O}FV>*B=@$(?mcycS5 zt-7QcL%UOFq0nQdRzkrUqaj7N-q9Ux@sMuDaVGD?4eu%MPyhlOXys#!O1JFc*^Q-g zVp5^v-Y%qaVY<*1+es8c(-i)vpz^PSFe)yiU12`pE*gTM)D=ffArIea$Q+&41Pz#S zigGuzYl~$QUaceyFiyzEV`H^t6k3f;QKUK|-r$mK~Owr;1x36Kb7v=cMhQ=BQUt5rk1 zsP4xF3`*z{mV<>~yN;H%g?4_`L)kFlSUrCFK)^KgZ~0Gp|7KT6r+*N7(6^NqmY#fh^qz5T7CP>RcL z0EUDHZhsc9jAqAUbt5a!uJ!ZMT^NaGL$5s#Xsr z@npU4ACzHV7=TU4z3ooK6B(gmCPs0K#l#p+r)TT54UENH51gMEb(lG2Gc8?MJcWFM zl`ow7EzfcQH#ZrZ7GP@|vJ|b3zdr$mn#aL97Ms)j{SZq84E_gQRqTZ#X)@qYP}CvX zbTXn%yP+%Ou!VPF&&6$}j#!aC<(JV`om3igp&Mq_^1VjoYx(&vE>86{MO)iaOSDHs z`9q*DU6KYVbh4`kQ9_tCzS@0?Vuf`e6_%vqmjMNbUoR-*)7Jjdv`^`1Ex3ry%E)ud zX4L5Q(;rwi3>tH+yrf@L*>wOkXsvpWMho@lA^f!kS83G#l-QR?IO$3WK-GKBL0ktoxCssW zU>1WDn-I5k94X}2;N2kV4@EO_HnbG9ET}56y?~8U7NKFf^Kl{`+?v{w`q?MJL|iq7 zTJ_*Ht(LXI(atV_r**S%o3XPG(!@yCLLP2MW(G{`%TC*9y6$$+7{)Vwy{S{fevq-l zaUeq`IlAqUC@AV_2)-+A%QA@2&fftpR?GUZeBW+TC(R*WQA>AXNXLT;AFqR>Fb<7C z1wU_6&bdI&Rqzk!Cg{TZGclOo@&!8TbzNhEms#!)XIshVg9svknZ+sFH&b+=1wrm? z^PQO6+;eR5<}zj{)NRS*izJCO?(Z7Z@8mL4D*AbdexBGA-cFYqf!_>mvmAgF9?L{g z?r_Sv`Ak3*AN$rYP6B85^9ObTXP+!hUqeevHPQVdapJT$bJ8!nklCSdG*7wCP$J5p z19N90H&B!&`r{QT^KT3NGnX}|gA2Of&gkRgg50T3B z5Qc7<2|kX~V$QehLO3R<#UV;J&B3h|A1g>Mt#;v%r2RlClo-cbjpXngINojINQ2_}ob7JWAom4lSISFg zLGGY;tB`i-1XY!w$RL}4|KK)wRV>FwYxj!9<+4xY+^LpFN&TRWAg+YLX>e~=4MhD@ zCFw=+!zN+q5)u(d0x=|gNi`<|p&E@j_M!hA4Lvqv3}mhTh!Z5IYuFHV5j@_1Kq?9- zIEX-!qNy+SewzRZl%>5950JuZf^H+RM!|hQNgC>KbPJr>aq@I&Xeho?*YK#v^&AG? zWANc$xOTJa47Ysv-k8j3(un1NdcTdtZxk@ispZIGej2JzP!Fy5p|M`iaF)lHxs(#j zl;W_GHt3~)E~(WBwK}e^IIf>Ku38+|pL~9CHL%_-J7GEF=H~yxmoE_RWU~ zf|6uRC!JbF`C2nEV_L6aUJ%ZUGS0FEUaZxa&`BvwnslJ9LX zFz1;ti|)J}eRtY?S`%Qx`D_`Ub=qQ&{EB{$aqYJv6h)bPkiY**VDuJd2IP3UK>`(# zdZh(V&4Urh)lQiO`m%l)+^mft&R;YY&cH!=NqCba*^g9lO;1N(&_--B=gANt!}`N_ zjTxQ~dvPArq?32B1U~HQZnx2tiV%oc1^Z3t_}$*9x+I>INA4r9dgKBi5^?q`arSE( zc|?gv)`9dtO3OJ3R(ObpH4t$cB-dsm9Cz$hP)M?cdKv^_tKe9I9@A?D@!SIO+(PPR zyoUMeux)J4l!o}aIK#+^lJ>lo`o;rmxTx{5vh@pAswm5945YeJLw!SVYi6d@=F=Ad zw;gr<7j|8Oy%WWpjze2w6P6%N_8g7^FMp;s2IEkp|BP~sf5^c5Xq9h2fFvwVfucit zA*=Z^ZKNT0WaxB!wGz+O|Ki|#HUFYrP@GZL{6Oh;1ZZEG1^(8d| zQW;X@kn?ybe>{!d(Vcub9-z=L3b;Yr0Rl_-bbS}`-ezb4QoDUn#h@?u3nZdN1UW9t z2GQhr36A^07*vp2Sp&aeqbqo#!+?E)hC4BulRfa_uk5yTMPDKhv#3Z0^GeL3gR#^P zqQbE28^MiOZSR6-Ay!)iJqL1gJYi5cIaR<4qGy=%FADRq{%Pr)7X8}IRjn^QCA@IpW z7~4aC;Y0KHyzwa_+*zmIfcORayo+Jmp~POy#vX;_qkJ8*kDh;B5=)s7)f$ogu8SJc ztAC|4-ndo_k@AuXJG=&-H^~i50hH8&E)klqB^9Fmzzo0TeyJ#})X}9XQ>gj`RU*|s zIV}-!Zhe0DWg0N+dYHZ8(7?ZS4cc4r< z^n%Ns_^};@&gueyj~)eTaJC(TqAFGwQe2-VtY{LZQ6@({k$jm?9e4A&mXQy@frF;5 zBE^ZZnrUz>?*hp-4qyetTYQdZp&kd~#N)Il2)f<*1!Sf3)c6Xqnl{~sV*8PBzar81*L?M#*ZKXMeS<`z2{oSpt4X8t$5%6tY zrD9hYK-}nnwRPn`Ul9>6-&V{et1Nhj3ZK6X6I}=Zk}YO1G5hZm zzw~u#0JIe8J;uy6c}gW~p-&T<{{y%957^-lX>JesX&2+m=EgXEaM5*qS#kR`>W?e1 zkhqcaQF!YXJ3tNUR*OiOz1Ps#+Y2C*ucV*>?z(&clVJr0=*;uSkAcnS0MF`pp0h5T?a zgVO6va(uG*kAd)NJy|85>`IEh-?3wUM3l#A=w}8w zc1H*rU}JUSZizT?5XHMUU!7y6CA&Y-n;h|+=PozEHuniR)DfSBhu{%K!|)qXdeSNTb6-@@KYctN z+NJKp5dgq@ZANqZyub05QCH{ytXq?;i*(3!w)%0C$Nz8lcAAu=Eymv!JhvZ)1_i0l;0^ z0d02(Bp;Opu$y!wexuMBmwkeP9jV{NYl~~rKuD}frm`4rL3*D@M8Q?J@6^2dr91?@OvzQFX>Dv)!yK(q7Xt^N`pI`N4>r^WcM(s zk-B6%5unp^ywCSGV&pV3z!j-&BGY3*pLXJUOvk$*i~IEen*=t<%1JX|lN_YtpKYip zO#TuTCBC4R`t4A-bOaT&)N0r% zK#mhuB!%>X;-2{fgSoD}1|nY4l0y9c5!6!1WFMkvT}vukJ{T7*rjyy1W+=r@YbK}P zOD%x#c%sm>#^C!>XU3A;Gai{euEJRL+8j6W+FbG4 zJo0)yRwAc?en|+*QIm57*5~cWq6ITUib;+_b9_ECL`VYspPbHy&LFf&=q+nra9u}a+t2Pi0OoaBTZCDU1N_R z^}KH+5nqj_%K8|Ll5#Qmbe)g(#CsT{&6}T)4OF<;?>0Fg_4wUFPlaUm6#6>EH4}Tnf@f7TE4JT%#CGk4V zaqo;ee!U}?y_vXmxfO*pF}fJ(sOzCHd(W(9Wcv952=T~YC|}lbGY_wm@Cw8oM0Tzz zUYc=;+S&&NjekoXOV&%o3rW<=&j^Kte;R<#+aJO2C{^3?@~a-JKq|9mw$VkI4cZbx zEJ=Q55VmJmN}u2f02_DR2kJuEeU?hu1aRuCX9>qWCC)Vs<@$?$GqdM4lG(6ItK-0^ z;iVjnH~%bt=kPmE!~QTuHqxk^DYCLK0Dsd7 zJyBZ=u@K2A6w((g#f-Li8ncyMG!{Om^x>rfRA7pAHF)ZM>><*iI7g%v3G``cOn2A=tjW9(|4?Wy?H<0_1*pfIM5Llz+c)N}GpzZ|6vyx4n&4YyRml|RxO!R~sq~y?3Y;H|$Flpt7ZIIRFubvDh zrCWInELMHOBjp>IN+pn`{-VYuV|)c)yMKiT^2kyw-}o}A*ng0@*ncp^#ScOLq*0SF zp{Y-u|A)h?+k|0GJWrBR+8=Wj{Hhn)=+!`;31iq}GTMdZIFp0P<1mkE(tRGB+*CH8 zs_1!CFvO|T=TiinSKacfIUJJY_xDI4zS3R{W63ds`1ftN5>Ma5rnY){$lol3`i3!pIr+j0 z*zYo09MJL;zE?O=x8_|Xavbg!itklMTcEHp!YsNSj}*kd9mT$7l(U9+am;xXBjW1#e**}0=52A#| z8@xu|O{ZyqKOepw9{viIcpC>IbsRn$scXX}9Lm`vjpYA6)??WRKpggTK7y8t92XpB zlfgQYy0SZ;G%Owp{ z$aSa+hdFg^AlF%@z#DTZ?GFH2^5y{iRdGTvbSFNm3Q&aEx+y3^;XIKy8BkgjehiR> z7^inh`Et7;hiln8MoMzXJGG=iqR;}Wjoi8H$+2b&jXqGr{T>&oALz|iBxtU8T@g&% zpjqe-z>o}HO__&aCL{8OowJ?oGu5Uu1#!%D^g*i}^O}Q$CUG#!f+AEBVKotHb>twV zi8EedoR6(T)gyo7zNK&z%`M*2L(-ot@At=(xbg3Sy-MdWn^1A|E>iW5WTZavy^-2q z_ZCpRJajE?RG}R)5suB3!0^4sI|8Jmk{Hp&`C6lqtLrGKz6`aUD+SH}fHxwu@8Jv* zu>%;5CH#E^eX(njfoq>ojr~NWEw|C))J=5AY4ccZF?BiHcQ~Jb&0KK+Ib35;x||9P zt9o&nRN(<7_4hJxEyh}+7nqPHf8q0xpR*yCY2$SU*A8c!afKe!dcxknE3C?x5S{&o z5^OP9um@YHi$6VGT^xSOs)!6=`1sam(Ep(NVDK0ry6hR?Jq%v*Og^b!Le(X%ZUrlu zg_@P1{xu6qFI)1ifPCJXk{+%=uAFZVkk+g^3d<<@Y|Um9b+-(Ul0F_lI=m@g$H};- zN!u8D&X>`kCVSWkLwUbcXqci+s)e>v7!;95=nkp4=e@oac|q|kzWzpDr(mt{8RrJp ztm8EnuG&>w1AH~gaJF*rN=5`J;Wo)0(H=$0G%(_6% z>klyk9@84Po{@-17{mirw8%`?x)I{CCiFx^Dvz-lz$`gCR->fiq`SZ@P2}%xOd5!?4Kz-p1Dl$99l_ol1@0A>?q?~K8#+Ce@jo%!~n0X0}=tGI8*}COK zC3&xi6`FwFnaQMa%k)ziUG0T5)PV7eY;-EODAMRR@>UnZ^Jyi}2#a5G{d@&jM|XSh zx1`}JjXQK2x$W`|ICsR7UAXDFc^(5$%NjupG}fWEpZiEevlXP=AE9pql22j?KCE|3 zrj^}ql34|lFV;(*A+7xxia~MEW~f)aMZ_;XihVl_H{;Hdc0P!7jk>A!g0;xQfY2CmTx1dxRe>N4@cF)eR&`CoklUw^u z5;=L+bw=ltKTm+I#aJ6=8nbUtMJh{Y2yxRJ%QR>dDen%}7A+i^7>IIdz>tg{Na>DB zWEs(WC(>3w-O(QdY`k#=c)P}f#?G6Kf@QawakvU3V%2R`xQX2N7V}k* z{|yvp@nRoI!wWK-1bjmQW-tkmI5bd_6TljsN!W^~PH_jZE@ah=bsh3u1!L%ZhhWQ? z-Nb|B=Z$qlX)94$C`wzSh3P(-$d&Ef9Oe8drT(c*s;E}rxCNd<@;R^$!yF#NidyrX z%vU*o*~n_zWWBF|mP^;r(hW?Ac^M=kQVqN_11cbLlqkx{;xUWp6b`>3yn|||l}x9R z&2XO06ia6DLaYGE=NV{qcexZ#hV@Uuu=tmga_JoCc!rT zvVYrBMNT)|)^BAbQlfZ;CiWiJ7uVgk&&Kj{AA_|%uqk!+E<=fSRxsspg|5^goN-y? z!ggr*(7sULRx$P|DTAx4(0rmP4Vcy%%G#PY8qow!F!>b$m>F9GPiy_fq>wE#(lyX; zs&Vr{n{!sRVe!Mb&Cw`R_Ra{Yeb=5?YdWNSm5TY_0RD>HCq73@QYf#Ici<>fjRAhn z&2mQD&3oZdPt^jX!~5NbpTE2YLR=7TO?hFY{KLD)qkZJ@i>)Qv_-{cB&iu=raqW=X zob$QtIiM?+CjdfQ7*a^_dJKZ{*;Wm*^LTzk;Ed)KNaeW-ROitymOt`*g?K8jNPH!d zO$pOcAtAewj)N044r3a>ViU}Earhcl}?Jk z1ejpEZsK*EZT1VP42KkB&vUB8bMJd_#A|p@-S>pxO)i`y(4^p%3Xpx#6FpGe^nsM= zxd!80@51M=XSUJie%R0I1Fe{phW%iubgpcVf7%p!}Y0xkwaAV(`FSs7@NC)E+C2y&j-`bLqf)>Id%%2Rl zzhb*3LL)@)n~ZX1PNTdOUcs)tha*kt&JySQ`LIP5`-SzhJh8Dnxm{^>}f&f;{Wx5(ULSxQR;aH?)EH zz@RBJrs}X&2nB*$sMdzy0CDldWh~H?6>uGr#msAj&0Kg{A6S8L$vY%?00ZzG{m6o|~_6 z{*z^bSl%FZ20m&IS8Bn9isPj0#bxpNY(W$;zR3+0n@2(@WW z;X~8V1hZ!?_@TYoC)UJ3iNGEl2>p#viggjFVysA=T5=@wu8H0NcENF-4^HBlg_w-i zO-1Ww6w%^4a+UR@s314wif&+xJ0}h?HQJ*}|Jh6|*rikNHg$MgH~L>ZjB~gmO@n$; zgvh4T9YFor!se9gi`_%==Py#Z>k2T8b(;l`^F9s~ar**t^s&;RE(70SsVFLOlp@ca z)tZSK_)w`B>-!#FkF+Sw9cjliLC9zgPlJ0GQ0A;Zl$sL#KZtaS?;|x7{Ymr}DZJGt zR`#^Z(sewLK^)s#c_#rc`Sq{_xc!$RAA9Si~%e>$wHhAUf( zuTrtHiCAe2V@LU2HUL?zOGQ?x7=$Lj5nWM&mYLt=ok+fthb*`WSapP(+Al+6d+AX0 zIPT5#Ofvt}5w9Igjin768%|ew%K&_<&H8&!^IS<9Z3z2_#7ZGOry<^|+~!|{c3=w;?a;iV*+ z%_gr-YuGlf&nt#e4=W1&@CbPlOY@M**7oAE6Gz_%en?UPyJO1isMWShcp3Zg2C7&& zjuIy_4}Yu^rEW0gt=VG@oPDb>GpfQ~0zxo5MsycM#YIf={E1v#%r0JF**E_}p}F@M z^IO$1-{3fi2hsHNt_+SmCT5Z7N$FIpT@;!1nJ}VML4=Bl<@->>`VxNO} zI%a4uDAPT9wiX0CM4O(1M|LJIm_56LhR{sIlljC$-6mpYk(QX*23=8GWlF`G1F+&d zhybqXsG#;M#XSYjh%wl+irj|hOWKluaf8r=nVpRJVJNkWe-`NP!P)7!mOVJm zeN>0~f_Sjj?F`URJzNhA7jo?yN(`{2tTe`LU_#$8L!dZ$bOBJGvIh&{_8v*mSgPD4mzPtE4l+lIHrgRtK<=0uqW}7#h)OkcQ)*54|Cnyy%xw6R`@^bj>ZM0@BvZLE5%~ zE3l87sIMor(I}Tm=`RXmvwvVMXyC^s%78H-T{^{@yH-IK$ew>_AK+iO372|5?rgl} zGfBfFlAqg)mleMv(a+(IQ_yGGcJP7S6;p9_dYmwtN_E`g0cn{^Yjs8$h4Wv%c2gDLHIQ;$oee4TB9tS9E2$ z8ZTa#QpEXvP@ZLNo*>{@f$v__|Lhrj=kbHVB*UA@gwi%};Kcvl528@LI*VHPTjSO} z<%b~lUkt!1gA2e6-)wOPw4Gj00$`9dh>C62Ax}Q!3cx_GItvzJTQ~v?iWWjV$^RJG zGgu9x^2ZC%iaxW+RsIbbbAq^F+npASx0EBZrFw?2S0C8C5&x!zEXG?|o{k0>$3)!6 zx*0xeC=5;%l|9kgfN35=BqCkdAj}p|qQjmlNyB^uWOBz%*zN8}`<6hhBY5=3ZvcJ+ z$yRqE4~xqh4P~I#EkUL@3KLpG=oU%t*E;ElLm`A1S|$$dBn~Yn2SJG(a*Ml|uk77N z*^*EGFD!&aotG%(ma}FNdn|tm9l~mAIi0bJxjqYf9Gy$}P>6t!qhU@x`mCm&eL;BP z^jaH1adn#TW)_gl9NIYNAoMJBr4EKB#*3nU7z$b$l(ZvFh=tswFBKg72f0cQZNh9= zW>TVufdC1Q>(WX=>~;xLr)sMsZVwW-2aDT7#O7rqTQl|#r{ z^`9=T`$RqmkXnZw#x%wAUWUe{t)Jw%!gwbCBu0JG2doVk%rZ~ry!>m2z(>@2H+P+E{N@IOzOQW1#$5i%>GYI6qxC?43Pfa zm!b+Ak>YJOWB%Lpt;NHT?cn_o1mr)8T$79?#MOoc@P?9n&xl)eku26P$E|aZ(VTkC z)ot9gDJy0g01Z)gzv1_tsuwWu+yC`eo6poH2Q4euN@$rvMpMinW0A{{U{k;`lI%5M z6H;~d;YqsTJ)l{e5AARr@qo4FecDn@RXa>+%EU3aeV`zjVkj43Zm*#*9px_4hC^s{ z`PLnhhM6?bSdMRp)x{yTdu)OcXL(?JFXlkDNh#rVD(KpZPjK?UDS*4WB3I(;QuOpB zfc9h&gw^22UpP1URuWOGv#+s1txeoe7DAWeAMlIbhLtX59zYD%-)`4VR zcaYWl+Y)H@8vhJr|L01h@1^X}bI4J2p+JL*?9ToM5p1e)iNu_EYC(~Ho5b6qmUz2? z1{Wq^AaX2Qq3~bZDY&~H&dZE{)ddBl_CCRFIzCORWe(BWYu18|vFXpmkgXA}+f6)* z)aCRY?pgRsrV0yRQ^Mt~n8f`j0Wn>-_hPLD$?iPnEQ&9EVUGt#H*1ESlo5|nal21O zfJa%EzwyLem4ejCcRM_3ZzHt4=y!+Q&$=M`Y(EuwYP;a&@QaVId1M^>h))X^C1cX9 zX3fHLTkW|>{ruu33QBAEPY?bq{D%WtZXjpM{c^5*#JgE3g;HuqW&I+Mamp8I@Nb{%&0CA6q4als!U<)d1Yyk zexqUmC)kP<75j?ohzaeEisxB?EH6e!h6JC7NYdi!dXy_)Jy#DAehiFobcr7Mm)B{? zp2&sRge60(slb9k+wrgw&K>DO&i`^~tne{U@Uq|q6}N%-FUoH18?1My+B4H1pKon_1e*L7v$Lj&)Ml$MR8jr~x-oHc;I^v|2Wys~bzmYuin)V+!lkn}W*tx}iI8NB) z>9U{H7ja?m*EkY?0WLE(%?FmP2xG?7!u~tbkU`)&B))?vavqzJ%DgewcvowQcdqLZ ziIA;|$Y-~Mq~RVc9Sx*fGF=LAQQ#waDaDRTLI;z)R^ayZQW|)SNeGWoI3()y6r88@ z9s8qXWF=)Toq*>f-u=f1rREtiTI@5BiD0uH1Ce?f=Rse47e0?#KY*nV4#iS#KLMZS zZ$n(jQOF_RH&rOoqoh9k^z3Oe+j9_4W&U+YOQ!F{1~aBDB6x~AnFvhZQNz8s+Z5tu zd@>serh8U#uhKU1NaqCB@lDI!pKxQZqlc{vp6fWqj=558DI!Lt4VD51B@sAk)O98@ zx!?6g8h%04)#ZE$yDCzLINo0^Ch~Ij&V7QIu2B^9XASOx|DFKJPH62u>_M$(+`y9x z`;$oR?4NVJc3%^W8xJnUfs=fW5~;So!fWT=>~!toq%YNK*e{m2lR1K_Kuz%a2)gXj zpQ2|@z^a{owLg+;i0*X?_*fnNSSn7i6el1YMeMZw5Y6?p#~vuSo}k=lCKoO5{z0lN zEN_JE_@>Y~N;bn$aI*=ew&BH)G587Aht<_`uIv6+_*R6U#Q30($rPv0oAau4oY2$* zul>%}AV^mB$}E2Ua|HE>s>f5;4;F%SFa;lThbkoO1xIDb*oEJ2GON}I0xiFcM>dtf zUVqLvdF}(QH-lAd?FQ8JI5GsmIW7R ztHx~&2G1&?3H;3wfFQ1szjHPQAKj{pBS^uL*7#_2Igx(Y{pWvoz2>KytS({!~EMFZ?t(#xq2N%J&L3pnHlO;gnz*CXCP@1{)s}f z!Xd9no>__<*BdBx&>6v|1(|g-;fV-4s0L(tlwOiXh=+HJhoJ#D$PAOmGjL)z&WbnA z!624ddUI^MHX(RpeZ3V1O}^6ssaj{V)I}UUR2)5wQu{r?+rqX#kw$O!60r7WxSJ8uVjtK)9{-tQ&cYBE=Y~28xDW~TFIQlIb3`0LaX5ga_7E8{HrZ__d6hs z2nPS8orpH9l9TJqRM-nlC3mx1_$t9_E<|mKeVXGsyU%Sb@LDa6xZ%WO1apQ8D=>!9 zN#2H1q!qP#NZoHe1n>2Tq8{3z#QHtdQe)=jR0FN37-tC8MjQlrTX`EzQdc0$>5-JY z%m5cRHjwXyEJ+p(J8=N8WHG8A@_0;LD;3XWXo=@Csm<#uJdv%KshM5Xe_L?pGjbu) zc1~7Ug}$S(#Y#-`$-L$=9$IbVN<1uI07SfHh!_0ri1_U@$SoLmPhK_G#3yV*LS zAE5tj03L_j$V3qV2%A~zszKVW51U{f+(+IA9h4f#E57P)H)!sk4w<`&b#p38-={Wj-8#fMEz+f* zKPpx3YR`0HVg@7rqM;}FCVAFlp*P^|984S~8kOrdpZ)D`s`hPXqJS(Y(L z(_HnJp}5O1ZH|{8V6Aw;7SoUr%)HF#9b1uBEP$#_8{+d8xUs#HgLz0ZdB($%Vg<#o zmC4MhyG>j+m>bS;yWzAmK#l zklRa9yJ25)pVf`K6!K*{?gL9G`PMHmTTbEcFqfXS+xUEp)b9sSh{F^q(!7EBNUi!G z#wv2o*5OY_X}`gvik56#<{jW75r5<$?0R1mXL*?dXKny}kl39MIk0cC%}^J+AQSEQ z!a4m3QuWaQ0ExKdZV&?7HUUQPiiF#i=8vLZ@dg_A`98|pc!#oYL1tw@qo=F@1S&Q* z$BDJZhqXlGBMffjr29tN@QC-vAs|q?iqy8r0T_nLkAk-rg?~u3>W36{Q^slywzAaq z)PRB2dlS?#wifbp{Utbnp&EByhr%%4<5oe=WiW-}M~@VwFuv=wU-Lmu)@U^6zfRPV zERnY=o7qy?ya_xM{rvpUv|-K;V2>$RdpR=x38Ug^{v13&HVT9Zx<<*`42LaYwPpYh z<|gcTrRjlR{VIGQn@x#t76VjHc7|f^N(X58%mWkffqLW>iHKlO>YtG8ta~S}drz&T zU-3eIN2#qXYJ&wMyHU)9#I6~Mf>unR)O$=3sn0AD#HBxAs~tMg7n7U0V7f$33AdRf zEI%+7X~`@Tw58+tdmss{i!hn>w}FQo>TzBfGl35OZbPcDD%1=>%sFOZ}14ZZg&WsfTew(Sy}oP!4t7!^7^-^gU8v!5M}t;sUM+w9A72))T#AL+oP-k76{zO$Z<4QIfnumK zUE7o-A?@)i#X4Cq4G;5Su4fK2r951B*$2206nn`zc?VRvrw|>9+~SXdjtmV=1XbE@ zCl7M@;J47OzJdj>ZzHYXc(A!3y6B5=it+ybfY~W%)IwugVv7z>!q|l;Q|PHxxQI)_ zFPXAd1fdxFjsL)nkoBKVt=H*_L2JdJbz;zZcP%k!1G&%qiuQX$jSLyg@2}*bxQI_8 ztXiNyWnmP*b)nEJl=9r{fe<5!*L##{cch(^@U@VXQoj`d8p% z@`HH2I_4vuq^N8U8qqxo&LjONVon4bA;6eIO{!3HKu9674gPo)i){3!9=IO=>Nafe z+AlB0bzI;Rv}5&FvOCojnUy7uQbQ0V$=ikiBNc>z$r5yZDWat>a#gIL^r<}1tt383 z&Dx)695j_lTikXx#&#*Vn3McUJv_9I;;7KYcpSg;CvR$L!{nej({3Dw2rJ#a3SD@c z2$98^W608?qYETU6Bw6gWyh86&1v z*+|8)?&4UrIM#zwzBfbO5jWWMdrVVpnEM809|Xw}HQ*~E!6zSZ=JMm&*6FKAmEK@( z1!V{h4F4e!?MG9Fl@H#0*g%e}bdb@lhYV>#3GdwMRBv?Kr}q^sIQ!ud?4`gfm?8_A zfK04_=@TiNwPt%H&qaL%@%dGdRC7iGNo1xuvHs5U`z;9CeLgou4MvHS<0{AOD8GD^ zh?WXcJz-+Xv26u^A2CfIdAjRTrYk6AP^})o36i92cro6=MPVEAD;Nw&7!E&bcPi~# z35-%(wNRp>y8n!!fbB$~9tcx2f*-{k+6z44I@|z)brW53$7w@i^$)T7CqUBu7{MKSL)Vfe^8;YZ6iKAyztacX0VhQ4|*h7N=y81nJS(qXTq_n&bys@h;oB)8> z1P0*qu-`DT!ZB-EF{kj&*PoP?$UN>hgyK6_rx_lFiM^4iw;QvMgJ2Mx0}z;Y`zqGL z8wIvDm7%0zHw_QrwdM7&P!PZ5i(gt&PSf@IX(16R6Yv^~Fmg4Jd}ipbG0tj<`9fMahNqmGc^%}9Ovu>9-j-$UYe& zRs9#j#i*B8!RL(Z9d_wst~8)Z_Kz5gI~|5#ETbdDg>{Do8LX-y894)EAf2-mm0!c7 zQ!|XR+MPvKMbDQ&<>y5sSbZ+I#&n%JX_hnq@HsepGFYsDolUUfQ;z0=GKYn+PZ-94 zqs!QgVBF}o@0LXDt03RnTi8E+zg?BO0ueVmPMKS9D!~bg(r0U{Q6{85I|M6v8PwW; za|8S2U*)=muDpAoFZhG%unnF$d|82zB2LYJ;95O!g;bn%vPlMlnIgE%`mf^pZxqpW zGm5MvIBD1-k5i_()CH~0(R#~wAItq+d2_Sx3)pQ=k&lkz+Yzb)>fU3`IR-vuLo z!V75fv3a?g0b+5ylH&J5jn$z~5zkZj9OjBz{iZ|(kRDF#%^6_L*`3r3<^g|C#arbA z3V|07=z&^_Id>AGZ4eKuDf<0xWJ!}S7+6Fw4P|%lsRkw;vT$-P3JGbl0#8G1CgNM~ zSCqR5S}h5kp!`y2LC2fa&4MZEO zPVi+b*a_~WEb5OM9GziGrBG7RK{o*E`Fq+_(d&a?C(wWk&G0&EDonz#9$I4)tV6IL zVJr;DqIJc(2V&hrP}_Bn0F|?tcJzC_15L6#1+&rTxb4!Px%*an;Fu7WpW+^*VKr2J zjm52F7FjI)Tch1EqP$1;z>aa9nt&I{FLn_GH*(w1UeMK}GD8EDP|*rgB{+b-{qT!F z!P@e?IF&&oa-J(H9GVPc%Ti?YU3ds-oaZ?n<%)JpJ~~E!#(XvGfqm9t#%Lbjc$*8H z0HRW#{P%s~b#3oNu_Ks!maS**Oj!mU5DItMzeXyS_m(y+!D-{uKsnpt^iMbiRoHW& z*_O^BXq5B}*~1wYxjpo)B;v+3@?b4dgE ztJg5Zwb%=&cZSNIB-x{=aPuRSXn33=ZtVf`B#RLN_*(f0JH9qK&$)#H-R`VH5nX-O z@eod{|o^WD*Va4IvMZ6Iq;XHpnwvd%th;4 zr)@xSuA}V)tz`00G_DnomN`%{V;T|e9LDL}qkvokaBz>t9Jab$1XnTj19sP#)67oh zx_&^~`ukj@&i^u~`g9+HN_6TeyGR$e?PkCnubk|yiyL_`Sdd3pNE#+k_y;%SYhOau z7n#HGXr?C>H)n~Pv&GHe_Kplg6)szzp~3zL!v?up-X}I}E;NckZw*$E^O2EYiGikm zJ7HFQU^oL`(+0{MoQ1-&JTP`36rMKVX`e%s-Q5^ZUE(`Q4Y7(mv@|YyeiAbt^kxlk z&A$OFj5R9|YAl&|o1E9jFnzYhp}3a6lLOp%Dl+e%mpD?FQgBiN4(JjT$>gYU%l7Le zMKxwGDE@IME_QlR#^#NE#`KhMh#ia&lZW6m*6BKL>2UqV8JO(%{UV zGXTld`e-!n*#Jt;v~_ej?@k?b*)`1 z)~+Kz826UL0YbnuMOPjMHk_7>Ukarz8;X5Be|aLr66%mlMrS1-(?DW$D{G0G0(+EU z6Hw+kXb?x(^fyAoLd0xsP2B^$G^Z^)$L&Hk_a8ri;ykk8J}4eQBw_QkYKB$Y!HlU? z{iBh39>0e)sCpTC=$1fM<~MMgiJ-3>J0Yi|5$+uJF`#<%#`zuM@lE3K&D6GnW6bos zy%Eo=%xqGX_&yo zO?a1i<1%`yYRBZe*U|Zc_z7BtHbc7NcBHMn#063AVsYJ8tU%iSH1ECRzvW5#k;8^B z7;Cx5H#|{=`!w=T5kW&yad{tD12u<=v3H~dZzCqNf~(tk${H{a7vC0;dHz#8w?FGA zq#}CV90+I2rckJJAG{4YOtF(vaIt(Nxz!zn>A-RF+WsEx$`e23ljCHdacu-POAt)O z=PxKUVI*cQd>wx4Db1iB#abLVf>co)gS4s;JcOW{Nfq&*St1p^;6E(484mc#0kQ*_ z=#rc!djyogG`s5I@Y*gt#4bI_XTWwz0ac2;NwjOjJE!xsgHjRZl31uvU65qoM#>cX z;Dv1iZ{P{Lc7e&MX$rTRdlVVR?1M|jHzlnu&95CT~B z1)-qqN094)7n~*By9YkZv7k|VT7eIjNtvGXIQjt#A^sjWE7|lChU~KC|Hsrb?xq2JI?U`p6BoX|NPl~ z>JD_ont z-yXoPM<)c*`3v0E#*4@r;I$BGROAb!3EsTBG)!TP>2-DjPDOhRhR9_XsH?bolkm{_ z#Z+Jt1fZ$jgD8zVjTs54%%D|dJ7`Z+3ai@-6Hz!x53)|#l9x$zA$D?U^0h#SWuAZ|obH^u0VX!``$X}YP{Nqd-fk@OImPKSOj7b_>=zesK@ zR?l|Ka|TgXz(E;j$rt!ADCg$t@Lgf4yI4r{0l)uHeUtf&Ox|@s#M29AtS_-7$2*XGCk9}GbTsbtb@-I1G?l#F7>vdNGL*JtA-J%@@t7tV z0^PyzC6A+F8ycV4bfMk9;wjM2tdWL*4?0sCyz!Q81?H_@^5- zMBB>Fc0 zuU(~4;qRb)7*0_IOri9L9PBOgdJ~3{w_iJjxQj6+pTC-Ni#OQ(?)r8R!)rg{UcF|J zYz*dTgCB0<0@&InqgVxrZuu@o8p_2bNL}pGO+`Ito+#*Ik09z-<}V=lcFZ&cZec1p z*LDi1zuZtg(u%#j6BjHxiBunAj3SPnf8pAx>o26vn|EXIq$jqNGG+koGwr*8d>Y;z zhygg$pR0@;19U1a8v@>~unem%vRg;{2!jDRxgv5?XnZ-ptQsu2Kfp1q~A#%c(2iJ2u^>h z1GV(`#0O`GUj~}d?y{|EBy`nALXZC?p@*!V5vI_C%0ClgW-H1eSYk^vthKS7Ae@m# zf1>DLN$ADIVEjTT=A<(|Y-SK8n{gnE6NUIS0gAAP+77;v52oYoo0qVB4U{q<)7pcs zM0Bjd@f{j}w8OhEx2Opv<7wo9wV*&M6R|y1CgGP%B_X`7ZRh+%s=9JOiY2Fm)%Yw! zBv|t6Rw&mtr$%F#qOM8p5nmUAi%D3fEKNv$hP@n3b%txAR4}_1sRr>$E@?UUBxfp$ zyo0j|U#SFz#5XoHDmoxmqhpg8K^kM2YfZAwY6Uo1h%2oK1 zx{E-dz^(XpZ9G&>VZ$L5pu!eya9^y}BP~%c0?gK}MK+dUxb?JTP>npl1g&&$LUz7P z(0IHz0VgDe?4#VGIh^TLJ%w1UfJi3Z`T;25^u0CF{EL(Lox*_;TtnmiAi|_C`4n-3 z^)oHZVI%$!&xbvkj5J|7>tB*?aDaa0zT5u;O^=sb6r$=sBT@B{e2Z_wxak zRETLAVp=BPbv~DoisGQP8GwEj52E6i7nn-XUV_z#hZeZaLr0Z3YXmk?v50TXjGgWY z3nIbgum2Z!G35*y70vif%3n<5D_Ki!3(43wa4 zBM$+pH;v~!**!)8f^$9xp&P%f=#P`>7$L*8Lm)sAnzAq!1O08m!5q+bV7>Zs%|m(JglZj`A^_ADUFC!8aT#B3+B)at#qS zli~;L$LOyu1)KU0W9<=2uva5!RJUT#4u>iGy)|Bc&#Q}rBVogG`6~I&ut7HKIv}+0 zk30N$(5o~@V{AFX?mWdqzy`b(DU;t`CYs|+9avCkcmEbvmC9?kNf;PpCPW4D*M=vU z&rq0^zx_kNo3>o4B=I?lMs+FuV(SS9uTNL~vjVvxky=Tf&!H}Fi0j&Kg4e#CG?nX?c`Q$t) z9aNpyQ`ks|Yieqm)d}j6UNq#c1sb!Ccx_lZu38lrIk5uIyevYE#rkVTV*Pco{s!cD z=6I!aH@L+)es(Yz>zG=jZQZhqrbbGU63tXVKZNxNpaJ`tA`4E1{@2JT6o*xQmPP$I z&?m=OL9M?pQOqS~KWA3!kkf-N|p21vA^ zb=~o(^a~`Aa)X%&Llc2pl|`T07SNrdDgFjzPCCncUv5wVD*CnFhMEn?1>S9+I~`9u zF2wlDF55_*z7*MEv{gsJ4h(CT;-zEcW~9D{lkrBP&ck`NYlhdrU}!&Pnh5W6!uvc! zig%xXrB*nIFbRELew>C_O@(NveS9gj!>aRuH~U7r{)Z3rDGV>(QTCF!yBg<58k^KM zHR=pnaYY1RC(N{_EaYD#1t*i$WP_^A>Zm;ms7q=nL`@q-8A21TF&0+mK-Ex!dKyM5 zwZR!4kfPDu@f|g~lcRqh^v`GfLU3Qf6+7^uIhJsA0huzi7HeJ0*+foO!P0*Pyv6a{ z{_I_TtzFa%A*dBbHS6Gvzc(<8q}ZHSfRH}tW&q1Xj7o#OLaGz*@tqJc1iRP>hQHCL zso|nU=!R|qM?HaQ>w_c{QE~&ab@-LmFGWVZ?NPXu?gbbJtm1M3&L}th5hc{+;o4ZA zn%2c!%QZ{MdCOGxvDZC+Wi0ZfZWa(7RV=~LX@85-edKc$Cpm7Rpdn^*^=M;CKQ$kf zsq8*j7<>Ric!Kl=Q1Kz!ldJt7c;{6g7DpQ=QqUmAfDP;X0GiZRXBZ2gLj%m};RMs0 zcx;z!Sgpn1xwbZMzk?tc`}GZ+0s50&eM3M6)x9EY@9L>d_#B5!6_WzF8Wu(T8cFV( zlVvL){f#_F+We5;lm*ajS3WK{Y82u!Ndt@U0|%X$x*D0h-B)5SFNdw!px**D@7K`Y zya3v0@{ngiY05jXo4*6fyB}+by}HTG+DJW)cag+E1Z3O^3pj5|{NMpt-UkkT-+vVJ z@+!)tZ)C-m^7BZ{e!{(PGHyn7{tR|lduKPA5}xyf=X{Fl`Wk&2kX44HF=b23*?V#9 z4tF%CcYTjC?gXUQ>p2auD8Zdo$t|Sa+)FV*Zs$qe{+NZRIRg69kuuD+uuIwpH9-c) z)yA!PxYKR`7oC5Dj4KjA>PgOs%?WwZ*9uB1`NE-O(&UBxG>Xr4sM z7-C&4Yy<*tQkbV3pT@0O-%SQ>uiNB+&mUR^-&uJNjeRo`QaknC$FMj9WF@~vB`$p` zjU_W)lZ!tpba?E)nd#AxMNvpovsnavt1o40nqeul8J>uTm8bTBPVgwhplvyd`|t}o zr1>k$c+d-%z>}hw!WAqkOME~nyQ~4q;qEPYdIo*p3eBtI!?PSeoTWiNnSDTr3^W{# z?EF3%)=s=_sz-0e%1KRtd5CmN%hPJc+m>#<8-g|kiL^!lrBNN{p?vE6oBxmRYBY+m zjViPqjNl->aGJN#k^b1`fV z=0}P7(UkB9?3$!4uSuI^DchrubzdmN%M0S=KbYh#6XaNUBnmZujw;&E0J3POFeRD8 z_Ko|w8B-lHAKsHJ|MN_lDvOCXL3_Wna?twE|;sysGe^dxFfqijQ;(yGa#dl%>$eO>&t2*CA zMrc*!2+!smN6EPtla{XK@IEdr2%)GvCiMHm;$D+f(_oecbcim)4s(UV)Y6!O(iv?; zPCcnG#YuZomj>`_u)-5n$9F7M_uX|FvLoy1eeuZFxEoThwvSn~)*@ajSDy-^MoJKQ zlD01CBRAr$>-0`Y{m<10joRuqU+czoMe3H%oV!l|B67dBqr~Aua2K^|625ZKH_*e- zhajh9K>nFa8sSE@2X?&p*LjpeQN15Q8a17nD#-lH8fp7>w=oR%AGYwBBB|!FsOF{* zs=={8LUE9KPv477;a3X{bJI+!#9djvFG!X722p_Z)DyUIJTu|9wGs0JIP2icSbT}E z7Y$$k1=bt$NxLOg!N+F?)M3n5KZ#Vw6vj1;oN#by*FGqpG@vHzfZZ4CA#aP_0~1GS zp@y7KWS|c!a?4>r4xGo9p24{S*LE&Hu+-G5VOGMt+{g@TS(vwHl@z?o0U($Y&7^_I z7m&INyL@gq?>D8lx&Sg8w4rdHO}LGjvly*R`$0|(M#yG0DQ(g-X$UnfXQ_^^aFGE& zLz95VAHe}Em8fWY8q>riaxleF_eYBt%-C1oKg{iw}2Aw@w^WCcMlA8 za=taf;N)?zN~!uWx#YCPO!_D`;Z>&1G-PuwsX{ueuL&H4t1Y;#RF}+j0apo3|rjNT!hpSA$3Jay&58w=(k*g_A9YLIqNE#D#4nx!^Z!4xrR|Mwrg;uVM zDAw;`c2NhPIHr)Iuc-j}DdwF~u8YFJ?r!$}Jszr{YCLpX=fdp=7Qr3{F3WEC#IwB( zi#O@Td(?ZpC3dac<+yrohhIY)SvDJ-UrJ3QAg7dWrr7YuHynqG>~HZdsCF)Fz=~x2 z{oj4YaKpwxI`d3^gLXnn=b?LEQz=H+qkI1STgqw(5q!ts>0}t^C`aL9_A9b+TEunM zZOZ34{r`X9kN&?u%9_holONMKrgAG7;dUrdW66Ztu>jZ?=GyamUS>%zj{1wkr+ZHen zH*ul%v)M*Xnatuw!ygs8-N8^cZQ+H?O(%SU_OCBxL??BgOsEhn1dH zLwMtId3pqcoY}T6uE(`YM;XUgPB6);iL;Bn0LCLz8Dk|MWCiZouhe0F8E)O~Fq7`R z8ur>x7E`d-6})syC94!5Q1Tsn1X_lPWK+zL+3NBVsWSqC9_M0D+u?)UzYO9~1xY2` zwMxq@D9N1vxL|(6%yt7&&O?_jm%#4-DHAZ+MVE) z7>`qGfJms&u)-j5@cZb;S*QlGgjlylzdSor#GLK`tRfI9QB$S^qYiwCIY{5plc&P- z%u<9w>uvEJ#ayCRVeq{_VH14OfqG3}fM>mH$6*xOKe~)->ykw*2XHy?SP_7t$@8mG z*_mtjT@N6u>zBDc*GJQ3BZN!6%Hes1u^Frw@o?5U*%SwS$9_eJo}H!e8jo<1WJm4N zVfY0JZi_xj)Zc9*leZ2p*`B~M6BikfI!df zo;AfHFR{qmyoOlhgEki-(1BRwN8v-7;Hy(F<9CIu^O~S=*eNfJbE4Z|yx189Bd>ux zkG2!rB6aKd#7tC77Zo#V8R(nB{9~A`PLKT{`^ z-ot6ado1KIS*T*b)xF5%e*!Tp5Vp(&3?jMdQ)JPx0(MJ&*MMqt{~RziGk1k`6-8}j zm)UTe$8d-)zT5%*${G2BM{tBR5p{VceFq>@wK~>vPDVcAmqF6oVM-QZPB0G9uEflYr4mMW5jRIhon)4HNHx6Tc^QT)B+m|i%=j-uvCEwT0 zWur1`Rx$=t=~K$OmZr8Uj7Mc4i;XL0vgk?&1=b-8-1-iA4U)pMdmm#l6UMA!W(`Wr zy;uw$2&Nn6^%5?%Ot?Q6~Jy)#cTE0dq zO6tzU@ZnU5JQNH&4$r8=wd=T0|4YhC#V8rt%^RQZA3%P}0SbkMH#|2o@!()JoT(?^ zy>{eT&NcEK(hi%8_(}UcII9F_gac@sv8&hSatLmt7NUpQoBA@aSbbcNe5wM7#cGi* z22#twJ=CSuD5-iFX$FSi<3oeE*5>{8O8L~%t-f3uL8I?5JE3f@MXLF*5K_BHvtjT- zZt|?NQf z6S!74fHiwKeMPhJ;}}ZT9>DJ)wXmy{js2->`7_>f9VfChQQP7ZvUx~XVg7EBPU>HR z+i&Cut4L2u3f_h+y^nkZxHRp@$fz}?dfCag2yYljo!0C|Q6KdkS-k2EEAV-iR=vs%f_?<&2g$cDdFvRcC;1TE; zXRzE-U2z9oMJ0?ziL6%xkajr7cr(!15oz}AmE2uTpCn_^@IMYi=eOYoo(D9$0rP-H zumeXgp8kpMdyVR)5T{~`#Hlz+?3^Kc!}qci+03Xiz_b2Ce}j!^=pik3M0Nj>lBm^y z@@)lOSODv!90kN$pCE`nWN@Q$t8Li9%IYuX7S8-)b$VsY zDK7Q{=iM`icnzKmHhqYZI5AY57)E|4Yhw)#n9i0!nQ|m@+OAK;c>9gL12a3xbO&rs z&Piot_u~ja*m)4^z-@kfL%y)SRX~W*`S=y+3{^+=>M8@1bUICe{n%Zu5e_~ALA-_> zPhI(ce)Y!W!8z|X`J6DbE4QGyTHZuDdNz27~y_hH)=*Dg62 z1CNqcDC9qvVW#8_BaZyX%nl5&iNGNHH%GAj2e^%YsYN5}=i-nNh=`@z_u+7h6=m&q`|tMFnRG?{StlauoExwcr_k^(DgA(Q=ca=&(qn~ARMiThD6DZO5?q9#1U!=InQ z1ZQ5wx{705uO0Lnu{5!7*6H&5Q@ow}vH6d$?O4o#ruk+W|9FnUSk8f?+cu^Z8#NimcN72 zuCB+$lVHj<4U)=fL=K~Qo3)vSUMITX-H5G_QFw!|7v`l#Cgx`Nw>9XtX>(){)w=u=u7PRSUvAp>KyFPas%Bp)D7awNgEanli z4RFav#z8s5%fadt&c6r6N7a&RsB*kRAfCJY*%h#$@9hDp42b#%3s5#_9p#^o#>;WJ zOuV@K9Kp@#Dn3ghY667?fNqq+-jV8UCw?BQzkvHWIC}KUGN}CvLmQ%uKByWCs%RtP zTGzvE()g>$bEJTh`}%U3{Ky%g{jxqUm8$2EbyBgR{uy6PMdE5B1)I9Mm5 z*!Lq;8a>*8cI`cRs3I;g{55Y!U85W@NNzHXy=4hbu?01q?Th!x-ptsix1NVI^9!qw z9B!UO>UAeo7FRyIlV8yi97v5`jx~6{cont5*Sk~9)U!~%<;QLWEgIP~9?;Zj9e(R6 z?lALF%DPO^G?>rf#r(_I9|eA;#pjsZ^E_QGiKRglw=fVd2mRp%Rne$*28#xzXKOBd z{FC7WT<(L>ha*7+MLcc})0UQf@#}|QfBXhei+a9@YpC~}W{A`RsFWnx1O!%X`0u5| zj25N=^+rKqIiA8DKgvPiN-mPe5$rVsep2MlAT-o%g*}GEJ%;pe5MTmQw4bmD*XIwxZY{b6v@5(aVxQ59tFmkxqq6CNQ( zra+_1Kcke@ks-i-z9G=XeCDt;rD1WmgrVzHiRdU)37O_7!EHw`UCYt(ugF zxscmAPYiQatA%o3CAs{%iN0tpfaX*!-!+s*1 zAsiP*>{@}l&U1fA)&G%le-#&Y{RC>zoEkUii&xp7&cg9dH93Y=2)q;PJKf|=BNi}K zQnD)ns)@RLAfTGgl!>=0+_=O@+z!)F#LFav#G3(M3!KRnX%KR^+fOb(_8}}lK7Iuf z4bnq8A_vT(F}Jk0+T6M z|A1Bg3u;@Rcj1Pw$vTFa2j^`EcEewoov5>@Gdjqg*(2+L8RK||H++<$tSl=5^q8&S@w~gLEc?3hj3Ok?Xjt(Xu{*A zE=TkxD0*8RO2dT9*011uW`UY*Va(rkKM#kx=VP|D(|321lF7Aa7`yGJB>agcswUn? zI;QR{se~FkGk5T5KDEETl}l;;m{->uorLXM;R{N;vx{dHD|#~d4K77i(?*D*>wp1j zt7{9lnQ&lMG(L{f;oU>Ql*QSWuIdwFsjbquR5iP;b-wsgVc!8_N2A8}~L;v3gQ7M(iqZN+y9IZ?52UG9zCGBKAB1A7=2b7o6ygAyvG>nwHLr|UPw*iO~@lLFLPq}?YF>d(D zTGIVEMDEZv1|3gRP~#Z-BZ#BD#L-ABQITJJOO*8QRECU}qba7~A#UyLins&L>u#b` zUh`aV%+Ul4-V&{BC7wW|>lesy=2o?tnPJbtGZo%q7VIuNP+I(X6i;+Ijj_w$2)VW_ z@6wRVZr+=tmd!-kaqmW?z89O}Jb_-+^4kt>NH@_L0R$3OKmzBMxeV_;7sE7eemq4k z1x}Z`x|37%COp=ePv%|8cLD=wqw{Q8;tCeI`9Bz5nBeHAoM&|ARV&(9Y$y;L3dIIk zpepBXH|#drta6w-#Anq6rCnHi0EVZ`E(LUu`rIr_VfimC-ERrY+rsjWu)HfQ?+MHM z!t#Nzd?+j*3CqXA@(C#0*X;}|=JI({1ROLnv8DL^8R%Eatmgo`tFHLDQ8p>jukV$V z`f3BbxDmx~Q0*tkWH)Cz(m0rBfxLR01%S)7i@_3aiHKG(AWk6lPB-H)4!{=mZ&TDT zq$wqzR-)c>t?_F^gHjd&!mYynz$WtN4|t1;5<69(qOhCoa2@nP1$d9IWZEO&Z~~j^ zP6e|gZpLZ&&K8@BWrY*98L$$~*`-n^M4tsz|0JC?Vf6j}g{Vr|sHI`7V$QIlYGyu+ zZnIFEr#}Laj2$M%4kzE+kP`7J4#6}U7oN4q_nsrND03Lb(J!y>FiGoA;Q=r3I(aB{ zX}ChFo=ILq+ahY7yEy4V>dGE0BaGe2#Op$98vn-vRN&RSLK4RgQRD_!UK8Cc$Y#nG z885V5-yqesm}M-&Mv1V|#!yIxEXQ%8<1DBW2b~2`Oy7g3Y3fO8y=(C!5|9G6t!+b9v7psgsTVq>P}hxE-?ZFF;plQn1vG z60%r~k?g>1sn^eavbfP7c;Ow^VLb{CvcvScwMW~7nQN{XL={b#-L?1n9e72(=(;Rw zH*+La%)fFS1tqm&k~Z%EAb`Tpu~k8XxZ_CeoT2J~Ele+_({wk!V>+|3#IyI3TZ9=N zsV+Cfo}=@+hcH1sL+`-Y+=_ii2U;4*Ba4bX-(#`Ghjzm4s&k~yO+yuK zb67}crDQ58X(pSM9@#@3UCv{&<3{mbrJ5g)KyEN{32sprw}boh2~Sllg3NQc4`<#ni%W)0G(#_A?5MQ-8lH99-Alx&sx)A~VcfWQODOFM2G^m)w@Z;@ z-(CFfQLnW_Sxa^N5OTQX-$Ibdqu9AN43Zth`R{O+?u;_^Pm;!Ti^4P*{#)C@QHeY% zO@hZMsPpHKP_Dh!38^QXcEr3?imji4GPCbcURiVO8?7IMT9pxG#5L9i^X>C~yevLx zYf?$afuL?xjc^(aM6rSW;Y|&B^QlU7?O0FzdQnk_q1;Bt3AVfiJ6`Jx3fRbi!lNqm zfQ+!YoiL+qF1|YQGzLt`G!C7TLqshkVn#^SJbTQ6=c#sU%)moNwb*RJ92~u-YNp%SdrK4 z$)FA*#97esreE-G;zh({e<)QiqW+thu=MVC1D_XgiA4gQVF(3g0IyDG6xc1*y@1UY z)cO6)_c$ydtIhe0XZ;}XexkUX(x3f{DqpsT9S7qvk9Uk%3nn8xIM-tJ)4;`C}GfOR!aE;-RB|TTbu)YYfB%P2mdWG}Eww zqk})$55G-gKP__kV~(}`~}8v zUb4fRCk@H5MJk{tH{k?WaP%%VJp@h6U80~&H9JY#Me!%<9G5ACe@`Rf--|-}G2-&B zLv7u)*qgdu9w{5)0E^Wl@$|73CA4Fm+U7%4u>`~gA~(=V!4h+TxANt>b5&l&A-{~3$5+QgXp?64DKk{kaCS4!n!zSy#^0eEAC-x z;1@W6cbxWPd8g?YDDC)l&+P z#(!*$a_b+FDsY0S5#oWP_pVJjZ@=_ONCThnzU5St(&2Os_ZSBR8n8o{@wMctX$mcK z3pKdCtHFS$CpgD!$l7@TlyU910fb$8kg*|BhJOZj7^(IJ%Dohbe8LL>1S1g^m7DT? zyOF7%&@U{{YcvS%D7A1~*b4U8uvK};w3y1Gttluc1-{1lhaCt4gLx1LTYTdeCV(PV zoJHDA@mi|hNDaI3!f|{ziGhVnPe05#10O`;CgQJ%FMD8z^?SWkyZyj%+3tpld&`Mx&>KX9K7 zcBG(05FwKDT^d(55E&ds#bb_K9sB_(4Jp#W0nbt+4cH=**~rF99+pqtDZT$V8AfN) z^P|*wZW8)s`|JbqYL7mVgj+nht{;Ru&xzZhP}ooH=1)M5n3hxVEWT?IYFP7t^0Ou* zE`q-EPqqzx5?bl~Cd%;6~6HWz?yu z3)~)@?5-K0xWW_pqkHy8^`n*Ky!M$zeGDgJ{WUQP!Z708G@z^#yG+3548;pja;CR{ zxf7{R8xO2ypW!ePXwNn2&Ia&7MsC5dBJcQ)hSy=3^K>4Am=~;2`LzhQVL5Mj%|=!s z`=O>h@$MU$?Mw0i-3RJ=*iyvvuhrhj#2A9E(h6C$ItLs!V*$vMOve;tRJ#1$Wo)L` zz+J`&$k3(N3$aoAZZ${>6IX1*hwP1`UIi@X)a&KGkyL-IQTRj zPu54X42~g&uX5fBLkY+*zfjhcXQ<+%KP8=KH<@n3isg=wOshyUXr-KHNgn&kVKwVj zOmdhwP(h*VGSP>C-T3XH*uNNIb~4d`i5=cz0whfVDGPfE(M}vA^FeP zZmc%KDl81bHjC3EE0Q1xEUO-e8EJSM(Ps5LBPzwDTD5QilWqP+jCtcnhzq@i-0EMH zM2D-C40BN!T;)^uC9lxHxZaTp3v&zdYU^k$4z(4B+KEH3A&59O5M6h=dw}co3k*Tn zwiY#?0|xx4e2^uWRsRcv;13%$s2KoOp0*A-%Vmb;kV zm?9(JvADh6SNvdB>=L&eLLvXIXV4eRRW$BGGWwFdXCOCc{UR1On%M@7>shJCP47Q= zkLY*Qn|G2Va(?&@gJ}#u*6e=(|9Sg|;<-^{Y9HGK7pjxwlLYN10B}33*`!zszPcH! zK5SYjHY!!edXU99@z7|_lmcJW6pnq!>t!x#yf&6HpX^4BIW1V3)aKd}q$8qmwv35} zJnln)iq#QcjXwWKpxoF(c99+O0-z%YWsu5xRc%N?SVjzoZmvIZ_$V%+jgbsSotLv@ zkqx7Hm+tGqZ6OR#Yy;+UK(C}Fd9iEqgTEog{RL!H;!%c%txhr*81&#ikWXmhex#mb z|B=O<05K|YH~;3%VUG*#)QaHK~M&LM5Wpnro@Wwkv=P z#~Hy~m+R$z3Q;};SKcOkx?R3T$vEcJ?Yxf|pux3W3=IFnY9Lqw#D0MJJMx`pF_8OsXyc}%l4pGc71snsJ87gXBNK(Q#ko?YJj`6n5y2wClbx5 zF1qjs#KL!)qD!dv*{Xz#otCd5mopNA-@mr*N^ULgo-zX&&xpi7f zFiXJ2h7FXuiQzQZ_Y`;q$*lm$?BGQiWH=37&03^}aeI+ETnt3&JhU%TzmA|zC6l%| zbSzv}!M>&4K0LMB&P0O8%cHWW`XZ`u_M`U*W3j_j?118ZhdFtz1Oa^R6^8gyrc`~1 z^t~P;U?G;Z&%An)c=wC)mDnX@Ne@cnb3YvJ+opFVDy*oTf&tWaBh}J$_V)mUxHeW} z+D%BE&EHr&g=c+yrn}UXG}jRz-x0*2*WFDRgy2ahfL2pnLeSlR7Ep%SM_jyoK)Pw^ z3Xxa^Xb2LnkW@*UQxvPJi=E7+75jN>K7Zsnir&COHFhUyql?jm*Mh^?6wkh;@YTbm z>S}68Ocq3Tv___m+o|LVbn|lE@8r6$wp-55C4;^Gf*F$@>($XOTQ(ynj1;TsPEbddy3nE z?O>DRQ+2?FtDB=lFq~%7DeUw*Y`&xE1Tre$gd(+`^%JQkEFEcy*9Y#V4MqLILX`M{ zm_TVQLS8$^;8yjV4+C~`-e!!|0!2(Q6BN!a*s3VmC>!8;!l4Ew?;U~r-pS99)vKzR zsW`F4sCt!<(k#S@tvKq{6>rOeS+LR2AL`-XUS-~4jo~xdg$BQ337XAn9HojLyUfTo z6-qBe3&TTwtr!e`#GI|@QIV3;HbE{p8mH1B+S*hKc=$K6M0RExuTw4R74sOkwzEQz zdRiSsPtvU?@TTzeUrMUA7Cqg69={8u^QmcE+sMq094^;J-l*Qqu)Y)aO+b!qQLrI+ zJRKWr5n`*tGs5xMdlm;9b|Z97yXvVd2b1p1L0F13_N6F9G=WGeA6{c^f$SRf_Q3MD zy3zyFV{P{rDsRxo5~*v5D?VeujTLZc2|mQqC689rAlI;0JI(pT%{BXt;)?gKLjEe% zpGdVQx+v-ix5GdU{@+k$&Og++hG9Q!v41Pqsu+lmbl+m&oWXH##6ZaP-;wQBrhQ#j zU@`H4dcS!G5c55$f!@V|{E{-Tk69h6gDkd{%=2n2o*UzwGYit59S{5>+y_v`o0hT$ z4))5O7MyKbGS|2NhcVmWQIVT3cJmq(v5#><{Ak`{^VYSNtEa$ZJmVmUPRD0UnaMLq z3c+QNXB{ZyN6e?V)_tVvYvktv?+Zz>AI=utA)aymT7`|JF}jL_JlN+3ZD@wfV9Hi| z5eCg34TXoj@Nf_wj*vC)um@=xMqnwSiQG;ZZQG&wR^dzVbkv##+@UF!AoU#s7Vv`c zp3xl#@H`HtNDKCvZhZ#7v!v1e%d#6_M)&h|K}2pM9}0j_?@#e*6-5+vMep*Jq?{7} zKYm(czn-@tFWoH6?)X6)4RD%j4r*Jv>4C-Y0n$uN(!wbyxS%B^v|0wdo=1uH26Cr( zWhA=QuG=Aae@Ez88j;Lhqi$bGrmTq#9QkDcQj)$iIn+D4HsYrYS&0yEiO_aP}Q} zY#pW${r?vI_lf@dDRRkVwAIxCZkAgNqcHw7dn{YGWyGa_R|k+h_K_2ebIPg1jQ27O zaHG00lxQBk#?bkU0mJq#mZBOgLoI!*Xv~YnSSen|+9FF(azmc-?)5GpJa~>@YpHr4 z6})9WO4)cj(gsCLmDn5XYg}wE@o?p*48ycLNlgIgco(?pB}0YdE}X+NpRY9Du*Vx^ z=x4L~lL7W4eqD#9df;f7f5Rx`K82oT>N)TUxz@XH7=LYFW0=dDP?rr`v1Y157zO)h z&5@y~$@~f%JPP`g1*k4FD4}d9-leVB#pOb`O~*U6Sm^rzBsF$u7a*E^rUyE|oLPr>oDApvWi8jd4|JqxE1%i z2uj*ZFM7FB=z3ce3^+&wMyy4a1_y)DUG;+2xYmE$jN1MD%%tjbG=9E0ZilKjk)8&u9<0f)=fX8hq%iMY-x zdI->NOuD}h@Y*mD89OOqNea|T?SG9%OTBLgN{FqPb3sOtCR4aBooX7OLf^Zy!7eF1 zFqUghgAXO7av!1T;qAoJ7*^H8TR<7z5sxj$&;UdL0Rn8kgEKe%WC8H4b(jVhGs&!d z^wU^)=+=|ql8o-Hp9;}ZvCt4y_8&d@-lMI`7rSccbyRRozYLNv9 z*5A4o()=M|N28E=ld*_84oyYXK}7-+p!UZ$=QkZIIIQtZ?m(U$e|zC@7I>-j{}`}> zBPHdjaNj*(F4B?>N1uzwSww*`eLD-%X07^%a;#$+NUN!N=wQF4vua8CP6FBL0 zHZd{AAL71x;e!jCQdDi0b@c8+(X-EDr4;X)i~(%#4vZqJ#!w^8Ce+Y1sW*Dsvrho7 zlO`_5j*{xX0M}Xj7`J`=69iXjPuw@kT!%FE0*j;W*^}BFfuQQZ0M6cu+&UbCJAwBO zXk?!vMnP2fLC6{X9Xy{ju^|O_VN4a)bp&psK2lz{xBT^~E$-v~)&)u{u>xo#MBinG zGq*)QVD?s6JPX(1`=207hLVz8R?Gg-D2%4CKF{$TVey$Dp;8koxdyn~?ZRhi3l8^FA73IUGEQ6 zi~T{=UYEh8ijEp4r4D&-`48iw%i4)F=kX5+6x{nyP>AkfqIT3Vb-K#4HknO3WTz?AVD43nf!p<_Y%7)+ydQ<~U5t@d-C!w~ z=UD{SUD`%0EfY)IlK+a9sHJWqbqn8!mlemuz{Wa8j52%}IN_I&;zAI$2EVoBWDf&; zaOa1LQO3rd(hWh$pW>X3Ilg$(Wg-o0dJV7>bdz+hYb6ojPw}s!QEhh4C8Uu%^z2Qb zj0D0&KPJDG#9S*1`c{Y8fvDlUw`eZ)GB-0E-+~;v>w7_%L#;fO>>qr<+p5pJ7Sy3* zaBLp`8C${z77#XqRa4RDDeLE54C=V^_mNGxz6z-(<2$h3kkdPG?a>s= zzE8CY1*{t;BX+T5-Gn;$aNwu}bwiYMGI^*l3h}1cZ~3Th(F2M(!;>|$38|Bs0gP%C z0Z`oZCJ+$;$2ZM(M#)xB+oNXHur7w3!%Hzi66;=2Oc!s!hPqg#Fo7mQxBn`K)-V#8 z_R!A^W?^aI%y1TlI(2G_(q26t@!Mkv8q(gG-Tj?!T>jFp zC9q^W zU2-0G1COG!SvoW_o2*;&9_ab?EJ&8MXGzuK81GZA9mgBa;w*Z_8q}g+EAY(Q^CnEh zaiY)NkD#UEdURvZTPn!yGNZ#bBYq%l7559NonJSkVU?TFM073K?rCBAR{JVUP#ld_ z;@BE-Y^^x<7x}hnj%<;8OOdVH7b<-9RACCHP`4YFE+WH5WHf-E$?&VlGhj$C(%=bU zAbSfThsHO*`fgz6V%-tJ2t@ldDEW+8fzol3o1{TZvTIOL9|m=Iyf!`{!gej%XuO$* zm*YZi6o_*n>majBHKd!cz0juA;*G+TT#cIi-;n~1du$u>I5t^{G39KB2qVygi8dRof2+uWYw_a9j_Xg8~ks; z+&WEX22owJ)y9z`WT6OIBtjM=&iWgyE$=0za)NkLn_^nLkOo7t{|DN8evC2?TceHQ z_daq2DAgXM^mFGr+zMgt)9ELOu{Fhhb123>gMGSO)oucv1q$}B-WtLbI>jDJSWY=^IA@m93S|rMj^~mO7W4v>! zW;E+Jjn6tV1H;m!&qR*SXT8%PPW766%0!(0Ax{6SFHZl0KbOZ}P|>EfY=~`O{Zf(j zB@?_*rF1sOl;EU1Y(A~xC=qfKK7L^e6DLe>!@kDC-wR`l6M2t=o{opZP<#P?g%o9% ziMej?T8N4=&+v+WznL1`w&5vt_5Q{Gcr7wB7UvpNUnvvkY!PtnF4JNK{@G|mahr;A zKR|fyI|o}ZB~YdkPN5LhJ~xFsgR<^BTq~b2a&R<$F9lNevUsc&oGH0|0xMUYUqwP4 zVlr02iW2R(7p6iB2RLkHkGogZ|@k4sf8BfaFUU4N;fvNcB$%WY>rSSP~+YA3LC0|I>ZVkfpf0zJu{bl>lp+yA08FYs z+0316n0x1;ENOD8`v9rSKL?B<55h8fUko`4mB~wamg$YZg$I^)#s+HJteh4-+5mjys{E#>M8{W3_)Cx#*6=gJGtX@F4E~Ao={u$ZGeo<;W_%Bo1JSMU&02Q z0R|CC)O{1QF=PT|zTXd`$bG4YEP8aaqnI5m<*^&(j`9VUA(@kLOm4)+t;pQ;3OWD0 zYG!0+f%OlX@p82+E+2#Z;5u}(|NWr8P__$c9D+w)GZ*H|pgIE}n;{CJrGY!Bo@OL^ z{9-WuWPsMJlJThYziBimrzIf3ZOJ~IZh4Wsx&#}GBRj;Ao#MzYpmaoMvY~*{uld`q z6&o8O@#|-_lST0dP`d#JA1)^&X1cX&SYYPyiU~=-*EZ4s>h(1q9O1}21Mp-}LMy5I zK52c!nSL~0W-L17iVk_e3t@Ly1(0dp8w>7jTW3^JyCqyR%SG?@J6&+YvypDE9J$Pshxv?Q{8biM4@rNgd>-Go>5TIKdsRC7>guW zd>0S9g6-P+HD(PUaJVZgWdO9&xw`OlMO_GpU^W)w?nm=`f?|@XBx@?f$*S!qp35m~rUi6Kt$m#f!N4f)8rO71mRj z!uF2IMqJ{1X^`=UoWOl{1{+sk(JfqqZ?ReW49^_(6^3V;8kgjH$)vxaWa(@6%@xR@ z?Q+f_Ue>t(sW55?b;3sGQ-;HeA;Z^nxmV$h@CZ}F|Igh4qJ*??&YrFuMXAn&Lqr$uv zFvgoSScBdxO^ZXYh9^hpf?mVywK7dE6O_RUyEv}aQ3C4&=h0PJcs|H9i_-$o6Wzu;#18HN$aea1*gl`{va>na~^#cj%bh3Gs~bRGu&bI1eW zCC}%_6k^rbx?JL+pNJn+^&#PIohF(-|<>e_OM zmGB3W!<^*|zO5!o;ztw(GzHBiS#2ckPB%C{+@h?tonUTk+inyxIkz2()FlGiEn{jO z#%z*$)q4g`r^Op^qk9pf5P67=lUJW|j(owByl*B*`+dEOuK0B)Yty^9%^DqvHa^y; zs$M^UVBB9Y{}#2Ewe^FmaT3CL-1ZrA6{)_b9_!iTz&tpZZKk9p%tb|6xdAAnHKxcu zJb|*pIis!;R%p@l$YXyFvMzwLh!(SE>JJ=ue>UE0)2A4gjqcGo_g0P$9kgoYDIOZ^&E7hO^ne|uHYTRvR839rpOJ|Pg0&f$@(m77xq^dS+FfL+xWih~NBwCm zi=wZv$_uzUAJj!)$a;KKL&Th~|HIO-T56z($HW$>oPoF zuAVHUF=Tsd0q*S@LCk^Do(&CbjaAE)Aan6Yk*`jpdp(;`p`8mp+OfPfa;H7r&BBOp zHz9*d-nSAN&R!;U)BxBSSv&*CT7FcB4m(V%$C6LWU|GCbg&zIG*4tn;PoaqFVGr8MP6|pGs71|NN+`EELtX9%HeAtMsSS8=eV>5Z zbmWnAj|sH#U1afVJ{+rSTvG`1d6=;aAE|WlX&Gv}22K>egK3VxKGM*Mfv_39MD{kj zQK8Cexdlr!jTBXw{;*hx=cI_n6n@r2##P30%651Fd;7rDI8b%{4Wax7WIOQqT@VySWl05gmxiUgyF)-wQNb1j0~-|+yY*hXyX)GW z*Y3`1T)XSqXZXL*`uV-Se_rnRJTvo5&zVzm4vtrs%DqOSu&|B+B=lt8|Fm4kkHQ9G zz@+FdH1g_CWc0tJK{)gtxYsZhl7=BfPWWxbzI2}3O(Bvdilj**X)<~Iw8W{Ac(EV0 z!@i>slwJ=<*2ck1Wjp%3P$od(lrmck$CffLy~*=T?h${$Hd&8_xbBXXN2;-}_0hVp zVD>AWlk13v{3xT6(G^HdEEtY3x3wvNkv3wJk!a`yH4L1SE(JVMu5+2@NiJ@MZ%#KN ztN-|v_lbQji*L{k4(O{ueB&&#N&2lA=rF@f$|cQ2+^I6%4J0Wz=MXZu9igz5_vKpf zA@KMl-uG9KN0%QcH=qtTA*|LkuA?9uNvBRy`jmAzjM8`ev9_y~5%Y_!%z0xv4(o-` z;yQD~vC5l<;Y~AO2n;6xL)x$kZ=w6gNUbQonAt&VplKNxBID$XrKZu4vElTHW6@uW zpkZ<+6(!7hgIrs~q0RFOteV!KPhRnUX!D7=T$aw%X~#^wI?mo9iN+2Tq3ti@x^0sr zig?c)%Et)HudvOKYD*SUC0u7H-=B7PMOV z@;JDp9KxJCY{P|^(=_g3B4mZOmFKxcr|;kv3h!w0_RK-XZn{-~FcI@!V4KIaYk`I> zfs{J`JSMW)w1dbnx&s^Cb39mxB0R$8gQC?b-~x0#3?47q0%~a*MHv^OO?@@^X(`JT zHdeP$V%=N7-F9@v4^&9v{Glj#&lmXYWjjBOmph{1wxzB-l#j_bEe_u+Cj)8HrU2!X zI()(JD@Ar=TOnnh_~|JAa~FJBxSSV;g+@=?hTI+u?n^?CWJHxlz}=c+7P$=K)e?5n z6!pbtkZw9a{+Six%t~sS{{;m&r5s0SKadSx>+T&wUc1H&h;*vDO0nsc*z{U#dLuTy zCGVM=5p7k>V72)27a-V8Gp6FXRel0mT|bA^J6qz61+)zhtBcB#|DsqETRhB~Lh&oN zLGqvQlSTL2pWu>6KZqg}WWBaCPk_h4jyRU`sUu4B*a_E`1C3!hoX_RLLAc>I579x# zT=430kK7Oa$DjC(9)OWB8;pbe%MCn9?ZLL1#pv#sm2h*g6YC|cYz|(d_EQ?{MnTdM zL=JKp^IX*fp}NFdqI2|35DTO0e#HP3k7upvdD5kSA^#dkhNwb0V7LkJBo=igDOJpATY$ zytY3mjTm0rlsd;mgPB%hItOb)vjzTT z>?kUY_l72Hs{+&+ET@*>&CX|=9<*r1ZiNxprY_Tp6)F?B48I8i0djV0FnTejGYYuV zgW9kl(Q@D5-(%l0$Vt+IVawVzb_w_;lFz{(xEFGWe5c+4^61Mbpn_rs@M6w+?gwh6 zgXsXNW;fI}hoTX+VAblJ?1XhTiIS!yFsgF2Kl#sNIfv>i#ahrLybleyw#p0PODlm@MZI7#-8r085WG&T|o zH0NU#iZ58gK&fMYlp{B4PEol3jq4j@{z47YaWT+>SAwfiUxeZBnTFR+Zp$Xl)q^JJ z5m-R7Jw~`<^)HT#kd8yJbbGbJtw7mxBXnT@r~{|#yteTNXM!XC!}^Rng+1Cf5o@VeD-D=1|^#J{1dXIUM$& z5NDCDCv*;utu}^bbY>P>YzLwtmLWOl!U^;y>0%U$`FkaWZ(|%FeI8{`8j5(;_Wr*y zgoilmu8pHUVhg?*f=idKu#cMuSmpwuqLw^8zttN}M=E&pS2UZr}{t1e6!AG8K^M{N8*f;-^=@&=KuSy9r zZA!S(7L{!~N;#*)fKFDzF9Il+Hq`MfUo{Ep&YCjL2g$zY7(*){jL?bfYXH>8x1ui+ z4A)TKHGU9`G^oFAvjVMf2ycjN zZcBUsr$cPHUv9ccgc%-gvISfo|B~=B^nNE9>|0%SX)Uq8o&hWciv75qmynDbrqHsk ze@GUs4})MmQ^{<`v~S%og-=_-(xy986{gQf-J-^@!`H)5ipIJwb4oZN&Tlv_+Mzy|$U03GxCNKVQEDg%QC z=F}{0AjaFc4McIn^lQp_Y>+JCA7R%i7+7>Sq?GbSL$F8JhV3Q&*6+ z3e==UMiA1R7u(1pd4)(`37_D4#$SBH%|M)1P6saDq#0v!+D^|Aro6nuV|X)y`nLRm z;?lnItUt}8(RzQLC8q%>q~0*dpN-5euk=M_1{MPRyE^tml-o)R@D|>o4?gb)V+m(f zy#c|anhmuTw8HOS8TUK2mtnQc;)1YXpH7`quR-1twY4^9NKJ-vD+KD1ls+RIr8yt& zr<6qIA0qS5cGRPq&%IH5dB1fm|C`}_7LCgE#7?zu!^db;j}{1%o_)js9LEkzZ@3-r z1+h;Mx(;?isLd^83_PKwGdi`Ugsh(RKy2IR%ni13T!gUoAG^@&g2cDHDeY|h5f!%T z5k@MuSzQFpDbK78z7-qDZWd#JiA(ew?7%|Ue30HurMNx|xFbV8Isn6oe96+B-f0v! zp#W`Kx&-vXZ8J{y8XN~RM&9KN#^cX?QPwqU2%vGBp>Nf!)>3O4K9ijosBWth&cxPtk!dyG1@4J!f5R4ZY)2W41mM)kvo`|P)`d+zN?`qhHce$ zB|`UC+%;XPsO2nuw*g8P0e_uAYwSK#)RwbI zj622OdS400w*0t9eB5hD7N_*!(6K@LT9Q&&>&*?5$6mb}gXg3jP|ANMWm#CjO@~#9XiIUTO%ps z;~Rw9CYx~!YYI8eudQcBd0u-0Z+FYa8Hr`%#j*)-H;G$7axFM?Xl(&bi`<|c>FQ&# zYzn2^vwd*TI&EV3m2BEusyRu+Y=`2-dKj1NJm!s3#9tBdSFu{0zc0ldE}Tr2UwCL^ z6fM!LiL+ociBA!)S6yZC0v4_klq2!l>KxG_8ej=oKj|TZp0Qh5iYPa? zNw`QfoT7uR@Rl9@P`{JEjKYii^At(+DW}*@%s-jCi7KNPU~pBfu#167ZiN#y4NSM= zng&oyF?bj0b{9dS+Ldx6I-n)Lj-a<|>KPhYI*QaTBDDIc8%p$X?H zdtr#k{+7M?MUypHVPuHguBWD=wv18KHQfWX^;nEo**%hmpPU6(5;_~)P~3bI<~VZl zk!|%7_yJ>->I{}#`3@{OqXXC)X+Mk&#cNz_Fz$ zhA7I!g8zf-)4EdhwKBOIN#hG>w9#1H2nir{biBe;=LpM_o6yci7Z`@v@2+8urpQUY zcAkTO4E;H8t&Jp&uK!09!1v8x$w%pVlpMp zO_FP-;k;3eM#Mq*hS~8irr$ER3vOCcDw>qJI9@Tpn0@E4?;Pb&2%q%#VjQXoRIx=`X zd9II?#rz*|iFyY&Xr=Sk_}NfC%w+)F?SXyDPql_#dg37{oOD&Xtru zD$2@9`w1C z|G}_3PlGQxStRzQ2*`|_#vVcxk&F~@fjCBY<7;q^XSMX2(5=NMX1>hRsNfh z*0TWKFeD}r>$gEKFI$$uxQ8Su80b4#LTD6g?kXH+(Lfiqh2#0GJYHbHK|!3 z7_0)OBGK;O=_Uq7mOSZbWIEJ%gQ@&LN2CmSJs)9`l!P#UrWX5M37;{lY74xp<|?^Q zy2-ARIDL_P9y8f(&+6wrXt;ihy1ZQjq}CN`D-y-KsPJj^7v@ho)Ztwc zJs}VujEx-QaC{;&z8!J526$o7Sp2XtO3$}N zT=yCu-k-hW`6REJ(E(riKOpbkz47Yv`2)hx_2Fou|1R?JkA>C2C>kJ`tTf->3ZY9O z6Z&9FWW1~ZpG8a06g7tpw4`&gG!k1o8wQB2C1Pu-*xCh>=6(3U^1(@j5qD02cPkZ@ zV`egDvBFF9xl1rXwHL!{+PW%*I6qaKpC-;vr|dm9(YaB1eA-*~<&!^jM;b!=OCuOw zId)7)WP7Hh(90&D^|vKh*Yy!8-3#B$bgL;bFYDM}Mu8&rLM z{(FZ81Z$An){_#qRN-OoV)7{NkI!_8)rMkkF+gM+RM-9qg9MGoX%hos{1Y2dQA=)2 zj>&ao5UZ*dym|d&yfHE6LBN|W9Iyh0o@1rFz&IGLszh?8%^d*c+&RompdFOwTn65g ztK%aiSzP<;cUxSeI!dBwKBX(5^#GD^3b|&&y;iXns2S|+0Z;R^YKEdqD-ZEfDxDsU z8Z=XB(7&J{W&aY`jIEUGT2sWA7}U}h8q1q_KdL7+LvFvW%%hEN@*T@~WVXVTMyzE@ zBK-wRV_ue1VZF}`U{v>CBb(htAN|oJS%Qcr&E7)hG4NW24c^s-kdv&Ul=&$DX)$$J z>t~WRx!|TAvLyza3+Pj+CK(vOqms+GmxiKnGj^W|*`+eRplvn> zijLT~ZyDV&_(3jPha);-)gipLP~*}nR1W2aKPiP~fQ_oT1NZ`MVdp;9un-s_V&ENa zW40{PIw)x9hiH81Iewo)%&rFC#`B*CP|sY^g);LG;~er&9)OWZXtD#<0f7v-h`IU< z)5C4O4xP8#g^`hw1Z>DTek@$-yaOh%8cV$LCAEO|F}Bq^w!G%$ zQVJE^`cyiTiBQc<8WI@``q)ZuV5Twrp1}`WCLhxNm7f5*Je>*^Z0^Tyy8^Y?r`z!L zX#BxK;fq#^hHw(ImeLc;^c~k+8H%k18Y&p)14-_|l;FZ^Ytw$RJ`R?;F-6~B!x}Nf zeDbG#DXZ<2-+M9V58|m#zJ5e+k6JbR1sb5!g-K%j2I}Dc9B)m>&PD;fYUg4fs7=D9 znwjLHaYTa8k}FCe#X3UW1r4pj@QCWaGQDESOh&qsPw#vG#~rA(KXyY zZFHR?W&q)nnq9>262;ZbLy0PzhQCK7d=yhIIM%TYg~>^BD?X`EfLrN#fT&w>F`qu^<1FgL$WxBee=I@Hw<{`*CmMW<3Le&6Cm>|-SYy>sZk0zeV2n9;Mb4> zTkui}jY>cm+rk7kf?a8`Y592b^^U#EMN#s@)0U|8<-^X}8-;|s-Fum#5 z!x>@Nu`)!)!y|ONR%pT0NBI2<&8evpE`h7cq;NPp4fwrOw6``gA2Y&|OU<4PchqN~ z1Q%fsnW)sHHsxo7#Fv#0q&vxUON8M&Ah>CfeJ!}(MV9!80;xwGn%?-ZS38`0zW zd`S#hO9ApJ@JI4H2O_P>H-WI#S%{!5vuPJj<{T8G%GKgtoR zH6syfv{PZy1uP#(H+e3dIzU$rTBgqC7m(`FV;+tN-1i#EvU;P@6rpzDCOc82A((j3 zB<)15rhR$xsyFV&z0K8>KX#X#C{de3y#Bj>Ek8GUR5o)E^YtUss@AU!J1ct&E3zdUi*-QJL)#TX_Y)t7I2Dj}M}#wk#nU zaE6+s^3WEU=F64XplLsu7(|a!t=J0-E@49P#1<~QaKyghT^NwHQ#Nv^h`AR~h}1lY z+$W6!WcF@aSB49YBpq8<$XjVI*W5zu4gNzbO~%1*XevI{#+_glUa!B)S^GK2c{Li~ zR7n>1<{;4mLT_x>U&fe_hLCjeu7w(9$zcWvEq>ib7~QQE3QwEL)1A3vBG#?be&|=Y z{2LNSX;=A3f8s%<6K%k|v@+u@;?k)vwx~=4yPd+DF8Php)CPbt_@=9D4P*VA8U68c z1O0X{lUx=u_8Ym3FYvjP>6HfkUYP*22EN`4_~r7B)#4H^CE(;rF*}N^<@T!(rUbWXb&Q|jfWuFpn{2Qq@mZ;=!wcHrwo9fUHJuFkb zs?q=NXnhbxIjz&P6;nhBTeipu00@#^b;4q6u12nMT-DO=q3`?f2H%{0agtGLV{h38 zt7a!P_XxuwrPb57@e5UGtXL{mEE6l1f`wk6J+292Eg5?3q;1#q|t2sydqOWM? z3;2^OQm112!W{lUaeYm5F*nX9I~yCAiL7k~B5S+I+JXOe!Z1P$=nzLkXyw`ste4)D zd7A0VqK%9|gbx{o(o^BN>h5A7+8*%D(UAJC$WtVus^TssFypDa7>Kw}2TH;P{9C;yq~6gKWn#yost8!6Oh0 zr`WYA-UC8fX;lG;B)i1}INr(Y5HdN&W>$)Y`&JE@kSn50`%DgOyGvf8hKR)!2?U*no5 z0_ONH_=aTxj^r60%_alOxUSqXUwi^1x7KTlF*iAP#(*OqxwQ!*d$ghC4^8Db@GHJL z;tTb?CSWNm*BC*#9|WziMpTwR5p(D{7?%!a_7gMvi%-O>q?{E zfj4AqN4CROqY%yXxq9MX5ieVd?rka0h3~s%9AAKf`YgtU`ER7LG=yhfG|r%c+(+Pg zbs@T~4Q3WJjLs4r&dxDz&g zCoja>?yf>;cX<$)66mOd0W&r<6BeLYBXS^GnRHrE^^o!grmPR0zTGv6hc)UZb!uF*^(2reYG1C zX*HJAsu&Qc8r>0yOtCXTZ`ZP7rY{silIk(=K5&mL)R2Tj{PHJ+AagE~?!Rw1)viN> z!xKG99%TsQaqJ7r?#(^Dk~`o;f)CSK7OR-PiJ0&jNXn2!%M|uCo3V0lgd)c&Fwl8t)_^23KfDf+n$^(yuRFIk zxzAzi;+~8Dk*X*(#|KI36Msosay~s*Az-H@8~2ox{H9|p57nY(1MZ+G;}vA@a}e%R zz+MHZLYiAPwS`%@sevnlW-K4w@>*#2=vu&mi~~s%h;^s$Q`H+$)2)9K*c+c1OBNNVa6_n5G@`*BpK%#QpxAx@k7;}VJH({1H91l=sm|#&8C}$q^p!WB zH4qgPJB1^3nqdX@w^K3sPg*7QBK786T*4625gNUxKa$fDD)?$zXdx3OzPHRMYE}bm z@hW(Rs&d7iNMcyyG;NY>0uxB4JHgM!{RNM>C5VlhVZ%Ai>SNtI@t;JrK_&v>J*S)YUa^8{@o5M@sS8pcnI{nh)eV!ykuUSSWHy;eGJyOIB8| zk)HF4k+2rG{E*VAIhLc`xIU>m>PfCp+-oqR*!3(unSYpihl4RD>)KLc>?;h7Y2O0q>rRB=NSAQbvq`;;dtHH+<`Ha|}Y=29{2qzfRh2i}ZqBZ`E2v`**$q z5n5)eDxAWO#tV6&`d?YVrZ@Pba&tc^XfiBadkiWCG$B^cQyHc z;mH~^#T22Z(K=oe7Ii4cGH=jv&LOT;PDMdVD@yK z9?0VG5$JS%e5sVcxS>7|Sa{+x;}#IOZ=&!!MciZp)!w}^7BY?j^_Swh!l)(R&BR?M zh`5lbdln;!>)zD-RWqrA!ly?fF0I}FoTlZRTEO2QpU>?}G2-2u<9yu(}=NROB|4=rvULpGXWh;*=7iJ5h4#7o-$!9^x@5+AuC$Nmjf+n5*NY5{fWm6%UI=Z4r)iKhD^%w0e`TI zxhx{@h{(H?K5{X>eEyVL$&D}%W{=2mu{BCeKLpGPy?<9G>u?xu<`t5`iYPdX)vqk5e<7-yCi4e&?}j7mznhqKNm& zl)V(V6>vV8+COC3PGHy#CM(nW)&)4KPetBPH-^28qKmIUhS-<+>9r?W#WmMyHbarp zm)%gOl?AVUhbM^$lWz^=K9^s4f{}0@O^(OcfT>JQZ!Klv)kJvZP~mbj->3lJ>}XSr16WA4V+1{Lyz;j>(araNhDnwO4(-x zd&Q@abqK7+1@>J&`{1JB^*;u=e8yPDYnqFh07fP1xp*FS z><}_rHm--~sN{4k)XJ{dJLCT++0)&sLW0UJU4J-u7S&dWX&dp|M4eYeA;r2sGdTTQ z@yQe3U?K)CshB+5e!--r<0h#eZj#oJpW6i_Cm6v&HP+(mBxTJG-ouI47^Y{cfR&;3 znx*ZOiby>8yf}$s4E9h&B1k1E7k6EN%Ho8M?ToOZcMpUkmRyI$45ybmun1dj`Grmo zxWPPhKX(f0qQzIby%aHo8I1}51+hEw?Z?RO)BOLZ%)l$mzW-e8F&M$2CZG6=@6Bmg zFLuK2^x`J$3%`M}!TyMz+aGRrSwZ;6T~L$L@1v52JIHz9dr8C&C$EI>ps;ge+p(`t z7rXDETADp2x65&;IrYY4gq|xaWg~m&%B9LK;0r{9CJq2QEN1pYeBI>lQ1%vTOmiH0}fN5 z<3E2P$98xeY*B=V=Lw|CJf;x){x%T%j^p@#A)7-lHs&n8(B!P*3mUrSS0S@F@Kqf6 zCJubZ(+`Rn6(rS+he}rq%m@tnh5w1g<+HavW0TpD46V9UCSc__TP(oMbl;0?L8ulC z?1SKzU}tPj4me1;>PyJy|AG;nyqT{tKdyI{p!MNHyQ5vH*C=KQs37T&B64;Aft?$$ zEdzsV_sx~UO_T6V)+axB z@N0#*)LUHYgO2T-!!agkFGl|b`~=Vl16a!_ zJNFg#mFsL<#CF=a5ur^z?ySq&ftcJxJMM~Rax_B6Q|Fb!uH3*3CQUnW_UcPa>gZPQ zlEwKXaXy*6vuDde;*C88c1V}a%)pOohbfJlbQ6tPx)rwdow4X}0S_)vaq{B7-L+9b zp7#58%4YdM#$X5wqTs&%V!4-d~FA<0B;D*OKzqrepL=dtX6e zqkK!i_~_+WA;pq<<2(#Ta_A#8_~b_#+&K*yoPwFIEQ#iA+;5W=!k9fg)-G!NYVhKd=}vZ8i9v9^Nu%IZ1BO@JUow@W8$MMbPF9JNgT=`ql%8~m$GPAZ&v>)p zEHVQO?Qab<151vvBlqJQ^^w-M`k(`L-J5d$XxA;sU)hGYlI4PFNU$hjUP0J8Cv-gX z{0uzDzq!niI{vLB%8IB@`g_EgFTh~n^W;8gYxPY`{l~_L&R=y$0ivAj`>FIt8`tYP z?+uD|*p!QO-7h{wbAy;7FfaNaSJ&>kI}?`7@FtD(arh)RFvenb+G}JiTm}l4L4BeO zOodAoBuZujWYK*EYv=U4It`Fs^`Rq5vO3G~UbA}{>dEN21610uUEM*u0bcD&gGS=Q z+4#+&$Q$9@<|Zc9$Xy*21?IR7sneeT284PJVb5Vvv(F=`%_~Qs?d`Afm^ifSi_qs4 z<4@X^&GZzvW8Jnev4Ix)$DhUoo5#T^P#Px4UCJq z+!zl|Ct*Lz9p|T|BS3|v6Pd4Ij-B0ho|)o6_5rRr91l-{^SkJIhFm{ra$5c|^v~{u}%+uE$C$%I^?dOJ=W7zJium=ZK zc0WK-V;l2wj=S%LN|!$(7pv)@s+w)7Pc8%h1hU@_%lnd}Qe5fjiD|Xpw!U@~tZCE( zER{5UPU1L8uh$6`x$k?X5WRJ{q3QX?j4O6e#gWqV?gYT+cn3z`SN^0@wlhMmxka#o z8*SE=yPNsb1Zf{KX>dC1o?w$j?W$+3F_1t;02Sds@;BcsIg>-i23dnT-SVNZB#duy zqAq=#5a5oym5nFp1d0cCt@ zVfVN^!6ob70Ui*ncwSwl6wAEDG9R(bS1f}k@m9>y?&>@iBjy5yd>>hAOC>tsr?UM7 zGXKuBRaB#^D6(HPmFIzGm!0;J;|vGBOqyNU06RJ*<2;ftJ)@vJ=toG-%_u@D!e^1I zQX$1wU1TInd&Lp?fio7wRy*?sNf0wcXDM_p_KipN9&uV=X%A7>sKHHbqeLf9!|))C>Bv z)7qq3bMftgO{7u})9-T2_?<}Y{OdV*Y}TgV0DY1g15!%|^QrpZeO=UQHKI z-~*Tu$5*}Qh&#j|~iiyosx^&_6?MShMK z7V-@h=MT3OqG_e2XgYv8e>{h*&URl60pp=;=lpmw>=WmvQ_>G#K!)QV@%se-g=>`| z#s&?@sUm?loZFP)Xx2bVTUUZMyCy?kRRm;&24+t{YVkror*y9m%itXQ*zQ1!{1<}= z!Hp$L8cvKG+a25kQ$zZtBvV=tOtMfbudTrFj~ztzw$JLLd2IXgqD zp_gtPrS!`!!OnJWdJHVsoPBpWOYRFC1eleUHx)H63~(9soD1@{dP9k3BT-O5&sRM7 zjp5fQuZ^;fu{FTLz;Xb$c6&&-iqDCd!X#+`rH$kv^Ee7BW#Cf^xB`$b*`J{Hy(=X( zb=#Bx%xmzSF!ac|6k?pn4F)1|qlnx@y1*+qBX?fKAr#W^2R`!bKyD38P*(DaNUr&; zih{>>z!T`$H~7bYzyIS7_{QA?=b+L1lgMhPQu7XtPkVtpjibytXQ5s_C#kBr3_r*%R$KzE5ik)dLli!dNtQG_syYi_Fc9JA zj)Rv>xr&OEq0pcS7`YxMIHksb7b!y-!Mk#sibt)Y5f`~Dc86E$Sr(u!j|!~F+V`k^ zr+5?{HuNBf&*&8f1_2bdqA7Y8(eyof>U(w(7FF26YUJs=k8@hw@<8aUn}B65{Hw8* z;F<-u8ro50VN*b)Qb;6AVPd9fdH^Z_#WAK4s4x>X1=JlVLoyj2v`PeT;5?h*i_R4% z?KX&76IwGlJm5rogh`D8f$)1RhaH_K`Q+fRm>cTg*j7J$+WSkD;GttNbX|&jY3IPV zZ8>Zw=E~)&UIZ1pv4a-pdvMrSSsS#c?M*oe_;sDds_@jW>$4Isv2*nqFQ;WC!C;P?WI+pV?)1AYfo{6tkGz zswqAr4aot2@ttzJ|FExJJy=qd7{$WJoiC|;_7vG4cuogaG`#~qAa}k|dAB1dKizW! zqMo&YGbi22xhQ1B?I+ma$*Z#Pm~)603QyF&LKcKnfiR-eVx`Q8RI+rGt;FVS}`(_5px_fWOw1(Zydt0QBTICJW~fL z#3WO|_PljWJdE?JK; zLp>TZ1R2^p9{`!0e)bsEHHr2^PybE9FIIj zKZFkRSx+I>k&%GH;<+{~UpI_p=oG zYcpcQ(xzf?EO$EdD(;oDL^7v}dU{P^_vJLs*NBhP2z!Nr3lRGFQL?z-K-_OgiN-zj zt<912=U^AZEX+yf4ldBnrVkgT%Nhw(d*5@h4`x}XhsrPqGIYxV&~2*k0mxv1Fr@WOuu>^@Y-(HY>as9VaCj|kMge7Uid@5(|!C~;4R`SZ@jko zF60()tN%}LQQY-RNY{O{!qGq+gVP&n6J~ef0Q?40 ze03qZvUVHj=4JMhFlDS(^jv2%BUB56Vl|%Wr}yaKjUzy6qhOP^#5K z+%}CxSp#$N%cIm|+}|o&mISH49>QoC4TAX^o{>;u&RNi9$~{;v2STB3{r}J2X>j*Y zURQQh5_u2EWr~3(wt;kEJbn{QX-FB5Q6o>reMhVZ2S_=K#<=kEADG%13ov#iGk79T z6yQc~{!-pwjj#D2-Y&%!;m`y2*t<6=%E1nG^lL^o`Ad<-R*5r_oL_B+jjetnufNEv zB;ERau)@~ke8^jf#1<<+m?DqmI%Pw6P$195fA~Ged30&&Du zB3N1O4PAr65ZS;Dwp3XPl7ain(0RH@9biNRD$79?GGd)?&49V)E27EOdcb=ijc7fJ z62J0}YkEEu!oGo?gMho4pG-ks&9*LjL7GLE1iabYCv8G*a`(lUrnA(P}=0V zAjuOi@y;mO`BW;PzF%Qplm-B~FMy7pA)7f3eX|VRE%st&w$uCBEE-6KA{7Q@%U!8v z3Hix9aE`Y_7~ngPvjJxzp|%?1ffC64&G);EwA)JyJ55e z0OPN(O0nRMSa8=sEVxJMD|u&VOlMowWgi`koaq04pVTbsYthXbF1NIcmLRI;PYsSw z&3Rd6NLDTDdSoQ#?RV%D?hX3A?%mp?L-GPnCiZ3b!dHk}Jgwn*~LntOUkx zdVjxxP}h4FPqE7*E6j`TI4s^=`cB=aFvg^@tX2wR6(35vA<&^Xu|b^JC{ApmB>Ozf z)sm%);yn5v}LKxNYAkM*rX;m0+>93!dz#bY- z^neeKdjqM}(+Nnn{swg(oI3lN#Ka#MYkU^DUt@ky&_pKF6H@o^iEaVsx7_7~`uv~H z4Zh#DEf?EXV4*+g##I=22>6@HNY+64s42Olk-egr73F-{ONP9A^ccL6qYK zp|s`mEGTprUai+-!+=q;Q;#XR-r$Ae)$)QQ9vp+d@qY}h`nXWeUzLb=YIz4nks)nf zLM{QLSpeo5ew3Ge^1U<6JIGDih@tp(i%M>JW3&dA@iaC*TBRT7^iS~SHjI2N86o%G z-a&@$ZIF#@j1v@(%fgyPBC$vy~|7DC39m>-uA>wb{*B zughmogwYz6T(b-{KMco8%6;An#X%@M&aIj$TED>cI@WEB_)u` zl~rJQ@(P)2Q+AQVLG#QJx|;Dxac0L@VMHHGknFFH6uEcg9i{ zoU7J_VcQ-FT$nJ=rF>&%b18<9<^hu#3AsZMc5q4CGn8lg0e=vyEa-$JPfy(R7&A_c88606pvay{ z7__nxlzbevr=)Wc7@c#G)OW{!DAybJ*n;}aqo ztb`h`)e**GgZ2!@1SL!U2vhtSDY?{;3U;O<$twYxLicT9wf_R%vTW5n@vA7S@dAF> zOe5_0q)aIGh72yZa~HIPybLrn)a)~&ohJIo!pYH)Vs7z?G~-{&Ip>CW^HbmS0}?nG zS0s!?0H~!Qj66i{wMMoc?QU@|WpueK*eDf%xV)J?-Oh2IK z;;V5f&y?E6l!45!T#Z)$v6pL0`>{lS55oIprm~Ls^i+I$CO$o{a5&FJt<}`5HwI8Po=3?_7bIxD zcgN+;sG<8Az$Y9?LR4h(K71XO;ly85?x&PL)&mL731>1T`(_!&=gVB`{g`FFqf!`R z`tIRdr(PH8p;?jXEieO};kc>u1*k7q24FE~rD5j)bO%=BTieEzd>GqFI!mM}FOdzv zoZRz778W369se#@2)jtg5j<|d^g`7GQT31pUA>IvsFv>FGPEVOy!`_+7GQfoA+^qU zl(e!n6`Y)ph7_*4j=t6XPQwEhVC%Lf$F0CD!88ape!%5XM;#1BL|iyd({dz&xwJMe8qQ;h4fu=uYpG#O3vrx)Yj~1_puDV+V*% z**%Z?)J#GDgXV8RQHd@r`rH{ruEnhsW;M(4-IZKPT-iq6g&(*F5ohC(q1C^za9ayC zCGG%Q16Sa#)Q6a|4kG#`zeA{bzksn{$AeG^f{s!_YdtiGGG^4FuLtE!wdS%$>FxY= zULJuj+!_pr4tREUy^U~G5rinUwv*$g<%Xj1b)2v>(@yeuEQgjp~>({i>4I%w97y!PriEi|+_s`srR@74@L9S*SUO+6n(47K=* zbs?J`r_MbmB64WSB7~}}aR?g?E5j1?xp)^e8o02L16!kz@>o*u)+&Tt3?#%gHXO?c zSt}aPLpZutJi_#u+{6}sTcNKJvake;%4=0U*lEiIe^`o)q|*1dvAR{ucvU9+!Sv$z zS==70AVY-ebrJQHY_p;-n2!dvAe|&#_(!GK?J0Ka>WJN56!?}`qvI5+7+8s>d(@|K z`wwHkySWTD6kWO+7+BUJ-Pk0hfvq?N`IwI_1cqO%sp+?yD8AJ-8;pwtcQDuy^5$DRCUYt)!tNHI|XI6zVJ(S76Rm(7E9l#ONlud}zX3Ho}s}xcd&DhY@jjNh$t< z3N9}qtM+Sos_g$h1>#Lx*c{FDtOxr=qPhn~Kkg-)gNCpo*Cw4LV2K~0{IuqrSaY6+ zSo+8c5KH5$P>k7f8uDQ))VNX_L*E77ojmV1HWVwcF;HKq0rRDNnp3-au25*~oVpG) zjBgq*A>Y3tuaZn=kiBD|2^wl3H^5GTa<||n#h7eE>csyjqjf1V=ge7#eyN_F;53)M z^Odz3C6C8EV^jE=Aj}-gk_D#*Pj<7Y<70Yo52S*8vOGLOciq3_l z3FuuI(vTJDa?SQMvfa#Fs799?@;Et-J`E`5c9~aLiXorx_JiQ!2$g%(07t_0uj#O( zYdD-N@9^674CpP3u@}YIOQ2z@p>d=e4v2Jesx`S9ABHKZIkl;$H`C;@#|HAW3}%Jp z7R$cj%g&dF16~C@#g#322X$SBn@qCH3?_W zj6^hI7GCy0n;1z;)uJQBJrP|Vq4fN6%5-4Y zKi;EnuoTsI)nr_zGq%OA5pyjQWHr7Ua3B&D_!&ZK&l}Eifde1#NUgBa?Jm7SQdSAy4?0|;z}frkYH5$SZQzbxFr3e_#HMvD^)vlMM$bE+MF z?Wxb0f03nct8G%vI^1P+<)Z2w2J0~JTr)Js5jQArc0^?MY&NO!-$PSe&uPZ$KhCXO zj6}#+5%Nuhd>0|ORv+?{0^R);#+D$7))vWFt_g3M{>~c~j&PV}7w+@fEpCTrZN^yH z&K?xg?+L?GCaipCJ4*t05lY2 zL8k-P?YmOit1ifsk@yxZH{UgxKi2p*fE!_>)cW9KnZ#o&F?OsFCb)g{c?=v^K#nj! z4bzlygqbgIW{{oq3uQPh3z9={3&`m!CNEG6oi|CHN5Q&iNO`LSPG5;e6wSi?sl_B# z2ZPCZ{aOiV#aGT_A6BCbO8?B z6+Vw;MJsZC0`0xr!3H9Ch!&LcC!SC%l@6sk3$2kTmnn0smk3zwmA+E4X)Zd~CDdU&1A?H*DPe?|O`rt!*5yN_)S`o7N z4^y5!;}CZ&Wo8+~)L8>gA+2cdVuWtt5Oj(%2TEyYiuUS?FDb;KY;mZGIFv))OI|^X zvmgFxMdj4BI8Em;-e>gfOX;6JWd-9PLYsq~vxa6W2>4V-R=`~h^UyVW;5##!z0nL0Velefa>oUnM-yQM3V;UnIK70&tEvHdWxu7_h zCNiTo4e^0&;RweH?UbN-aI}O>0=Ujd1?nrk+6xJ83FNmOQN-PbFh|vpG8a9QGASnT z2+}7XrxcU!7@!MJ@Ow(JE@7y~eM6Lffc$2^LHh&WVM+iRW>9b-8*%NzI6vj#Zb!s$tT~4#cQP?^7$|n&oRAY80aL<*ub;6XBFAMUne_YTK{3T zOsMZgKGrhbjv*YMJqRBZ-48`kYpG}3X?QEI_lk!EOzjLH;ZjWqb-DTk7L!J_&O@q4 z+<%hjhs%?Xn0u3WqBXXcI+h35>4+HsvFjCBNqEX03UNn1bIS-|?^*R(_>jLmm&v9P z1BFDNAAFe*NL2u)Y5gS48bxcr72xaf%rZ>Di_OM<{) zDR@>b8>q?Bkynbn#@-0fT?s-&YjsiYU4oit3;@aI(TTCI$Q^tv_W;|O5*jiCZuDm> z=#0IEC#b~=p6YjTDIId1g$fh zNHJP8Q<_|tQefQ^uBJM@S+k{OqcJk6bF38 z0YB*C`cqhW3QCDON9G&!3=606Llwfw8YF_(N+{qw>4zb0{t75RMIU^LoZ|*lqjOL3 zYG3=YFp)t7v4{lW;=9tDvw$|-Srp?wG)l3y@z4m^PXtt{^^v|t245tod1Z|8)Y;yJ_N6x z%V#s!F7+Ji72dB)sds-OcI^CgS=0^yH%#{tuQs*}*1e9+`F*Tz%!J}KoU9(o!oX(z z2b14ugijytLtyJvph_v*CSby^SK-Cki{qGvByPCxj07&AGcyPoDpOJbeXt6iM@UW;RBG$4Ro$-N^37-Q8V)-~s+K zQQA`>_Vf~aDk)&^d(al1sn5Ch6EbVjlj7&+F=>A7lR+o>W2I!imDy-yEG$bC!0nMH zXPPXgLvQT6mI=^kt4HXK_Fe~B+?t0MUS@I}k=t*8gutI^V@jFLSl`Of3F*Z6{;WGY zL%7y$e1lKMSyqF25ia(n%7ywh+Pj?*lX)U$F6n|08t1Q2s(Nh2t*Uph>Lz?Swn!=V z10>k3e9(^Tw1IjHX=rs3gv1&-%9nE#wLeUqsMuvF7G}N=iPYc z_F2?@77RpW*9~OxrmubiT(>?!;gsDS@cdFaWd?BgtX_uCP|D*nLK-ZQ#M<4Y{n}Kv zv?W~xybS&t&GUAJ7mUicSl@`|JkFI^X-K`Smt#buobABe#dNksljHm;Y5o8dbv^Ky zKS}HDg_{vReT`7xMW#lso+HCUs zZ5N)ZHg7N#X|MVkh_u&~c!VWTX{c;SRYHI&gh%K$emeyiR8`7n(fVII?TZ;LZ zi17InD7M1`ba3W9YT36h`x~yn86dzkp5bc&7XkkkF=Ry#h(sA2cNBbyl|}0BRDRSJ z%C7Jg#WILU*9qrktqHjwePJX#Itq_c;n4}T{BX)JVwJa~+@p5rhh5q{q{`uW{3V{R zn&4*SqP6Vzs2KuJxVd-5+sG*!zcmiuZ;CLProHj&gYdNQhARQrobr}8BIT3``Xk(w zza)Wn0EguE`U&@_@ck*q@HNS@B`AsM5H1cbCg0A-u&Fwp@?@6M2UZUFNAAy~fHSp- zMYnVt8m#gdB}4Ov7Fx9itPOkF4qXrENj7@AR#go}Wqb`KU1*N7EvuLm>XbbZX;8yd zP`@_WN?f~_t>VT>v)~QV(Q1~qS=jTo<^HgdLTIkwwJBcBjP+_HGwN2^QpQVM+QZxF zB^D|JE&Q}j7GbP1V-Zx!1hhE@g*4{5Q2A8bzy>4H1+BFj!2s6R>2K85j3&$4WZZg1 z!7{yaJ;Fm>H9Qx3iuu1bNWmLezoXY9{>dU6Z?%>-{Dz_NaM;oqq~c4<7l(l zbtqnWBoYKPinVIVXC%6>%7ez~E*Oy9S6Ecj*NW-uz$hNsk7|K!DYGr(3bzZNjf7(# z>_;H??&Tq8*x?39Jr99OHKWvjit5^qQ*1j5{h-N)j( zyE;-f@FT~7rnvF``OFAZ$Qdyj4lMo;Pk>l&gs>}D@krHvhAbjt+{xn$PUtRskI7WF z$^v0$Z=f`!-oG(b&@0~td_wYM-n>)(sls4h`C9v<_Auop^~L~vT}8!bpMYG-Xw;zY z3w^gkw}Op21E7TeNlT`nW`FDL_(G4$D8?dzF`MLU=#9!L?^QSg7Y+WW0$p+&z?eO? zZA%u_S;toZt=KfUj;!zlR!EB<97gIMv>6Lsvki*+rEvfmX_IVcLSaekq*AzDvdX#g z0%U4;Q8f3x7jFN{BB!h{h%C)0u*V8y*guC;MhKQ36omKmGy-6(WVNAqw9Y_0S}z`L zpu9&7VE|H?sn=4y{{wBg`2(OhM2DwmEDR>Pk6@*_?k_7GA21cc(*o8T83ZwVANh{q zD)ZZa@F2^we2MFf2dQ<#;+}K|w<*7V;LKrvpeHY{!YiI3&~=p!rm<+5Gp@&1dSWnb zqM*vh;Dw)hiCIqoj~8X}1VdkX7ZhdbJ&K*?!?fk>F*MlA0}H@;V4l9bd(Vr^t;9jf z0y`!hV&OAS=D6p7Pj5n`DAlV4$*WrP-9)4=gLjCBi3VeaZ8aDGq|*UAr@lGGAJw=!o<2WAn$hV-5D|&_ z=7QJ@&4j;epuaD#-7=QDs$cOQ$cR@5uoB919hp?U?j!=HwPDMuTzD4F!IBC zc*zhx``aOYs|gl}s}_QN98K72x-42A2E|_qP<%Tp^u}##UcuYPC8;}5G3xZ z0lwXTL30OlXh7qxKsma>53GY_nbct#Io7v_p<_NR?6F38Ul=GyCpA4dWw3sqR zOsNJs7?~quwvzUOJaiX{QD zIoft#kDM-+kx+>^Kl3m&FvN@u*~!S;zr8gpsTxL+TNR^mopUp!S$&>E#MuK5{N`l& ziP4bT`BESykXA3RvzR*I5@eL{HCl&=bPU-Z5&5!cI~;*|?lNRn?w^WOTcF>HdKA^2 zP^pYK1$iaw^RS!dc8|lb7Paoem^hZAO!W+!a?EHfVduB!%)!QEt5zr)fJ}0|b`b2b zu);w*+TJ&C)XHp-5NZD~p||~~B1l}-h^tyE`lktEBKP^F1>QWY(_aegTCm)g1I$Sk zU4)~qMc^EYJ;%oLa|0>w?|r!VA;?#9MfnJWNaw^DZ}Q8#C&R=%;#UneSLc0|3I%NNyiI@NQG0hrQ%=TvWCJY~Bpye#S{1on ze8zUJ(hqnjR;~gc?DOAPMSTPDc{o|n2~@Bix0_8Vy|%OHD{u+BhdB1buRje*U^dkD zGA~}w@ok_KNg$okVk2?)mtsaU!-p^{*`W~sm8AuYPKvBDw(wb zWh}?)Ed`W)_A_IszWXoo%D?^!;8E>``4(i2r{k~+Q#$~td>+_I;!`3875)o>MRE=s zqa3%TsQJ7PB@gGBK5-7e^W-UYfL&=odvkzN*64CP9_d{lsry|0e(Lv$Z-U>KU}Pd3 z5)q4_K1I(PjlAMbOf)O&xi-LzGejHIH{&hIvyl0v44g#-mgjjRtg@KDf5-c#Y{hRI zP0HURTla&7`dIE}3;^Wq9Lm`EJ4$<1bd^N!9~9ci9<>~BS{IJvSj-B;(rIn*ykhN6 zq!usrz8090GAl^!MvAB^Pl}B)0mEPMPcICcrDxqyDekwQ7#hj7+lBWX3ea(<%6daK zAUkDJ>zj|US!zN|WHHHCO!A|^+b!`tym>wttK@VWjMlNgDD6cS@K~<0RB|TUmW@%s zXD&oSrj!lGnnvXQ44gOAGnPm3MEzj`Qk?~}=ZVs580jek%UI;$?EajC3aj5;U|r6L zyX;BrWdvT3sG@G&@u8#E)iKfY`vv`vJzDdq^r zJq$1s3HwdKIvxNScIyKuX0aNiZjb>u7RhNUm1n`tTXx@u-*)oMYsBx0Fal2|C4GjJ zzBi__^KJa@Ah>ru+?4l$$o$ZJfRCyM=iBE40cr-{#H;*IF^kdoD@C+lgInjg&)~UK zfjo!4*ZH_JL{_?alGV8Ty2~br5i^N*Cc7PTk!G0spuvK_o$+yE zb`PU{iAg{0?tf%)bsJW};=fQ%^8u{iMt8AM1r+1)1qIrgf@7vutC%by4tHVq5 z8**x>CGLiue2PyE$ie#S%10VmIWQQyB?HTob0Q-}-{1290t0Oh;=1#|fe`8_L$;$i z=)0gSYIn|1g#RPLKZ)?qBK%(pSn>>F*5tPD@!iMQ!pDL)A+OY zhK4%xE>Uu;H^=W(kI?~W{CdB`egg(?JKTTA;HlNE@pTAYnMbRa9aDGz^W#dg#lVKzE8EuU_#H6I{)r)N5=)AFO zQ?OW>26Ch+oa~{EmTNb$TQzwiXbJvl>%pXC>pP11Jdkgr`YpkdN`%iCWCSLpbm&+o zU;ujcGzAgSZ77V7d71;d2gqrFz>)p1k|U3HQedBzS`DD`-M?{MR{KZ0QAl&bK@!Vv zlkNn_CU`bEUT67osG#`$j0XI6Y{6?x=TXeAmbjSsg+c=c;zDzSvhIXohBXst0}bkY8tj=I%-<1vOubu*IO1zr$rJ7xTj|gA)toovHKBl3r3XcvJx#_TS$c` zt$>Tt}m5Oo6Eg##e$p)R)XK%pnrp^#4j#rAK4XX>+jsB`2Gh?b-dOR06D9(LcI zlxjcI*dynm5&4GDzosY|F#}Q&DLss$qj<+1^afh=GF;e?pvlGvRtB>A^KQJS1J0!G zU`4Lbq@ugSBMoIs0}*!?ha{yVBMVkx;CxAL6C&Af2I+D=A)a_D9zG-6vHUrznT87X zBGw|<1cZ$<(varvbwK@ZI}uafRz|ox_ag;}Gx|XZYqrIc&|%ls0G%KFiOL0Mj0_x^ zd~#mgk0G+W@&>Y7Y2Dz1T-vLKi&Q?~PgUnvGQXEQifxQrcHkI^wk!A4!LxD%93b>z zZVZhn{@o|Md~Ij)-4TmI(f{56G>qzuUl**lXN(v3Hm9Wf;{k2b5ogM4c?((JtH^nK z1@}O^_g5ov^@V}B`chndC9b}vlGDB5+MFO@LxVb;A z>7(C{iCiWVw%L|ccyKHpx-_dY*9QXONaJ`Gd_O?0on``QK9e7QL&EV6MDEY?V;0Y* z5`u0Jxa;F^sOZ=ZSRvJppoaGkJug>1}79jm;3P!Pf zy`iZrqKEgU7zo~Uh%HtNb)^ydVVT{YSE2jSMsNog9-+|Z7xY$$BTvPVXW~c=&XQqN z<>9Sl3>Gl(6<(bc-=YpH;vL};UGR>G&Gw`|H-qg+^KYy``4XRbvOyt@_CAX8ksU_> zNlskypCrtJ$;AhBLcJg_rV@1d6JV;|fWrP83TJ_E$6)k76fxgoWw{ofdWKmPG$jD# zB2Ad3%K_!s-Ve8}c8rlZtp20RXx(>OsB8lrd|n4UNl17o)y}5KCM?g&DWJS7V|kO6 zeoTh3({un%`sY*J-o9=~Et~7Nz}V~mDNuUuTKv}G>pApe$4k|cE&Pd%(r|Q+ho_Q~L9s`E~ zg-Z@2De-VNo~A11vt-}Zs1x``-^KGKK^@5-oHb^n$5lvGLR&t-wM8$zt%6njKHL;0 z=>RQJq&eb_9m#?$Tj))%b9(HS!m08SukwPKxkxPwK|O#-MTL&ze~CFg!9nRp z_)0y=$DuEF_oVJDN;{ZGDHW^$bieTz=yq-50K7!}s;1PnJWXj=f{|t)s=_-gU3(g% zDTY|Dr59l7ktOh5PBv$+dQhk+2zLUXyaiTJeM7H<-->GS5S7b5QQ=SUPONeoffAnUA0XUDza^6} zL^k01z6&hb?&v>-+%5HesN1P!xkLVW`> zV*?u|k+Efx*S=CvYyF@z)n#MAp<9~;L5K8oHCb;07YV%P`UOE5EyQk1vD-@Qwx*a> z<|r`Ho(8{XCUSE2e56SyPczYSxCp;uicHG|IHm2>``6Hb%GH3$_@c3x>%;^%TqiE6 zhbDGskh5|gD!VkWW|IhE+zaoE{dEx5NoEfmQb)yiCNeYXy}Few248DPk$ZchUI~H# zXZA-uk1fx^XL;QJfNQVcwsUV=_jrYy2^9rE0e&z-qE`zCVJ0 zd)<*F(eDd2pFRU32h)?N>}E0#)V{|$I1F|!5uICEQ*JVdK8-!=d}O>K-{ z6L?tlWgE7#?r-FHc$B5@0)bpqeig;~UxuY8KI$b$+w#!v;u|k7j^yL|WFI^jG3-p) zwr|rGux2%qJg-lKLs`XSxR58JzdPoTN;%%R_PT*VG>WN4kLCsfiy2M$jO#ANk&pV5 zEZ(fgZ8p|Cb}DT?hQV?+i#_;{tp0)I0mGAh9Cb7y8d;f7QM)GLrl7eOQpb`5{Gj_K zOww4tb+~q&dtYA}5~2YyKwz?NGlV5uAuP#eYG*R~wdoDHJ5|YzyeRnIJlUEg4;7Ve zW7IcsEAv3k3y5Fp9&U%-0hmZLWx4{^0TfcnOhMui-ozabGCwo%aVvh46_S++* zem)oweD^&I;Dm>;RENTy!Pu+OO@NSgXFEf2wKXWUHaJPmh_$i_zcKN*#g`@@7{vQz zvr*5uF^>aK&+ftQrYd_UiKvy}e4k)VgYSJv-R?JrB-Z)@<4{0bpzSSjNETyJNG^-yw3sgsj=UF*^6Um z{N#o<U?#7WTc{JgydBod@M-u>r{qHY`g9BYl|eRd&uP##$|?~828ygjQbb*7PnrQi0O8e zHAan(C>#lkQ_SA1r2kuru2~;ZC)}NP>9F~Tp}RlCqm zjSxHX86&osCM?s6T75x}{q8;hLiD@qjeFi z$Q6R^P^IWL3b|(g!=WfLio>x{TN*R{9J;PrZi>@>444G=@QXIo*&zH)s)mQkU2?_Y ze1~xM>EOYVC}}}S3$d3Xdpt0 zL`bm+X)Z!qP;C2Hv^eu3m9*rs)O;z&6o)_9gloqg?YYV5xEhS;U~g<*3Z^Z_FSw7? z`@&|B-w<;hVc|;O9V@W5HE$`s{RAVu(JmD~Vc2f@AET6XA1K_V#|8KmLb3rgDI3{?3%NfLp!XAEYAEV&U{DYwpN%+AMI&m`<>m2v}=!4qzPA&3|S-zZDMyI zsYyXDfcGd1mRprx?LaY)*=lO?OS0*?7^U4;`+%YMY+fmeaxj}+Lh;b04V6r=!a(;N z+8@+|#qGUyTV6M#aKMQ*f=y!nPP1shr#<-$yay4M?ZVc`bPcaFByk(@6n7(|-T@Y} z=6j;0;*do+OaxNf;zJw=TN8$}ye7>>DD`>hX!^Zy6nAM@ggu^t&aDc^Q`h~G_E8Q{ zK_p@ol2m{&E(I;9BwR25v$NFy^JssS>v($ntq|P@)`O9$f9v$=f&MdrmE+kS#aR--sxj`7D=`r)8E@ zdx?C8fjgPQ>&d{S=dfTX}9{T*x4#Gz@fpuDw2Ji$vh*RVppN=vGmen^#o}G0lZ?&ry zqmR{R|L;Gzb;}9{@D0_U;bLvggRacbDD3c};&)$oGiWvW5HeL=I|6IBgN1)6IuOJ=O9lP?f(YR-0o&#>!;A^a(q*Fp*dko9^MdW)NSObzJ^`DUn z(RweMOnJcEhx-;sLz5VD6Ur>TiIQ(UNjv)twwsIV#l;OYvW+`LUGAy;8JdOQ%@!>n z%Pz-ME!Vxm`u;owCdIoT4;cRR8hh^OD}0k|H}crenUVhC|$!(h_( zv6RHAHKZN%@cdP|S`9DN4 z{P!A zLdK^npc<#HRwh8;VF?#8*x^ezqJHcH94*Ki$%gYN(l?2Fmiw6n$N#malxPmO6XVnl zt){0y^AEygO$*$3e_v)KM%#gvVe_rH$MPNzz zQJp`BJo`&P_<+Q~jre-4B}~+IG@y18@2tuPBluBV0ke>c%&GHm=2^SH8ExBNblx{rT@qR#NfM};?Kl2GQ5=KgbR8d^Gwyr3o<(5lmyz}nZ8 zwl`P5jYE-x&9-7Ju$F5~6)UVMv28;PSJ?i|sN(qZt_g6I-pJW=0K!TlFJtEpq%LV4 zO!NSQK6>sz=)4NJNQ+JAN&iWtNu93{QxVsZLf)9j4M_67k8^uiH|D>E3g=hiTjhR~ z+u{U2`+AAGxyjg>)Mt6m$bM9dG{0>IQm?CQ{nm;yo-(WbI+q3v#Lg}2?vsX=D#Yd| zV)Ih~w7oUTrkeA}xeZ+@3406bDV3w3>KIwd`Zbg@va8$(rei;AxTeM3A`WV8vGbgM`*GTX{SM#IElCn5@^Au-70Q&% z?vG(=a1nvUfHb7H+bQy63n>4k_KWdbLh<=Ck-ahnQ8)Cy;eZQYEf#C$%T_XUR_-;h zPSaNS3T-c;trXhcmYQjZL1O@Gwf@0BgHN0~mSOb;sy@CvFlA}WWnk0Tru1_&%nAn+goJtf& z@u zHS}*O#U0Q_k6)N=R6jt7Nc7Pd7Ma~TYba{#d;mc&f_+-?4<=MKTTgf?{Bm-nf= z(B`mECg4V@!VFZ@GgFG+d>;+1UQG^gAVf*WZBZzoY%;38sfiZ;4t0N2wEF@-?G~fN zI9By%iXv_J5C{)5$K>&gj%4W}R~31Whb|`Qm@%V)YILU>FQ&3CSyCRUY<%@-OV`W- z5kzXp?^zvJ6P^lHr8H1A^LMjs%wVhp_{@A zfT7xSz!2uU$3)t3k#+*w`^l0Rf13j5De-Q{6e{kxUaqK}OPQWc^}Ta{u9Ss#o*`o5 zT|^^EDOgd`fl$i7#?l)nf4zFxo#TX|%bM>@$><#W%i>S9_|t>hjAqJgjCLO;DcG5O zCmxW*&nXmE5RM7(z1W9?w8sUXLYZ-o`7@MFJ(;D32@-iWn**+)9`>lffN`+?jcUid zW4EQ$&C3M>a?7BGJh<+!zJMl(%bSm93;(7Bxg4#;x`p9(x;5qK9Wkxq8QI$Ie~i>S z_mo~OHsK%UOl;n=sKN2%>^eG9n+?6oVX%vBuDQ##GjRfk_Bd8l*pI;snnkadpz!3Y z#TZ4)vF&l~ce4XFsGdU~F|DS1=PHR;PL!mYF1b+hmrQv56l*tVgS>@aLQfYpq?Req(NsVzgKNg1ugH9P7*Thf_#3_K_bJR^Lge@K1)jD( z$l;pU`6*2ZoYNl6f3?0Vw?)a6br3y-0{yTtZ z#Be4Y0uO^ul$751Y4FiH8|0-vAA~;KX-46zqp{B7l=wN}ERGJcxjBg4Z=kTN*Z5;J zTMu1}uhku5*vMaIf=YCr+FsWIDqTNZL#A7xg`ODfpm>W#V4X;j-FW*d?#*4Sip} z9={FvZ3Lw~@Bb^>98L!S8@qLyi}KzdgIUhg^ATtmS$&smEl(h~;KK#n8XTa?kX>@4 zrZoCiCMZ_rg30QYC_wTHkrJ(~(n^-62}+Thm~?&CN@30&17j_c+ekM&A!9eL?{ zJ$Q|@UAr1!ysTD;6o!Kae2}BXsng=H8q=;Dyb9)V&_!OngZ%R39H{yFhR(oSwcq*! zMguA{HP<3aBe?d#z8Oav3SB~oxx1S zHphfowq#JUOQAfNH5*drlPnhTb=?RDv{B;AXv(mxMs15%Z1ter>}F`$&;Zsm@7fqT z@<;eu^9d=5sSpuh)h~Dsv7$u}n4*9bdu53a^P9#Lsqs@Vauq0U5pbEG6+oDR54ySz zsir%u#pb|D@NO3t((LGqJloX=kUGVO>ksr)Et-WOWOLz7<5^F(7TpI^RIldfevc&l zk}1aI7Po16%#3TkWS+~_>IQIo6ElikzZkFoF6hS`s9>TQF zms&pGf@!V4k=%-2V#T>VZHP2D;WFZ?`PX}b#*$i$!-r)5wI0{WMGNubo+BqI;n+`LsG> zY=B6hNnq)&{J@(sf1|jcSW?pR1~{5I4s=4%9|^JyldC<9BS&nfQeRN0R6d&rD$ov~ zDcO}#rWebStfw)JuN+zz->$pQOE#J=h;M;a6hbA|Y{IA9)6UR{gQxj4IE`ra>)^d- z!l2V|BTXI(KGOUUMfLmzM&wctn5Fcv!VlV_Z^mdhX5Lx_2;K>c@LNpDcbS47S_ocF z_8&s+E;29-SoSN@u(g~hk; zA`+2;`n}@mDBCs@{j=12BI|xpK#=NEkFx93BRT23n^Y->;FDsgW&d~Js$2ar6XLNZ zIAEv~!Z1d!?1d7ECK^oOwypU5-D7ayKYkHVo~->$!ySTf@1(iNq8Qhhv%H*qw&%hD z-@n~A3}(X!N^oX<6~Y)71wmCQD_&5^&q)lO+LUmnl9Tf;qlp1ys*qMkvAjOw3p3Oz z+vCOvC~F`Ke=E}2tTqz&SBU#7#r;*N8`r5PdbDUYerqUiI#UViL33Dy?LFTd&M@OB zHjG`FrvC?77jJv6Lv3LsT#ur|*5a;gFe8DYXFZWRn(^{d7IkJ~LUjSEkSb`C^U9E! zx{NV?bSE8J8uFAp_H0y$E@t>dzi)2*1&+5Z5GxdD(bLfo$GzH9)Cow(rQX%R&rg2= zim-C!4cYzQTpapT1MBHm$xz#mfX`d)9IBcCc1hX@`TaUH->VZf&ke%(n0CkcW-P(5 z4WjsoJoTyN6EK6ShARy@mJ4~We2WkKjck1qu}+koy#exaJrEd~_t-)!XG0I9E?0Qo zRG~HqbB5l>@7ADf<`Z+tjr?6%j#U3w%DfI+1O&*DCqpEE6o@FhGwRq@8iGF7W&VTU zYr80LU|-x>6}+vZ1Jv{2-&67vyNc!fa2^5W^9@*3(MsOilOESu5f#&&_Z7B+8ipJ-W(I4 zj#kL!jcIIj28K5H08J_?(+kF?{-Y3y=MAmkVE8*640~Xfm!0ECG^2w4#9k7li-3GR z?=skF>Bj^rdr%**FS`YyuIy|C4el&R{sJj=rv;w>kxyBUP4pXHdq3XB!+iR zaThMf*k^4K#uGuSggaVvzI96~I+v^WYcU zG#Fkcs*ha^MPalkjKR~ev-J_z)nmgvG+?#+DbI~=En{L|mvY%zNiM;UF-0IPr`4x8 zB?JG!{eQw^^k2#w+!lBJyWarcA?q4b*^B8I6X!JQwGjKW?AZbV8ox?v^4h!>rW&9c z!v56Cxkd2T>4^z(+^JU^kM+9%lfZCFu!lNVTKAAVg8Q&*wdOOB)+Q}Pd`x_~4tavG zMd+I9<$Q&q$cOW$ZV#l!=Hht^fN6X(%2*z7L+W_wu1S3ag=IF_dD{p8Ox_U#xlsdZ zo%sd)`OpeR784D)QJY~*rZ^0&M(V%S7qj3K^i3h&hT=UP^1#FN}0wIj_GM#KL&g7+&u^t=siF>+=l-RkVOB}6#e`(-d=Ty25k<(JBD4Egfwg-NA>Z)0b_+~f%|5& zm|%B1F|d|FhF1ad9REY#0Z%L&&!*V3nM}16Us; z`+GuR;u5eHEIQnYZyYid-oXYT!aIb*r!P^M)h@vD3M5DGehLH^C71iVjSU*Y>je`& z{I){GJr!}!%yBe_DdG}F{73?ot=euWi}WcXeJWzuFw>&5+X{C09%Ly@f)zh8LF)Qy zf>A?ZeVCDKcyFfBV(L-rDCP()udwXRtyPebXyyUYgEPgsdm$&;mf`SdBy~chd9=DJ z4hoeTEz7ScFwF?2r{pqpszTJ)V40_z=c4eVl~maBB)&2sf{&n1S=t7f7oU;Z{H|;^ zfYceQ^*9calXI*l39Dgak>Y1vWJnLJ;dBC^-KW=eYVVGL7xXZ3YdGny^H;>VnacGg zYHtrlSGLlTRVPLuj^oT3C_-v}^4^^OqD<;RvEfTFV>8SVNb%Wqcrs-dIhk&jB4;cNR3_1ZBM_Z~5O6fBdB@N>uZS}^M~$KEfP z#~W~7eHan|Ioj1n?Vi>cE?M=AV$RuNRP&B9-qcpO8;X-V#7UfvdvX^Aynl?|f*p@+ zScHq52r5dpz}#3i)-$~^)~DDztS8+@d)n(i5MXi=i5aG?Q=_oFx0@IPtpd7XE@*?r38Kq4Qor-X<6KVY0o(!1GU5QatgzB&TisiO zY}cDVn8)4yofm(LU>RF$?_)TVi-YJDlCHENOim&@@k%QEL7BsNX42dz$hGK8=8$wS z9dVie;o-vF)J1U}4_zF$n?s_)jyVvZ3DXwjvG5PH5uMbI_rt*@WFOlPepn z{GzhG))=vlzcz)$vU8T+hM1}pIHCE@CTbgB0E#!3+PU;FRzRAJ4XWbJE3D074U#1l zjr@5XW`CB=;eRh<2vb(5(R9wnzmPgRUO-N?IF9S|QS2F`TNWl8SW{%wHb8uS5Prc_ zeFlMyjZRY^zZ3`-#zwkg+Z}R>DLcz}L!|bOyyD!KpOb|9Z#a+A3C!~0S4ZP~70Ol(BX6bN-ZCxI;o-ln)x%6o3d6BohgL|lVZ92QM!(}2 z=224{p}yArnrx^f@2!tzSqw>{gh?D(z@o&F8`5m-fT%u8#gb*@>-b3_zC?;IQRXy6 z@ra*x-FX3xl~#KK<3%4?hAxamV1fS3z$Bkwiu-gtrTR?8t((MnAx)PhL%T9KrWiL? zwiX;G;{X0AB6Ksh=Uh=KJ3(yWVJ~|?Alc=)1Pk8Ku|JUIqf5^eLG|!?cA1E zw0j{LG8~h->kOQ|1k87F9^&d=BLBXKlqoel0t{c#3MgJOEK^gn1s zIEuTRrg+61Tr4l5BrR|J%82Q}BN#EOt8uus-_9gU^QC^WZ3k+5^dWBArLIDEEZ&gz zFEx%afMZ96d3)q|G^XUoi71e|fVZpW|9(Vfy}o3*h>2E*WR`omr}s7#uFe<^ik=Ql z5zbpW4}QIa7erIzwOW*L*)SCPN!J}EkiFyN43J^H#=`Y3#+T!&_)(AZ`!FjLx|N`) z|G!J{-K{+tjXPd?!G2tT9>0`A3{ua~erVF;*gni~Uc)MERLK*tl%$j4l%GEix0cBo zJ%+GXd+>Vh_9dSUct#Galsb{qawbSUA9cp=t=*iZ5Lc#%D^meJua;qc4fX@b$MgI; zJfsqnWst4+yl93B7GKP{CqHLFYy-6t#1UTpw#ZStnCtg9&F?BKr`0XV_q#xCX(`zm zu-TkzF%N66>0EYXARh~&o;3$2me*b&jpaAPMq+HFK?kyJIv&sCLs=HQ;#X=tw-C1h zCu(5#Dp^O6)08UQ`#<0vy9r!$3P#{Ia733gbwq0@Kg5iXI<(`1#3ciRJ{3&C}^SgarJx2z}90|48h(veg;Hua>!hm#e))L z(rk)cuQ9o1AOMlH1YylR%wWjdW)0*BUuNJ7RbwV8MEn70JA)nv$i`NPGBglW&%?o} zThPT0@2nk6)^pD2nZ~hJ-oOz~N3e~+ilHZ)VGi-V1xC+r6{ao8onM%Um`*U@{7`As zNM9#{uwO~pODRQv#PJ17O1j3*V4jOv_N7^ZV_L+bcVf|d9B8e#W{CR9E8QY(CAa42 z%*erG+(d)c;akjPaq2<8TtOri^O# zo6n5=1F-RCEPmt2YVUH?P~EX&DPQQZYT)9CmrqeE>ksmX{zHa3J92&m$~XTPzb{mV z*q*>U+YEsgeU3f>1Xylbq9@(4AYMb{4rK4HuH??7{5*hmuC}9m9HebR&F{}Z&Cq{Y zwP5wWjoxa&Zlw?I@(xZw!5=smx8r+U)b^oqq3bYc2_L&M?oqGS3qzb9HbB`7*Holl z$0nhpn)fWiDtvhjY3DHA(g}PywF;KN)f==wSb~{% z0GSoQOcfZ6+=|QkD$2f3>;6CLf=Vu{E0G4)0FprB)T5$)qp-4Cwq~+*a;vTAcxIHh ztahL=%ht)YyM*C5Qob*j+aXXuFz8I!pn|zVbdXgleLPC-rR{+6k~`k0=$Puvv+UHY zD?UOk!>+YhkY5e&^R5Hb*z)QFoLj@UKxN=cK3U8{BKg}!Q+-FU;-aU(a0a628Gbe7WfNs6di|+D=uY2Wu*Cb3 zOu@6$n83{$b53qxPSx#ip*Jos8Pg_4f|N)B3Ne=R?>U%j#QJ zlw7u&=b_oZwP?oW{!zSAz*gFAYoLNnoC7M^QnSs-=199-`ha06Yd8ep9=(`pzu`S7 zb7wXhb}4wlt!NL$%i`KJacw&F4FX{+YtYTu{+P{1IPQ1hD>jTlure`ln-~a};tqDG z8kPYQN)=2>7gRx3^OpQ%eTRyDvZ1uk3xi)c(D!!-ve0`u_^lejuxRpt;!T*>TV6$J zd*T&9^wM9j=}|``?}ZzAxpab$H6j4#ASTblKgszI2tn~ZF66qu3@;6KzlMVD{mAzO zleZz#ecXDSAlGwzID>l82c)e{fllN`Z^-E}qs361<*A_5&%<$TlgM1CYaZleP3Q6+ zultVE172;Rwkx)SPWByxs7617vFKbFHmu@z=xuWtk{~*^n{o-2eRH?MBHm-H`<#eQL1vmcd}hq4)*+@o^QUeB)n$WqOjEE~gae9#%_ z`VuOcyV>}G`Yh%>cQh`+1xVcBkh6l=iJ=&2QyGHNDZzAAeo9(zYJ@snnkiL~@2bThKuCJ=!iPvAal zaT?O<#gX8BwK&WVr!n`YpsyPk5yVAuSK|gVmAg2YQrd0ATP}bD@?XT`5Vl@Vge?sK z9alDbC0^HZi!<`w?ygrDgHiD{Vx$=0$q?K0GzIkKuaxT@)pAWWL(rM0^RAn?mG?Z5z( z_bnT({lsB1e!$_fu@@p~?oo8c#Dy*6`3dMqNv=G|S%}o=3D+2gL+5|Hf$+x~M*}e* zjF6LYr*2P&cwR~B-7REM5B#!r`h6pDfy4zNF4RKC7jX3ynzTMinT@AQEy?xKeNX6!2V*%x_JsjDzc3a%-3#lSQm6XZ4!Quo#{S0SF}BcPRW~ z0tO|aKgCql!vnYCRoF3u2Ry^(7C%20If;g6kPfu?52^1oxCKy5+EP@(p}jHRn&M)r zF@@W{mZ3Eboj^9Nd5_c>R|41gU30@@vw9SFz8SB@gmY0?PyILc1zH=iD+uMRcIuVt zc{*?ITFGa3eUDBq{ea&`7#Stusaqqkh#=z|zv3F2dCO(7$P3vI zdFw*P+~bfni$(Q7?WKAHKBLIyIlPDf`g;eWdSLAV31@O=w|GOjU{lxFq)8BA^;z8uMeMfSMe2SBth)DG;f+8U|Fl9z(R)VSosz=P znPw5>_`SLQv?}x%-)R6c65r_7V}Y!~dMw|DqN&DOyz1(2yjz#ZVvv;>WKF6| zj}#&&SL8s^7P$%^CAIjKl5g%n13}SkFc`6KwxH#CBe8a!o7KVKmeqJ_y`u+utj@>L zMNkNq9ET9tG@b@`X#muG(!kGupW>__6!6ZQLp4!ye4oK!?mND zJR3`}28Hf8{m*;IsTohj8*5OkOpHVmw&s3%5Imu)!+macDh#~lR|fHzIZx40znp61 zcxSZda*=y3ppBAray`-u3t2r3gablYXii>|#R?|`zHb0cw&c5zl*zq}9rWKq(c5RE zu?c(QAb3lQ8;|GrffCbLpz3L!j8u1H8F~^qzLQ-0Uk15&q_F?g{{RPrN`X}m*pA(4 z4iB6TF%eL@!${uen_Y`Q8gMBNE7N*8ek;H!oVtsp-=88!6rkU!w>RU3w_!vaw3|P` zrW^0WzT4I#4eNAE#zVjNl(xVC9*Pm$84Gv)u0-0S_y7RJZ5FAIZ^EtTljZna@6&~{ zBTgq-1J$kUa~%FE>_GFziLy`kgk4irM-J%kM?QhC!O7)Sh42e)w}QZw$llEq4LBZx z-w$jNV*C6+-;%E}eSCT?S>!N*p-Ck)u0&4Esf8G&ZIA$)tEjkgqxwZ$wdOYp70WDCZF zNQyx)QeVo9`^LS;xkNLTpq#5J6BDF*@h4knLgkZxouYn&SBccy6F)Dil=Wz1{v)Z9 z>{37Jp;j;I{ddjT z1+u5<1PVFGO?zjMjX57Mq*nFQ7xX=;lo3w(F?Dk^L3^p?=Q)%{=DxPL=~{FV%hTsz z1med`5r0pm^oNJhM$ICerUZ-BwG+kKN%rJ3m{CZ=2qxLfE@U7rxy^K&w)sqj_-&8) zZLj!kA3T&2_3zV-Uxk>9B~yo=#pOVh2c?Cb~pI{-?>$-XGvhgMOlBPCGP5r)oAR?PYSiwkkGEg#MafpIoIdJA6CRC6 zuRInokL^4744c0OUSj;=GawBM%&(S>yPQ8>fNa4G=i{x#-Gm98SK9kFQn$~{PHE~7 zgZd_n?QLRiPvwW7Jy=XQpcbvFj^d=#tayw-LKuT~LfmXjP_q3?wiN5}vJ%VHc|O#N(#dnwa;V-aw0#sfAbBe+h#2or z|3PZo1MEKSHEE6{`kbURi9N^f5asp#gb|azZ=#8}^gCk}!=L>a0d}u^cV}Ejm+t@* zWh?3Bm0lBN9Kf2fE+4E){;bA$oEpDaKfgVOC}d+(8qk8tqG)H9hY#$IUk^%MJOI$- z@@2K2u~BDElSIor^1Si_1wHSLK^i)~1Zm#Yx{&3CDOFgh(q>XQv;(|*mOkOx)Sc{z z33}l|DSz@FT7B9Uji&Z|fD$=_uS>Pn2=GzNpK^6GrQg)@RgFDO($mE5`h#~oLmI-w z?hVufTeS#7aOEo58C}CPIM!#V?ej{{MC#UH3X;sNWKUqhuN4?1utWJ1?0De~dnD_G z{E-HqIEo4*z!bq{(_%iZ!{5(G$s{EX{$*~WH>@?vej9;a%TCWQU2f~cQC~9`N4zX* zOtJoDJSPjN^^#41g={0HEIQkEz(+UxM5@FyI5Jd0{uB5!vu`&)5sK-Fy~*Q$i7Tc7X74vvT)?btl&;f#1ZFhqQI;=nFg_K>Apiu zUE~iQ0kat2QJrPE5&6PsuJ$%r{>#Y9gBBSXi*70z?$McFnV+jr^ksV&4`cHFu-s5o zZG%%Ig$+N3#{Fkfn?b%<4Z0PF6nR)#=}WK;LZo(`ay}|i;LA;F|ELI!jJq=#X?2T+ ziWXSW>VU?;_FC(5S?mDq5I8IlE4AG(*HI)eqaNxtJ5IWmV-e(L7FnEPl$3g!$;R83 zSb&*A5eKWwIN4=Sj8vR<}$QGDNj-5lkPX6$q&!v#Z6Qzz&ryoN*Ry*R6hM&v9 zTNCo}iTOO^X@_i(w#$Bqbc`0HhaBuemZwW`t4@be6bxA=zL(uleDYCXLWgf)5<;5) z1qLd!b5C&5u17{o!b*k6xzn){H1;zjF%D5f#Rn-Ft|+6?%=kY;k!sHzk{dXa$57=+@6UdN;?PNt+&P>Gn3<()goRT&~S zumbT`%p>vi^&3iPR>qTVlgo=pT^Yg~36A@~Fb{gjxWMoGc@PExXCW5><gH{|BaUD~YQ?(BR=fC4$lu}zLWf+Tje>;g{ zE%z`!u@4!E#c!X+*v4!3IU_K9q1Y)?i{VgsMNEa3J@5B=DB*GUYyH~&n3Vth!2)>8 z9}Iku6ZK&Xtg7iNiTp}(arbP1^#b9ZUhn|~R4|okF{R0C)^}s@G4ZGsFtQT4Wto;p zEoPM=4L>mw--clE*2kjtyO{r0J?k7|wgOK}&Uj+w2Oek4HT-pdV3^z`KNK9aMC}!a zJau3$D&Yj7%Pg`!yq%ne9!Iw4EX)wTd{7oXIjXlKp7rQN6=iK0i9+Gv+mJ`W&%FrK zq?nGb9IL{;wJkGS?>C=z*mVZU~v!QKuNTj zib!^s@RDu0g)j=rW2o0fcUAIn)(VPK}L?soenx3PEu6AIGq6dE|c{{qgS^ zHD;9gLVh*g(o=FJr~N!V9(WYYg5>#YN#%HIER=FU*Il8OurQ^3$A z-Hjk1h=?Gff(qCQq8NmMwXU6O@7mq1YrA%L_nNrs>T~(Mo^juw?;k&R=Wy@2=bm%! ziKox=gnnU`d(sbb?9WkAbUm>BXJi^d-=aY26oVJY%r3i*t~dRaY^_1qF$-EDHE_iy zktwhct0Jsn!>OhCA-p5*)Kbpp0hpigl%tr2c~>yo>$gJxXBFbj@5)vA{6}#L<`cl* zzvRk9o6CC7hanH89RQnk^*9i_#tj}X;4o7>VM}p#3(=GK{d^h+uOuZ+l429RJ_$Rm z72{w#gKj-r`9E3}h<(Ptz{!4zvjB7}zn#M-*Uo`0b&qP&UXGU=eD7IDNI+P1K*9awY8mKqC zx0%3&44mfRq4gRToT#mD3R18GU0&cOVwMbP;`wPP{|W&6l`n4XD`x$_{;FLz^3h4n z=n)9*PzJoEYlFcygW-C+B^diG{}{Ysy|D{ArfL!cW9)BOc9{^W!BlI;3v46X6Z4ID zk3w_l?y(1P&74VjCqghNrGN|9;ma@dChr1=1NBH<`n*MI`+OppTo8@mgs`fyQnA8< zAACk12mJ7Qh2?T>{_rG z&SS>Ceg7Az>fKW6S$Y(2qGk~Vk5}@si zXojNP!OBZE!A<~X8Ex=Q6qPRJ&9T|WhO#{)c^S&dvBz>g8{qiZNuq++>wnOgZ8`bL zhT=kdk~%boP*?KBmQug$#KjLBlKI4vY5A<B>j+k|4vwt#>?QTr z8v-%FMd((C628{^GoCL(0=`IM$HU@7y+d&VGx+z zn8AObtQxIEzo0QY0d2|m{C%wFz%^HpnHWkXruBe)>c2o8IzuuG4>A!HSx_M~%x*;~ z3;x0jHZQ7>s{J>yCRe*yCPpK2Rv9m1z=+`BqM^w7Ff0QLBO!xq6!Ax+FgB&p9kV6 za9mDKg)vhRspdYBR8Yt6JiiWVrU7FnF^SZ=gPvY;-p8<_XFS`OroFELV9BmOi}qSa z-$H(bTP!-gq>6@m@?st_`vKArvuj8rXL*8S*9>R)?l_{4kl;vej+v-MKGFAQP`Tg= z6X+7+%~oOxZk9JD>mDrh^R7xkn$Z1MV}s`X7UP(j5j*okMxB#Qasgl-?&H1^yYAVZfSJxm&&iN`8T#A74GV5oDl_@jmEE(4t&4omD_lv)IYrR?vZQ`?lfg+MoCxBm3vy zFdZhOn$sDj10HPyeH$3fbV}?$IDE#?V;h*=2~K=`BIyMbgpfr8_0BPXAEA_c>8R-+ zP=MY`^s1$_#BdBki7l3rp#DbIzZ9ZUxie&hpogTaU~AP_0=q}1mlV^_HAOrb3G8Ek z{(}}#0SlI-j}Qs9WZ+;|!p8+Q2r~)k?ch)*kCPdHnhgSEeo>FE4R)ZQ78Af*hDj#j zc5*pRdRMT3PaeoDpIuuARO8Wqx)gsThD#`JP92I}^`tIMcv)HGm>><#WhrRyQ50)D z9v3Ilsr9W;EwJK)uj zkB`9=M4#YswRf8eosariSE-n`TufUbrmaK>N0!{hs((PEbTS!}axw)30Bu3$D4&rK zhSql83}~)uIav_xfNWITd|+&q4GnO5?iduR{InOT#}dMq8lR!WhC8@T-t`>dPx5Il zIoRamUSsKu732Dxr#SbW3iVCU%*VCWm8D2C)4H=_-l>-{P}?c;-u;D#NArCoY`F?# z6!{8HxzL-_#}IL{&!V9q41N2r7g`xnR*)%}_r$Gw&Q^K*JY>g4q*(&FL6-oEC}m)r zT%93t!6|aRD$UX<8Cf=^3{QL&eSyPOS@?B!hs7s@Vrgw4Q-H_9o`A=Hf=|RGZ{c7P40-NZ~h|394`rcxag$MjN8EWMyyH_s~|9L z7uggqm96De9f$M8J{)z-E!II0-#oBDM7vZxP@Lp>Q8e(!fW9ZkSz~dpYy204Ue#&} z>!8Gr<;d*6Adc~`qcHMHXJ<6-(!HA?9y)JEA*qh&MY%|0>LJXKLL%EG4>hFT8jcsg zZ^Cag4fT7Aj=L_VXn5kmzI}^Lj`@7cRI1eteFqH8pgZ|Lh=_QUP`<+W`9c~j{Y%Co+5AZ`OqlyJE&`8AgR(oIAKk;@WZ{ZkHVqJfo+NnMVk0Bv|JTSg*WAxj0kFl z`n2nJA=MRj1eG`A69RYbN<~*xjtC5~jG}Jq531z)??jnF16Bg2$PZ6vrMSX;bSonj zGx-vnoB-!(#1eb*+|Alk)yr2XAMn=!q~p^gr3UV>M%?*DCMMnz6K{)&cd$uE{Doc} z*-!1utFc?V^r!$T9CMeEw)v;8NEK$o@OjO!<$Cmm$8i_Y;hpI4p2EzT(FlKV3NQ7{ zY$+Kw6kHg(imUJuI%+sGf^Inw&cw|wm-+@+7W}r6v$Q2j_mAWOVlKj9@_WwKZ9;W#=jYz?%-EsP%ECK;*I@Yq(rxPz@ayldk{$1DK>R z?`;@(W$ZnpVjBq0v#4fr1fJ!# z?hAMzANf@wDnrd%b@N4xsHtpg=dqPaS(OfG`^r##D&%AE?iB$K z6%^CUf=8j_lp9$0LMr9V$;J0r^zX;H@;^bwO2~T$gf}=RgnAIh!239k95jXoDG9Yy zf0}?59$aH3zyWfJk^)wpKyKU=<}p=HYDj5ZyIPlPhb{^N>9ydxzBN#I6t3>|2{ z51g$=#wTE;y6t)e;f4+Q|Gg2N@`Vo)UpuIz9zgWi=@_HI4w(Zme!cBkMc&VSGjilN z`TP^l#UuFhPO}ozta0PsgioNyyMIMbZ{^T1BNnucvoS*&7Bd8y(oAP za%8(Ulq1cv@kW}~US$6z*1y8!6?iOul^mk}g7>w8J$8|c-bzSi;e+Mb9xNJc0Rya1 zV|Ab{C7q4|zbg5A73rn`e2R174J;q*fdy%-AZYHi4bs}Bjd)kYE&hapS0_>2jzU~q zn*>jL3D`S|hFciD^(Cr7@Gv;Pz-|Qh47r5==t?iplZrFyJJwyapIYrX>3a=4wj$ zb_5?0w4ObLc3y}d&XRXt>_Ey&*z?&?Xb&IMQtLowg$yR_HlAmzi2wJGw7sBc%#Wau z35)_l*4{&E{rj^2*^hkGi@08`0z?7$0k{=pG)h_t;@V*_gA%R%P@X_1n<2RI>dho$ zLc>Zl`K$__3E(FW4;?10XXirbrpuT{U?ato*5b+56fiDR(BkCnOR}4I1*k%m@sQu{ zY%ODol9D1=Ecbc|6~&H4zS+(mV{xT3*0g^}Q+G_A%b7X#513ffHHGmS9G4TYYhHt&p4%C<4Ly9A{zf zjch0#LTdoLOd4~D!B6h?0dO_sm^TJE({}42;E!dfFT6XY1z1XLvB7pi2C3`K%UM096m5zT10~e2c|NwR^R4MdMy6t= zwOH9&5G&hImQgjn!*mX{KWhz7#`q_Nj!0+FTPlvd315@9;E6RH0gU{qI`9`X<~?T< z(ux;N@S&p~rC~_qFP})!2wdJj5C9}p2WN1TS}6MxI6^(hqo6ey*ZzzAFqxLW&E_oI zj5yTdxtjZ-Bm8#&@;XiB?PD9o6I7gE z4^m=C!*2B6wLcB0ghEGf2KQms2N=R(s2BQ|wHySn&}ajhm$%iUD{V7-nH?{QaQBg@ zBkeZhfUE+BGxj5j^ozv#a$np9~crUDzC}ED)6<=*0F_OtG|F!DGHVq2hv=8q!0D1ELn&yd8?qyI z4nsQeEf1ts+Rww6wr6U2p*5j+(^fpP*&XWfwD=@5Vd@lk6Y*IKAb+n1Zez1{p|(?Z zz~%?z*7X`f#k>film~0k*OV~>Bnq;=y!d~#m~Sx~Z>hJC_2XHLr`pe+z=NK$aDzD9wIGrkA}06*-xH9T=TEzse(hZHcT9OJE!9A!DKBi5TS z+r5E2`P4#a3RhZhVBKmZg~PBp$= zRmYgwelaU>2K>cJWV zuz?p?GX2R%q|_rLjKuJhV)!XB{Ir1>ent#G3y+}7@rpADyeao^QF4Mp!T93%Y$YcVI}iU_fD_CBd}O@yI_os410%hFs)FVNe!En z!Ep#Ik-bJPfXkD#N6Wxv_S*tQ&U`YvFrQar##|f#g!9}BSkoO&Fg|x|xfwLF|AJ$v z)GM75J@e6to;oJdxg+vpT)egRV#+bn#xEZyX=1C9Erm-pD3gEDe#rSF2CXndLDyF zfVW!Am65nTc8F5_F7t;6e!V4yB0aeTzf$nz$A#vYs7J$r-s_DGVi0?9hM}}2)}wc< z8D4C&h$`PR#MOKRRnavFA2c@y{YWe>LS}~zhf(J1VzM)1>k#{;lkv#o!b@brMAdWP zbzC&tOT$cdbw*tcV@WFV07a+y518~S(Ounv5QEjjXlPVTnf?dA^}D{N^MR`?9C ziZgmq#RhB!!E-N-{W2V{#1wN+j@VJ34hL|nsNc-?IWDdG8~TVF7r2NU7m6DfQ3xET zg3!28EtNGujhomA2P36qy@Zj6TpHE_8X@*P3yKGZZ%qMBRk3&QNOkrem^sLy{e4t| zfgQzkVwxx2i)XRh5exLg;%~}dHlB}(*UArIs;$e+xyrP^e<~2JT#<@}zhEhQR51l& z)Q85nv!tedZ2@lIou@%<`6C>B<-8DF?%t4yR~wOQs4ZmZhjDUD#g$#D!~i=Vbb!FQ zVx?HIij*Tqpr4*J?8RcZH0f^dDx;?6)Zy2g7s%jX&&8d3(3bBh7s zkE@}s@I)CKqg15!XJJo!FWd!wFQWzxsM`Ws( zeiOtv2u-zl^m`@AP1>eDKCzsy5@%D0s9 zjwu|&d1UJY*Am#;c?zl6>L0BA@QzndWWEjg7+c`Q+~<5Q-DhbDpkG7=&q-u(ISTy# ziL4YqRYcm7LPIhCG@sofUD!Uves0o4oYWM;&AOQ!UL<-0%j@?}L?l)w7Xl_v2PGgc z`K%x4;9-$i-+f_;+4n7ldpV%w+{=`Egdx|cb`D?#W2SM3j#g6FJ)MxLdHB-f~y_64CvgP`b@mV zE5tpng#YC2+zh<(8ywxR6Ww-^PX&WKieK-g?_=uK{%E+zfK8~U%>dHY=HWK1Yy)I8 zVH;PW`k6YC_Zsov{5n>>!dqgA3whjFhlh=ZkXK+nF3jvQ%_h>hJDPaW5FmNx7_pIqj@g@9@q1@3zeTHkh18$1lnV`*N^Yf6d@z?PE> zYL*(|3o!4lmD4~#W&ZO;-)V;?wt8p)KO^Gt>Ev&{7!L#7n6wF4O3_n5OGx(gqm0=- z1qF6Zr&Pcx^@{P(^oVie!PVK%6I$Wa$oe!63LP?DMDY=o&?hr6iF(M=;_ZR>1yPpT z30c~JObok|89#RaFh>wtQOQY5447sIj{0oEpsH$AFuXEhhKw8sve2rmb`8=B!;2Wm zkZLQ57e!|1HJBr!7DHxkQO)xmZCVUEXh#At!j43Wp57dJiFa7E@XCjBSC2yzt)4;@ zcn0~pBp4!0*=#|Me_G=<%6%}pxd{lyFPa&~)*o9Ir9zr># zVQZl|;vHGxY^FVyLEH^wYI8uxbhD;!#ZMU`(8RSR$@9o0=Pn zUDg}4#+KBc8qYJ}S>A3R>JZpvb7i6N$ei7rw-?}uZ(;iPFY z1>|(}eePs@GhV2j2C%+Pb$hU}sEZeM37r}lwGwrSFnr?G9X#uI^trSXd0cY9LTRK1 z>b~?D52E&u#<*__M%@;QeLo31iy6m2T&Ua1IP6Yma?>J2&+D}+@`#tA64`hvc3q5N z85Z*#6;$t7hctH2N~A?M)ELg<tJ#6^u8&h0nd|h!b}>zi)^LR!+DNIgQ^LO0MgH zHPNw?2NtK~GP*D9Mn#&=X9cnIb^sUeKhcYwlgWH$kN-Bj?okUvaaB`s6_l;3K#WFw zSb+T*HRK#Ox$eT6pg zODMcT6}kuysW@qXIB6i*`<$IW=fS&_QG`tc#s1=eYR8w)glqGx>+o>1oh%=XLRQ;u zj4~WG*YO=LxzD97#6wo%A()X&JBN*N5RUAiLBrx-3r2+Gu`sQZ7_^0DeG6Q{CL0ki zGR!t}iR`DR5kzOK`vgpt&mowzf5Qu!JQRnAj0J*$7qxCN1~(2SsU@R64a*O`J)&Y=U?E3 zI2K}CIH9V;{bOfJn9U@@^X$g?8!Bx9tc-wL@|!F_^gB5$$IZ`mMsJy z8i=hEcF`LYu2l!dcv;t+k=7YBL#kbDfr)deYylTFCkn(9J@5z4SJt){MEW5Tk>8;N zfT8#aD^ckkqUh_ev;#KkdKNFcOfeS3(+kDZizq4_25OQ`<)o>Gqkls&8^T++iN4SX zrI4RnJG3$J>Rr5|2ucDDF}(n=^`9`r0H8r}uiOX>fU&VN?ElY7L_hqfk*|ZyKw-1!Z_V^)|U6(UOG$pHK@)=!znVraYSkSLbrWj>|S;;q)9A zhq<@OM;O9RkPbqT=(AQZP*JR0%D`AVS0cie-TmX=s2dP48P2Jp*uJkr8rz4>f=)vR zetH;L++vieG`#~S*H(9B4LePupvCcc#-vf~#h%%VB&H_8HO#)U|vnK$c@c3FXG5t@%6 z*E!#%;*)-O!O3s{7wsE`uT*cqZzJ6C^JI-40QJ((-CLEi1(l}tT!6{&uw%hgz}-$L z5|u#abc~yIiPQh-_|+QqOAFwVZ_H0H+js3L6qgS?1-iQlS!IvbPm1mla8&fpRnTyO zKe-{HlF?tF`7%5A1cf_vyNOh}wH}MsKcYF>@t8!>!Pk+Q=FMAFlfO$(pasPB#_K_M z@w-RewM>wuT3myDR#pT+mC(qXy2PQILbK1*dy*0tim}u>Ne>!bY~agn^FV{92qLLM z3kKhCrhJN|;RXT&XnFmS%7R$}@5DYVSv$W(4~Jw;kmdRrg0PpPDZE`QUYy&2ZG1yN zY3@HF*#yqAX%R}=PV@MBHp%|#yTUhQ+u&fatH>8w3QoBcXk{T@m3EX zB2^r0+Nd=zd~l~Axs>@!G3>TKN$`{SBu1un+XJRDaaki)!}P|4%0Y*{ynIBO&6E?pL^#AO#qHG46(n*Xz{ICB>4_gO&kUX_$+ z8w@_-*%$o2;`a@|f8o)27*DrW)k=T?rLIe3nS+5i-P(=f?_=gbCy3<37|C6NE1s!7M3@g;{>i4D`1Fiq+#TX^0XjnnNYYOvc8@z(opwB1OfKnp^i3Hr6 zG7Co~`fyD}&nBa|eKggEZ~(p%e-Jx@MnR>GxCP7bcSyb3^E#C>K z8fpEMCT?I+ytWg(LcqmgdLL|~PKQGA48FN0=5stVo$e#zmd+5z&!p^qr(*rYEC^iDj9jG>EbG0^gd z_S_HmwK4%pJ^xieAOoD?7#u|8@vcmNI~RlQYY)Qo9aT5@Vd8w(Qq659HZ^90ptGI@KZf2wo)qcF z>cro7Q?lY6bl*K(Cvhd?eDK*$uyPArS|r#*m3f0S72w6i>;ekyeUhgx$r}Y-HhLiB za7*!gtF{O({9+lhH2t3lsK_O7pVZbM1nz7(Qk&I3K;mO#z&T6%<10?(!DkwPwp*J} za8q8On%2C5l|pP?F6McVaewqz*N=Q73^5m>2l7C^H-eLm`RHhiUC=@ zrpYP*zd*`KZi@$Pza;53x8KTP^M?PRO{hh-E@qxgoZL^G++UnLK%6{~vf*3J7P@9e zFWSI)uu^lkZvPWpRUM3xfH+r|n6!mi0=(G4!g08xq~R20uN#Uj)U*LWbTd%8s2+kZ zsBa4NT7a;_9;j+q(KMv;LobmAl{hf_I*Ex-^Hu3wIaC0za=5^>5}AP#-ygFy9c4=H z9Al5JZNF#ZneKCiOkC4NDz3>9*L0sZ7=cS2)hats{J&AhliX4Sz(7g>lgM!Q8EB|B9pM%uKECJB8W56!1 zxaW5$G(iXzJVT?}+?O)3+bFTyXtCQE&}${IHyiMoiuyC&wu`6X4wfio;SkQR1ce_# z*o`C;=55@cRf)a@1%||X)I}vNpmHe&lp&Rb!$*i=Bvn>`4;XkT2 zCg`gA;&LO1)MQO?oMPJ(2p#g$`eUE=>^T?pwGJ{z8ghw+_oEwAln-0dg$*8o+v#gy zY``qBdmc3LSk~_4_i*RkeFRcp=Z^4>;I;~s>-!ZHJu?8WmDexCmw5D{xT5K3S9d}q z6PNrUE?I3LE?GkX_O?Jmc2g%wV9NfE6*%3-P-p}rgyFxQK!>cmBIX1z&0o8@&C17u z(3&E=Jh6Ftb`3zqHa_GqipRjKQ$5}`TZI$w=OsZ@_KML-_!)*VsUgRZDu4C-X|$q0 zyC~W`0B1B(r{GzYm7W~%(+?NyekfeB{m2PvCefYn4>EZPr4C1TM&%BOMY zgVi$14V;6;sN3(st{+3H{s!omTqpbF*E}AY!s`Ow)^@S{xf$Y`8sfHnPZ?OZoWs$W znE4@9^%AI-_ziVorXU9Ah{0XSDT(P9opc=1h+3A5xny1w z!~&NXAQOc9iK1f0l@{%f-?h1Ch!@-Wr>N zcWI10)82mto_6@e`Ki~EdEUM+r@nLVU{X2+GTB);t{mxzbD!Z5(c8fR%O+vW53Z#E z+$hADDeKzd&U)xBq;3PlaMpSt1KU>oTy1{gH~xh~dp5^J)^C8Zfd3y*I+98OQqNW(>mlL?J*Jq+YldlS12 zG0}hL*L8h2VJFQ@LX?da67lAKig|TT%IDzYZbC3DxqgUJX3xb~G=pmME?G3%!7n+E z271BS;>WL{H!r;fdO*-_qU_v_%bf+yb1BxlDjA0^)}L{N-a41Mo`c znUHvbhs`^J7F0Fy$Wl+;VAMXmg%}+SX<|*&MV-FG z;IT6b1zP#zHf9ly+%sejEcC@~yg-3lF9=O^6dmUPx%tRV%zb%%ran~wtb0lGC&?BwCTa`O&!1#-8e*je0@^LgH8fDoR zTKKkkM^QXU{3g**X?GlE7qpq=G>tJ~Q2M{+dASwr_JE-1(Scs zp)m+RL+B5on#nCA_cGp+ah4PD+J$g(JaisDZQ4`%z*OwajOcd&e7#i%P{jS|HbH^f z;tc@-DlETaFGSrLf;P58XrELXk8SWK8@)FFWPsuhY>fZluT#@FjTHe z+ywaigZ>7()2IR-#k6fa`Bab7CQoo79HEG68yG+(#bx6whGty_F6lHa3fIopryGhR zZ^{f><6zj1#!}d#P#?dwsKc_@f$O&~zWNgzIrOXKdv%Dl0G^_cgu$}fZh%P}(Q}UI zITz9Z(4kJ_?+N0-U5%*AxO6-(y8Ii`^va<~M`dltfP4Q%W?l7r*4F+ra@(uc7#f&i zRZ*-XEZ!w2d*j!K%#*irV?lckAg_yI5JlTDoU;v?#@Wi_lRz+aezXHB^R|?|XFn)| z5eE~YtFH}!=3+Tn{*7`#Ma9*E7&1r<8B9K@JfcCT)u=CL3w~QEX8Q}wT-=Ag7@-^e zsl&gKjD3fe;;Q7ypF3Zy)g62gazD3_hWHLJFZ`YG$pw+qm2Id z*yiqk|43=K7`d(^UPGt4r$6|~8R?Bre@5@EK~2}%s*RpVTcrNG?@|QoJxwFH3iQ`Zw!OIq4~LocxE~97}A(S zVW{GmGtN*l-4c7{5r9|Z;#3yTtwl8H=PXd$Uebni&qfMH3p25-H1Hx~iEG zX*q!UXEQChyM(E4uzcHf><=8uX42`Oet~Nesu079PQ8=VTU4lHgqJhb~}d?T;)#Q!hbJiE1=u?t-xCJo3)%-B8=G z&E$$>@wPDY*Q-3;%S)u<_fs%p^PUufrK;V}{p&iA#o+yom?BpCCCHkB^rnjGF}N+P zV>zO2Y%8SlI}ALvF1w5k#9WqCp@S~}OhtPTAv&admV%zcIh?onoOM77-cBfOzuC!9 zlw8VXOz+gUC30NmO@j z7Q|iX<*^1Jb~TN8@eU?37B^y%XP?5*yt``^(w-yWE!i`V>f+bpP~>!~8pO<`Iv!TW zKIx)QM|}6SRBTjVzy{tb_atIg9XX#D1*jZqW@y0JSj<=R^jdc+M~P7@zoN8jix$jQ zdO8k;B0&OugP6>raP|X57&HPAF z6B!spk6}}eJqjF;IfGmKn~!9M9-=H?MvBOP1T$j_D2Hv4J8V4q+hA7&d&FYedx2l= zh21dE6wF8G1$uL!f&KMEbD&megjg^0KrbK;%N`a!k-a#!jmRXi0mynVo}w|Y2OdKG zy1+Ggjjfj|2Y}R@UxzOH{f$#Dzj3H*v)=!34d#Pc!lUT65Feo3+*A;ILLC`xW{BEIhkr&THsdO;WIX4)Gw`hJ8XGJ6@Ev7&q~)f;F)~YV|aq% z*5m3A;H4W=DbbJTrdK;=_>?gZ`GmP@%v(d8ze1_Nx4hw#P01H(4fLihoI5rWO%fV` z_jg(UKoHM86wf`P%nNZW?45z%ObXog9pjYkW#s8;enb6nXv^WL$*-_2qqN+4jnbpBqZ~@*}XiyYv>m z$$GXi9@)**JNW{o7}*^SUz`Q8)W+o)QsXR&4&bGk@k<)IC)+QO+3FO|^?}Ol;ZOLvZixoU_JkhXBq(qN!RQDVL)bw9!@nAFpcF7S2VS)S#XNqO? z9#^EQZ#^WU8`M_gVPGdI$)GIdS!AonHpmc|gy&zq_)nQZOEES_jD;YeYazxmeM2`k z+il;LmtJP9o`aG%{#7pyVQ8c7gn-$;8d0(iULD_prU(c70M^)34+vuhv+325t_tk& zg)B=@|LtyQDyHu;Fo>q8myPtDciX@;T4&RX5=hw*OWT|rj&)(5CfeUw&J|khh3?ia zrofMC+@`O5gwz9WYE3Bi^jH7kCsJV{?nI|wkt)Uzg ze*v7=wSwEw>bF>x9Wx)|f#eePn!AldwujcgKz);Ll5)v$AbIeL2X$Zr;%S2ZRJQpx zSAB;a-hKq!aF;p{!ejGnn-<^2uX+gW#k~SPq2{i51WL3-_vJSAc>PN4f&qi_QAs*Pql= zCde9zQEwoTt7w~oDzxhzWQ`2Op6d*$+VD6)XzE|#Oc@<0!NW1l3}MNit@b0rbLh0>jZZ zciUllZT{sWhblpZoCp|Oabz98aC~E60-1dV0z%9rmgsoTYl2k$m}#`Z4+kTS@)uET zQ#^Hjauc`q^GrYXLA?C#T^w9_(}4twu?YVk+Eq z7`H`;76yi)1IL21F#PGp%CTA$WEu)PwL}s^WlwrwE<#UZ#7Q#o5ozURGN3j{u*NS2 za7%tL7S+{*6@zU8M3gS%J&MV^D66)}-oZL>n;x|wX3h5)#REUUy_!YMbD zd2*9nZvX|q$e_H+OM)Bdf+kyk+D?Smvl49aQL;#D^>a&D6rSL=ojd8pSSrZ@R1-Y* zE=HyJu_!rA?Rq#eJL9qtU#8{n)73Ie^N<|_;G^y`k6CFC zo(r=#JCNFq{EnrW>UIv-Hn;C1_1>L;G-M>(SXR8JLL>h6II~%}z2HiDb$qLueG*zf z-K}kcvAAL~g_}W)iH(0nPvlny!NFJwtkOQ6l;HgS!3&r^`S}zs;cf^4SN(Si_>qt5 zqJJl+`)!&0>~%B?n#{i27NG8a{r2I7(2OB4JKcpbu9-l|cCS(V!x8fR*BWD>U5{+- z2ApGWhHp|jfFVF2fg!vUY4+iL=&*P;+AXLobnfh{^pC}PaHc`=H-tzeq(*RtmFZO1d|9lvKh}_Q1 z6f}bwXcOEyf6SFA$>VY@=%Ge_FvFtA=*D=lD31qSUK^%g3|YQykZ1id1F83|$LN^+ zDJ5q#XFJP~iN~=fMl1mADSU?|)RC<3k3%_^=53_nh8Io54KESE(uz53Rd)td+OeT} z6cfVW-MnNNQk$q4q#?bFP;*5i>UsGp8n>IRUtf!1DlWmxA$#^Rgsf!2hwk76Mv4*A zb>K+jBiOd_c4KPYzB?Z?_wVU|uk8@Y6i`*`9_%66qW3IrML}RHC{z1S{2b zLLmG?52NITeet|=RRCzruvW`)9R=em@R`3xW73Y!#>Tdf?8FnGJoX*vMgnBgKBx_9 zvz%j%z3spFFxSNg(@1oR2?^+Pgol-Ta*duo}7te+c5r z?c&NE6aZ%>uusyEMYDRIV%;0K7cdb2NJcP><3BqSzfzCjGCI~t8h$5-i?9FZoB=W0 z{Vr7Db>|rrc~-%%M;k*61pZ~}26VmqpNyV{elKH}FmAgY&;if#eJJ1Dh-^)M#ci(< z-;lP2>pHB@v*ST8!<9s88US~cBR~ymN|AriJ3}mXpN%qu+Z$t-Xu7gtO=V;S7JXdh zG0d3#wOxWJQ@0?e6X%4s#-!W%St2g3Bm1vMP)jQcQ}sl%Q{@zH)ehCfKCi$Y9V`78 zomAL*0<#&2Ch646oZW}33OnlwFGDT-!WW}-=<5anf2w*~B8^h@Mw#{(*Q3?cOIJ|q z_Zg&Ur$ca(Kj4<*dwU6dt$%3)k)zqyhx#wD8qgH)>5`%RoZ42LYDESX}Mj@QC_&^b!nOQ>5krA2U{8xN9V) z-2F+jsBgvz7Eto(CZe61w)2oyz8xdUBCGGG^xCr{E09&bJqpml1Dee*&v9#YlfTCP z%sU=(^(3f4uwVk-v0YHKnqu9W;^O2y^4iyq8LdHEJEF8IBLJ|YJ9z{!+%&t#WTh@T z82W7s1937IX{5Rw6BBCFmE|!THTngi*T7Rkw48Md_>hnzOb?7b4KaWQ$Op(A0B-`YE!vIHpO)y}w;^PE+YyWL zr-cWcbU6`9RnOxMmAY~Y(h?5NNQyZtWKEljP2rRxEXf9MPP;?ZQL7~lW65mmp#S=n zHhmacw@bHYQLpn~Zv}D06>-E>(hW6&SyzA3T^%fl%ljEq#|J%8XMmQ`ng3I0`Ifxp zC=TWm8NDbccR(#J>k7f=o!cay+f1HvW?Nn7)=JVS`gJl|-@lboZw^Fe{Bj8BaUlFQ zl^uMEd)u9m7Gj8$k8r$Hjwlp1N0D3mfU&uGxL(v@r^6Zn<~+0pc_Wi?j#s{qMyJgX z8a5k3!TIqoBS} z!|mZ$$i`zXagc#yyP*TRwFYHBeWA?X)}d4&?LiuQU^mVg$|aO`yjDnnuf%(|kQ*2J zo=-?#1P3cGgYO>+>;N=hbXdafuEFps{hi!1ToFF?+aPKeQvhY8{U}cm{$3d>j&B~e zT7iaUTp+iU$v9s#YJUc^zTS(Eq2^)Rt&v8~$^pHf_RbA7M#dj^g$Br1T}tZ=#iQr2 zagTx-w((%ZW7n!FmY?b%MnxM(9`zNdw{aH=HD&4CSR9j`RtO8>8uGevQNUMP$w~dj zhPSq6`%@6NT~Hf!4Fg;iT8^Xekd=s6+%aJho<}`ms9}+)K&qS5Q7X=lREqPX$hVBa ziuwVKQSCIZ#SJLwrqgX?KDxMmG)nQ+ig-pelvAFi| z3Bw~9HqD6z;C`D>V(Kwu;P6+DjXArOkxv=UGpAVa*id4kF@y`X$67%w(wR^Y+=0O- z;A#rpybKo;{-z04%v-k8kh(KMuKRTs{ouB+{07FvX-9=b91JdWh}$HFeFnHRm^pf;d_yj&^}3@H);3T+4_uF_wZpjYV;JJ6CqXs@}TZ zP)v*#6Jx~0SS)2-sI^oh*8L{dEg`qOI_L`5HlEzITG0H2A-ZDHg#j5{(mmv>@ zKvhnqaIlM$WivMj#$dod`vS+8Hd_YVtSFm{7CllfAPpbO`(eQlgpybXte~S+{Y&q+u?Z_aA_pv6AaZ11f4zS?D16 z)=GeHtpf&P;z2yS&M?{5;VM$~o;gMa&Bdf_F{ukk`ZTk1Sg}94qBjHCJBr~}^yp<8 zDp}l%hS|c=eN*z;DJQ^a2zMaoN?!H-CSq}L0iW~n1TmBG-%OxNV`0Scjg)CPQFi= zL(^uFGAC1rgb}duKv-J1L}c*UwP{I!_ zMlUta81icK4on89YF-H~MCCu^v6w?u8n12)Qpw?3{(k`4lcU9eNF4>kQ3T_Pf`nqP ziu{uqq)3qNR?CXN)rsBh))J33XnH)xc8jrNvb{?i4EGfb=79!b9{6a(;_j%>8JqjRdhEu{rq#v3S*G_kPg#UH0;d8GeirV(U0POBCM}*g`SP(rKU9Aa(zm#*$u5;o77V|4f)B*4r{`%nq{s8-~Bq*!P!R$Pa(rsjx7QcXT$e{f;C<$AhO zTyO~5PJ}mu1h0-^wmj!2y=e|X^%=l<3Dk1@51~0P8`|*70J8c;Ce|Gh>yAQWr>kiv z73U0ZFV3l;9^)Sh4YwQKQ!y;3MA<)xw|yK{TJ4n})oj83G{6ef)ED8_%awOPtGncu zyiAW-^{rq*UxMfrQqcTw_@L33YC#J)uiGvWhkH<@XLqdalrA6e;^#!loW(?|?U~Us zbP9{68BQ0VCNpwfJdRn?V4qhg*ejDtL;O&1_@~R@fb6GE#kF(QW?0n%;#=m`;x_f# zG^80WJm}HWS>&Po8$t;Q3>s7){)9?(wdlIWRCHYnnswI&Y0ri~g30DeTaH6TSTdNL9>a`uNPA3dyY1zerZk0`i>Vobw;RUS6YnDm2<#2wrVN$zqCp1tkY`_g zh6m06Yla|%QPdUIBzEb?8#cFEC2^x}IVae*!SOP36vbe<8m|x=uOx>d7ir?j&Z`ueK3$;9 zCtt@*WU5A!W$y{xPH+>M1p{Wa0@2$&kBFW}$$5OKkS&%wQgZ1V6zSG55fj>Z&2QX% z#;%=cK6l@2NEhsnF&I#9yU8NDsJvaMck@IVxdns~TyK*6_#r%Y^XZ4-#X8XTz@1Ao zxgc)X0XC`mQ|zmuvrMUXZ6lzL^dcqjb^5D!nEmV<7=5#a{qY7k}anFMZ3z5qtm@B!)g%@yHLT9VU>(K2z+1Osspm<8v)qrf+~ zN3})Il@%{>e$xibT*|_$fT5HleTAbZHN#+tYE(?hBi~_QgSJ$sJK*4jlauJ=EIR4f zYg!$5p?2WENXKbDV8M6n>x66NI9|3+^2r#Z_&ZBc*AU+^pie3{+d&iKJsOrn|6XMq zXI+QiW#ZI@z+6)imwXsRzBoztHwBG|#JFYlr=V#AaM7s>ZqL(EW9e9Lv@vWk1fhc4 zE>JlNQzIC&VI`m;dD1CJAfdqa9&U)T36+O1#t69n^&0Nf6DA^c`^v^u{_^ue94vdk zQ24aL0B5@Q4uZJa14adrTO=c?-BGr{32A%`?uVlnu~@i|t+rHaPHg>KZx%W0|OY z6Xcc;I02R_=VCIh{bE`J=|+Sx3RrTBvY-Eoj+y2Eg-32Pz6#>I&Eh+ls#wLMi_T&o zvLkiD5(i43$|$nqHx|M5Od5lgrrJ1*wJYk`Y_%M^lQGCdKk70h8YOgZBPHS=2g%De z2-yhO*7uStvK_LP;^b9p(ybjJhzoCHRq6^c-Lbn%(Lzel5w;^g*%SrctXSXVd&o-g zM+c?>Ce!#nO$Cs19`@&P6LI=726#nxd~q{KOEJPu2Q4HG^T2`Km5K8^it{tX`8edN zJo^Bp-QvpOOZbKO<|PFlnTif21yI-VJkX`H!jWqJ<*y2Q&9+|MJScA3VSIe*tCrGW zNN}Fv_nZbyo`KFO4;^N(8~T1YN=}+j8S9uFi0u0dvy7{E(iq!KxUb58&C4uqBPIsl z+<{Sps*qKP>u*61hbV#`i((D7&meUd7o<{~uLv0T)&F#*K6DP>Rh^A_FrFJ#=?> zNU4M(7TAfMU?=LDE4mhTw`;B4v3B>`v97V|`W)WxGyeYX=l%0>j`yB>I-Wkyfw;)m zowsL$4?^+*Z$I*PlsAjoQ_NOt;L5~(?J?&zRMe*yJ(U}W(TEC0x;>0drC3;qb<|g6 z>(11X)91%VB42AD@|{q*pI%=(`o5lPxIG^9dCRvHvavtJP+23EWi z9OMCxZiTbdUr2UW)t1)LdrMUFge)`DA}~iykdCxP{p8&wnAd z)Q=*rIOCyT4XHIJOu1=#pO{IykBB`rgAyI5v61+pYAPAcgihIJcPt>;?hL7hn#$fF zsAn>AP*!5Mpvsp1eX*X}$9N%5V}2EKb&p|tF_m+_!^Rc9^bX*Rw=JtUt=oV{PL z{jyb3-7lnS%^DN{&_uv;so^s6tr-m1lYMSIZmb};3mGWZf1Or#fh48hIyAaXp)uDH zML{tY_%`s(7NADwBY#SwSWC)d=kz1$HDb1G;!k1w<|9e!bN&6Rj*vK?WpcU2YAP>f z%%FajD;w4$PxW=s*LRl~QbGz}X|SgaM35FN#&`C@=Jrr})}SK`HT3cukqhq&@_EWn{bg9wNdI=?#;LMo~++O@|+_ zWNNJgxgneSliT5V9xq)LZqhilT%1|~)3b2W)wwCeO+K)cJZ~FvT+@=<;s6xYZR{-M z)BHj@xd#rc9EKPAR-8Ysp9{Vw&`u;i*oB6A3%uIXcUD~Wp2I0R|Il&NHFz&}0?oA} z4;Fm&1g;R4n}OZ_X#JCt%h>>}nvQgSwuWMNbFtgjOhq=Q-~tY$j9o(zTv(@$W|$0z zYY$~Z93c!~A)8MDh34U?k`%EFzva~b%mXQzM(&>_)m2eIaR8F2Lnz5}EP%nO*`$r|hfQ$IB%b$2eVwARk!2@qUtvChpSmu(lUS|ta{?1lRL#V22#P7 zVS>p?yR2mNCG|E#@OB|@5&A6$Un^O-QTo^CI8O%*8)*kP?bw|?s)fLC^go4>h@1vH z?)Y?tcyrW1yg5ciu&V;_UPl${C!vfkt9cpN4`H&`?ce~^5FOVQrB;umh&OPwDGg|c zUkSOKgDpT=6nS)5AdA`iKmp*IYe)~}u26I)P1%Fp)w+QhLh=0uE2ywVF;&HJQeSa)V|f@hyZWO3)B;qlKjH!oogh&zVvYxtzWA z|FcK+ay4NEhkKV(I8W9Nc3gS=kaplq8-yC)8H|&)!*DhTb7?*YLzmSPzg`qOatm6% zJOS6^ve+g3+#mQ>4Bc_@OR`$cCa!rapmdbw8tUFgzbQRgQYqbzq*mqO$YDE%kL1xbzt9r4y(6d2{b0>ZznM9E~oDp!;2L! zB_A~#`MXBLohL|7kG;=Pm{@XAEV<-JVJ?4T^;E2lLpfSco}3BwBN28l<^3Am{u#o) z_4*@!c*$J!DDOA;5lP0lNl$*Ke53k6yJ@Z?@%lWHyqve9;>b^7Qr%vPySD^copv&l zW!>vH83D)Fn=03U*kr{aUdhfVrThN_Q^z$lM`yx;EcQ4IjQ@lSt?008xB zMy{jxeMUIG6;lYV*W54*L33h2`bVZ7K^KOsq%Ql8y=!pZexu2of#nJ|M|YvN%mXJ8y8pA@NQ`m9&smHCV(R#u;fGU^v7$3t zryBsX+2bh`J!U-8#zY=P81%jtVfb6VUfW_$FFZR=2dM|;Tho^cxk-Jhn9i%hdF*zC zI;V1YNZEczY`-hE--Am15fgF_NlYF%!Z#|4b0|kRA*PCB44*Kk7H!EK=JbWs&Eq=c zuU$8}z{8oW-awhPgPB3@IO`?4Zc|1c-v=lZVtt%gA5XyfLp$&V30YRb5i`jqhpc*$hOxMDO4 z1FrB65A|d-q|k1Zrme-|346eNa7G_Wo%;q4Pj*q}ig@I)Tmnxm=(1g++)Oy!A?Gh+ zQHJM%8c966NFBU0Fs07x_~Hupm(!3w=GXqnUXw)Qvr7Q&?LCJhGU%-xGHLF>763Bw z)Ee19L!l9@6%Knz(ZOkWnDLm@Tbs*pJML4n5$~||EDH-o-n>T)++0?ADn#c9Q1oT{ z{h_uS00R=N`wm@@H18Hg&k6#aJ$pT<46?KPgimVwT`>)t)k%4#IReJN^bg6>Y3U z8*6x6ST^W{sA<1XI+ zkRF!JeRS=r{ z7rc6F!S^NEIH z**dXoy)2e(ptMOaNq~8I^iZUYNZ^vnx>I~XA|AH3ro>KMD>ZhL~q8`-DAS2YZzmq%Ht2D5(=t?w}n$-lo@;s6NyR4c{UJD7Og4i z4X+e+)889IJ&Hf5Y5xcBHEV{zRtvDl_DdV?L)C2$-pZ}1(DjhQ)~4SW$r{LAblk5k$TXrSdb2f0I}s7{f>NDk(8OqFkRi~{?E}+Wpy&P zfS3{nH-QT-V|k2g)Dhc6XKsg7{_R;fITT*qAeqg?p1##q}IC2Rc_BOw%FoYg9D{vU#OfQ3t@FZYW&;=L@?y#pv zBKxqZ6%w2>K3O4)Rej+F%L$Z$z@@T{siQ$>mdS2+;uiJ?Pa|I@+d(_=mSN+sXpKb* zzgh3#BB>VQni@;;eSb*8-2#0XYr7Q3$)deI419~{Vi}~K8G_l?&HWpnbiK0;#W4eM zOcFSMd<<91?C6PQxBd}+k4age(Qi7{$9hQH!D1fz+^J_Z%E)Na7Asdf+5yknx=KUg zbxe32$6ARsf5wCPkopy1*U0WDq{&EL3d+Mj^sDOygf*fq&Zu2mCf9F^tChHDUF1Vh z2z$Sh*ApBo{5XfyvE5Dh(kN6<(IYZ|jM`}CK$5PU{S)i^B``#cY_Jw#g-IqxKjso^ zs}~=ooU&+4d^asui;fE zQFyCcl;pz`e`*J1e_*XyxaKUvl*x7&-Fv9?o)HbqS^yN65w)AKjsA}uPK`yX(Nj={ z9N%}1f!q3(huk&Dacx3hBa;xbP36WVi`cTx3ER%Q4AR`J2!6ElNmqLjDPklG^l*L#B{>YhGMJo`#g*igC*xb2 z7#1fKc|XC2j+ffO_$WKb7xCp6T1XnQ#jPX&?1dxIeB?%~<%w67%o(Glyp z!Lz+N5A94+TV7CS@DRm(Nos3041DZLjy;1g9#JNIETIxYiKRXakTNDStSo;s5lNMb z1>7K8w`erN;rvJV>6t1N(@0%Vpb%yTE}+?dJY}deaKTMv8hiN|)}YY^8ooq{SIb3P z^wVsu;C4G^^gtM}l8*;yrnaQ;q=_)L^1JW`Z3x@LgjCuka=!`RuOpuI6C<9B5ibBq zuj!-&N_PGT$*3+GcTNAEKt4((63dUtLjK0(dO&PtO73T#OJewV%5>Ynh*P^a%?O8I zg)@A%xS1Y@YnLG=6fk8RbU`T=_UKJ|4zsVXVQXj546mLG7ji#Zh5*~Zk4P@QeRrYa zAh6>AIajeU07@938F8>rb6J^62oX2I|L5SYV zzAsnUJHYD4Cl->4pX(iZ2k35UKp`Y7Fhh%fKSB;G$}n#uyYLDMG~rbp`p_BW#}CJE z1Zf?f8yc8GTH#giv?N~jr1)=X=y1k`aJYdh3c(R`xe-n+bbI-jcVuI7^a|7WO&0>@ zLF`#7_AC>7mXkJ~kLySj?Ry0^q*hlT^t%5W;7$Qy2=Er(6wDCtOCfc?R)BZ)b2!3m zyi_z^#*o1}b0aVeY41ZJ>v5QL*N@8Lsul#yFS}%87)aN+v&^)S6L;TZAN;g}-F5hG zV*GP-Dfl=q{?u6!=<}1Mls4HD4==uwdj~$XggmMyT5}vI;Xg3{V8INGv>@Z*UFJX8 zUu0E~WfG&a7Cqt+darXv=xFx{UBbe-oDYG&aQDCg`FSYTpn_~)8Y6+KqtciUdP59U zKFo$&rm;J#*V_Y(IHgn@CSbV*DXhlz{0;x23BjE(TM}-Oo_%*P}+%s$?lj@%KB7 z_vTIDHR=m5M~6Wbd|`^VI*=>QK9`0#^Iv=Oi%+;7<%B zgmy)xoX~ChJiHA2uUe|BC5tBOIL;%z5Bw`nUoWO_Fc;G|is?8WaDb_q4KAdqe5-H; zBz2F#48ba9?@umEKYa#{dK+%oEDc+Yk3)vv!jg{L$8t)GTRath)B3=aG4|?Gxo$qh z$!!ipp_qKp6<^{~dO@|_qoN1C+f@xl%-~-cN!yI`M5y_7Eh`K)bElymZ~)38o_Xc= z`T8}UbmTVPibJgsI>!H}FoRWm#v~T$x9YZmLzo2Ou-*-F@nEb|GVK}0SXRR7@En7I z_(vPDlZqdVK%%BNo7n}R1Cu?NI;=`WlyxW4^u$S7oW?oIwR#_Ep{P3qKEkgJ=o!g; zHBB};%|^fBg;HzLAQ(GP%h#vu5V#jV!jrfkrja&wr}jW%JHdD?Zdwmr>o zZQKe5o$-%t@GUj{G`>B0NRw~&!)wA@mN*@_Mrr1(e0z2Yw-!g~4;48UkCx3vb6;Ft zEEEkyVK~Tx=l>v!D&?r5JA1Tsb2ur9KDe!Ns2W+1EFq6wAeNStQ-GNnc>Bmz*f~HR zuF>#IXF>&~&mkYOGdPGM?4DhN8<=S9G7PwL{v9SPkhE2D3jiu(*c| zP;&7Q%9zq0Yhhsbm2f(vU6G6(seM2Jy^Oemq$i~y0#vov*vApx9kyRI5i-a?e1zj8 ziY;`+EDxPpfZ6hSO69`RAd}(Vg}bj7|-Z_BeB+`Sv45&!TH#EvyS(pka^4;nBTpD&`Q0L z!@qd}2lolYTFTg?cc`RRrL*rYVcH2h#S;$x#gpdbU)%`kA`VYLkNfr`d*dv;I`zFI ziKtZ+@y<;)R#2o-cYLk*L_NPQ$Jdd^c&DoWxMPg*GZT#paE$y{rcg3pE3s$_kL<(q zxYWmRZft#I0R|yq{CUZVCa32~bxWz+O)u^(7`VK$pKGw=-c%mYu2DnqL5*`%>ljLz zCQxo4?nB{Mhz_xbQmth8uktP)0-ES9MdOZAC>Pqo4I~p79zMmAn3PGH_##<_4t!UF zDUe0}d2)7xai2SO>*HIP^+CTdIo9%zfoN9Q%@Q}_~~c$|hM&C>sJ#nK-X zcYgz7nipO`=>8M}l2JNJ{gaW8<3+t-X?=+-hBg&Ln^D%^JrSL}@)O27e^_U>fU)~$ z5aS7KNbl1;T5Y@;38W_obj;nfzj`K|`ueG-E2ua@bS;a1s{Sm%YSgZyM%M2eBpgYZS40ixIh&vQtj; zvbH=@O8fkuD@M5iTrk%75f-onKN*E25n;jLp`!R46OKYmW#-<=Vzg|~om@sS?20a% ziKtNn8Y!UYr4;)x6XwA2M;V*Wpj(zx)cEe~sz1r=*SZRQG+##L#{mgs`?pl#+W^Ma zxxc}J0C>qE3EOtUUw!4e%~(1EZU7LZnKt216WtEO$k-_$k6%0|s1%{%Nw#>BLqV%z zQT~`i#t7ri#4uzWkjzfZ%5#n)s%rBYgf=JbSjgb4>5wqbYI?^nb+P3^CrC1pr` zF4day5UHAy%3=?-#p(J+%-Mr0N356Lnq+M2O*l}Znd)c+_tHod?#>pDEzeMdIiQi$ z5q2~t1CV;~Gu{%)bIb6os{z4#?r)0mVFVX^z2;EL~%W935(W?5HXDO~r2-^;!w%yOcF`D=e;E>+wR(4LOChbxml%S_>@m z;r}wHnzR2UP`fhdZys0|7oHriA%DxjY{|P=Z+m?jK<)MElzo=5X2PmDGXArO`_9QN z=dR@cbVEMNpuap1+*F8XmjIe`y5C1dgqv7Stdr{Ik+!k{Y=U%cOeJyfPfC8x=ZSCP z9=e+`)S@@!}of@>j;-JBE;U1N_?>Xs{v{ zxiBO*7Kz&wxayc?sLD}#UpU$cb1-opjTxF*bO8v0Sbi@?P=RB}C2Gv0?ORyNVbNXz z;sz*Ff;u%2)?qZ^IxD99ziz>J=;n=)#W@>st~te}2O~O1WiJ&|F>a8Bl-lzZ$E-Vz zZK~B~8VPkH2}niVn0oxiE?YBygg}I&-O|d?$f%8Q>O{I(TP1OJD2481{wln1A4VrH z5ohcEGX9@DEd42yvlG+XAk@HdZxCsNJg}Qxa>sEa-6KJ=4{Ag1=hlKJ+f1XrxB`&G z+JSzOma53xcp|3?y}?VmAc%Q>?Z0~=08z0yM_d4iYluW{suaTg0n+&uFkRO3RSI~w z@=Xn7&@7Ilb}3ARZD(X{0{C_5h_K6C}xz^yAClE;pqzOP`63qH4KZ?pvsrB!0Ov@nk<42Man+Z1)WexoKH5s^sc4J`r=yfo!=lD}OKF&UDiZcI zP{Y`zsM-zB$@l-jXxw<3NDhCuU|F5cF9)U+URYYYy{YApIBr*&4=+da+aC~Gm_I^j zAD@7+)IL~`XBTU4eJj!jK4JVhG4KH9XROK$3GA1bNugwaGf*}zr?6Y6kveTjAlmXW zozy0K7*{cT1j2xghov+3!akkRMyB^RJQsLj>SVK-WLL~|WMR0cY!FDfO<4NZY7}pI zRgbNpW-%|J><_#vmP^*icgPhi3tSd>Uns! zDVoAv94r`2gx`btg4C{>I{h~rH8;OQJqP6B!MT7ebf-9-#`(R%0LRna+b>4{0$+Jz z^jwA{lgscU3en*vxF?_6rYLE+R{=4{WN2OSvgyS-7T<;kUpcUi|wyzajoN!;uKB|f*ebRqjxnAjl= z9cfn(E|pVRjyK{H3wiZ8{`J#_->Vg?xq~|Y4j>Y~wI0@^-?b;mVfU%Eej9@s*!5Bp zU3BEu5bke!&!w2T9g#M%2P2;&c2xOQfs2DfebUg`&;y_u1~R6pSh@Ni_h=J1Ws zKAq3?{vc9~aF-tWldSE4^N8gS20I8b{!f!BC zvL5dGO^}%ilieBSVuq4uHhD9cCh2+{7)AJRGXXi{DSgB3-a2v1lf1g`Q;2u&2I8Fu z<-zNcL<1~vU~&u%PrHXP_5DoBG6qo28uqea_s_wf`zC*ODqz&`4^x0^m2N*pke(Bt zA)!}#SA?a8oe}1*1z#@X$nvlr{Hpm{h2A+IYzs))-GcYC^6D{eux&*m#A* z9wy;jVdlBxwAgV5uG&Gp$@Q92fz22sbGSDe`L&~!hByO-9p4n**2LIDc#POK7jshH zEDZS*9%2hi2U=1|JUh4kmDK5c8;gDaHjv&%_G1Y^o8rMJw|*?yn_NY^d{6QgjR;}v zoVtfM1OCV_eLLPmSFggzWCZhu>AP()!XaaULm<`5E%{$UCu(jgTIGsXd7@RmfoR3& zd?H8fX1_Bk6jmL*gHzcpHj zoIhGoo8%@)*fsD8LZ?N1O;96|c!5%rR^j`jV^nqD5JT-8hfAYiKT``)`hW8&sIU=3 zB#JI#$eaB(6QR0wDZ=(O`PgfvD;6PBl2-@BD3hBaRCPa(9ELaonOfffhG0Mc$o)!& zEJl=w5$!2O^UF(KV`XWUyv1|YkS+?d2KA`VrWJVW z8<&Bw)!Q1jCh8K&lvw`@oiJF=vzy^L5VryY_CW^x^vh2h*}&Oxh;a_X;WaQc(t+n> z6Ze8qxNUa^fQ2r8&I^Z=52IsZ1ku9ap*~A{AFW z9DR7CQw{{-#Wm8KU(!o0@G@%0J*n;tdH$)D#PcuYducQ8uTw1WD9pc&=P_YjAaJg9 zY>orqNu;ewgFkaE&N)OMP#{gr4DS4*4-|PHT5)gkS$hPK%rp#~QDQ4IB$#jsP~4Er zyXo1VIE#gd%M8D#pO4_?`ythgdcp_Gtez$T9_X46<&6ju)V7p&aMa|PGUT)q!9Oiq zg!k~r$1v^*1HWS{>^%a+=n0S0M370zlqoU-b~OHoh?RaVZboN z)i45K`P=PC=1@o-b}%j<`saOw>S@Oyl=sMatPs^cFe&kcZhjvpp2_gvzU(0oWlOmh zoz1z%bfnF1pYa?Q&f9SHYuthf^e3(Uo5J_Z!x$DG$AU?YWlE`BV%V)({JS9}^9@MT zHioasbKVV8ks=7+5~pG0T(^&s>K;+wGD{>4$_T|ui0GqMq(j}CCE!mhJ|hH$ZutOx zhGyX(3WIt=nM>}~;C(<3Hwcx~)VrMo_&ND4Q*ZX~Rw7i(?;8k{KK+wvdMYMPwFPR4^%t-CQ- zC6ZUD$m;;khkrN#KkS#my+*$Kh+4)pC%+B906wLOEofkAf8MRm%5^Nx4LCajFG+j< zLg+A^v0O!EcZBM~KREtCHw@6Z%Pl~fEjx~g_J6=&Zy8PegE92L!sgheF0-tGcSGL{ z$095WH^;Dtrh=G(?JTaNHyFhIaVvI(8~aLl8jY8m!o;j*oS{g>(e1|MvTV9+s(`EW z{wObD7j~(%?-C7Oz)Pg~TCwCp&Up<@M8P;D#*sbp*cvN|#j7dLb|1zgPw zP5zG1;zZ(4@a9-pA&KT1(uVW6wlZ&vrD+6nN@w0{6I8b`t4?jV8HvyaBDA3hZ6rb) z3or_~BZ3VL)Ziy~U>_;o!KY96P*~l`j>Bl|BxaDj;~_Ho8UpXdOpmrU=*#`{R9E5T zpXVhFz{L|>d&!{DZ9_Gy(Rb2oCM|iS`?}v)+|=>{!tv0P7m;@4Iu@jO z<8=QZU(Gx{7ozzc2!GJDnoqP^U*i z7PrGZh~*>h(`Unpb0(FoT8cNv?hXi**Wc)&OLo!|4Dt6g@_EAssAjOZH?t#uGxpP^ z{-cjVG|C6=2;Ja}JgJLKkoL({m@}kv=`L?T(I{wWOdD(rr^kOAi5v?^?sI_WyC3x9 zUcye{D?=#d!OI9WKgwAc{oJ>>;3VNl^8HbXuT7uAFBmIG zJLwMyD8Fyix7PJlOGVupRP8-NDS4CAn%@mYN~^k)1|kLbFFHfuC@Fp=yJW`sPWQSR ziR_jlJ6mMui0oWo=~}Ss(l1LWX?-ys&iRrqqmN;;dSd?`v41b6T;G7$2Swz(hp~ZQ z4G20`w0e~91Gb-|B-^_m5%2NU0lmvwt4rvOptw3xm6x)i( zdl`=NQ7z#Ai4Y#I%(mn=cw=AP0C+g2mA68 z)`Wpk@1TYjFM5C)-)60*vW#=cYu-~Ykx)t7arnWMfeMb7K*@zOC!n~lvY01(lLk5d zizMH!e9?R87Y4|-4~8SmzhW)Lk$V47JcsV%(T?pyxdnIdS~|WI(`NaDrYNGZZ|xrK zfzTWG8aD*I|hFs67bLQcVl;EJ((yI_(hd;{f0`=8fQ9cvupH z>rsyW=0Md&nBYOw8lwG%Z+<8LMguJS(~#d)K*8GnBe7<^J66czdtcl~eASs@&XiztxQQK9AcOiXuktVwdoWSz8Vh;!PC5JgK-E^l;hRA4@Cy=L~Vnyin9`{ z@$?yIIxMo@BdeYIerqj9TX*N*0Z} z!-0xVPt2cJM;e);!`A|zqad=aYg*x12P z{pL02vGka}4%g&96$}0%&#nvM-M*5%AJs{z6j1YlB{UXRj72mxdlkMy*$4JD_0FQN zzs;uP!I^ltGLDUjPVe|cv zl+0jhyF<@E5g9U|AI!lTI#b%G9#|i*mf-gr<>gJnH=Xx2h1gXK2~FhsSVOyTw8dek zxjX{gvh&>eu!r;Bvw-; znJ%C%8wMa!?f<74>!<2o2O+<2g zTnj3aOYto^;{`zOpRd`u&l^g)P>3`x+uowO=cqs68?$-23qY`dYktl2Psk0J;!6S1 zU^aHKM!e4o{8p0952i`9#r<$(Mzg9O1$D5)yTglWrZ)gF8$%vxPGP_9McdjxxQX8_*c#RYx+|}@ z3v(SazX1~01d{uX)xel{$k&lKVS{5-x@H6TXsd_^T(Y{>3Dr3HwZtqrkjr8{>l_xW zMx^JiPYQ$Pk<_xFKDM1Tb*mkQja?4cLa-KnVg|tPu&*OK*>d<4#MTh9L2FQ35bWJz z#>iVao3VJS)xGgD%#uNdo2XE1ks0`T=dBcz=(m%4X-1d7rp;1NC; zDjJaQw#Gk+I=k;_ro7$wkDP~V(O0n6wQpInn2^R~cSVEFTxP{NWQ__CE?p__4Ge6+ zuh!V(L)h9)s3Ogu+NM-OGuCvbipIx4@n|xM?4SR@NN6`P8VbmaMVN7=5@BVQ7L;bp zxCA`6y>|woP3kNz(d*kxy!h;9ux|R6qO=y+hgI2FY*nzTs>-Fn&&_e^M9AqX;6y9a zNF;V1JC^;fdZ`^T3d!Hn0Y9ai>+pj+gVGMaBZWq?0Zfl`+95fR>Y*dY{JEJWuW3oc z0EVUKFR16EzTkX&tto*ZU|gf-I1Q`WKa*8qfpDy@W5|(iY=_8fnFq8wI zLRRwMEvVt`p1ozktbRW9(-3rv!K3?H3iq$ZLv}w(9P$@32Df^NHia+w1Ceb;P{e7T ze~)^zvv!I3c3 zsG)XTv95BHEKZFRr^Zvt?i)y+o3t2VR1`~0+8y32r9(dh-!^~{HWL^;sgHhVt1RS2 z?()-f0VwT1(XbBKj8AUZBAB65|;4J3j2HFvE8B7|uOQ9r6KXJ$_47 z)g3S{cDO1N^_{?uN4+k`S(1kvKPy>PcK19@4(^N!T^hBO&Adrzt3RaTnBM|floieO zSrUe|MRj|hpb-x_K4y>Ja31_zYi~~0rwXB_Sq`%Th~euy{UJ`d35Rb{j)vjjjgmaGE{A(9{@;DSsJsj%2-v;+u`b!)9knZpu5tyq&MU zgLbY|LhA>qJO$wS7uG4VW(gh}AT>Q&IzzYtp$7T^rY0`WgQ*__mQxe0>sHKrDTHUGXWyzIBci4~bn($T%w#D<_2d`yf zE=5@xA=dl-aFh%L7>qUY+DY2;2ThMA$X-yi`C#Dwbj#G*c$( zN6{sTH%#5BW&HJR7|{7QDL1mSO)Qu`&YNTmJ`Viq-ts&_GSe>y5bxb=SZ6 zzy3~Lk<#ue{Y+^^uCBF`=vGBOGehyg=i9%ao6M@xfjufd_ZN|5)eJpextai zKCGBuH5qOPBQUiccQLN2Sl<`?l*?U4OrB>nT+zrOj2$g^9zhshJqg3vdMx#xUWLi@ z^U1*>XVSLQ;G3`6RfMUI(O3Wj)-yA&&iDn)n}Uj)_QRXcvTn$0a+NHbw!y2@WH_~s zS2Yyz_BiYC3gl9FS7$URKMlWh>aq5+j8ja5-g8zwHqB=@$k7dEn#pOOiF$({zk?g`l9_i4 z(gWD{42J2Nbf4^=+A%4^anNNfpM@l<_&LU=s2h@6hw&2;5&n|p_a*Ph;z_%o3pU^` z_Z^&Sl;2kjU=@x$ho$Vt^n@Rqj}OK5$?3L$$_TP)x6aE@Q8<-UGo2RoeFMHvbE4RW zqml8qUHI*$ygB+7w)pZINvwOUMA-S!bJ+x!Wo{sq@mq6Nok$AcIW!A64gu!o>I7Md z8K0PpjS?2dj(ej6z_Us-j!|N-DAs-^J$Qskc4}eCH4i?6_F0)n0M%OO^0Ycy-ZB=} z?S*xzuy1rhISYrvka>@( zES`;lk#Uh11Sun5ErLkNy#j*O!G~d!lE`eB&uB)b##uDs;&60Ap+Xf$t<$R%unHDWS_7j4Bh%mYVAT7v|vWvAD@3_HMCBhG#C zk_|b@Vk!UMad$iS(rdZ{D6!})7Hd@##d-0xjN5k^bp(DRZ?g}0E$DF@3)iBI^ted1 zW}uOc0p^GNT5zsrV_JDIAZpDAn#T zva!QG6x|f!@gK0($th@pPD|7Xzs6K(eh0~u+A-^q*|q{<$LlW;TJ;P^=<;egYn%P< zd4Y!tHDzirs2#;Q*voQL8k`0D9q^;0rZJqDxcxrDh@LQ1mAV^wzzGiwdCF%}_=`)3 zDR~WY^>Qhy%B^BZsyaTAXWymU8tlx{WpH+O>l+53Q93zxS;!T)zyPAd-W$L2kb6XZ zF&0y9iYd3ml-q!v6g9yIf*QC$oA8VhZ)#D)@r&8iF>EWm4`^;0*00aQWz;kpEPLp3 zrjjFI#e?M%jSF{16LdWgY)8J{7ARBi!9FL1TdV#DmwA864g^3BzhhT zLuK*n6hoSWO+++>Viaw!h5q$6Sce&{_h(aT-&GO)5fLgn3yhPdbjs|c!j;j&n`EFr%w z>_5a}D1O5zqm)S^)gI^!ursHhz)Q>X@fb$wtAPISyP}7v_5<7wVIs3(97PQALXyf< zCLz^Jk7DpWhch+`NsL1RpZR3Hei&XoIzj05OArP%!VIsLH-;kAmJ})KYK7(~FzRsh z_+&G2(i~SPw?IxHyCCHd(8_jh++4dyck2Nw0L-zjIxy@XB+)*m$m;{}0N=u`M}|vk znxbVkNYyI*r>o;{NnTK@_Z}cw z9Rs^SGFbp28--?0l*1rZ$szMmkN_fu;OiOTyud6Tq>86W5{~IzfQ}r1kwPY1!-Rsg z30c6HwSz4fn(l(di0VadGT4&LxA5VHLL70ck!bN04)|bG+S{7azFh)HsoHoMgRdS~ zrKryUX2k`rPqzYh5;YO$H(}4V!tR$&UxZDUAxoJ&?){D%%0#UPr}&KZcX4 zhWSl+r16I$WUO%%l=$uw(wwNK9{+6sOX38t-hK8gL+Z#mEY*#AXn{(dx+f|`q*g>a z$y6E4WU_WcCXStkpLl}I#W|#EdjY5l)P7?usH_AYv%y2ups}4kZ!i@379!sggYVqZ z5g%N`nj&=1eXQ?uY%w3TUN)4R(;mP=qU++;7^`vAbJS$)XyV~!LP=@Q7Y@vm~yyv1v6t#%a%)~1=xebZ|Ky3#kELn&ec#q=lYB}SM z$9UD8q2M`#;IVIT{bPvCZyNrSZ>zMKgjXx051^v}-XSk_0p~yPAq6>C0C$IMV2MHG z;NQ6HVOuEecmm!%tscnY&N?&lY_SNYTHdR54Fp}~;r-tq`SeoglgOf z9dahLc!Y4&r5c38!`#tj-#2h7$s?@NOk?a1qz;X4cxOkbm;J2Rdaqdz8rE+S8l#*t zPCtb1mWz-+4F`E4znV;gOs3*BecNG#z3=&B+ebpY7uMn>*N8{TW$YA5bj+c!?u_Ch!l~gQY&$fk)@K zP5HfZ5b5ypyk7Z-`!gr&#p&F5$GdLEbuf8o36YT788%u<*=O^AzuIIoEoNV|76%6W zlcCR+ns25s*V~L-lehQ74sz(R9w}S^<3Og);gbZZ2an^>izPfAeZe#&G`%Z&LXhcS#5eo)^9dzAk30bnQ+gX6O=*LjVO7lXfytX~k zdF}D#EA?EqFH%SjkPM6(i%8pGC70)ZyeX`Ro8!W>#mHg=ugnKV;cJKG?r6T>15>mh zcvT@jdBUP-HxuIi)?~MLkr@ts;7AENF8fhJB~S0ftt{V;4%`4pD$Te=u1{j|9x#$Y zVx*e6yg`G=A-J97j4OPZShjzqLRkKwnsG$#1~d`}mDZk+dXl=_(NLI;EGizvzd(;0uH9zN;T1jA_d@Y`=D;)GtsC^0G{><$)>f9E8PQanTdc-F#d? z#klSW!Qxs?UN1Z1H0TXVcQXY=G5LfN)hcoJ7g??D{efMrEoFAjb@DU_81g{@cV>?s zmv5Sp)2>6T{@H9`C(^c1%BmFLDe2xvC_kNA{D0hN+o2FQW^Bh9gZnF%{8skBy+^K-!kk}%NEefi<7yzTU$CPu_ z3Ar^_d&}5sZryue{@i;#K=M#`EDXq89Vl_r6?FgD42tT%8V?g1P>L11QtwmX4s2oG z^?z>qEDCYo2Co*~>GKM4dAhiaA@$e`b8eV*o?{V$?~EiPnn{U*Pw{pzuo1o!|um; ztH;>Fy~tJ}2AeejrFWqnPe$X0xK@ri&(t+*Fvz*N&rwueI;qSannH{TXk`q^SI16B zkvNzkR!;mZ1~F={6~@@!O~8JuufP7^)tDalf{aD2MW(2=6tz~O)>_oskT-756@X8@ zF7p1e)JujOH^g(56Vp-IlOie@%zL8yp`{4Dn$;oI zdRk09Q#VsgJFshC~A`vW&q{6w=uy;M0JvJ0$KZ~(n#Mpmv=gIU+ z^v(ED37k(hRY1Fqb1LPiIvxj5_eCj0(OXgUu5KNc^beeYn=3BQqlA7A$g+19^g{0j zL8D`Tq!>-|S~W@%e=i|Vu>o%hCD#!;w-^oGp1*Y@4^oPOH=+i=OTm2MrYtuGX|aFB zpsw0xG%<?EWcZ%Ir2zpSp^VD}HqVRV~6z;=;P|!rlHM00R*NptT zWusKvyHpI9+HiT$moynYkp+gEzF4o)>IsxI`V-g)%dt#3x@6pt>)xSNN>i0#rb4PcV~IW>m;hka78-H zEhPv&KKu;^eJ#`);a965+cCfU9bQqlHr-lG!G%1W#lzh^ zugfX6+e*Zae!$Z+{&hG)Ei9VgXu9cOBjMB8pc$5vOVyuPJHGSsk)c-(-IcdTk-0=v5sdvXjBn8m~dhq8rUOC zfBdiINR|(&QfD&o#ms3lIAPj$Tqy}1&~ku~mXHn9$JO+{onSyEHEK;`EpTs-;Y(%_9(6TDfOH~W8d1w*`HwJLk>C!2iz!HtB}B`9N0XX>+>C($jA0(S!S zO3uqE{Vmh%?{Lcwq&9$tITtZzj>85kN&&~ljAaB6{Q4}Y$%IpkB@?dj5cJSHTy*Hi zLICGCOAuxqOV=-otSf;((aG3R7C^3DDI>R=tf)tM_nt!$KiK~*6uEU|S9iD>?^{q+ zrXc?%NnW3f*;rrh4pmZ5l8F`+96swiKP}c+SUkl@1N-hX=V+3HJ;M=2G*?dWQu+f zgf^-I*I`p`%PDLgAJ#{Xz3YrAct91QTu+PfYq9)v<+xYjh^;u%Lg4g}_0YfYCH!zP zdQr59EdM!*SNp?V0PWzdCI1ahFT5g;?dh=keG5~uU+`7C;RZIPZWxZ8h!Y3MPjA4K zVzQ1aw*T>$+!M6R(nKV5+cXfNSC1ToK3<(59L<=+g#UX%%A8?{RQ`VH=QOHgF1}48K8>ij`%Qtols%$$FL^dkKq0{^ zKI_Ll{_YCAtp7cf*e_cBB1Gzb={B6>Cj z%*V`0nlK8NuHhl`BqbEdlA1;w1^XraN#5xY@qWDlKOq-kXKwzXmwxE1+AlyMHXFJk zRFC+f$L&>*J_D_E%6Nmg9;?T|O2vP7C)uDCoPr$wxqz&1^aZ%E@6#43TsADh_2$d0 zsbxhBW-e8`NOpkf)EFLX$JN&my7$M4y1_e1x4)e%E}apV&Qh>$8$JZJy9CT161@oR z^_dLf^C?f4F4tbFg4F z2g%XL1F9j0FrF?wfavad+Ed6|m=R&FPIiSugso!fHmupBcfcN2y*-bTtTi_gMi&I3 z{+XjF2a0J7Xgj#I2<<6Cdy(tDvp^$#yDDX8BWgQb$yu)S(i2YAFr!-NLSw9XorPYj zg(fx8y}gV9$SyQQl$RM~8LuW&g3R3Npq34>zpch|V)e@^1)Gw_diKT|uzlYjaUQ4V zV?6!dSm8OtDga^I{ry4c+r2mm+eu86e%P^N(HXa9vmlP#L!}iXkuKB48g;f9=ZgGx z7uy+2^$hqLvzYAhypR|EP3DJsa0MMb4UJr2LE&e+51nl`n*4+fr?4JC{)I_M;gjhk z*Fh#@xRFBBmm*Ds8(CB{Y460JZlA0rQ30)0|4Ph}Y)eiFb0iVa2wLwr7LEc6_x?qyyG_wAn9-kC zii5`z|~079`gS42X0 zbSKa36AJO5PCPUa4{>yru!6ujODAQrsM4DUI_$JjNXX!Pt`|%;{EXD7zF9Mnte4}V z^9uXQQrpaOaw##FMEeQkS{R0E-A!?fdtf*@9ZOPp8i-6wis`}1&0nukQehMxPQN7Q z3wmbLqq7anWq&DVAx`swI%HN^?))jz{Xbm22Urxz^FPeaF3~JmVA)-Em#|9?l0kA7 zL=;q16h#Fwi4C2RTD%vFbPvC$ zWrnJTh3iTuK&@e z$Zq!>%Ncque5pii?oM%E_M+rpT`4EL3sST0!IrzE#vGO`nI^U@ePck89$PRd$_I<( zLnxz^rQm;$0yWT-mmFnAN7N7!(i_EuPN&F!c$r97$y z<{h+yNWbBXRJ=4oC!yYDe*>YmSTuO*(;GyJ6y5>cH<V-y*Uu&5S{MNCe}tP9oX>1E zpJxrBTLxT9(N ztjNg{co=NZh(xp@;W;ntoreEF4y&UX=qYZI|I$JDz97w9tlL48l>E_k6tQv=hT_O0 z=#0uHQt@{SAOfdf<{PZ3>|`2N^?8G|u^`%N$-gQd@4I{Q=An4;C24&1bHjh zJx5ryxQQf&N_`LFzW;%3*l`rmga8@H<)H68BV5bjZ=v9q7>vlMyD$au8Vaw>xpVr< z7|Nyie7<;%QNLw_t45+HGz+xM?^0^pnf#{>-P=7(qM-ERg;3AWNU>m`$=4T~7}*(N zlTY#ez94(|Eg67y*}`;8y|C+6fE2VuBbq1UX2<~;ZJ2~SZh>;C9-~b!*b2~kPrJDi zsej!id&PbOa&T(tj$Equ?1EcA&k_4_FNzpdi5cg*18jrBx1`@RQ&Rtu{LV4;V14cZ zXSc#WL~MqJcu!*#o!6o{sF%pgUKqO*Epb`lvZiRaL7;m3S04vtJ?v?G3d?-#vWoDA zd>ho(gW!Ow-wHhGZ?~12;gEB@FDn5afeSSW_ui1o=@K=iUlzz^8-q^43>jnoI)>i_-DKmrEHHPrb6%M&UDnK*tbwB3WeB;D+Akum-GMp$n(4$ zriWinF%n-+B`+w8fXp5&gTA9nLkPlc|Dt$ZOE3ewdNX&{W(wIY|A8z%RUAfmb;X!0 zQ{&Q5TJ~$f$d+uDl_Ev{qd!9L2fM%rKR`a)_h61{+fI?xU!j zv*j^6OC0U9OX5NqlNW)aR<_^D=Q=_=KEszJZibKWPdF`ZG83#=)y52V)b5waTcwEA zYq_p*`Jk_?DER&nWDn>^HMR|~>RM98$4Vr7cJTw8TK*b~d;d*eP_@%dyxL_tGM67F z#g_FJDkGO5BU3CP7?J;uWwfQO0~YJxi4#jz#^SE{&f=~FBNK`r+Zcmn$R>aEwfx?B zCg%*+K_cK`5-6n8dT{T1pzQ@FxefT_= zx%muu^^K`gZT$hDp3NYg$`f(M*B|*?RYm|nE4q^F)fxcOt4*RzW+lFhvnA~Uxa217 zwHL^xE{Xv_*~hPMzxBx9coXGaT7Yg!tNn_{_jgHmZ5()shs6~~pz*w+3ZpV`g}Ee} zf_w4))3-5|)v|FH=TPj=Fv`V~kUB^jtc8ueX*h;Kg6nWnwVBDphBp2qFhDMJHas4m zh7X%jCrR&hS7sC=?k*K~_oM8SJmC5jpO@6HBj@j3fKS{%@-pYNi#3&oYzMXyJb#eg z>n?co8lM9$dJuUpW(r)@x`3;9_5O|rT`%kfp^%384Mj5aw#t|5@A8rtw9)gJH>7Cp zgqiNvzbSLv{AX3+Q=EJ#(zqXP#(X8cI>A`nF;d(yO6G_WQLK=P#}(pnrFdLLMfcVL zeD2jTFb85YBo@OnSt zL`L>yBl5%DEwHf3JHfVx1bmFZ@t9Z8*a(jT$q{1^7_HezMH8z9G^J>1AqsJumB{{l zV`}3uxnfl~?I_u@1WsYhnaNP~aXvyjhj##yYFax%w1Op~mv)E8sJI|s7hf5(}V@9=AYklKWM%+=@& zhbwLirckQdPywuOvlvG|0k?q2Xe7mEc1FpGU2!@Ti@)m7qPgN7`^qkAlQ4(f)-;E!(*w#@>q zD!|wzPVjuivwG((!A(j7GMKTU|3@tqZ-eVb@((|o<@4n_;uFj7!$elK*lZL# z|N5JP*Ih#CesG7K1QtDZe5$wx4w$;;!+;=BLVO`p4SFvfqznNRI4A-grh$@g%$48q z-Y+*P?({K49qf;50D1P_1WE5)&}IpUT#HSI>sZ4sE7;`#vin#=QqLW4RoD!rs@lOc zFIVCR%L_O-{f*k?EyhGK8$c~OH30-YKHQaxV;G3K=f)=Dnr%knn(Z)=zC&EIle`Y{ zzNPibmdIFJ#8xf*AgpqrQ2Gn;;YO@m)%7clSq&S`lHEFTPo61={bk`4UU?Kr#Uc$? z?to%V#qs`Fx3-eH7AzSxRMvv8FF^qzV^2Ca=cc(C0pGm?X)7S#VP%;!a> zadNesqIWVr4$627{1<;1Y8TLOlT+yj9;KRF&3=AhbcqM1PCBe0nNZ~ca2F)osIagj z)5T6Vw=vC*ZwzYP2k+!{aFx^_CCdSfx1+{%Kp5X=3Bw?#0r>uc@jYIjOOaPJ&}mBtf**NTdqDTzZlu4?}3SI#%vzVT>*IA^mc4S z+N&LNTx{5{4U`x}UR*+AzhJye!WQ6yS)V2S5T|^<_NP)=n-4r_<=N};=_W>ca=kg# zSnRpLFc|!+KB6ASQ!o?F{j}yLm12hqgAYMZ1y76w>ozj6I!&xj7ppVG>ei%RF$KDS zizxm_A+n#wa?^AM0HC=?P6v7$RxmUQ&FV(CaS+jIb27%CTdE`Kul896^cDq0s z8j0pQa;fkVM2B$rTDj#6B%tf7$MN}T;_T_JMn+(TJ@+`9~M0?7SU&170vft_x ztXOg-+JmqIgZVNd53a$n-oSQI{dsEr?FeAyGAoKT(BgYv1qM3S5G#NC`EV$+mt0c* zVNjm503WL@-uB$VOrqNT-Oz$^btdZYnNh!utW3`tx=FtpjQopV*&}Jfs^8G@?hlVa zxlWHkAKw9ofSo;~7}f(i2~FUV%y+VW@A3^_DaNS0OZ!|_7%94LE zOCgtYjr1`P>f!r;lM42IXwZhyNbViSXULQb+v9#h0k5Gwqd+QGZa|8Q52SqP z2bZJw8Ovtd#ThstxeZ&Pk_H_qHg6i-Nz^DO?c>Vm5_oLT1zmi&K31Nl3Jv;wU zjJhp!z(*$iRQ&V*+f>}MO5C#=HsaPmhjh3a@7s3qZwT9MVs#d?k5pRs9yf0JRPo_4 z;`Pgzl<3*%Ji8DNdca4ElDaq>#!kw#PaqytK^qa*{?QCDyzR4_FcqtO=PQU!?!rRP z067SC*&k>lKPNJ_HV z2++e<(ypm^Qcd)i8JVC*B91doh|O3B1Q<202fliyH}!xvEqp(=qT!aj`fC@kfiiQb zpW!G1T!`zZ4vBZ!~C zDSsTr-Xduw42#0*U{l284+rKFnlGVlCZlj;cZCAH6#zr4injmtlV9{=7KwAb>iUt{x3xN`;ZQdJLtO&IHhN2Jb<#d}JNIkjrw-1&z@8_YrXHH!mGMI1)5_>?G*y zK$HF|jnN(gwG-O&Fo?QVbu1svi+;?zw28J00k}wC_R-S;j)~w(JaQ>eQ0S5}G%a}- zz+JVs9^lx~iidHV<3Ut*7`xsa| z$%ezPPoBe^Q#JPp7>(L1wdjkuav$_+dLmO)4ssiW&c}E_daZtnEnq-iSKLST)$kVf z^%ig_`oc+o9gUa{&Ya+<6*z0#$x&;7Mte*}+qr}A2-pH9xOl0DV z|A$i>$+&-8zO>?w@%l~?+hPFcQ6nk&{xE3Ocj^z#I_U{=c3Xr>-Oigy#J+tg6gJdw zGCUUjZS-dY@W;^`5`)n!y*gSd?kE>`3>SBdpa}CNXi(hVKR^=BhCwGEaLV969uoq<#m*{$R>GWiWI1vt~0wv-%~#fTcXg z%z;wjCsOARMXdW(==%>k(H!P$K0=`QUEJ^k`>KsVD+Z!QRkO#{c|a%~ zHvxpa`om7H+inv?jZ4X5daGA|R*~`gftDHjQ@H8B_?m*15V<$t79<_&ipi4pcniM4 z=2BODpS)+bG3!)fV8y(_q$Nq!Qt;T)8|}l0E7-hMs271!29n1=D?zJX0M|ml2WHD* zp3ZA@L)dJ5j90vifkNtG`ELDYnMkj>6vd7`GEw-%bYD33`0$z41Xok)(zPv`p@S_r zu_}oQniON0*!q7#oMu&stbV_dmU7EVW!&*cS-+9Dc(RFMqnMyV#wn60W$ zcNmO`V{c$6#LRArPu~a?+Ko6&(cTH~s@t1G95b9Won)qB@G>!Yxfr}c3|=V)uM&e- zLn-{$ITZKqG*#^4si0}O+0;n%Zz&c1gZX1MDe&Qf_1(Sk4w%7mhc)c(kqxSW4&azApP{C*!|a0_D(J3ggn5v+$OutBatgFmWPo?;WI-; z*0xpu!)56A_;@J{?&5soP@vUuq;uPVti2BZ3pK>3DYdwd+0NV1jd#c@jhU1F@od#fokQ4OZjHV?M-WfV5>L&>8RZDX_w9KeSlTs@sw+!D*f~$j z2a6);G81f}zcZsNZIzVb2QflVf(KgI8~%ktHUgPrYDbsh8b)!m=1Ka)$~~XdSC{lK zX<%t2x8uVufD+2&{^>q z6}7$!PM@pyBHAhzygLhap8G zsWo&(dW;pGT)&nHVlPbMmfh1(vc8TK`hloAMu_E51QB z1nX^ZH(cGpUhz{SS3nr}Gw$T_c_mgBP4+EBc{^AL;ui<;izE5W+6&N+u1^FqRv9Hg zpj(U2acP)f9;3IwQN&OUtQ1x0ID~CBwAPHq;8(=&$-sqO5Ek+(UJ9s^3T`{+A z?*Rb;r|wzyIU1^XC;wvj^jm6!3hcHPp;))DM^aJd3to}cTj+^^csX>Md6Z#w`vn|7 zYCnSVCii95)wltS(Xxb@Sn`#UZ5Ax+G~)#VAKG1w@*@f;>@J^f%vVwDmJi4rIIGUk z13jAC1DV);z&oUQlFRrdpm{gsbp8e-t=qZ4tJYExtPixcJ{7t0n=(!eU&{>3(ybJ6 zlqt^9=@fCES)QYRr9o5Q3-xp3$h%-M93gfPzjee~yQ-t1I(va_QO1P*f+E^?Nk-VU z-A;tj;!b!ylq`kxb*F%0PMjc{5n3c9hybnR@(3C;AEpU~=Ty?I4LB+TniyjuIenkQ zUU!%p!wvz%psNkTM|bUjMg0WPU=2xJaaLS$4!WD?G1smfLZ_!*$92Pk{QEF!h)L(& z-?~Z)+1ejB(PyZ_U~{9^`zlg3QI%3-G@!AEt7wYr0@YB-z9y8=Z5trbsr)rk zRl6L(O)-Ys$9BAd@@x1*h5|8Enup;EHzoU)T{zoYmtm}Q>P(3XRSK(qM@4k0!|i0D_F2`i*NzGk^eGTQooX{ zQ~47d%t|nt)Cbf!JfI!xX)J0hNi+X9qQ_+ML6%x{@S)&I z6}a(zPRW7a@w$}?2Ri|0MRGAyer}z$tPYo*!2Im)quL@Iw`?IMiOts8xYrH%ED`6( zDX`Q5MF)TBg`xs0DDThrf+&2!A@=J=fMKxI2l3v0spFg~$w0V914Bpf^CwMX_XeVm z%1kQw2~B}*(9qMa#^OgCDCDB2KQPQKI~nXHhvYOu5#jqO_9B}h?pfN7ePF9&Rw0Y# zL^Mp{r-RmXJzOn_J(h_*mQz?uCce{fW&rA!W#Gvkd+j4K1{g1q0fK@NE(s7=fQ7<oQUJL?b_r{lLUh91c_dJ(acO#o=UiYA6ykpW=j z@k7U|r;*!4l@!|yYPt9wl0#we2YbO$a0&1ckIwLAVS!`n;0KZadOr8=bc6zf)z2W>sV%(j_N8lY^?y~ASBD8U4py?7VaguQClUOW8K?A z5ArN21MmCYj=kCT?Y*5Lk+P4RF~8sLbbRW z??iuOUQz12KHQM4B0AN#CvPDd_r}oMQ!Wv${(@n|DDYS{qJx$+zH=ZcN^;A_OKvMx zO2m?f6t*P{73Q9ye!X=tSmJJwZ)Bb7E7VWHc@d>8O%u3J?DS;QFwVzVF<(quvOWV$((LqoDr7SOpxGc#HcQv(FOiF zRAY1qvCjKSOjywquW8!u2Pon`*g$||928nE*G2e0%x z#}-uWU1AWg3f#==!svN=koYTULMJ9&y?WjPV2l1{YhuIXGKm7dOAIms*RcmN&LH;j z{}I5eb<5NDP?FW@=e!i7ey8i3xEV1kFsS_o zg#Ht&P>E1?BvWHkb2C$8E7BZz ziQz9b1tj~rHpez7?Z6+X-078N188Q-jJl$1vu0FqX%kA$%4Zvn0~$dJ55*ZkICm|^ z+I))n^*BQHx9ddd8icT=6GEMu4j6%^wkxGgUct}liP2^g3+X9@M&K}Fm$ z2rK0EL#0M$CZyc3A9>U+4hXf0c7_#OI}wucyd6?A(thw2(372$j$vsY+Kx%kj@Qc3 z^-Vv)Cg1u0hOYLl9@tWUe6w+$cy+mWb%l6!rFeA}j@?2SC!rSYx1(_P51XMA`wR7Y z%nRY*QR@-51l5^IsV$BQ4f~S%Z=GR8dj3wH6OJI&VI519bH;<57fk-4eqX!bYxUrU ziRWKZv_BJI@{jP=*b>%CLR5ItP601apsquQ;K8TsS_vdW))|3#P}z-Uuz2dAaq?h} z_+T#fBSGk@h;EcPyBe~u^bm|k$wy04)Nir@lb(Cx|Nm?s`vQCoZ@YOve;H~&+-`DV^X8&QK9_)5dn*iJ8i zss>9+oFFsl)|V%gchd$4{a)}ntKh9~a38nq3W_^mOHSfzGl>p0gIxw@NugAHIaYjG z36iYVmy$QsvIW8F-g?nB3B^B4;CYK-*0S;;_D&QDh|L=){W z;8HIE2THw$dgnEgPukqpFx;>u@9TM9kJWKPmkrY9aPr<67J`e~ZZ zyDd(S{o7yscL2_N?=}FSTmOB?pu51ds^zie2<^VA5o#hX09a+g_i!IKlo3(pIWDkE zp%wH1PEhF{7D~Adgxj%(h>rZudt@9ejhk&)877Q7iI%ik3fUOOSYz;h&o<(c94yiF z-S2=qQXfJ+x*fXN@iGc((4UfGc%Y|t7!15qR5ToHDvfNnvFIIYWa1#B#3U^SPy9bD zF0$G;=)b8Jk`{w%!vjcfY$6disVP{#5fR>BsKg%Ukp;~=>UZxEhL=~HW9T*Y9sJ$4SEeI`U%ku>b2+4O)S~50RlK0W1`Mktf%ziG2*)JH5dPoO`e8(xJlTvV>D8`sc zg*Cp^rN|XuY(0%8nzchSQor+AF8=a>h4DO%!czi}vFCYGm@~6AvEw>~(bq&U9Qz{|3&?(LpEM(1Yv!sYw}+x26y{!E!)c4mmQ$JQn*9Ea3>*3v z8eCctT#?=rm^LiF!`MlArQD!QsyTtyNE`$)o!NJBHIQflQrOvAi2KN}%5`anIJxu7^j`$~kW6>|_qMwOtNq~t1DU5fL_UUUTT*A8@#d6sjd$isSaW#T#8!)yc zH(OAyth!aE1M)&uKFAE6f(8vtx$a2{S;|2rp_TbX?j4i z8LqJ<-PV3Gqxx$aAVM$Zj4rF9imn#`Y^Pr~KxtO>c|J_0Ku7w3GZItYQ+z;U+#FGo zZwyAKq|tOrZO2l)KfY0#jTx`24sCc>r@m4n81*GD=NfFE{H;O6pmnw`Ox|esZUqd2 zbK`~1!8BnE^4XGR>20Z)Fc+yqYI)B&=JrU0mCNG5Y_XC;$_P%xoDEX`?=->;BSLOq zY&RnXX^_z$hvRUR-ivx>D)BgRQ45x%t@gmZ`o&NE`<(e7@MKqFj8L<>gn5nXU+2k0 zS0!eQs|scSc`+4VOeXIk-r(|mU!Wncc@HG96n-lb!(qT(T=%H9;&*0nwq*;b;R(l( z&~vgW#Tb0ZuFWI2@3Bw|aZV`WmbQ)++5dN5@pw$doSv}PWyHrREOXDI4T;kjBZPH| zz=(2r&l&JWcD7UobwEcp>-$Fw_f{5YmsLnwu>`r%*H(1Z(WL5i?h_(uMci4 zPf?gJlZKh_X|W^&H;ePBMICc;)1%iw$63 zrojNGX$VD4V!NvG7KP9YuGOf=vBM=%-$&(dvp4=vAKY#7p^vcpJ@dq-Zs z@t{j^fi@mV&IFQ6-(Yb6)CYoOqP7M@2Z9Hjz%x%In;fP#^#e}|;z?Waq#Z>*uMwoB z;8zzSUUP98wqp`815C)E1x%W_-zB*$y8(n13~#W7(KxfA06}xNhE(df9UETP7r0)M z`oYgr=&l8zzPh}@*!Ep5h_w^M+KH4@@E&E|e@AI1Tn@0w4c3sjJssB!%KPqWh_ss2 ziGk1+Tb3tQL8PV&rb1|JW;yqFM4=HS%mlEUovUh-mL+cn*IN- z0cx-wF&i=ZE6{AdUP42Uy~2}A4D+8nlV3^1M>8pQGPYxq?YF2jxdb)1H#v<1+3P7p z&SYdT#HPW`a5cweNu|H?M$Y9^F+%qq$$}JJR`~=w$aztezN7&h)rUJ*7T18M&ga6>3?yf?;AAX}Ur<+L6UTTKW@}o7{p!+u)_nAv_aj)3h z0{3w)YGmG{hMC6AcpS4l0^6{}z}X-+I?u}EgAZfi^Hr3>29)bb3qTnR8nf#dqCi@` z?)|qZh;wB0ZofAbYew{GFBG_BIQ3g@juGM>K@$cJ1kIqi)ChUBV;Vxc1akEL3D|-{ z**%y^jL6dyu#QS5oWZP0+QOd}62t_2XdETK%c4}wV+L%nCWMrpkl zwh*kKzPOoU6h#3dx!2%Kmku{xK@>Tl zA8y8d#gPhTX4}{GV+OVEkcrd-?+k40fx#DG@k!bN+B(ixDJy3q3$F-#^g{{AAJVY~ zVayUH5;sPXW)Ra!8J74U=mWfA65f3@mEX?6jjtP7iPuq_Dsl!Vt8>mn<)@TvHdY&^ zS480`kPY2R7-IG2t6-&eHtU03`X0EB|$t>I2)83t9Uo5KMF~+#6U3sNls$ z?CF>*7&ii(bjiLC@KNf+^B4p7&uLH!pC=BUPx^w_5-sWJ51Dvpn|KFKnkl{K?xq4+4Lr*;O`vtciSGZ!yV+1C-|K4}9G z0#3!DECGk3A|9SZLPa^j`~==j{Ch5s6Psp@5MvDeJBR(fD_Jmb9iST z#HiY|5bAFNaMlp6QCi?76#3q`ehMtaXpt<}1BK(W8k4ebI-b*-j{^n?>%jOnI~!M9 z>Y(65orC^9$X(?-;RRBfEQ_b4_=#xKeLeN5yN&dkx#xl2TqeS1wZklkCSEq;CMxC{ zbbOQjSv2&dA4UE+gx4qIMBL;^N|5uYKK&1Qn8Sq2kOcCzWE@@;WsKg>e|7+qF678j z#DpJbP$snR&(q@UJzV!Gv1KW~G-VsZ(%I=R?i*+ihRxZD^4mSY^^lyEjM$Y28kibn zP8iHC>l)w?C;9!&q_fSvScLY!GgfdJ_a`V`-z456G}=nt&sT#L>oiA1l6nzr_^Bt0 zYDmc<;=B-J8+rnv>!p_1mwD7PZ%IFfhgjI}cTjof-njaZ%MF+xF<48m--a~1K7k08 zGT5Ls%>Z%k(v0a1mlsx25eoO>$IlW-;HlZ*Wl!~Qk$ zR2Fg#tmZz6Hrp>m4krDAGdS^EiLE*j85=k?)i=KsDxJ047Q9 z+z@1O42?n9^7~c{hNvi}*rv4un-qp&r8_9b(gqQ0=25&qmwg19fk*6UOi=-pfaX)x z@^Cm)GM+>3mfcZ?i)&ZzP%N*yp6NIs^pRqk_mVo`{b{(SlVV+(nJAI}{1B`x=2mzq z$?YL(xaUY!dhR==-(?dE)=h=HE#co(xt7x60(lvWESgZreP`+^_Z zuBb$Mc*zsAua5$kl2SHh0L8x^kE<5f1Y8qwf${x%G6Tn{{qGa*B@d zITnY1A4yZ~AeDi#8FC;RnO*j<1ve)sfXk^ZTqc9hclWzQ9MyorWBu@ywk3o6y$g6b zK0M*G{+f=^>Pb0&n&J<&8QLfsV{wz3kk8_)NGmV9hcI#rlnzKzd!AySuE%p~PnPOb zi$|c@rQXm{B5Jf0Rm`JoMkh+Pu*J>e`IO$P9=USgI^kQB8a7ARZQcdMT6j+FcXRkx9_zAnPCXnQK8l|4~ z#fQ9GiE9;1`}Y^Z(f%`GVEabj=7nX+R~q1#k9XvbA1sUn7h~2sLj!y!ViI8t8{CVG z-?RghDCiSaF8vEMgx0G@>fh9qbieJDh^xMkXW3I6b+l@+!O(H7K0Og)U}SI^B`s!t z$%8uTa~}4;r5~tjWtc=w>Nx{pz(I;SJ-#=Uh-3X|{EwwVs%U%X8eR^j2Gkb3sg=(Zys>OH zwAnfU{`;UNS<`+rfAVm!xyqiC*UmW-7wX>E5`b+{Oe(jV5W7u*t(rF&moQyT{xVak z5&Xf~ZJ}EAVZ7-!5_**oXt|A*LI#E1Ra)3%5Cnl=XG-IN9~6Bj3D5;lZa?u8U23OV zpsPG?Fv_y@H*9T`Tf@QD|Bu>H%}o%H6k5ziCcuz^l%W?^h?V-yAjvl*29 zG8W`}9k@r!! zU=c5iB2Ln}WJV$;J9&^`Wz;pMat=bPbu7mqKW`>)(zXp1V0j_WWhG3b z)Ow!>28e_|Uf=}T7Jzj8d2W>I9vfZO95j}Rsk6n@IS^oawdM2Ntvk0uvSN4}4u6Ni zD4gT*Wb0Cj5zK1z?hYyEw{haP8b^u=VBY%LWt7$907O-JW0-#Qym=PH^Q!>rsbamw zqT*4AELm-WFxD&p+!=X8ULjNy8p%YIMuZr)nh+(`v()Qc@f z#^msq_un!D_Z9MS7_?S@JmF83?{yZ!ttqu87rRBL7yf2UsKE7}38jDOE7&%pET=GZ ze9?SfEtHLNVU>&%Yp#F6A@1KPYap+ru*&3o$q&?_%d4K)$m1aMJ;uBdI!H61jsJiYt-a8`6hpdY8lh0tp-0w7^dURPU{<#CUnK)kVEz857p`m zm?Ex6N*jnhwsMt*AGS`7RwJ|XW9rlrB?`?dNF(N&h&l6&#GLtJ&H^!Kp_sD>I_^Kv zzOj%$D&^b$TkQW=$p8Ik8V^5GQmBB+{5zk;I}W|!FY^5zV9Gn)aCJAPo_kuMCa0Se zyZAWj-jPX3BbmIn+G)V9n)0FGEJpi7Nj*A%!bUelo}8J~u67}RXvg5;_$JS@EOzxd z#OsH7G^IQngPS*bl;-7*-L1nG7Pu={O~ZG4tuTmHy~|e#;`ck^_q(KTG+QceUS=e2 zUQS7iTK{ju72t*iOKkR?zBX1K4>@8tEHH$?R zu5mpDG5<9zcdy!tNA=q`g6IieT$%qTe4#fO{VEOO(>ufMGyu}+(JGkFju?AgqNk!a zxsXh__3SGVi-%G`%07TfL8cUWwHIn{?afqF$9Kz+)1@`cZ`nUbr9I|vMr_M_6X5hE zaW{*(Z`D#s@nVp$krOlVu?au0{RVqBpPY^^Gss}oxscvKS5r!r7qFog0<)n_#~jvy zt0)AbKN!0nN?G$Zq1*v*#E5}pj}4XBOhfuD5DZ_oplGN0Jc{RsQ_U7${}mU{N~Mit z5B}IfnbQ;Q&S1=( z!>HKqsGQeB`N)qyr-Z7`9|gK?fbFKf<_^?8ks0$AN=WsXGG29qT9l{awUAuaGYEf3 zA&YP0Ch8hRHd*(xgp^kSXyTh*E~K728M~!E5X!i1YXRit5!wmXITI+%&l>M!rqjql zEm4+Np&SNBAByiDQPHz+;0h`tfHh7YLB$?j$TFan0cEWAm+=RYV(3S_6BBO_9dSR8 z$GA`M1?MH05{C7{aBef1=}zZo&~pOs^hO~1C*;NO|At$!Lmmc%ZNCS|;`dK9D?4TX zxeeM&5=vR=4O+R>8XJ z2_GXs@<4gD-)l}(SDwLoFS`6Lx;%pic${ogD1F#)8#KbDt&ds#>9&^^5k3cTLe zE&+`e&G?K2O?);;ZW}ScmV7!X1*tm~c7%{u0yg`II(F7BZ?3Xobd5Cuzn^35XGkh% zPt4^6C}Y5GpZ`oa%1TAc6AsWobz2l|S^AJ0=RC8X4;7NO%V5KYtV(69m7R;M4ki?_ zU4hXvYCMFv%2~LZ3KTX~My?m&q6;v}*eVqdDU8HJN(z1@!zaYAUo99Z$!^**)Zo>I ziGcCS3Jjf~v!pwkDKu$D>EDSDNw`0N0vNK?6O&c5;G@zc365A@9PFH?9%rnIXf#v8;jGj-&>H-Wn}g zzWL0b%hK8$6QGiq+-S?D$@RqTq)ZP+P_nmO2l)oA)atToR3=ze2a7? z!rm%+;ppxS@*s#fCF0stC zbGLs%NtZxX2yB+Ee0K)#t}Q1)$#t!I+7EugGh@O&IFb|L%EZUeBh>H17{n^RzQgq39~c6dUapc~|Bo}^n!Vvav^^oB8CoMx zU4u7b8Z_jS7i-#4ar>n}wCc0C&XG;*G$gwC@Fa^JI}o8R_nAzbe$AngIQ=?VzX@Up zs`@aIpTrMhC zP~OMM0Pci0y!~)e@E*l~1_m;|txs#1?m!EDI;=$nIm4w$t2(_1nh~eTDuZ_xHjR}C zp(c9bdpL|Wwb-WZuyr+EWo-Ga&g7F2}L^`aAmTR2$wbtD>U z5|1XhH0Bn2n%E2C-8C5hlV_j}i|$#|xUqGR#ycEqg7;$gL&;aNQ$-rfvx4Ze44-({ z1ThxF$k&fog{;|(=x7bDwXot_jbgb`#cVOuaf}$`Q8d zkc`lB&O(H0x5)sM=Dd%wm|+W`T0psX36y&m6;R#@o=VoH2Mr7k2mgn7a{ag#x;#z? zt06%!^Z{TX*S(N6#}m1{?+4uNW?s$k^{=j!w4!0P53p~t_htG1u%udq^42~wre(-I z;w~Ob<&P0g@VSA|sUxeaD=NAR^#^679G#B1=)eHMNJCYNhf9>yYfu3fZS{mHT%|mu z0Xr-=7N7}>Slz%=h>i3(j<6&L4FcD#5X&4KLATC=tPf4gT>n5)zm;;^WI z6SUSB3SLocdtsv$?tFG*Wc^e=|lJ6d40EMg zF)zas#;5;*&mm;D-xbAgc|;FE>X7lTnb*6;!#D|Prj+wnbL2LCNPfN;-9kPkcQHpc zr@c?`E=D!|5j0VlOtSy%F@0}$vC7xLzsD) z`8kS@qN$BJyGRBj;`nl`fti)V5I-RDHNwziyhL?|`Abk~y>1Kbf+65!!HbVo4F;L; z2dq{^+kZi7rDZ85MCC&_EJgak*02hAvX4iQ&2{RBXfd2Pb6En)_6?V$-@5&aQ)Kq0295IWv3DP9Es#XZJtM#MFw`P zs?#_AHhtI?iMX$X^!Z>99f5xnJ!?3WL5vrSZOMdD$l|@{FnmDwB9C}3UiTd~KE;iB z;>Hf*#*UOCfuv9JVj|}2jYmJvGnjC>T17pZd5KD`MRC&}l4Sw>4)PD)3YKw(0HbP@ z7O-(F(pBpyd>NBvrS{OOf*FD}*I*j#y13?s2zyZx)A|ClMBe6xO)RD4o!pGz=s^fA zN2<9j>x;MX&?=WP{_-M9i!iXXxsox35)X>H&1KKINxAheF(ew^qNKy0|7(qX(i|?q zaTfG%sKd)sU=zgd*MM=>X$2H_g=U{TWxx*1+ zB=H#y!??~{{Mzt8@|%s&5Uh$E#$zALC}UwZR#S&pBT=&4sy7VK;|H?>Fz_#F!d1&_ z_;{sjuVq60CTu)HEbyMCJ@q}l8*ii!v=q?po;9cNVNP?&dwEBguUL;FC^DP*`PE}7 zuW_wJM@26eVg_sB#R1alMU%j3IfZXmY(<_cv&dz{E_fv~AK=sLWf+Y%ZJy9!%2u2Fc=KliR%J>@*DU~uOEihp!O3^6E_V!M^ z5ttDt)X#)gpQy%h@d|TTX!uKu_$VoJv?tG`;>)#y6U;M~EMPvBUzs!Xz$mKVI#Q>@ zn~7ncntA0M(vrb&DxqFGQzb26XXraZb-5*+bUz(juKzJL@#!NlMkF>?{I=a z>AzWlg!VmOp)X4duSz_r-*8?{ZQEucRQ#hh12BJfm)rXehVJq&!{R4#>`8-OKg5tJ z8*RX86HT_^h4dax5Kc_*g-|#3H-s&<9N%j0PQ0_?1GQUJ2j-Yv0aN|Hqj~x_38c6o z(U@KPplVfko;%&@V+Oa){^o3e!guUDsfi`><&s0l3Z%*df9FvRv{(704A1I=3TW1B z7qvU^jy8orDCDLC;FSDE$Hh48dV^dUjb7Q&VXp$+ZVP<#@n z>x?$w0M}!2>=SY9Q_@GlHPHTcl$7O*O!vn^8J`Vf_6Y|`Ah=YJ)8MXLf$}+!I7Ui| zpu@oHQx%JT7F>3Mx90_SduS^t3JhP8H``zituo%e7=d-!_@c2`HCQQD4FPTJyF3)t z_o|wPeozg_MlD%^!x7V7^%+E&Id}qjTZZr+~g+`@#HkxX$CcKsk3H!VyfjQtI6{5(P9zat%XFpHjt^ zCw#i~1|o{jX6eEnS z>C7w1_AMk|ktTS7E{kHd`O&wb`78K;q1IN+^hkJBi7+{YVWW8Df|F+us}EX=`fxfZ zHkFG`k72y=F^D{JCqQBW-a!E`7Uj1nLzMt+MZht06UZtkwuO<61CvCm6Kj9kH{*xr}?dtSt8v_qu5 z%REF^t1;L-O6uQ`Px9{&97T5cgrQWqYXH(bZotXO$f1ZL06wlMk3y&Pn+SbZbYnO{hb!9i1 z9Z};j?cTk3O@HGg`Y+6S3|`KtgxlBwEKi1G$2{K-a7vW=_%Uk8gh@Xr&b3^Rd-Wj| zlqH^v+85;IYfz^4-W`I}pfEn6s|e^19V=)N#Mhw{ukOH(JD_Dbl4GqiK<^GUS;ht3 zy}*ZKEjL}ogIhP|vv@rZhwl1n%CngTQbd!hHx`2m#Gr0sP(N(~ z0->M&D4zZ#p8hPJ{+n7&ZO5}^#U7IHtTeXA>SRpHqb`CSCQe2rvxhLH)H7HTtnb7` zVR79BbfhMTdUj92qxxZMLDX%*ygBltF%MlSR&f4-TpnIB7db+vUPBnVp7BPCAEjq7 z;hoo++1A#z;}F_4;%V>Q9hzU?Y6Gd;I5&_JzDIiFutEZyr((_djjPw*xFDF~0LM{F ziHg$y=Be1-IGU4hxFPh8DneLpREOnw^h~DOUCW_D33@W^3h!6b?fPSQb`Eci)?3~n zySF>Al;hiyA6PH|o=>2z3;W=(yC&hfq>%LUpFvHeketq28F1*BF?~@+yIMztiFXh1 z8@ErxZrpHu)H_p(ZFL3xkkumxM4#RdyA_dJ)dysc!!?aFr9;S+HzMJ$KY0 zZ+{#KmQePzD%`uAiIIp-?MN-Xk0I|da0lWN0$(9aI#$c+jbYmf++G5U1}xL~3?};I#U@PS=yp&AlPvV5)JR7(=8q{*!dQ3*JRg+; zt1#&-ePD+bf5u|9iCF#rarG9^Q6*DV2u(-P{?oyrisbPQr^PMk;X|8nlZKTKFDv0Id!j%-uRc&` ze$v@<{;T)64q3s&;rxINUvLp#z`&B;rV?r1%5eZV zc?C62slf+-?P3&+NwyqwAIc7MZviUQ73xS;r$ospQ zBt8R1=D)%?jCx54rEhStD~d)zxd)<`a&X|NDe(?d%ZT(H!?zxDa=`V22X*8QZa&=@uE1%7HZ){1v(IicB}n?XM!tcVT9ZY@N0};6Y79qP%_mED?pYo?>5RdI24@+buUChp)1P5%)(hjIZc58%bX+zeIOHrGy&0u3iE7slx0{+|*bjWWC z9KBRo0pL)5GbY!6S|FEWAEuecB=FdT<`yGOae-_F>Q=QV&~pqNK6C0rlyn zM^HMW77JJ!B^yExJyPL<>wu9gMyP)mDjNYunMZNxOoeqa0UGw3xidaahz$D`)@@&l zDWJXz9CMGaF?eo!a}~bq->)V*-j||1AEM~Q4%D$RON>TbcSTy!6i_MqULsZLLPZK7 zXF!{=c;LT<1_nGv|GZE4LJYV-DlF@PHSeEsU#wlg)WnuBb0qsV>*MA(3ZpCb)L zK4hc$4-G{ABXarGO|A}(^~5b%EZQd)?I*7bA30;fDIS}|mELH}(Nwb9z7n_2e*OOt znc+1Wqu0sn;YL)Z(tqbc>MJ`qQf2lCscI2<9)*s&xOA3M+spz`nowFO&rDl)546SZ zU+O$IhxhRELy*bKs^etQ>^FbXWj35Rm;413wq_Zk>-l`HiEqQ&A^utsN_W2qzDf3k zTl#+JlH}H!5{`YsbDeyT3;Pa*ilSsxh+h#!tayPeO)Mz(4WEZvOnksuRQBUomjm3D z2?k<}hb-d3EcrikN0#i{?9QoO+iSS)Rj5Pf)aQAVaNEaHz6QB>P+w&)D&D&r!b;7r z1U$4bTgbKQehtGSY`p9N$}~*J_9}hbP96#zt`3V8!{WrSc=DZ`gU808(3X!u!QqPE zkYfKsJ{d7k8v6bWNXMr#Y1JH~|;;*HdQpMsCN9 ziCFi|4-bJL*Lm?tP(9curncpR5!bpPXS0jc(9RDv#GDugh_vctiEEEjS}Y&mN%1(t z58eI^*#hcP+R5j*c=?Ko+H+uxej|)gzlW+0*X3EJF%*aE@@W-$Evygg>Mvw<+yYfO zz1qT-m+B$23{9#F^PM;`2yfLj^y5)}ZNV5X5;;EpFN#DW;cahpuTtVvo zj}ED?f+0nAqOf$(K`42vJ)Wkm`kxL&WxyE_i`3`V zVvJbeQ}(N_J+Xr6>Rhi;c+vA23pK|ib(DqS4U$9Jl0}Vnc;a^aEYb#vGx=k^?WW=; zz6Eb=o9B?*v?*|Vgg^_MaUKjg=g&+4zx$RcSl&(Ea^YUXQqUN$Clo!;7d@S(!bX`j zO?Jl4G?@9RG1>4=vzKgGcopLZUu^t1K8ocWo60C>5YD*~ zo_-}S#7LJCq&_z5u=czw6MkM!^{< zVe?dMdvCOrEbhOeKt7x2{< z$5E&p^pM>NJ&RV^SQfE_-RNmJKIHv{l6&eY0!^>KCE?r?0m94itz@&tNL`bj@JL5w zwuKxiH7M^t!YS(V9n?7(G*93!Ca*$UGYF-%00kqxXi0?5`sxs)X1fsJefO8MB{AqM)*k#uu6qJ8zd5#< z@NeDmh0G#SjZBo~x};0-{OaFy} zV0lMU@8|ch?Uel67x_9gfnJQPIYTZDeK7l8cFz$Vx&~q>M#)Avn0ZYN^e(Yf{SqLp z(e!@$=NtZe+)%saKV&|!5h}6R`v9mMi|XA9{r{e+aO$_$k{^Zcw^jr-#aeDn@nhV0 zKs#(iEL=qa#nn&NXU^Y$hc}7==c+^3&|)N`g5a2HsNQuHd9-8Z&Sl6~JS>=I#+0V* z$=A5C3$DR+dHL*9in|}H`Or63}Cn!<>YdcEptFwMj*oZ zuC8KNH?ga`*wq6k-mQ^KnT20N2u7HF3d!>Ttr+uf6CRfZ{h*luvoSdy-)I@Y;*+dR z`}oaQKgut6!7-HTjD-v^_n3!pXMa6Mi$fl-;+DOpRu12hzsPk0(!|toq-FQ!pfgrl z#yTFeXX)JwcV-EUvx7C$5Kt_*`%S?IZJCX_dmbg58pL4+)f89SSgW2MC6~vBlUrZAaX> zS_)$$a-K6?HWKyKR0hXDHOKB1C2gHVTkCrmy>Nk<3b##iYELRkj#mNhjf zJ+Kp=S@dC(SRC~ZX5vJ>f%oy$%^#3DE=)n1o??s6yxvLO>W+cN_ec}49da;SEY|xh zrIY=eGp4{^d>+kIt@FyY0Aq8AR-ErF24(QlP}si`_OHpWpo`QJ&edC@#+Y$4P~+T7 z6xaGNnzOnofM9hq@>=u+=Fm{g3sNwx<@AdZS9l`h(O7Dk^%WnrItHqp;a1)9HQ;3E z+~Lrl*+f>edBYC>`5t*Q2SGD*9v~y5{se~kgd9GX-iaW~$#=1FK&)_^+P`GZ#8U9qo1*w!n5&D8ukJmxeB+N!rLbV^r-&Egph z5Y9PWCVgiw2X2}Y5EhQBk3d-CJ!mWX^!5n_&I{r0dfZZqQIiea?8tL1(*~i(Utp7p z7+ed@Y_yOfZ1!RpwThMs;RBTxP~+#Z3;RD!!)xoAlr*jeJS)II*B4%1;~tV`Y`l!c z?R20y!1)*)$qg!9!5A&@5)i%QtfMS97)}IJ^Vnn{AzhOvmHqr{Dv6I|24z!gM28G9GO$BIfK438UmOy>JoeHjQJ;E}p> z_{gv$m+{2B#V$S76ZoSoayoOm>PFQRLA?o$WL&){LzK8%xNomi;W`PWILJ`)m<#wS4n zCsXkOTim#20RMuMc`y-U6&0dI1%2j`=P{h^T)KfC_F9fi7B_;q8}^Mx=sOpzg0`F; zx$hqjoD(TQ@FTUVMR8%s1Ur{&WU=C?z6Z8PcxUrml&7dJ&NUI|Acp;GkrY6VW))Hd zsd{KIkh-%qWzjUh8^v8_l#-kW5wmnzLypuAi&$klw-!V^|MzDks=;kWV+L5~HjV&z zcghR-ifW2F48~BJ`BJeQfR{y2YT%^}b$QbfcRie5;~>m40l!3YI`dK%iX4!XkvJZc zG%xT&Ebznxg#ncM8U$V7R($5&>qaFdU9QA!_PJq5Z7-N1)t)qBqzKoUvDbkpcHgDK z)4bn0ovNv*1`;<6Yt+#{NgmD7oYXZu8f!N2>dA52!<1_r9_49fiD{T{k+3Ys?ne&#ib1Y914+AP zB4kP_+eFHC%FHW+P^{6d1ieEj%l)uu{EMP1SUQpUV9i``Ts}^#IOChW`j?vc{%g(q)`6i{vX6bYfslQb*$gsHJ z4tTY48);qi65_;x2SBmdJXy`_Hb%q1TztC{i@_XcMe2tTqFD7r81-q&VA%}7)!g1t z9Ms~cGY|(|C}@i>3fMaZA$1%JKT(Lty!jXtwmXIn_XT!g!b;?2xYC9eiahDZ?Vd&W4ot7+(nbEM}yW9DWCNUh(SBF#);z;pQ-EgNW{ zcu-_41`NOn$AE!iz#uVTFerrwJpE6XQpB#-xG20wmTAvX#Gz}55*8Dtq&roisBQrN z(3MPI`OdC|?bGGPIz8jr>=qz7sO1Y3)Q+RJ2N^Cqjpyi9_VwAk&-;QC z#MbP`CxDC7a}MEYg094RvxnTGItwsVcK4ogU789%rhg7Zqp3w*@#{vG)0s5&+OAfJ zXXVHe^xz=wv#Qu;;p;a5(CdbbF?efLH|vTDd;h%#8AfgcAX~wi!3Bzr=hdEN&%R*c zgJb)5lq{T}r0nIEAm!2!I9eeTO{n?Y#~=?~l9#buxWV5(D3hRDg;b}h&S^opLUIBM zZT19b*MZ<1F{RKK4>aP@j!4|xdL(2gQhFRUGF-nOKUjw1` z4^i1l9T1R5e1@SIcS(%9EXG|C_2{UTfk_|1%?LMPzFMXVBTOVdX0?#!AT=d-i6xZh8ry(u)8j6OP z^dOB@KJe`}imbYZHujtoO@m=NZc0w=4*>(||46I)Ze#$e#P2*HDQW*0l#c&aS&8}_UfSKFP?Pnh7)Q@yg+d(o zAd3SZNo|(JfTC+1z|$SKe=Qr2SwCQeUH{iF=89Zz97lM&1r(881MST1fnQIGcsm9Q zyG1Gat~EkdOZ`!!qm-y$^Ymz*9Bc9PME0n}ZTr9B=B5(da(2)=VD?5fhcF6; zpD8Cq!xb)ygpEAIAQ&pcKqXil;gd+(B1D`QA+1D6YY_t1Ga+pZDP&nAbi-?3DAl{@ zilW*JRYnS+WOq;^lNjHZUh9rtTf{SS3A`W3+@wydlSH#FaN{;jAzBRuIo@j;D?8gf zxxyr>YGEU#sM$i)Y>Ar&Z=%rNah<5V)=Ct0yu(pu)rZB8f?QS#Pc7}G*R>n3i?IKZc#t&X+5tnUHQ?pVUFc{{Mvi}K+jNvowQWrGLeJw2J zE9#T#??~wVU{Q{^f$v1<6@+t-k@-1qo>1>iU?A-%sLOEFSK8_*sGn!3J2IxQ&J5fpaFJvkkyBn!RS2#mJce<^C-kR*8qV89fxbQR~ z$ED{bH8oCR*@^vD7Qg%0kBDw3D0u*%7~~-^CCLWAsmrL}xV3IR2rYGt zwZe7KNNb*{v@vUOqp}TRas!5i{0DV9yzzK3Tp?EW7AyNespsexBE-jI28$m59$ew)mIN{Fv>lRE( zRKLHFW_?+Y=6rofjSKnHb`}iSF0W?FqO6xF>kXe`5JBu{Bz6>t9gV4h36ue)IEtsP zX#1E$dTDXjk3&$#=jZ^WIq#Yy&9A>xzcn!vqz?EO*XkUcI76&xXs8SkHwR-hBE8n( z!)@-6s^3Z3lq2Rn!2RKJO4+bTuH{1cb!&3z+qp^uM@Wp^w8Qya# zC;2OQ+xMBXSs$FLPoPval2nDq^&8}dHSE64^HfLd-d?p}zk6#tWvA7X5$e&iE?gdN z{F@SXuLI)V^BKP{;AKy-%r5wPL!@a2zww1cBt<{sMp|AOd9=1emOwtWemyBW{EbwxYzw z12Dq=8B@?2^Y)bd?J=t9eC8a$E4E)bw#uZ(uYl0b!`#R+u07tVG&_|>)j(uuEuR_+ z-|Kq0rgtz)^1Rc0AtHr~*kyB3+sk&8Va;j-Z&yRBE@`JMjPisL_V+e5)+XpI)X2@v$ zbR$xywD}kX?>)ER{A~kSr)VpmmI?j)$wqps5OI~$E1fmMV{Av;aKjE0{m>K`C0L85lT| z*9zeLr+snC@E{gjo#Vp@-m@~6*ukDPY+R+RtlCfIp3xW(r=O(r|H|im3G@v>G(2b= zRvs+%l4_yj$>W$4zB&aikQlEd4}2+`XefRyFQzcHB`~7RW0m-49n>HXuNd)y98fPpJ<2chF)F3nOXK>d7X=&9iNs5>(v{Q-1N*q$p9Q6%Jl}( zu${+|#izkzv@$3y3w?{T<)b;BYXjyTTz|g9nhtr8kLGya1*3t+l1?S zDmQ=qHO#-tG6%k(Z7^E)&b*kMjzt*p0yL{eQEQ#?z-><%K*Bc*XEWgGrbU2D3>p=J zdeY*-l0d1c`4e=_>m1qq3Ptvu;}sxa^43AdCd*qWc*RNvo;nnlvjz=WwFQEj{zLG{ zs6Kg21_?VSk35d$LV2;JSkwxq!w0!er_Wi2+*c@09p&BLW^qT1l=J>0u-ruj!Vo^tFMtF^R)$dDrb&1>W-T;?t9y`To|#f@_Wur>SyO4UDMU@O3B|ro}mw34H7>C8yC!eXfPK6=H6Rn41dH zG7L)YKK8j__g~$HDpciDeW$=t^P9)BOPqk6>#rIwr7W8b{i%zJ@aiDc|C@< z=ZiC#^&j(O@p)i93VOv9Z&XP;WT<#T-3R?Z+<>SmMzu*BPa|z)&mSz(wa56>+6YGp zWA$Jjk;^DAcLjbcDQ@o=G(Q7A#o_%&*-EZ%LGdxIP~)cl)I6SPQIAS|c-9OhHL6{J zOgT3TB{j7Mm5un}x2e@8aBH$nFVY;q$*oHRFiU~=Ycu}>7w|YQSVjdlEDZ22u!W@e zO&P3hre(0}ycA*wpSkHX@zOr;4UdK@_9tkM7?8A+TcT{iG#Zn~fs(wUr^w>oQ|#w6 zXF%v{SvrMttD7&=|2MA#0?2j7PV`%#(6&$1G_^D8Ok2Ab9nx1YWsQh#VFfQ3 z2jOkBshMb68xi3AnF;VYOg1OOkUwb=sAN<-I+kI;YZAh3iN`pO(zIM8D`DSx>yupd z6WF0!8%fmLN5Rlcft!nQOj`JE>WTraHVqy5w4p|w|DAgRm`T+Nz#^*Wk|w_koba|K zk7W%|@!Z#9?!VM>;SS97Kh){hPVCUOjmo({zSn%wZi@*W`6ltmQPg}4z|-i~Nqi}= z1=gLUN}p>ryJTFG5aR*RDvTH0dzxx9OaQYt39e$VCQ5 zB467?vcIinHjc5$mw0?%*N){|k=i_bv5hZW411Xw3ja|U6JV;Ij8|O#$_GAHCAuqE zRY!g2hC*1y@DYi}2Zh)M9h+^7$jvcOKa9@3o1kXhCCDq_i>575Gggr$jCXMiV@q~E zDt<7?^b;VZN8%1F!d_WJFx9>u%t9%SQds0>T!g>Efxu6E+I$%=5Sy>f&``&fZeW!9 zEy|Lr?vq8B4cFvgGjIO++@c+VBi(hP&Z%Fl0#Ep_?fhDH*f^ldMx$Dnml3v zH__fWWbvN`;$qfSRPX=22GaPXMog8K4ef)}wlUBmdAGGd+HhA(K%Z4K<9^qi-{7gt z;OhJhqEflyd+lS`zQ2FH?|AF9E5;BT4P@`$Q9J>O{bFSuX29u_QaF7#sAfXitu--B zMijVyKDw#iO0l2W|+vAv-rIP!+(p-xBs_wS&!PoudO$;#LXc;9jR~QFGw@CF;*|@ z_<>!i58ZYi_(k*25?Q!U67G{}P*hvlL`kVV(y>3f*8z{%YZUnfIHCVF?WpU1FO&_6 zyn^LY)|kD4=l^Sp6>T`48imKpx)AsYXoVc=<_Eadjz1goe{H%J;}dx&c)u+C4CMh}#+*e; zSxj;ilbpmP6*ark5bET43C~eiUmU5x#{biFS*(5s7H&~HhWw>5)IVW5z}#(o8&LU8 z$ZK^|RF`*|ce5~~SWe^nBF#2ij;8!rg2>4q_!P$vEc8f5#%c%Vc|2!AOmf!IP@Hw5 zkbD0ktM@I6edURZ<&mTwd6UTs^^Q(hESkKU+|)wdQk3(4+yDp26RClJC%w{Wzhlt!aR zHA&11K%`R^r+_4AFT0ZA>HD@Jt1!%~crK z)}{LC!5FVWnq+AZnZLY+H%a!!NV98pKx&h51Zl*gTr|A#G>SBvg{9oO3w~Y6wKo%E zK6gFvjtwsC7){&PU`u?>!tuD)PHS&05+;g-N!1MM%OYVi%u6DmXoB{441r2VnrS^y zW|n`fL_AG!y0!i){1p90(WDd}z_Qhz*kO_>d4q!t2cXyds4Vy>)^NpxfAO~d!Yqaj z^-30_`MdT8xODGlj1loTO%|?G@X*=425a7pwP=DBXkTv;9tGt=IE|1r5$$mJ55v)N zpvtlHP-oYh1$do1o;?ex&IRLI^J^)TD7|};`$1o+h!UnM`E#9MRSYqFLo=M2>3mQL z?xOo`z^aJ7ycHv{Y$`d{>x&_En$7sk*%sb(^?#5t$khAjRAwKakB63`HDv^Np~TxN zvbWvNb*H8RmH~)6$0Mu5(!cevr0&3I$HnI&)QbQc7qKsh=T9hT*$0%>m63l8YonV- z0e>|(g`B~!nPBPqayL>}SH`9(d(LCfQL%Jy0rd>~8_PU&Vl!UReh74G-2!dTcmzol zP|V$?%>H`>hbYCEKrtprj0qNFLJ(geKp|$iiCOMqmIoz`_#1=dc~d_gAqN<6<45og zG~(I=G~9~A4glOP*(LHc_9!Flg@o(f6^&y!*S!>z!!`GRJeX{cOy$! z9^KB0vYRmcd9;HtX1Wh`I1BKVwS5r+5Kd*#?}2?Y@Y?+0L!_3PXGo)x9-w4jxR+cq zw5DN^-br>1_JE94y#6mqMU7%Uz+nxz4ARYC3<&pF3I93sn!+2*5B)4<7MwI<5daEA zMkwUix@3E5IVw)L$-|RAl#xY{@81}a@amoLsYFMzv>bkn7d$aFR<0~TY^R8}J{-V_UF5j%hViQ!AC#m&&JKgN0st|fr#4lT$(?-B6!h*Wb_ zJo4E)q?S7`D)oXJE7bzFj9!Q}hPWX% z3cyLTs9f17nCy?R?>t|3D8$33t~cNeq|_p6<+2tH8E9P}y={=a3l&rrBIcJZF3JUE z>}Dk7ccBf^vY{&_6(pW+vgqOomZeA!OSa*4F=B?4=QM-2Ym%h|r0q`Z(1YM&b6LF4 z1MSnzjBAKcAst=rg7%tPQ3vl~xK*9?HpCfzt&1oY(hUc=lILp*zjy(dDMGLyqvaiH zn$Zud)*&s#$X;t;ULlYm1v@Wvq@W&*=eBJ4g3N|h-PocgICY5a`9EF%5D@gbqjR|5UY{mO;$>5+T)tisMt3N2 z1aBJMR;41X{9Mck`lOc;hy9@P-9x!RxaiZHH!u;zKanKD2c-6lhGp*WpjJI z04)HZZPX?c*lO7KCwS=d`KfHAqSS_U(9MVck_xtXZsfTEJl6Ry)P66!e;IuYQ)rqD z&UPV6q#-g7&N(2oyw%v)0OXfhV%2&j{GmPwmqFrrb*YYcMenHNLXMh|5Y&LbY|N)} z;xFnN2FrBW?GE%bpIJerEZXS=TU<^+^f~8zWQ=aN8**rAN)ko-FTh1xPipXd1BQ4U z!Zl~*G&9o;WwKGXO>|Qv{s2G zI7XF}!uJ96eBkt^CrX+5!0p5!TpW*sW4SswEX5h5Z}>GdBYUSGinVic!L|9o?MPib zHt`tyUYQ9DP&n_>e-orC+KUO$uC1#ODG+s0+}lm;i*V41iP&0Q-k!%{%Q8e#D|f@n z=`fChYqUmPO}gbE4Vb|EqkU~^g;+>9qc%+i!8VpMkE-#qs1f#j+03*a**9czGa~Xg zfG8&vCb6$i@Pg$MpWn*4=#2F-ysFV2aMF1@rryR8Y9%EQ^r^z^^>{KSd0H zOe{_XXKMZm5Sph|GU9C3n7OVx8);B2uF6s}R{#M)tu9GnJOI7yjv^@TzX~r$V5kg* zF+8Anq&lW+ts>& z&dNArY_Q$P;nQghzLPyeeTD&VNjdT+6#VT^Ig6{|R&^7>C(+K3vmLp<5v02Y6RoCm zShh3td^vJBhYVv9*?G@M__KhY^}r&90UVKx$mxqOSdpLR3JTV^NS60+>cQ4y^-L&M zH8_=y{pcf=UCl!s(d(eqEKTPhV*A_}i$|Ko?~oT&hmm(r+(rG;pm3F-k`cdFda!LEld0%t>mxM#(sqXlM5h9ZH_g@}sLnDObO8 z%XXIFcHkZOGU3%x`PXhB)>g*>pR&zl#D*w_4s86l0K95{dNdwt>QmQz4~7U;6cm!N z)xM}JIZ^yWmOm6j@~t7yoCT8Dw-?&ED-@{v1|p-}7*7e^&SUz#TV)}iwo!!JP;zr2N;N0S}4NKltwcvD7eTDrB9SPhm>obxL@h7G99QHr$?%x4;rj zJ4E4A<}txY8w7xnfg7BLZu4;$TF$(*Uk$|RoG<%ew2o8p#iuyxhymT55&jD6uGf@w z5J+A#p-lB8Pdv%5PVvKE0BuLqs0mSeY+4Q~SZq&L?>?bEr%ud~1bpIapR%(UuU6l{ z_{cVgDb<4)OS7r|xUKVw96oFK1jug#Q^ryIcjCw}aoQqWm+gj_Kz6)K0oTTZSqt;~ z31|y@fZszzuN{r(wQtbwOLOqqz*>}M1uanQvCoSbh7f6w3dTCgkV5nn6HuA$s;x*p zYS;K5B#Gh66DVWweUyH8h$15Ri*~UQJk1(}pjJ}A3g{+5SRXR#1pc3iFoxF5=fvuXL}{l^f%%>ZbA*3zuxkZZQ}P%Xn=J5DSppDG@1;k2_j!If-%^ixS#IT zIx00rP$CK3+#ki7dv8SQ68=WN9NdoY2HaS_WBjkPVp+Y`=(4Gq@F@{KZG=x-1L0FD ze9DARISvd*j0@2HHa9B>m0iiNIM>4lCyDV){RupUy4zI z{?xt4nA))ipape!0*b$%K+Zl!f5zfs4zj20j=jCRQ;AXH*_PjG54VNx_b2J@i!_TPlY z8#&+y4=2&@0XqHPnM+lp5Sbl}la#cOY)faMRPa=m6}TOukvnhV)_>%8ZsG_^FZluT zV&GVYf7f^KaX{DVSQA`3f8b*}?e~lDqOlw^UC@fj+F=j2BiOum?lDD8@g^Ay00$31 z_A95rkX!P)KxsW^VPtLg!~O|6Xe;lq@|I@W6t;2n?7rBTRm&CPSaor%28HYc`6+n^ zP~;pxTy&a8*4f`snfrDq&Q*LB72jajGywC{dCC*npd0lH3kP6%Eum5WYzKwo@OvFH zYnKwempbf8hO!DF1nAcDQqQfe4IE7(wdO-Fc+v{njGmcw`_H6)9aL(;M1hihCA8-rY7WD;QUoTZ% zry+{FJU*Kz;*oPVR|f6KXjYCWb)+6gSo-O(z{9jQ!hxef7Cqtp?cPQ{!0j~T9546o zr2X|mAsX4aBL>|Xc8r36Vu@llDmYP-QYLJ}#a&lw7;cRE{rATLQFwgNK-Sx_Kl$AN z#*pe1P{3Cey6HOS74js0Dgks$$G4Kb4^N7xFJ#NrDbR{!Iy?doegW;5)&+`6TR?9y*Nt$jxvNqK_D!Z^z`M zYvxh5dGeY13LL-czzF>$hg9%(X|eGBpFy;Hk&9d1l_oqmZso0{s;iXW-WFnvF&~%V zjn@+;2o=B1j4Wy`rLYM(*f+wj7J{CP?SD~eB*}Ty(7YesehVa*3A`_OALxq3*Y>0Z zuB~R^pbIrO?45=NS$yY(>sAfm&&Jh$i}EW*P>v7po33LQ!6K^}#av|r zuf%;jFi$#T9+u*16SvH*b1cP>tAvUM(l-ggz*Q`_$Q%ixT;t+Sz&_h#(&!uw9Il9 zMGc#S-1doqC~tpdlG2I4r!Bv3C?ZdZ$kQV7jEFpoL#1&TaWNYvnO|5xw#P?+;=%>8 z5yGH3$D^h;&|_K6oBGivG$j5ws0!0AR(CklnZ*wHDp57RW;6cgvxawxvr z*Ey8GzKC~Q$DCmFM`vTI6b0Kv!FGc%aw#oTh?b2+%L37|F(t^$z;bSfS`oFj?v4^Z znfGwO7-={Lt!~wU99xFqVYKx@+)h{o=a$^FW__4>85a2zsYUIVf0l?-#Tq@l`S^8~ z#5X@moEU^MM>>%Tu1<}~y!%L54n6R( zUIXUx%qH}4!qZ)6$b5P~WOBLzUSF9GXC}43E7XQKtsd+xi`G^U%M^28N8jv))S~+9 zKi#qonS@)-DM+l{;ew+C_3GA1vM8z)MI$KY{a4hzU>U_-$>g%NFCw+tZ>b*%kHr`f zF?SSHzFZ$68w_a2RIiVNP|rEpvN+pIN!dnec>ZG&xfK1xJO$rC3<-=x-_H0-X*5g9 zKv-z!L!`5u+O?VjKvBcxc8$(hJ-wR27OE32hV`b_<@peR4)5&(7^pmEi6+=@x6(7OlWSeG~ajvba@qB0FyV=aGZmWZUdI+cA}D5Cb1?Z+`LcKW1J^q5lH0h{<&H^A+XMUbfE zUu8jImIY8G)N4iuVwBAvt>WR(WnycD9V&S@<7Jq6bUIRtoCW;O>-9n0_|#@l3&>#( zu-945i#!4`M#VeaY ze5f)HbIR9aQ8o!0ZJ@3M|)zu&3>QC}ge}(&l z{o>96${e7=h<|(wY1{NbWKOx-QLa^s9CJ@{$w(b0Q`nB->+F$8b(S&cL*9+++)?K~ zhI$$bmm%Gld-QxmD(Rsaj@pvY5KtWYKPo-Px@zSbNU>_s=n^Hcf!FhJXf%BgFFumD zAyhJ61sRA}!Q>Z<08Gbe_&~_5srZd7Wl(R0D9P`Y_@G!Ca>_GdQ(GPzl#y_?3Ki{d{2 z0{~wC2~XO}%TZzSFy^)j55*!)sixQVYErW%zNfCM0SVmn@M-klzM&RrcH>fHihK^W z6NsD74Z%3>U5m*mJdVez&=MuwjlgnUeE`gUz_6KULj40&xHALoa`A7g2iD~AOCiI{ zOZGx5tveT^oX6Jn=*9wDircdm6i~`JC=aBQ`UTvbSb_4?PV8$a5?IPsMS>4S zKDAO9)+(cl@HIdWzAy_Nch*qE&w|M}2(U%wsI$U=Md69=&RA#Cfujh{&&n7yd)7 zkcQN{i9UK{lg*mn{LZ1)UWCg9Uy5PCSpR_q_kwfC>fP=aG>}7mc)Re8p}eWU*Pt4j zlXrR=HWb%vNDSIvK~NY04RA|pUG)zN)oaLWtrb+gfwz?1(1@7wBvkO%AxbQHiP1lF z8{6Rlc&;+0gdJ}&uX}FccN<>hd#vRKHE4GYoa+@zSkjY6Vvh^_q$t{8ZY{cP|DWO( zW?&OC*Q3nm>+zk85MR76nb#C^Z(fqk8#XFZH}R7VO(}jtDzc>EKsFs_UwWr^P&0jr z(>aWJKQ)Nu+%~*)Y;G~R<$Nai&lc?3sFSRPo1uzc`r&V2zY2uV(2?6g3Jxh!w zlaNLQjz#DC^rfy(V{qH6^adZJsro8WeKqob?uducse#BdX)DFQF2`-UC%d(AovltkXp^*Ju6|u1gUB^h4>yv36D!;4@G^TO#8R1&Gk5+{o7-A^f87gooMC+8Kl$72CxQ%OoDvIF2xS$exaU1^#3mU|3HB<-c5byI-woLqd-MB zxrQU55gqgkK& zwHJt_!g(yN%YvFAjdSFK^A$fSVNf63nvcDQ)K$m0r0no{3<#VSJnanJ>1}R}qC*GA z;f?jDM@U_?p|U9Uz{RdYS@x&Mt)F2}o6%wkDtuQ#88;boxIkqbajpGEfjk&N9=H1` z#Imho**0|M{2d02u!G}}KXxC*$3-B2%+wJ`EzU5b;n!z3(x6T!kU_hTqC+7ikS2a6 zr_w?^x0znW|NFOM15ha=|}fhoxkET^7T3K(EzZB^$#V zYvg^*>?sS7%+QocTyvp*XPY+2oqrRSWSp<7os0#)`RLR&uEKH!78WN34O@M#NW z!D&~;w1333Yt)eRs?^#Ydkl?4nqI=>jxdg*H%ylkpP`g@d*~#*)lym@tBkugO@s73 zQ*#|}nw|$ABG-OSy?$B%DOq)A%Gg1%!%QD+LNZ_vf0zMN3SW;yIVr6O2hB>UjI>`y z$yn%7tB&F6Ktw8Ss6U0aP4Gl{l~;_BFmZtG75;OCs;mRx%41_Id^>D8AEU(tQ}k&z zLQw79gCX?*V=QKY`8qohUV7p#9z-3^+n{EN|8>$ZRxv3)&db3aP8E~M<^B}8yCb>n z8dpb+|BN9*q_C-cky3$Ny4+K1yCbm^l-5jUttU4j*pv<#NIf9o5t z!hvnMeP1$RTfG)SNmavF!}lD*ZQ2*gDP0RHId5k)3d_eyz2p*umPY$j7AiYqDsd@A za|XR(>9O|N5i60iLqFaBzXV4|W?hWL@G)ZeSTTHDO)-4DF-(JtFdA8@%K-nHxLXRL z`U2dYaFaLt@~tlTti`}ETszpD`QtO#qaMImRFbF^SjrE-gDzQNOidTS^jdCA<%NZ4 zqbio{A{iYxu3;3fcH1h8Ix~P5ZiBm%W_+il3B31N4cm{@C4~`rP@5FI(oUi1^*-o& zrw=?6mS4x|5s&i}<~!r(-sfk|Mo88B4kOihvqY&TSvZ{5=hH-f0RGcfXE9d(R<5CK zEhdj09xg!Y-s>e&fB6VLR2L3lbJe(YiO!bmisJPY`r{eL)rd5`fY+@ak^NmK{b`~q zdknJqJYIt|pds5y)_aTJJIYlY#h7((#j=Nhfgi9aQa+tQrtI(UP{VJ;_S~=pw^0`u z7Y@2h(aV`*oHm^jyKI%JZc@XP5v=3dd#e=|Y#3sN!Y4rxWh5|nS@`1^Qq8y=NoX8N zd*F%Ez)WOh)Fl5=cQ9R1in_?%^9;o$Eyu+w0P+HezW9#@nNPw3(nJ&j&-qR=M!w#MJW<&D4%u$}!EovM1?o}a z`gR;!v9?%OA3X={^0zZi$6sJ6J((yaQq-Ds#0auKco;S4`CM`=XZ}(h2~Uo&o;*Dd zZL}JTC<6TrEsS|tY941QglCxW42PW2^%p+u-N6o+Es&BGQ!&C95RLM}dZ^k#z}>Eb zTnoD@LK8P znV|`9-%_6E6=3s$M?GL4W6`<-Gv`uy75UvZEQBMe^FTazcN_^{3b= z#rQ7i?6e}u=gh5Zt=mDBG;@&cROE3+(^#q`I7nLI8WZq zSGJ?f5K9@RmeNNv*ee~u=jv|@1Z5LHG#EYKG6`gIpkF@M7n0K$B|KxO)11|S?!*sg zWrHBfjd~*KNb}kX0ijKWS9MAZJPCUm>7a&^KXIg8>t=Anj;|)de*iRndr`a#4_?q^IOu)c(7;pf%B|0u%LP#3BUo0?l>U0RHTW44scax}P3+|w%)@#74?q~pO zP{jHV#-oIv8!EPh=zZqM+m;!(H3A>mr+w%nBv;QAc zZvh`g^8A5jW;aUEY&_Xyv)Q=2ySt(x5I7RtCBY>S;DE#7aCbirJKP-(J=_k5Lk>Bl zI`3P{@BiM*=QEw1neLvJ>guZMl1~b8!ONf?$3Sj3@oaSxdE36#>o{n)#{6&`7&wKo zbX(tD?EIo8bUo(EY6W-DY1U+<+KMVr1y1B^@dhA!E1Iefy#=Ea-KP%qmHbQ18#DfM z-c)Q13}tGBV;GNjUEwq1Ax`EF7#pN8ro+VLupmS8Z4K=1dx<8!fmuS_F!z#kIYr&~ z!UU(RnZb=NBP~>eusKe4!RL}MlWxpfLu2TjBt8;}e^c7X?Z_K3lg~*KEZAn)Uu6Q# zqmO@3hs#Y+F7_4^iSFT8UpVjjdRVHTO%cVN_)SbYJ}~GZrP%+cM+Fvb;!%s%H-&wx zMZ?pklG6Wr4zCRPjac0HS&PdRK~!;q&RuYw*%9HpTcg@R7oN$+jS*DW8Wo1WCEpm1 zu;f3ck1W0?gZOzj68w{q9>L-R>V7PP!5yh@oj{*Je^_sviv}e>>yOX;J{Y3(Uz(vO zKfUIO?0kx2(Y1*-#cy@bR6bfZ!pXG88Tan}Kgtg76mgf$Hl&a`YB`d3JeBp~|91tb z293lMuY+d+SFZQsA(2Nw$J49PP}55k`#KOmMjBC4HOEa~m!YJpo0TkQC}`#jV;;-9 z41!T{#{q%^Cgp&2%S&4eRPzzcKl!RYE5)r6ajR6^YA$ZIpzvgO)aGMMu~}cyO2{Vn zP|{mgE{Y$`lCSCZr2DeT$iPID{2@yA8i*1^w7ShQIFH3sWzqeN=nkv)=J)X+XoD{U zxNd}25{U`$u~UwR?e310JD8Gh6l4f@$H1AwG90y*59xqckg{*(lNzY zXLlQ8U3GwoHm4_4owXAWeKs&Z7JQ`$uX>qnM6cSKFOxLnwA2G2oY{H__EhO%9O|3r ziU+Fr%O_zl zo5W)wkN3j&{6oheO&-02K``y#Avjy@gH2LFwPWU?f>8L|UEL46nsshp8 zk*S@lHL#RV6F3>(oN6F8r7+W$7{_JEI3okS3tiG(4^%ic!A`Z3S>LPADbtz3 zP5X8h;1eM|iEH=ElsJnilVQU>kvb0Rfz&N+9@3cGr_l4h&EYKMVkI*t z(T=>P^S+X0%r2f#s|`H6+Um7Xw*|=R=0_Te)Ex~)>Q0fm3r!NmeA214E0jSRYL}lg zG&Gf}`Fx0DnTIU>3zfNyfEV^Vs3oi`3jrKYUo-<=mze#7Dz(=C3|z~YQSe`IPXsJ> z;4z%3j$H{7!T6y>-R9b0wtKF@<|unql1t48eWbsv>mU!L7qA_503m`Px;k6wpJk`hlt3bB61jcZUJA5_~duY zP`>AIjSV}RP4;f+mpJQ32$N8oa&ZatIBs9lRtB(ACYOmz;Ome>d7H>clmbPn;ua-CO zj0LHVD$;L>@X+=C9B+5+9z-Ak${pSbfWnKh%?a3?$W3k;QY~Bts>xkrjfzEEGa9lR z;!!y$gGLpkBcscTYls}Cnr4ngR5dmTPyAFnB=O>3O4h8vU576xky>`wE7u0swM6|6 zj{%Z94H-A~T21l279vC2gM7r`mwr%Av7o#z5X1wWb)vW|rbe1C@Bn78y~6^s2-7N* z^PhlgA|-{tg6!6HL>Z53P7`OK0l!a8A@&dWc?`N`bc!;^@dULr;-+fW;DoW^0t$N3 zgY(C9EI^(vmWX=v58e*2PDNVd!%j%Z4q<)(LVX)4Mcf+^_ZE*l53p)u%d1i7z4>U0 z6hAQmaGpCNAB7L^ePXp#+Q*jK6(TiT3Y#$#fwLClf#m>js#qOk z3a~CBU-g2jr^9q#t}|>m(3CJ;%Kp`j&8Rwg0tnL)ZzrPL<6M|~jO}!SE4XkPsVm$y zn~=qPZl?9qV5E-U5*q%G?_tsqf+Ndpy->k>J*>eD#De>jVD600&RI(xH}%H&+06yl z2@xr}(dZafU9kHOAcBxtIPjKS0!ZcPjN=G22EFLwFI$TTKU1}t6F!ygq1I1R(c(zl z^<8lji?wcgYaF5vri3Cd6rX2AKb;>2T>luyl#z-|)X`@$14qE_c94v938$fF7+6VlR}JycWw`bm||xjrr1+V`UW1Z%7xTA zuq*PY2e0CEno?g}_u3F-uoC8px9=(BN=O;|UF4=X6(O|8cfhRowQ@jx@YMiJh58(> z^OUNzM6>qKMJ#1}8}5JpV#YN7{Tw`ILpBlkvF8 z26z__;>mRAvIUdryH&sZ(gHexgmi6X%x`opTAPc|y&`m<2;DD24~Wo%BJ_|5JuE_x zh|r@V^q2@eE<#UG>k1L!Q4KT_~eA3_or^q`bQvB-1sb4@7ONg=P&-%QhUt ztCr)b^{{x1TTKwtslmT81?SkBLMKkbtz}eqq+ZXeWifoU83p`41aD2QP-KIr_z^aN zDjj+JC#-^mzJZo{?RbouTryqpDbHgwr52P>rr)LJb)kfD-BD!z3PkuoP--ylw{hK} z(8N$wke|;Tt_seEPh_Y(ff?LLQQJl{{5 zB_HtPp%Z1V-izlW{>+tC5N=oRgUsh|6jc3$<%j?NQ+naGlN%%B()0u%Qlqxi_QgrS zK+DN1r20wZZj-^HmWM+TM%`De@)N84#VSxB{+~VqF~wJYM?d;iaabFJw zzn>6J(y!_+oYd<~hVoOlC|)=|eGwvD9CH-M)HI~|OR0V`scNeDeeo`Lg>f_NY;A7y zM5jrwupB}byoArZAv<`lbN%}U5R!Y(1Xh!Yd<|KMl+u(k55!9CNf+tC=gPWXZVC}s z2z`mPcOSV(&&IOQ=3tXucY@iEKYG+}Lk#G@@yhA78fn7Bl}HQA8!&VZ>*9tRc&L?H zQfFHwz*ckeikX4M|I6>i?>>Q#&KytKk;mAjLiVEHLAj{T4nr~BZwHLvn>s6l=cJcv zu#710RqN95#^tAA?q8(8E1)WJ3$Cr$ZZ74cs_efh zjQ304L9THDPrbK9N@C#Ch^G2Spq*pNCr}&mF>ZCr%vT zJ#tQ%m=iAML{QXEtazWcAIM%hdjqt_-KVB75rzOC3HgL|SBPCvVpp^g`Lz3;D-9mR zB3Xy_WNQ?IS=aoFvl=D0BJDR>O!^Jt1brxQm!V|&E3+w1NBc0rL{1m1@DHA7kErme z?eNPM{V@~2+G}ySQjGBfR9mrxQV#e6PdT3b0-ap0*J;QRuKn==g;@1ata>C?{Y?Qk z*WpU7k%EtxVQDuztJ!$DjvBNXP6k1`_tHf>u@Un-ui!8fuqptSNVj7G4&mf4y<}P#?pW zzyXe_r+G@9S}jGvULCB^9gpucY!#b91P`am!AHT+j(X({R#p}E>Bko1`fds`YnS#% z>VLT$D4~7|6?_VVW^tZnKRoP`KTyi2@ym^X2XyjRBV*y;K=_**48_hIGy|=lvX(}8 z`(pvS9KWwnnL=%E;d7;E?QQ^>qw@@RZc*pbGBiOGN!|CZ1H<3)hBt1_e7TA&V&W^;B zl1*L^(p1LUqg9Tc2-^5WspTUtpIOibI%_P>g4``(@=l!!m-9`bl=)`50`y@cVCGH> zxk=$mALDhj&lY?=AMVGhT|;oMdY{3C%u3k%4Z6rg1^%$nLksyZV*sa#QAqt4^^lcN z#yGhMHwE(%P6P+!qwaCpwpe8Vo*1(_Ae4$5xNbs2?fz4|3pvP3!sQvI)pkK+U0iMf z+cqr&U9{IjiYC87+mNa7DZ@h5o$oSxq;@@oGZ6P94axK1bwzK{FGHs6wYq9_Icc3C#C07+$TB>Q_;IPYq@>@m(j3 zm3q|}#_--S6%}JoQRpvBMY#D;c0V|FAn8>Pit9QY%^o`&h|=OTDh^*14tZDl_IzOY z0WRzL%bLze9YghdT>I(U0Q)ZevbmM<^B9@Wz#co%1fd1R+^%9SoVGoIP>Q5vnECv} zJWRVX$X)f6l6xn8=X^U&M};cWQCx?2qc(;HhQ?w{H{gpu0}*~_#Pv-$qp`hx1DWDl z<)Igu=XXjvikYQFZ9Q_x`SfC?fh~@3bTAJQ!3eqeMe8B!dImd01J zyP#uG?~{L}3j%X*Gp5Q?wAK)ge%fIn_-*`k4$dAipT5HUA*uXjK2@y@v7Z~AV&F%w{&rxI?dNLTLUj2^LyVe^! z(f~1MpqMj={D+n)6ei}ROK+?YA*_^;pOuSTRrk*!EgBUdo9d|FOWs#if3fn4f-;lD z4>gwbqgqVVb>I|D_Xj+3!LyqwAf}?w#f1Qc(qAW|XT~l#&o)c^47JgUbbOm9HYx<=x~ugA|5F4axoWGTGRXe6st&sDAHQ z1F?4;l)B;H_v}E5`0Fi5>Vg0A?&|l2hL)M*)}>RFo^6hv=YlOI`Q|<}!Zz0w{ZKVw zOl&uX^@VjA0SY)!q|lQ}EdG+3y{JMtj+#$skC$zmFa}aj?t#8x2=y>?JsXcQG8dt# zx8Qif_evPdo*c=yIm38zL;)!E+($f4KBGz$;$#nTvL`%{U7UfC+#Sg0-_f$TK3QC! zLdBB}Ap7y_(-HgpKm91H!*>bx<}e}!lx@DRpG~)i$7H#FF}c6J0b<8{#a?8cUr+vx zN+ID=ePuC5NcVjhCe08^So|A8?Iarhhug(94@&d99@}{;c)eja0vtGM_!g)5otUwl5152KTU`0c&}8NX|h}5lWfLq)?|tpYZ{Q zKIGikk%!2;{YKC`(}#)a!^y4VZ~Vxsq8SDw;20}mnl7NU>wfrg?m3nHI}Vd%(~aT4 zZ79=SIc<6)r{`AwoltTc+2*;@7(2+pL7sO1c!sylPR;Rc?W{JEuqSfu@{A>tW|(sK z3}|SVn~8F`a(UEOs-H&Q;jazFglaLNMobtiCJaI2-mbzidahWTMI8LKqdpWR*YJtAbIH;B z0m}OBc0t{{y7C34MG-}UaLb!8JaS=OYz+&@Qhbg*A0?Q5ZGH_*5(fK`?0D}QkIAj3|6Jnqwj6&hik-uQz_-oM} zFW^P-SBh(T9Jl_*eE^RF8ev*B?Vzrm2R>x+o~O@-a*+nBEs)0C0C5Y%;`BQ{ zkzpFc5L3BkuvC8v3OwVGLDOuje(Wo+?gt3=t!aQX=Pf%@dIza>?oWhY@Au-`N9wT0 zpn)t56ir~;c)KG;x^E_;4(sWpo=&`$-CvT^!BMDBO`2dt0L7PGF24b>U`Rv9d`E_$ zGc?liK6C>-?@v_37>fRp^tlOP3Wicwya83g#m{8k z6jE&%Bo9PU(Jp5Uxj{6*BzC-PZU`F|y{D8G1*@SZ-1+TcWL8!5;qC_!57PvzG|8E)(pj~}^A)gI|0xhz!43Sv zzOq=@k9_kc$>QF%hLoO-10EF?9RLZIJ(@l9*bS~lNzKGDyd&6?%lT5=#@mj@ zwcMMStE9T6M{whO#u_o};_cx!yjY zX^&=n+Tv~x7xEFj>%?WUU~`N>T<8!GNXfy>#B9-#cjW;&0H|cxCSE#5;gr-T7=+0> z6I`aa%*?3IPDaz3ADX%a2Nfn-&!IvK zFFcO1x%W5H7~E^j)H`Hc;5uN-fbV;Iq{6oPEzVMBvT0NE6O^@8e_Y2DPO_&f6zM_^ ze8K*t_3H|h1tyua(j#y?Xmsrpe50giJ<`@nKPidEeh5T6-KKkS&wL!?@FFppiK!(Y zU;}u01MXF)-|@?mHuJ%!y43*7mW)T*_S9*qo)D&UB6|?gM4SSU0PSC@M9H$A zFpFkRh8KTtg`1!)Dpuj?z=_qpCl5kWWHSrPu>KeXJL~pQ{mjGoc@< zHL&FH6NxPsBiqtW6m>TaKXS_9RL%&bed>E=lpVJ<#su>YoA1nC86E50*j@^l2-QK& z!>#o;(A;i2>@g)1-p<3ZOj~l$n=oj1GYrS{{Q$(0<;5D9MZI0YFjbWt0nTxf$*cAd zH_3nHevpwT5mmS~bKS1F<|vkOhk49>fu!ki09$T@z1U02=c10{j?iCDC+G4tfGkZ? zdnKrDDCR$&gn+!F@iYKf8*3>Fiivzsqj_@-LKxBb8?;cZFuQn()9N$CD)hNyn&R7cvyepx2Jy!(tseSu1kvd6uJ5u)&B6w5YCfZ z9K?Ps>0`Z_6Z0ud8^J|u8sfIJIeDG0gq77JG30MCR(f3cp2c!(S@u(u0wI%e;&XOqGW<7nP`B+GWQ#BlZ`bpSBR zk1QOvGu5oVKw*1WES}JHE>b_6ZIXDYrl==V(SV!-N{W8qgKXudlxS9kAB*RZ{q0EP z^!NrF)am5#wIgmEyD}Z?d~72CB6(&GXmaVdrfv@QRCney;KHx{Oht%zeL%cE2)-OT z>>n&CJ?|-NjpnGwqGV-lL+*C*BMB4nji>q-3+TRHi=EY;7QtgW>?P!P-!{i z%#IQ_yE+ciXW9QEx&3`x7HvLasCVJ;1Sgu74tQPe0-{5xi<6#n)q}wQmoP7g ztqtNzu!tLR@aS+1LUip5*$ie6p85(Ovsw&Ph5lNXh63f;4Pi>b z&GwW2S^Phb@a@@isLM{h){NEivHIu!@4~^q2UOlg-n6DHH*&FakZ~sHzig$Ufil3r zjdInk@Hkn``YfC4K$C{IK=nlfcp2E-vqRcqUOGn0Yyqj(137|IvU&~9w=!b@1UF;y zJ3`GRl9JzD0LssT>lrwaL;%B{?IHPbiFhY#aH{>AFKQ_n$kWvM_Y$N9jd=c4X-rOQ zV@^W;D?{)dVV-)|NWR2#d)E)K)Qnw3X#)BGJfJTk)j%e1kw6XfJ9Q_n6oRfh4@yr1{ z4sc3lqv3t-7=z$Kiu}+M%}pu8g|P9LmqJu%LzQbcV4S@d@Ursx^Nm7W9uM{*tojY^ zYnOA#;*z%&fDG&TtR}6=Zo^n4ApSq4K{GcC(w?$|XE9p?;n)#yYmmjQ@auG560bkg z=(B%F&g8$N9>AKu%~t_0$IwyQsetYr6*a$uYP70&B}`i#@zZymy^M3gtPi~DM9b~a z;@k_QEjq~APHY1zg9Q>6px1jV z;YjRPQxGMNBBLqOssFcN(MU8?vt7Z;Lb|E96$r{so(SrJ`BQ0@a3-H?_ax`~G z*HnvmR5lcT)EQf9a?obEA$DLVO1-%snQSkd!my+cy#-ZIj{xi}UCvN|D+8Tk63(64 zAxre8QS9p}WAO!S@pty{x1~FOfane2Y!6z~gl*pZp%xW-ZzVmtbb|k=!DWC1`5`5D z8i6X@jT5o*e8TqNl)lhF>?)#8D>`EY93W3`qc@gf?XupTHj-Wf7XX);lgaxv&-zm(&$cy&z$>FPv;E+`Xc z+hP@1E=46Cd$KWx2~G!r&fBirg{}rHJ_C}>_zyskU(0s-(Qkdb3XLcX>5J6ygy9c9 z0l%ZJA5+2%N6OLQa-lLcFY=V$yv9x-MOiH=Yf zh|_#j;G97TEg|5L=4F!2*x!*Ubuz7c*Z(YJ=*f6k7|$D8hQ}B@ylG2S zDmN@UyK?@FbGBZZ;&TV0@vDf%Y0ym}IRi%Sx0PkY(xufne#!V~D(8}PUrXu%f5X%m zO>sHkB?-$w^2*wXN`^M#d21hEgw(Gm>}mdK4x21?jdaBo)~AkBN8=>eIa&=>?SSoV z023w$a2a=qaNEq$BB=juw&1Wo8 z)d}?vNb6#t2H9S{l!bspOh#iyhhFXrX^(&HIheP!!I-snmdeScZ#ax{EZQr`f6{LX zXvuGMAnmKgyc%3Bw#&H!t~yJuVa#O1RtTB;0eeH()@xXV89i7qaT`H(V2{Bq^4hsT z5`!C2h}41CuG2JlDDwcg_8&0@%^vhwg$Z<=bP}m9eJ7+H{x2L*fx!Vvu?B)_KwfezZH$58t%>Ohs*(6mU@9=QW=7SScn?6qA1zlP3W&%YE>wDr+fnsvpvj z60m%R<7r&|EIf`-lBEptFT1ieOOL%wIgmzRKm;|AFv6h&Bi_=!f>`>SpgA>;5 zSEROnym1FxuuZ3JB3u@mGW${L$-wR{ALnz}gqVdGnO_5`IG`g&4ngwKI z>k0Nh5cl@Uyri91?=@{8q$WnLNex_pnsps!$x0C&NXbqu(EN-O!I1H}QS6xA$ea+) zrr#LP9>-bj=){{AQSaMlYiSSZO49R7^EBct*?!W)h*SW9C^_Xcy`@5*lw&Vqm zk(>KLg=i67h&XQ_^c+pfNXUF4c5$T6Ef=A>l)ii%vU?e&Twx!G-43yZRQK6muo<{b zgb9+{9(|=28#gjs=grCa(JZ&c8vwkabrq;0r*RC@2x}Xp(MK0zu-i1iWlk!0{n3zh z)n+cM>4*m5RPiNWtdz_m)T6LIeGU9#FTkc+yv z-OZixY7Q5~1Ha(R$6nD00)w_IXS1sE$jHT*5RYY-v5*3mJ?B|^Kn07EP+9F^JxXjp zWF&4zJ$Z)}tNr^Te!C8JmW1{Y71f;u;ni}O2cBsk=gC6t3}!3;1a5sYALvIGCdBzX zi&2h86`@!~=Rq6o<7pn7Vu$a#=08^mmt5#0rH-D0Zy$mFNS7G=csP?<+`NK)FmFar z=_e}w?=EaD9CNsjPCB;U^7&0hG?ELykY*BxV)hxGg|QVUS0EBbyY8sq);03Yn9jZ+ z;_m&7`-$ffZjL|fKJAh$I(mtY-sFCJjw~u~C@D25%a}PMDAWFmwB*wy&gj=4EsTly z6*#ujuej#nnokMO?g44#U$91&O20WseRk$58d-^pP86K_2%mzDKvq1r zgnKj@HM@L4(AJjt@yEZES_pkGLrT3oS8lAJp|4?^EC<_>qbq{@kalGsCA$V9&pHNa zRZ1>W`}Z8|!uJ}C`JP2lT^9zZl%szr%z>qc<2cTYtYcWnplgv~EJ9a_(A5n@=o%5a zR)nqtl{AV;p~&})NHX%6v%l4!V(LJ&N!=@{fA3UuSbH^FDI9kJ<`DPiFf#fCKSJsu zt&v6NIMF#Cq4(H;=JQgJo&VIJMD!~@ZEcr8Dc8C(>7ee<(Xf8MLN<2mIQKJ3Rn)RK{9?u0S|WLhuK343ZB8a z-Z9315=6O27@4?STYzJ!#EH-GJMQ9ayqf4t&X>3G$Z4B>0;1TOLa#Sv zU&ij1l&0B$ubos=+8>Uf$n%r!BpsE0`v^8HpT+^_4Aci>8$L<{XPG{ga3Fc;3Syc+ zX^qdMR~kz72XI2qEPd}CUC{)uG|K92h<6!L_fYT6qf~Sia!uJ_B&q6Hc;dXwj62nB z8?VKFL-LVovKlCa*-T+J3me$yftbutsE&nBqL`ITDh#PX|8dOUXC-db7Gq7><*ELU zTsj(It>KK9JbR_VV*q^pP5cYF>_0B#dN;-xi-w1hm50DPbG|GlCyL2Ql)Pgg+O{3R zkz$Mt#qObE_b{=0xY#{H?1l}=NN8xtCYz~s?@%BVufyQRn~TAh$)?kCRBCH^4~y4f zKJ&zCcW8?9;%oKJ9Jjjl&|1rQNaZ-N&!Hh{izFASwKdT*-(R;VjbX0*T$H?k&z=qn zxId$SRflDF5Z6s9@Mz&8-+W53eT^C3aUZ^B zla`^jfV~08VCqeAu2=OXy8AQURW0{Ns!gorxhu)~h?}t;`J7~ewm&)(-h!N8P1gg0 zhF!X9(i5=DG$kKjM|Ns%CX3%+QP(FEKx_1>$dc;+Ais-zhMoM@R;~x(T=?NITLzC+ zG5>0j(FxT@zUhUAq-bfxFF^LvR&bo}R^WNyYu=o*t~=-vr#qPF)_msCWBoIvPH%a4 zikRFQMFZdBG;bO{;t_)b!md#9>YggVO-06lkdvaINF4Q%az0)F($0f83}D)pk!jA0 zhbW`2zyS|HYQlW|?qNrXs*5PK_^Fa?>KMB06Sne1RPFo^Hx?gZPQZVNr5PqSZ9pw9 zHih&_b;y+~abG|62Z8978V*_w8hffk7`e>L-dNk6<0=&fcJ=2-Rm=iA8O4 zQ`EGtpnxi#+e`H;C|b!}ZrXt!a{VVOirD3k4hB0?j2G}CW~YgMl5-o>DBv2ClJ9$< zt-t$vk@N65_=d~Tc?t!>?*!a*Lou^DDyxe`Z5eaA;r31+svgw=bLjt#Y=1h!)j3|; zXJiTv526n57x1C6`k{a%I&CXvS~}Z~yliS1UHR@(luzdKGjsK({QrEQ8 z%!Au*QX%zSv`7|zKNEjHr@$AVfvlsxE@OsHw*wwfv$k?6@*e1noTozz#f7%vyrhH6%c8m~BF z9>>I>tw6-lYYG8b1(QB-|11lCs2J(av0@A;qaGhnv$x4YNsPWs;az^iT@idqBKGLJ zcd`PGcRN}uKpas-P8nMbxi~Oy?W;0IzTgRr6rKLk>zBlgc!`7iZrJ;}ZN;?>*Kd@3 zrx$Xh*L_iDf|RSoRfVfFoNv_Qx%%rYsDx;)wnL4vH(1s$jVOZu6^kWtcx&JM1yYwA z6OAystgGt2bFA!YPL(Sjfh8Gs${$B`s%wLhr%02DaS?w)6tc805R~IvEdw2NRqRIT zR|=Z%mc+o?dc9074Evy3N>j5mCf5t*kSfU93_^LT0A8^WDO zW6`7uB`J8GzaD zJj*%!Pu&E!6HLK#Fq&H^q6MF?2cYHM9ghK(YAxEZ?F_z@nj?X=3~^uJ;R+_#yvd+M+47`3u z<+o{o-_B{Hk;Y_Ak((&tck(N4TyBRccqfYdjH3-HWdJ&oGLXj2XDNimsV58yKKHjP zpdw8{U0Dx;VvBC!t2NFP*JUO$C5BitYTVA7pKr7oB*L|nW8RAI6tS|nQ7mr2P+3Yv znHT3to$!Hu!}?7b3Th~5^&4dC^WhjK*1HW&^gD~Qb<0iqb9>#rC7ljoQhvi6%G;a|9F*7pBqmH# zv=Z_jmsXP%qS<&iu4<~2|WY4xk#m=pBkSAQb9vh!6j`v|uk{yn+KCf}oaP1lO zE*%2S!tDjO@sjqc#3Z}cF) zwk=Vp_9&K>9QvKCR*l82=X^%5))k+Sde`5P#RjNI6-;MQSz%ccPUn*Dj^~BgWqUau zb^8PJOcQ?_jx;lF6I-R{JP5{()g0*Wpcx|(*af;Q-v4cpg^{^f_mM)I6f;AnwNL*) zf)PswI%_y2j%&pZM&p*Wk-RCgrmHlF#(m(0t~JY0f_^Zj$Wae4nF(Qi@i4vA6Vq}j zoSfIjnCcK10zx38=2SI_iIO-t8v+yBowbQ~cczSawSdDrzW{F)?%4#^sc1|w-m6T$ z{}>kgfgDfJa{_Una*y{{gusaH06MnsFsk|c7fPMPRMU}iDs8_WV`emuI@Iu* z&>s4skf-bY6>^r+p}d+@W{yAVwvB4fQqm-6Uhy__7=5Xo{xjsxHzSR7tAQ{M!EgRk zHozV;VGq+*eKXcT19z-(2SAT;G^xh&CgYMh6-`69sDy(`5qyosAAvVtqe)H6$Y;+W zLveAMxHw&0oFR*gaAwyv7RX*Y+?2}OzF{n9j_B#@0lQ8&nPyMi*_(UYE_E^9Syoc> zMNF*rAH&3zPku|K*q5vp`%=WdRPr5U1sQR{{+pPQ(s7-*Sb#pRr#ym!yjgzQ>>5m- z4x*&voknm;te1=e?!0FfOXAnFFzS?`j&ZOp`K^I$`|SY=(y+v^*<#A$b71M?-{e&? z3AnBJ(_xI2tbp9vYS9<2@7Xz=4Pk6hn=YGCWa9lzSVt?~Vc2J$k%c|n(0aZ9q7Wm4 z8;Fr15yez!|K6{1azXfqgMgy~46kAm7Gi8; z`lcyjNb0&2*D{Jdv<-C*&nK1Yf5C+`u_sO83FD z9{w^%sz(fr5iIg6IpB(=R2_{24%z=4S#(Q64#)fF8yGkn80dB9&=cqNj|`g{7%EK3 zYs3nmu87OA_-=?b#U5u1%HegCIQKV{v#Qq{oOK>lgqxJz9TbQSOWvL>B~fQh*>4jt zaiyu3m>l?*)fH?slyRGJ=Dk5=U2e|M@A_+&TtCKzT$eF&@XCXzYT$lA?@uRX6`Uqb znvUFOdQ;)_OW5Yr0}GUrK>!fzs1LFdg3Blu*$=BG*##7gIbe%iD{N3r=r662j+y%r zuK1%{HwJIqX>>C@asKL!NF10_mL(X#T?(+0Zqh5INIuCrrxB+=!MZQ*3-jq#ySgAv z&S!#ns~L?!I3QmtFBl6f<9@0fNY{I#8!}i&eAi=my9EPrmvra?WAXyvpyiwK>*{HV zh7az9U>hMVXDZBLBJVmD2h<2S2y?Zz3|c)7FF?860rw;~a(VNQk+AwK!|V$Bu@93V zG}}e-j+tn|KU`+no<(whq#^M(Xq)pnT<57UV=5k%{@Vl461lGeFA~S&nn2MhXHb9P zT12fHg6`TnbYTQxd>EkYdIq}Ao=KFjaVD}XI7{tMDe-CR5^~va81?9OVK2$L3xBxx zfIAOq@d59U^$IawG=O)s<>|N&ziKPD{E0Gu`WZJ}Egxdbbf4S;3KMasE>aI-T|KN%g&E0Mw4 zfzLq#ESAa8>?^5D0ngm|-7$!k3!CxED|$8-!`!`FwQLOc#j5)c^+iMOvq6Wp1x}IP ze!;oFif`yfIvM)xc?fWo* zOQ?%0o~NwhW2!&Wse^h5=x*0S95cHVV+P&Zw8v}zp?0!iAtmf|LOI9F)_U7wfaN+w zSIC&h#$p)5fe9c6@*2Vf3)n92O%s$W*$<>aR-1kB+x62kK!ETwA?xEzU`J*%nuzhH zsHcq}3D%s)s%rEJDtmB#AUCC~xly1>Uy*O_ci^=%xUp?0q;bGN-VtETn*;7cnYEo`xLU%Zs{gUWg19EqUK?emfIKOTzF!Ot+~!Cda9R zKOXzv*(}%Zhuub-RSdUw{pR7JTDEAWX9;m!j^k_OgHKolaE@6IckzDY7I08$5Qy9< zkA|Zs`zpxM>WA%~+N%=dq+VSLQ8>zA>)Rk1Y=Ck5zPGOqWF@8v`2R`?kUFfKAmHjNfR~mxJhubG>x~crVmf4L2C%7WNoV z-A1hBrjP2h4h6y;df>3N*zY=iR~-pKTGtf;M@?aol(83gRtLS2`WWUZg>+GD^sB&4 ztO8J4)?f}0x<|!%SqoxF`U<=nm$D!G&X|3;fb?u;EoCVIwh7IiQ8*iHjzdu_eE%Jar34Gfu8Z@3d#SX!To4)}dd_j-k7W(rZlbM&rFqXdkG%cO>^y5O_wqb$x_iSyR*cgK;hS_bo| zR!sq;0CDY;OZ@53g{$!_Zx(ZiJv2;0xa(-VEreC@=;56SSK*WM#pD9A4rCtH>0$;K z$}X@*8(v-~yRk#@)ZY0&q^{!}m{`&6UMe@k&an%MWMa`Wv1mD|(-FCf6=3{Y?1S1) zFUmi97UlnYNF#5#V(4rpJVbf*2tEB8L9VG!fLQUwyRWMxW+A|A{Aj6uG^JgbCD&iI zfF)27q=S*iN1~1-Kk^9rj=Vmhqm9K*VIX$ai(LkmhR~Ftj(#iAYvTlv7L_fU0v(*PHo~zm6jiwKUF`x>1+m?@_&q!+S%T za2=!z{(JSSfKNK_wYE^KNbI$qHy_81Y@#vJ!wwwT=(B-XWzKLu10rO@TBI%Z;0Q)G zyG#R5)M0_D5B!UI;CHy9IjEN7*lwES;6W40-dM`VbEofQUFF#4L@ zLvp4u)`R)oM5{?m!LM7w((Hu(F#BNi)iJsTX{3WC8W(i!}asoNdC*NeA-$U;zIu7VyCjoYGED5#H}_qU4b_0C;E&TfuJ%H2rWHC?MJS zW3vqYw$r)6)`p!BE>G}xox;T?}tt5-tFqMoUW z{LPk}UuV}&5`kWz`G3blSAj!*zday(yq-@-J;TpXbU;_Uh_dp+PLetW*Dp{Z2u9!5 zAE&H6Te*&5mEafT;5MYw{;hCViokai<(a^5Duo8XN0`ztUCTROT9p1PjPU#(l=r z2E9p_>)|FP8V5QsJg=p^-Vj29(jHAMhaN^j^_^MlA0|q^hnu{c5!@=(&R%*D_HXt< zDT$Ap6T$f{dyn$pY^Y}DEWph;AJ`(AQXv)z_-f0vIlqEFFnulr^5&%ltkL7_ZMzd(gE?keezgrfWN?{yfafuAzF>)_T3E zS43a{c0$)0cnTF-t0NP>ikUHNe){*?RqLal)fBG7Xba>(`D51DFjpLL3$Dh&EguXBF+_$Gj77rju z@ct)85^MIu`l6%40H;i9vjrwTyln7C>RlDELU4lbqC4AAsCXc{A--20Aa-rb`~m8=k*k5b^IC&)f}{(7WtJ2#;bPB$T@L&mJt zDDo26Yodx}C^mCuAT3(Pa>eHNDzKxOX5z}C&Q|mADd%G}Zeu=*Yd<{#@MaufTI%jj zO5eK%Kdv32(v(#w*}ZluaAy}dKtLNtO-8D=_}xqmyABgc;?G9H|2srY&NyH*!H*9Y zDe?##h$KQC_GTpV$9-m1-k(2{z2QO0nRIz)^Z@U>A4X(P;JqUEFG(NoCpYa*fSdcnQfv~Qzko^Z^O}N`W1(XcZ(f5ell>^5 z)lPh;;ObQjPMI(5(8-i;n`CLN`iYtvNu+3%^YNV$0%+tWyuJ3Jm z6dy1=Im}@`C&7ouKj+9MfOql!qf!=yzg`RhgZqKjvgkA)4Rio*lMWP6n+@%dvwz@r zNlU?5SFuTE-&BFh%^6$9_~Xranowa4{;A;E2;|c)*w5o0(2i;K(C*C3>-JE7lUE>w z63+h1?~?8y%mn^Bck816AN{p8{*%{hJb|9*PFQh zh+5Fz%yn0N7q|~;F%D_$*6tXTVbG>dJ-&fkb*uxa)`sxc9KX%P64U>IPt?vI35lKm z(h;(t4S<%oJXB?X=#Gox(bA(5<)n5)eU)BIKs9up$?+CcX;2l$GtXs{fam+xkWUlD zMi-l%#bym@oDtxH9SFG|UTFmT4dMP?xc}RLT+e<2t2CK%qL!iFH)=|)9E27gdVz!5 z?qAV4zdBOI7GN-KX0V`6cg5Ds1fGXQK14qvKNJlwn$1`_?NJgcIG;xqwj2k*@yQTV zO9KNhGzjKEVQ0&*}QRUeT%G5mpm09J+h$=PpK2mj} zkv=F0X^!r}t+#zN{NK1!@Vj;>;S>QG(R0X%p3~sjOm=H7NlO)66NpC@oSOO_HS>O9lpmR%XaSRHpmYM)nzG{dBvLCmZ7 zJFu6Dp|+@H$r^Y^JH=16_qQOB5q4CYk&K?z%a7@`9d&h3T}xU?Ii|$`YOkv*NerDx z-g_DAW@}lh z5DQM`{qV^DE1V}_8A+3YS|r%b-YEfrzS2RggvFgVv$Os!9&jfk5qr-J(NAom0Ntr8 zVc|Hu5z4Dvzas4(%q)VN4Y}uoMR21~54P`f9o2~3_rWJ#r@`2oBX%+Fj!Pepv}=nj zq`Gs(vdF6tc^#-Uuo7siW4DSD4fv2^u@?nv&f|yeLa5@L=2o=awgov5Xiv8Y z!QRut4MZBWGHpw+5g>krp$ts{_csFpoBkt5eL@LVY3D)%$35mf)YG=b4y&g2&rn?NdA8HU`CM^9f1&m z)(!<>Vtvne!OZNJMild)0-f%=8i0O!6jp2WsWG^3GauIi3YZswju;Q2)Np4EYF_kz zyydkV4t!V-&-Vwf7>S%}1Cdi>pfIO0^8sjfbvzDuWdBQ4ad{vH$D(_G{;0)eJ#VN> z(r>oTlTV^OnltbDm0#fioR$Ue(G#()v=(@i@mnu^_HH4yhz-}HV9QAGT;wyfR1znm z$#8?ds7+oaj(aOyw%k+$j2sG~zGoh;!*m$UYEoWZp2296r)E`{+q|FNMPxC53kjQx1b)H>|$Wx4JyGy35RlNpkKhm z7TW!Wwa}s|1H*tfzDQkec^C>Se~2lBRRH;zMWHb%kZ@|qb_X9UIA2`FzA_bC5gVdb zR-?1qtbh%CMy@guC!;YAG2&#bkZS5zh?8;RWIV;JzXeEiZCr%HI-77P6@wPbJHoVZ zpu>HPxA|-e3L6C!kkdE-4~M^Cl5pb06G)@4Kb{5ML+Nzo&>uW^q&x2XJZo=DaTK4>4hy=536$)AWy+TiKxt zWu+bmbUytXSg>Lg-nce-E1L+XCgk4^=C@y?usMB=rckfltftg!-3O`uD5-jU=V~<^ zvI!pG<}o|h1I|*s)}R85eyfqTx;=!Ci2UAP#m!G;SI|!T(Eo?6uK7D2Pwo&4MJ!&CAUw*Omttytx%2a%qDD-Fo3)_e!xv; z5bD)FMM6yFJbY|!PYT-r-l~vRgua|9Mnb8>EwDz+mw(ePZ>OUs`jV@?EI zVjgo!4<}P%8|?rLzMq2Fz&*@?2`U)JrN_X_9GAnPE3lG8M`KEP2)Q^o;fp9UGnl(C zUnMiJ(7{O&giAHHk3csHJK)!mGGB2|x(=NIcwOShrZ;^NMvu};MJzH#{@!r|9tQ#WPVvKR z3b$bRV|^Iw+IJDgimXrgB6M(g$jlCJn{jA}=2$qQI;>^^ce@U0}nr&JFh#~vR>;Mq+9 zIj@GC`<;~O>FH7WCMeL@P=;1dGQ;I0+EQ6O3;FEaOL#yvyJO(WcsO-g)Dp{dkj5J$ zUfr)wkn|@|P;fTp0e%PCm7q<{XH)XMzC51S?^FI474V7Hmzb!s7ByUxQ#K<4(Tms( z!_+qTwIyH2&q&XqvHy+Oyhy2AE%iDj`-6{@q*vK@&DF3Y-yfm6l*3phTVd%;#4pw)G1 z2@06cJjx)|;R3U!x)t)mR?Vd5dp;tkDB}L`?tZ_wqH~88vIbJC`x5qbdR1=$cSaRF zn1_)Rjj|~8&}w`(_AgwQ(p(E4tm2t(VwL@qdl=&J5)@HzTsHD}V$If+;sFPBe0x58 zl$nmex0?^pdw#Iw0XM{!RI1p(?v7o;RftM2WAr(r$`o5Au#Fyog@*EmYr$2?eeFRTU?oca z7?6bK;CdmeK@TkUtbXrNtiy>VxUAV_$Xr3{c$nmYT%k)nh&|vN0}kQE%@I4ImmPV8 z0-dNkiPO4tl^EZM^0ybmiqHAkFy!%03=!eSHC)a(L)3sZXmG7BC7t5~{ah`@>)*x0 zhBcHZeS>sWIAIDSjuUhE8*ZNhgkBVv%T&2<>3;1DWn9#PI5*u!*kGD%$vDe$Zn`0Z zd5;ur2J`Q4xU6!=82~2dU9&KfSwZdaiO*L^{q|mBhytb+sj&O9FWza$oBaiWS@Rraq4^SduWhyw2H?T=;+klo4PTZiX zv=}VJ!2XomvJvPl!ZyO~f2&a>Jj?^N=EB^uF<;5xlzCPNA@ix*kz~0do*Qhl-3TuZ z2Zp0Xm<>lgrWSg@{~jDP7gvjbc$-&I_G%u!Z&Pp)GoN~+m$Vk@e~@{T!`iMpj~S2K zdYu=+DUL3=ZHhvUhL_TaY{mvk|&9NljGR#(Rx`zB}eLv~;B zWg_~Zw~ku(J%(#SLrgoN0?jh~mQ%4msA17sB29iFFge%u-hxyfNt$-Xg7m|bVy7iA zU@UGdLdX>Ok=aTvvncZPN&#X^n*wkrKo-T%L$e~k`k^tE-6Vi~p|YG3>lt#MXiBxt zJX-cq>_Wp+0(W02-8c)&iyEA#fzcz;6sK?aeW%c}kth+lfxMeXqD1=7Q#$72&dWEtR+Tx}bYk2X2UZvCPI9vqh3YH*r zy|M5@Hj6S_8gZa8c8x03lfj_?*pmVQ7VPfsL_?Gp8UGDTbYT!E?Py%j2tHIY#d&G4 zcia!c%fo8&Ecyemi##Vx*Og9>mrhTRPQ%H1c=l(&iKKfcP~vZY$^!2doaSZJt0}K6 zk87|T6mA(yOQ%Xpr%6kvQ=2GD#Fx%HBI<&}`YMuPyL=OT1%cN=4o{}YSahzkXF6Ij zxfn}cIR_f8NK<~=CX=k1NmkHssvG_b={@@|ME_j_DP`@n|LEV+Gk=H^>|SM1N=k^TL-bLkd}*I9!URcU3T$8(f#bOrK-Z3 zijp2E1(#JGF1}&ZQR0&J0CgiknE0&4dStqDK+F$+& zWl!uJZ9vK{?{Ua@klMc&S~kduA)VXF7-SF1PvVY*$8EqcVM|V+?9W}WY+Frmmo-xW zEk8d6d0q3hn=_xtiNP3ZfR3&N-?dF2a znNyfqOb6E!@1hj}p7*a47VaoaYNP;nZ&cX@kYyRjo z%#!{K>Zrr_!er=LYBee|9O{wl?Qya+YJfsHFL<5ySl$a+2AVUdkY_p|bnD5$GQLqK zWZsC#I^1{4?lB|YK4Qlf{U%aWuW;=|PB;u5hU7Nxu<9?wnkt`?fr56Qcvc%hRMhf>j3{LeCEoa7vmXUC$)X&c7gOJv>o5JPCa@ zW|kf|#`&eH(Yuirsd zb*`Kadu}mcx)&*o8exg>qW=9ys)JjBQ@Ra+Kg&Kol=&tIZI&O*MUDp4BH|L>x@oeY z>_1vPoKO8{yU?6B65PBq39-WjH^{orGmyq)z(qtRj?*z&@aJ{%1&X;$w-uyL?a99- zNCPJdxw>2QhmsF2^fY^nq8DIHoxXPh*EWtU7kA>%E>!Sny3Skx02Kx`AJFCpFMzAy zHTnpQOwB2BK9fGtPU`^g{#0PW{i&qxrl?3%-=y@!S2(XbEN67Rc>-9AjVZ<}7Bgli zQe4lg_|WPXR8>`qU-Rpq$e#K-2h5x z%c>}QzYHmXd#tdyWch``s3L3TDArer$|T zDV2j|2waw&#-#9hgYz$71F9Pf>4Fvf6YYRLk9LxjV_gJuPW~e^@~9oHaLN9c4}%1iYBY+ zBqZicWG+_Euv~=w)A)e*{7z%+nRhGKNpFCQ#I!8{t>e{k54<)yQ^y|*kvL+(JJh5u zgoR2@x-Nig!N6Ret-?mh-x}qt6%u^33+;C~Q;l5nMAhY9!awDj+2#at=E|!EPsgkf19WT8HeOKI(Cv!pN*4LGy4DNYWk4J%+&ixS< zjBW^I#qrN728C$Qq_&8(-=U?JLhrZ0SL5Lu_^C1XrSHG+_&fmV{X^a$w1!JFk?giJ z!XJ?84^vS%tn3{;8i!BD@^nNFGU|g+aZbxhP}g12x3QMuLv)OxeBk%!p@_Pz#=&>q z7kpZ>`V%m7Xduod=>!b5n_NfLKDi8bEe0_3i5kZHCcDd9u<)GDZ_uq@D7jtWF*w!+ zT#XM<6nmw`(92gdz#DL(0f3;*_pp7gI7Cxp599w(Jdfd$=cN^l&fAJFpKc zUMH7^bv}-MTYT_D-mv8l07Mj_FhI~J_fsaKG_{~9`E?C`Yr%jCf*(UjhlfA2N1Ed498qcv$)aUqJznJ}rU2mtfWp+*C=uZ^1Fr3= zFbfN^&<}AUjqt69_WqzIyOC(|aSK2+c3XeuC#yy?8fkyxIYN(|`NU`4!fa)d-(+5!WRJU$c8b`PNf12`T04Afudxkng)PvU}B{++<5l9pdfZj>ka& zopn4Xb?b>rPmiROE6k3)pQ2Ag_2(gB)ctgHB()+E>r@X`^A{*@Ydw}>SO8-*mB|W( z<~~{mm3`CpcnOT+)t}oW5B2>jgde|ayhiLuHHb}Oa1HvD8%Vj^oYJS(BBRA9BZQ7` z=RraTY(&yKPeuOC5!JHgQ|RHUycyEx-xvl^1WVVH^`aDzk4>7f2eo?lCzbJM+^V6c z(-{aizUWR>9EGs`b=O2Q%qs$X5SF&c)o^32`baK!WmqPjWn%^Dugz3>>ofPnkl8%_PqahtoT*g_6Sfmcn}Zam)ZCSU}Bj5paWljGm;c3Wlk z*nZtB77C7JlcHq>s2@KUrCgvj9wvb(65i(-7DfxGIJWpkEssY5R42D=i6Oj{L!L=T zMQQH=cpueX4jfv1L4-ASWGmPT#&9F+?RBLam!%t5%>7}i^FwT=Aji#pbRBS}3wNMH zKNo$?QEo?N-!D={{!b{X4~VEl$>x3Xk!1b&9G=^xGI(*$g`I;g?pZE}S+BUBe9D#} zN9{}233>siEjy4$y<;V2DC|cIVI*bRRpD8k(Gj8F1$Ikpc?H0Ez+~i0-nJ2+yfy?% z>3$eRQynFoptV&a#i><^mXec{6Di5J2XdXJbLDK&kEn1$cuACpeCw(A@(?8*tT9C}K+$!^&QHq;`HR zll)Y`xdQusK{oX{itN!B)sAU$8y!||fc}m7E^=F+ia77P{|eHl42oH{8CmCzg``V#2YCX`ru8F`#Wf&#}}m`)URBH-N- z(t*>@q|?tSYVj!8zE`vWiYRJ_uVrD7a5u0E>GQC6kh?YP{o5k^W1D_lPMv^!o9@&qyp-%e` zA&dJ(*jNwKkfxsDi|~{J<8NcO)#mtFP~>AqI0_^7pkUfOcV-|c8vF^E12sNu^}Vbs z4_S2JzA}vc2>CR$-+whOKmi+2G)$s_3z&G+z;E?pMh?FURG>Q!A9eV?8sJpf&q!aC zHO8eg5W4swy`v$;S}sF+(U~-amdo{i52BL+Br(uhKYNQ$Dd16g%x0WpOp(P*s}BB$ z6pLK6J~4bQF>9@XD>+SirEA33$aq&?lu2*@mEJ<>Il#yRpsBd49GiV~w{XBomsdk% zQt2pk%fECe+cEVR$p}<`_m*JijcU>v&mA6wpbu8%WR~BRN6}#=A1xlIY@k~4LR$1v zTJ#D8)x4MZ?o@c%R+fMRse(gAMhSd6LS{_GSGuDHn?vMf*^q09{>8?Aon(jIGRkBzj)HV^019y=P+{U!3*_v;O?nh=XiwuN1m z7>%$VHHfyJAI(D}A12{Y27R%acV74&7)%I-pD1o3EB&u|0T-o_iNB%6lMTq=@kIn7 zA(Pg`Q0{`kh$w5i79*5bJxSISM!#--{{*CIM!v^o+HwCn08dgpx@K3|v8ZZH;* zGXIR&+kw&!HT#c`<Lkn#9h$=&v2Zj?#GF5~P1EDPX}FD2|QY zQ4Ur^EYg}J#K!R(G-jBhIn?pHd&N<%z}fh zjWA!DiCf55gH#x2mW?$Qyi{sfPEM)U&=67Wd_9&3ni(vTE33CD@(f09yG z{)PDbQVqiB6NivG-500iFTAD)0?h|R+}HlU&MMD?xrs{?93P-7Abrm;7S?v+KWyCY zY8Z_d&xjEaq3>QQ?Ov9G0VnIxHJCH|kyHc!x&1LZ=&Kp`(nId@@|GAuMhL zx=*yeMaf=JEq+Rht$R>p5P2Z9c*K+Au<#`aO4XX7XfGP2I*L-|xsU*hPJ3|k!v`#% zq=}mtb7-gXM4DBrWR!}FWM<#WUoenL!E5HGbr_^iP*jh;8;gV)MsV-=6$z?y-VCH7 zZvKG+^&jc;UZw1Bo1TrdY{ufS0XE8e=8kTpE;=nqh$1qsi-$@(VJ(Rb3(_tMc1($SAtL<1Y}CRUm*LwU_CKGEV__zr9L z&XdIYYT(=9yHKa=2#Wh_F&@?xQg(ADd#dk^!Y6`6>K5QF8W@sSf*b6_{HbM90xrnu zJ?|Ti2hrV^RL}du_Zz%9IfpdIF2jEJcn{|qtAnJ~!DJt;(3&A{)pDM~_h+Eu#L<>o z8qn;(5xl8y7>QE$Op*L|GoB@HMxmKrc!)@)jv^n>w$}zA4A4{}R6RU|P?NxiQUnyo zNGNurXipXs{Mnu2VeEm?YKLEYQW`<X+j8|wQ zcGnWL3%}izbVLbHmX5g#MbVEuWhVq_-FpfwV~SqAj#|_l0J>Ctwl%1|vhzK`?lzBa z$+PF4!`s0rk;m8l=5&Y&Aa+}P3vYFYuOU=s1!9Nz$VP!PspyUyM;dN4#U)gCK~zeX zi6XhcJqoOMS{5MhxQWI*6 zG4EQZ@ny`@@pwHRN1FZ1tvCpn0frRS&1CpSyQ+t6-Xn7?c3DolVnpXQ&*X17ZYvih z(NdTC&2q$~?4sbcEHJWvPRzaq*iu@wz}hUW>cq=!AXVvthoO6&x|Ta)_`G}uf;wmb zSM7)J7NlWj#C&T!vl?H;6T*8dFy`F7TF@gvGmJXh$a9b1P%Q^yQ zZj-Q{Tg|M3e0k*O%@~2$w(n5Ve#h@Vei)~v!-09b&UX~0?tft;{l!Q7wD;sRZnC~i zAvxKC{wH+>Pn&P!x!~u};Ld|ggK_}?gNQ3Dn=M)ZU&k7x-+Y~l%zNV62-KD^5*igROio|P@gaxP=* zt_v&?y6-s)&AB$@8Tw0C+Vx%9^+VeAQ`+^5l7go|^*ZU>KggtTo4^jx8$*X`9q^4X z_d|RPq#f7A%ji~~u!@)0eEJ{C(;iHXFb%osxS?cv-#Pf^>oUrX7%qa>XfuwtwBzc> zM!0;*z!=x2fQIrvkGPaM%$kT@>xleI7txUM5*D8d96QPO9|{dIKy=suDw=*0chiCq z_MXvF>)mAat&*?GN?ylZN_W42Y_F0@p0GrFip4r%Fv&Vbj73JSY^Uq7s#M?n4;(U9bp4n~Zf^Pe7NSLz{y^Q#~pT%Ti3sL*HzDP=zZFBX&9 zGM8;wJeo6hZB89i7`Yp{@&Fp|KJ=wfO8(myBPOg2ws0v3c(5MDE<(}?~& z3G(=d|5Ja8-3uZ|SOx~pYG-#CM7*ywN35h27fWkto@M z!xtY>huqC)JRte zNcXSya4Wk&s$583OBv|9KLG1v_&sud#~lj2*&KDm+fr!}Up_n5A{UVfwu=G1g&oha zb;3;$ANT=j~$kFCFq0%tN(7=P&wMtd97&^*+@1f<## zdQ$C3%%Uq3n-`8yUq3d@8L3ntb6_}}JOC}oom~XpgKZB!%oR;8{kPma^>9hfdN1-9X=q8^{ak=ETQ4|>QqI+8 z*mHcdHV@B;n|!W1K76DPlX?b;YQxT=1U4(Fjo}Co$ef0-Z%xQ`j4o0YlNpC|?!Hp+ zq@0&lX#daWRJiFYB4eL-!|QTCN*?Wvhs(dnlX#p0{~91_;L-mou4@Sn6B~UNJ1ojK$VYa!&{6-vz zFQ*9gU&t=xe-vNr(m(OlrNxx?&kK}t{G&gYoyr>}&8`+wv@CsUXHkGVVgtXQ3K#I%F z`=ETOu#+q7@~tAcp^4Q`frlNj$5E47v*I^S9rMrxQ|nrF1vCvtW_Lrh@!C=vnRkql zIj_yhyq)vMLg$0=L*>CNG^c(Z!NnUYj2znyVU0O7;0*FeQ6I%-*W|O-7@slBLA#X~ z;2Q2X-IEv<3mBbmm@d}Oz-OH{*I{H$2 zf|Q=9Bc!{bDi$znP?N05dTS4kgcE@jvj7K(kIoc&lCXc~uF=H|E(HxuHtp@C*o*kzlqh%eRa+>0&+Gcqygc;P_PzqSZ z%su5IioP@t57W1h%JKx(-O!!Ag!<()I&vY_SD*_y?(AzML9B;eEk+u0-A?UiiTdy- zYHf)QUC1)0{47Q*$2jEx`UEv(fS~-T0St1^+>2Y9&2hu(7SX_)Dx1YYq7$*5>4RS5 zD7Iq;9v07~0$e)*#^VEOhZ_lTNcRAKjSZ+|6v6!aso$->yGq8=gq$vW!Hc(^&h)VV zp2i5BanUaR=~V=~&F@qlmIet(8-x{?Ye}T1^*tiqYtx}oK64{FzIHWl>f6SuWmZqWr4|%tmF*@W^kC^;` z8ECk^7rEFUk+JEi_qE};1@k3Y>uZ^7QG9O3^=1{{)v$Vnfnw4b(0Cxl{K^5r`p1SL zUB0Sb*AQ|k*njb1;N{XpknTEBW}-PpQ*kl}#2BBhzDZ0so2;ZE8=nGn`@NqGA7_Gf zBS|)rf`3ip6E@}cGeAepWUj`n(`){aoAJLuihKSc_571YYju8_cgjI>!o5bQZGSLD zT;73d`mEqaxqOuw`hw$ic_vtiRz9tf&pCWL<1s$n+b}D)>H#nFt^u=gf-0cs6>>ZP z?-4`25k`$<9$f82a!$%)t>v)0uz|Oyg7I(hX1)tNeDuL$EAki@Q1kw?0IF-J@G@6y z_zP>?$bg!+iPlbae%eErv5Wd8G_DN%Ht_;k#WqAnWljdO)3Vdqp1*WX6}Ug1T{3i~ z!`HDi58t5na+WGrWFJMC+Pyp0pFFgmjK|KY-(H;O4v-r9=~+mf2Z8%di9!Y1a-f?0 zq{G~{)E3QtL*K~DXZhW%JJ2Zn>p!tx3Xif`eC_5*YVcqG#8Yf5JR?iXX4GX=(etO$Xq(a+INv}AD|tTR^+m4 zHqtbzbV2%BLyj8<>o#cy_nQD;Jq&SThrZHcA>~;PSaMF=;T-h_+KUpAM-QNa5fxOu z>n`A$vu_Sx%p0(YVVLqDrEVDo0w}{e8(E<%%RgVidQ!P`91 zN|(BIWh`Uduzp<5@&orbM;L?9q8DS}F7{yV_>;>UA8_y|BBH2*nIaDVh9dOnql+-Y zhsoy>TpW3dr|5bxrN3~-7J3WvxLURgIh4DGLele@?5&<-D+EmBc~2R%8=3FSpscmc zF!fR6{A7*61~RON%L~)@T0StQ6Mq;0U*qS<2BF(sRsIepW4>A;dt@-$c&!A zpb>mcTk7dcc#-F}gq$6{3Apc#U7HhJCS%U3|Mjt`M1Gah)=lHSmM#D%L3G#*-9Tuu z2|1E5oW>aK1V{(tvC|1u^}z5_Uh*2aUx3s}gDwEWZ$fR8YcuQU!@^CIds;f&Ch(vH5zv#Wq}scSq%O^86DF|OnY+fwWus^t-}&U=8D zusIhQ{zfn4dZ%WR&o|JJP(K~k6^TQ1`CbqCyhd7j5@nqB9FR%Q{gC7tcS6RO2Wm>} z@D?=jx=??bf^Hqgg7bh0AP&Cn8&IQOHN_1&3t99Uc==qDhF>~Hu_X|CQMg6@?sq~b zMm~`v^q+AFgJ7R&2|jSWu1to5)YWk-E<@IFCs(V_u&@6GOe=KCEaZwV)~EIt%kdTK zvkXCEo_GN2r~A0!x%3owT@^Kh`=}m21GKk31y)o8D&-mLBgt&PcJVt5IL2O ztq!*(HBaKzl0V9atD4-CaT`q>?4-U0QRK|KXu&XFTw9EjQOK&GoZDWU`N0=f3@&YX z6nsO?<2i^*z7NRaL)r7^<3&CME{^z?&a7s<o5r@c=7e0bCREw}NhW71&=3nfM0TvD2>#%pb+C+0rmYkNGGo#8Xh z=LyGmPQ8O+^(@ta&H+~a%(sY3whO@5FZ3p-b353ZM#32-8nJI;bE@0(SUcPGBe)-4 zJyN0GhU@cQ%}0LsJ8+Sw5~9i8-w~B`H(Y?w>t_-yMqccK{^&#gT*}sTuAmIo+D$3t z4=#7th1#zKlol;6ksW->U>N$=0VIR@8}0O4PGRT@Z~4wh89b3k+rs_~LZ3t<04l$} zQF!(m7=v}0`GOIN+&|$i3AjxoUmHS?VQ5^#T zrIJXfF(SVgRd8P=SRJL{+CJ%xi1j*r4<*!H;6*tipOSHD8Jy@x zQO43be6HG3V%cHP>rZG&xeISRr&<~ixd_8<<}?8X$8H27+#s6Nf3?t)GWO{hK!DfX z_XaXLTasm@b`3@jWch!R>@Yqr>_g6J z4==^}5{PQOTKp$a6*j~x-+8k5R2 zg1_WccU_R2Od;snBTAo-F`Avw>Wcr4^YY`hLp{x)*w`7!$26f%FSZOqs~jF$)wgPpqJdQ%mb)M`{;oz z7MuBC@OgU$NNwC18#FQbvKn&koXyvOj5_9Y0qOBV8l5$qB z1`_KIkr6J9+PzZRy$W0TwS<(20JyZq5t;_PBn3`v2FxK%Fr!5=!D|H{8rSp@o)zjD zP4ore1EA$G4)}-9I8B>NaE<>D9?o+|;-|F6G>(8xK4e`Vz(ZPwA-U!Pzx_NmPkpKE zC?DKv%`5C*QS#dfx4O6z=Fxt1WERsGR}-l4$Sx@2c9p*oRPcAD)zmOuqa8t2I!}kX zQ;i^n*OA*FeIfV#hdP{9;%im~)M;}!Bs(@|+GC-QEt5yr7Np2orfEV(gzsUjGY13T@5tUtS@8s9t9r}YUE5m#H_VO z3+L^kT*G>>={h|u5DKZLhXaO#TAuI34(pZuUqWpH9-zTx{gMon<(^auc}4!|R``}C z+5sHss4y+Gk898wm8}4=5ZxJdJAd4a(A_oxE9U^kHT?)hY8)oF81$vjUWPCZf?h;9 zY`mZyi}cUD5~BB(pq6QKNz>~fv-vG+_zZHqmSiC5Hj{Miv8KUeEWN%SE2!7Pw~Ppn zWo`uWT!@iLvXvld6W*^t9sA!wx#hQcZg_9j>1lD5vea|1!qO|B1I4gl{R!YC4omTY z$Tv0sbd{h4Ds{=qyb@9NXYL~mC}GkuyT=L6n>zIx>Up$*(v~oqTcQrZJlQ>`@EdH0 zQe;Ct90nskI!c4ri3wy5!8n%qmA??WcEe2^<+CaGXPt=Y?dqJv9wx&-Gws>|SN4T! zX<6l_J~&Mw0m(ZqD>KDqUWUCe&O^p`<+D|O4)rv_1+E`L;0E^BIe#Z&PI@4@1e|3d$9tobk}RAB6jCkWGvit92JU< z8qo0Qr&y&f5r4}J5g!qsgZjF(qKFa(5}Jj#akKGEDm-fs_GK-}Gam6+JLyi;jbt60 zV4Y3K72Tvgx*cozjdf`keg&@gY!f09-vM`rry$&LQVA%gTSPXArpWHKw-Vf0>FIt- zT;YcjN8_*}OX~H2h(!ZWFpt8S5V#uzzTmtQd|P*2sjUOJh2(i`3&uNh`Eay1dsizy z>lCNv=t1O+Q^^_E_DZc{$hqdKzEn6}Dx9J97VdnSF$?!ajJ+o44dpNZFiY48u1@Qu z<9K&H<;ppt8N+FJa|jlV`6cSJY5^WR9LVV)n0G+%T5iH5ht5sMr(3LFf!WOYql5N- z2zlc??P;jvk5j7?Cw_4E zxrNKcZ1)2smOI1Q7P>^~E7?t!lVd20Db=HK(@X48YFCNPBAN$K?M(*I-Z7!N((9$N z2&gayd=hnnap6-sNb0&Spc0O?;}N_^<||=;j5#}WMqhH7B)LqMT&D2hrGA_tNVySk zXboGgy)dI&fi6Z}{D{#Rht4E~Jwf@Me^Z)Ye-N_~!`eWFPAD&>K8F~$Dt zj-rvt6SpJlm6H^8Yay2&-vL~C9157~){GuUsJbG$b7N>0Mr$#*GHXjjCn+8RGd_u7 zLhGc}ShzvPeBYVkeGT9~C?S<>jJD;64RnPj7!sE`8)3V$lUzGE=}P5^T+VTLIg{Or z-912K2;>`SFSMsfJM4X7Km-*XI>HrX`X9!rr3k+YV2M{v1|uX9qgk9({)$vuhjY1# zY$2Jf+^%Uii93CRvv_DA_!d7zu148ZAs>N}_o}2pgA-8N;#ev|m*tN!Wl=ME9Tgo2 z!s5vMWe9b!pik@Z!O+rBl#QH34&ynqvh_;bLGTD`eba2bdbLf%uofOT#_OZ?s1isU zi!7%i!TnWJK^h4yk6!=4kku*oHav$G09(kjU^hq7eyEZ?Cge+M*AE}>I~8P==y8jj zwqn)6m18e3jgGdHj<%PMcAyr0-7rgSe{%jV_Fs|H9tI4rpa~9!gBXxO7FwU?E-oox zMSw0f8ib5>A7>%#5x*VBew(nTc(%)#htSQ>R;b?!BQaJ$I`taAHYS=LB zi6YSg+48@}1x7vFR7?qIr6ad(PJ=R>l(DXAz;Y=R5TLwk!lQRD+94{%rO zD0hY<^A8;bUWq=FxC;jQFk31`(*q|Q!$bz|e}SaDsUL-SI8$$j=akzEcylQCj^=;V zCCR{_ZOB!p0f^=xa^IdWsHtKSGjzP(QdRyB!JX`GFskkNHi8xBmA#ki>7yv?U!6j< zZ=*5ztTC=q={5%NEpi`NvggV3Yz^2sUWVJ?rvG2*<~OqJxgMDlHoGG8-uYB`pS$ec z@fSkZjRO9LvA+KdP&CT7cuF8;Vw^ ztARzzJgIx|Y7{qXKTw;N`kqxpo_gb_p$^r$NK!w5S#r)*YPEq8K-6QNko7+%h571X zT(ifrN>Q2%RT6(AUKC-cBG`EJzd!1b;mOXE?GHVLAXm__h1v}OlK?gI{7*PLEY@O+ z_&GYEP2oSgqIg6SBiz}U_6YO;1v+Fyg(p_wMfp4dCxB+vbI@0T>OIiPPR+0fzFG=J z00B1{vNkvVa0}~@a=<(DH@`its8)FJ6)LU!E)wl*$tUdts!E7vyw~q4JU}r|#^O~1 zH!97@7_nX(&tYyOKd-}3Ru+<7%?_+8<*YJUD6jzKV+~6?tag-Pd^5`q3OOY2Gn)%5 z;&16=yl?{)3_(g!Pny|OEuNE^&D%lg^aP>z^}SHWHX!+*48BI{cw(X17|^J+E$|Ow zoyAk(H;Xr#`D=1#)7nNP|H2JU>jKI{cs`iwyf)x9J$eR0_2Fp{io-?%2*&%tB34S{ z6J+-y1xfOwCVZ@UJ}bg~4Spn_ID;n-*B2WjqM|i42~^zZz_+`B=L~>-kSUEEb_rIV zUJoJUe}0ex46h5FD7>~MhPM5(CaALR^E@tMy=yvNT-`X#Q18+%n;|n8bPpeiV_ftv zBh{8DnVw8)_JTqjAo9W8Dgec0Ac%!XD6SfD2U^G%A+Kx~^)zzjTFsJ=Al9N^9>S8H zJuu=`?_t2I_lx9yv50dT^Mtc`CC(S6`NJEVWYzol^0YpdS?(gXC- zxkD>$t3n$x3p4+@fHe|j$E+mf)Mn~Tpact{=)HkniC!HIZ{-A0kstp7PQi>m4*v3?b_ z7%i4`Kn2#bG>p?Z#lkHW7H00{pJ;P;n+fQ<8ve1@w`7&PvRH0s>WM+v+t5cye5xlJ z@l`vaGnhyk4Fwie!XONw}Goz?3y)I!@rs>o{ zk*J?(BOD8LKbV+OH6yG{JdAiWQOKs4AE40zpe+-a-D+LHybzVmc$_L&ecmh4k*1F+ zuW&cEnf*FOMqMX*$)xW6ksMOd0Li|csP*15D2z(N2a;E>W>K7S+>zhlA*7ilvS?nA z;;$)8Q)91hVG7FS_(GY~1rq!&z-VJfYG=sBK*i)^HKZFtZwlG43I7&TO2jeb&kIHOe z?tl|Qr;BiW?=F|z9VB;0$z6eB*|Akf@K^@gc z5`hZM@@x4!p}N`3^N3gu+#e49;$ECWFW18nLx%_yaOn0Yn&h(Z9ZWePbnuuzTx{e@ zr6;{`u+_C<<@lsS>v$)e{Xwn6=3+r+7Vw7tIFy_Z>5CRJ_{Kkn_t+_% zPC&ElpPhkn6sQhec&CC=Lzn*B zC^8mW1HvF5{Cp`Yj|Gv{y(!&=sk_o%{TX_vbU4B@)Ikk;Qnaij_h;RhB%OJkw_b$T z59I7=!O*vZ?^Gu4M9WF|O~!8ub(^C=g4KJ52I|mm7zXuINl(h%C*|(fX)NU)pxB2{ z!V;E)(k#x!!{MVe>Vl2v>qdz|a-l1fKQ4kL@f{3V0rFOl^YMDp5))|&C|30N8PmH- zS^H7$)EqL~$xJ}=XR@ zpQfE!&&(P=Bc**WAx~&&%jOtu+A?4$|D!$jx#vICqI9*rbhQJ#CnO+x#1SU_vWN3w znX^S75HBL)A`q?;++A1lrG(;3?qkH7_p`<%s%QMr6-}gse*jj)`NVUcAC53!Nmro_ zg`Nf!hC&Drwtq$`nrM3ozsuyfFAs8ENj4cEM3FllGKl}@50G>7K z-MYWU>?Q^8!*hhG1>jkY3xCcmdkPkji{*P!YJ1CsJiqD+()Ak@@iGTr>lcGxEUa@4 zku$9Ea|~T#GO4p|45ff=22#LwFbM*700~S!1}s##-jvdREyly!K-gw6ChhTjtDdy7 zMp{`btsKJw?)5mG-b-Y8Ks%fE5xwwn2lL^)5JyAlR?=NTR&BCSGVU`koAs}#bGyT0 zBitzKeOr`lG?I-ErIoO7;Q0V*bE^wLg4=CJEMH`uCLaDk3aH;CxBf&1^)3GaiLY0 z@yV#`lwcf=Xftv=S&q6D1((29{6VTw%aF;d=QD&^pO`OZ<^2s|@a>O6{cWnezY{O2 z$j;gxxypS+4=eI;=mD3kTgjtGtsqTXK`JGbSs;EWVxmE94;NMV*JIu%v7t2QEA*FH z^b@p%!qQ&hA=!>BcWbd2bf^JBaiLAj>U?sZO|0Y;RVde%KJ{kD#k(U zqWMui=c9*dv5pEKJAe$pQ|m@Eu>QSa8I8s-s$)7cz1_#B-N)(XgXI46uBZBLdC)}3ZTP5t=XYwQF=Br&%K0DnRL?% z*JoLi-^JP5QS6n@NR8(TjZFF*|LaPBgG+a_0&(VV+9C{p&;D5>hne%qGvo=m1Rg^# zL;v>0q3foPY3tbsS8@G7ocX~tZH>+kPRXP;_t47bPcP^JL5qZoYk=vQ^H81ZyhBiN zJ%p7Ix(odZn+Z;sGm94hzTyu69RT1@eao5&L`a(MTQabvIA`TUz zRPQ2kGhf0=6u$mUYnUh{=W9mB_j8Yj@o;U+?23I<^`lufu1znVaE=fU`rJyTP&{c|l zFc@E+;ZJ#Pj2pYOge7;oW06$Zq$#$-kiu-Cej_<6{}rW{jU36-#vYi>rYq8>s}$G$ z4kkj?l#M;Wn!Co$)9iCam^un}9B{-WzqubvO%Xc%e>9QbU!`JhBo)r8z_>9)2gIs9LCKpI3$U@1_pC5rT#Ff{$|q2B)g!Al3{B+z zsd_rPUO0rKJ^saT|Jf10Vv0Q=$Jdqt@p<|;Dti7JW_PB#3N}=At|~-1e`{Qaf-E*2 zsk{d?+eN2m`ZVm`AmB4&K7K(4pL0#HwxVqNBGV|`&8gO+dWCoX#BvcEWdZ5ih+F~P z77Gf>eBB$*D*G|I;6uQ$qi7ilb*+LWm@(pA2WYthiE}Uwrzm5}Pv{6|A7GZvx67nx zbwP&nk=&lZ8G_Wmhd2A+wd-wU(Q5;c}(Har{nTI*z@=;3VDFLfG&rKX|JYtf5o`Y%{tcBj=V0I0nZ+w)7iqTOdd!=Y~7g)u(4`E5NTT{B%9QqC>Xrm7ngzJWuvW`H0S z_og_RT6BVJ2YO7FCE6VF|zWlcLi@b zdPZGN^R61Gc?>CFZNLz$Z~N0Y)u8#5#b^V3F0@_)@Rnbdhis)@%ty;HWGXUvPAmRg z+TZ8#lKP8FN@o8;eGY@P>le3Eu`P$+ zD$<$c@^Bu&FYzs)>;fyB5PTr=IjbANgg%mIOLeLM`w%*m-zK8|;RRCx9|Jw$pdwgE zAiJH-kj3G8r{Bv%rO&63e3mV27bHPf?z|rfdFFXw@ zRlt-S$s&N!#Y_eJe9R4Zgp#v)@^r4=;V6TdK{^AlPNN4mz{;2mw+fcaa<#j{Y5Fhb zImIVDK&JHa0(9kdHd*e7VeWG?V}`~a2bpe*p3m!HY5-ZhY>n59cWt?H&6#6B^v?S}@3w&meCPHabX9 zT|%jyuGGdJD4=L6P|>4{;PuVGPJGS7lR4)X3zIVL+2Wik6AQc6GPk1TIiQ+b&i z>NSgciqP{|o+w?sCtbWx;pL25#E#}=xuhM*t?Y1wfHRGCP3k30^kq`AgN~H!h}Vc+ zHOSQKD4f4_0g!?e;~-OCignF&C6hg@Z{I4GB@_*JP=C9}Lj7X0kFWl{3>>t20MX4^ zc4yHVNIa^`yLcQd*%Ga0efbe{=s}nrGDEuS6VOpTPC~Q7PpH2O3Bd~X%;+R5L)!3D zXAx>x-GR(0=LmC=+Dy|b@Pt0dgIQ$UC%#?1_rLi_2yJ}>XJ64d-j6E94PHaeGr!0L z5YD+T-LO)n4rtAtbDUt?aVByp!avL4p@E#dCSmj=Q(uFy9kdd^RhZo|Oj2sd5Mv-5 z#9f6;@Q}NL%$E2f-n`a@tMLRUTKYSKqP-fTF;!zDkW{<44`;B4<1*}D<9F~y;`r>8 zk))TSbU zdF`I2D?ObfJ)Mhcy?fpU8kU*Oh(gJSejp|^F+)Y^TO;WkE@W9fMmyl)XW64q8)!PV zc?FgG7ij;;XH*(_6QiU~!`*)YWr7sYjp1wf>L#eE?Z8ZYtI26fi{a(*>^RAN>!B2g z<|$p`c?$<`V9vDHcbM}sWnW}FLR5n#`ia}F?Drq&b>C5JN%&CtNdhb-p@H=SjHC!$j^UrsD zb%8CM?LnDFumgk64)^L-&H>_5_?hWU%e)UDXj~S6bm{a?>hxaf^nrXf&O#}}I1)*yFW`t3*62RHiM1nu??@7|k;6p1gzA?hA!<$8zetzvh=60WdpClGeO!_+f z!5#K#3$zGwACP(0-!7qDCB2Vh}WjwDOBs{C#IfMx9%G-*I%+{ z!q&T30tNZzvW{az>T?o47lemYF>tj|e~FYm@9Ifr>5L_kYT{~K@r!S3-tcAQI?ph^ zmJL`aoi*AJpXsUl3!#5&C$X_9g?B%Sm#8=Y2qk1O^!D$i6WxF@ii9sL!ae|8_kf)I z_Z~-7fb1n&=&*zW-^ef|=BiDIv^SiEP_bzQLeIPl`a077@3;zL{|{;ZPtxq&2edJv zVYJN6pdqz-GzUX&jPg5&qax?^6#qaE58H#`sAjNeVnQC>mx$7|(b6=yob;Q38lAR< z36gpOc?}5wh>5U=qvNR*(_k2yHWQxG%xi#kq0?4D=qWk3?Qh^B8XD>}sIQ_F*>Rrc z^2|p}1a8FvX*yPvZoSqg>-E9N9OVY;Rv7&!`P_Vr*T_Ma0Jq}Ijqz;u9=I^dT01Z@ zqbXxcnB=v*zOUI)O4AxBUzrbPpstd~f_i2(TylC28WG3EI5SW?W<`_#!`;2>on*$+ z=Y7)W{p7!L3CdV6Z>z0b@!=1=#atRHbfND3j^VktdN7a!Me!gEna@-uDz$(cMSzKN z#^fDr?jR;?EUQDN0_lNo4Cv=tkjDBU;=7zIL@D!aiO8wkyjPUW|87W``OG+~3KxMh zL_Y6{B(--Hw=!sw0lE|}n~W+lZ&QluDS)d_E0`0=;H2r%M_nm5fDv)8Cig({H-+`V zGCn@i15e}8q#Z4hdfK*Eh~9sKJC3yOAa$nH$?MVGEU3o=do7sHq^D|hjG+QFRfBfa zei~1Cc@+;sXYV?Ep@T8md}T6Ty&jVUIgkpnV{FY`G3JqNOeu2WQH*%c0pys8Qy_%z zn$7YQ)$?r-C0Onvb@>23@f#isl~JR?ROF<_+oIR4WJ|~pi&D^M*Z7u*PKl^ueSV-L zJCC8b7XJERtQF$$bI1pk3tk`6okzMsW3s__QamklThW<>t3zCmXt# zyzXv=o$@4#*~IZIW;tPYHzeSFgjX%wc17ID!sB8{B#LK|&q1*0e;=WMy~cVun9XnG zh`_8oI;x=yL3G^Do(F{m7T}Xl7XF+U}y5cCZdz#lF9b6AGF4-68 zbQr@{AUrd|+U5ho5)DUp`2b-y&hG4&KsEQj#f4fwokzS<7c(re*ay>i+j2l-Er|JQ^kCSag@YaK`RN zeY<{@G&u2EU?>d#6^5To5L07&C$2Xpk?HQl>nvX@4`-rP9ZT9jLGd)A=5dA~SEIK! zMpq{yG}=j4*tC6>hpbM}aK`*Z``~mZ^0phU9lWL?9o~7glnRGbBapKu<_w+`jNqNA z%nNu%-yHcG6c$mlrPfCfwKTVquooS!IYgj9#2M{=5Gy3`xTj;zmUx>7*K;W*j5L?gI~z} zvv^w?(h%tYn8`$ty8Tg%Q1j6vkl%A8r94B73+aZ7Os&GkV4%RDxAq(>sVL8_7CF98 zrWPtTnXvhO6IHlutYZXw`VSyJv)@3;`){}?<9S*w%hsCSykf@f_I ziz3q3P5*&X@}kmyT)5^kaw@(z7oq~MFeYJA$811XYHOj~cak^La)W=7Mw!nbz;PktyXaC`65#1^YoJd7W~=h`*%5(RwRl z)$6t(`h!ApkUR4OHy<;ODYCrMV@S(-egX~P1U(!ChuJrPdnqysDRkmXwBr8<#d=)< zZj|OOgR|lOtd%5F>?L2kTXcvLmWA`EckaVgC*9@&IPn59p6$5xee8i-gCc|&uEwqF z?_U*6)N5b-B#G6pC^5wcqtxpt)3_5a-oUw73+g^=F@`*7zB`_UUU0&w1U|*@FA9CT z0GJ_>_`vpHR|%)tpP~2+DzpX9&hWdi$d>~;k#*Vi{~ax;l$J*D+={Iw@AX{(VO%&% z@t1&8tM{Tla})SO*C7EM>;b5T%AsL0L_F0n>Wx117|qlS$8QA1bcjQ_=~r;x_SuNJ z15gIXdFhU7)^{72VmpBdpk*zX%& zyKW)ZPE1-SlpmAS)C#uL@HdC}6DAGewfKob=z3sU@*eJhal$0MZEx9|<&ga)IgNu0 z&942r0fQ+^kMqv!v9+aCK-yGyBQfQ(nDRwT`3g2Rs=x(-y~;j6M@G$*LWcFA1~<{N zQ!SjgvjdreH~5mD$m{VSg{TY@mEoc?f|3`WM4oeZD81PrY*a0=n zl3D*uWs8P@BrJ;>CmXb){5i82Ggph{$l`mg9;0IGlT*1=Q6HpU=V9MrOs=nnAXW$P zhFgRMOQiaqV(AZ;L+@A~(Tr^?2&{-+-(!Ea6Ea`rCWyBI(CSL%&( zen%XQA{vPMsprrbVvBH}dt)$X`Ey@j%v0_#KYG0uUJaG?4A^FhXD~b=?3FKK%9)Aas^~zY^@QUwHI}c^}(6LHzvxQwlxGqs2;XcSYm`+em@DY7LHR< zga4K0vP(849xVo%&i|znlRjys5^2xhcro>^SYU|YAaUvHNysVc|=3h$-NG)o`AWCY0Wgj^wDHh ze*@lz_OXPq*o2epY&TrTCyuG=XGpW%fFe+6*vJ<6HvidVBlF&){s;mSq&+NXu|qT) zB|~|^^VMd!tQ$CmqNC@b>M;W-b$T=|?!=RG_k{m--D7$RPKQSZkY{>#Zsp5T%dCTus#n&(qL#9I||8inbDUME`RLPLKS1f>=~kk4n$q zv2n|qqvTq;ffrru;kL3ZP*^Hy$3l7{<_r*X1|m*FC5A(+7)6PvWK?~i8!6pg0Ulo7 zAcE6rg!NLyZb}KpDkr52bXEX#Ae8qsfhftX1!6h|+k!!eoXPIjd->xRK?n}ItqWo|L^_H{rHFK*@OwejicRCwgD7y7XHk7H$`g2k~4LNTk#gj*;_GqN# zq$x-p9+hxcV!t_}j>TW7d9JZ+;7x98CK-v;9R2p^yK|AD5QP?&7L*xz4P}b$3Zyn< z-SIiDn_Og0#qE8V5qvTh)S#+SZ3l34aIe>pCymM^?csL{@#|Xg>pD!p0)G>5lVBks zGRxm5wT2SUuh^?I<9nj@w|-=O(^Lf8X=G<2IRNjy+2`dj@6;5Cr3z2xvSr z6p`E65dd?MRVT7p*|y7)kswPPJZ%(uHqYjZxkgWQNKL>6uqAhNo$I!h1XWu4W?($FQ6A(m-ZVQv4-2- zVmL@zPNNSFN8MIs9!Oo9u0(PBDHM8_hc;*mm3kpq*;caNZ2Vtw--ahqJO&1OC{+5x zlS9C74l;uH23&79?NyG60*^Qe3G+^(pCkhiQY|)9m z2dSu{6LQ$N^wf_^@DhdCV-7ahf_xOY@K4!<#!e~08Sg$SH^yPDtcJJg+)>yXJ<>U- zm(H(|vDmdk?Aj@I?Q#~oc0=cBb*yaOm@*qNvfzmiXkr6x;II&VtPv?3V(;*7)TiD@ zG^?610$tMHxFw4fINFG^jAFNK72_zp7?MFL1+LESFa&B`Q!oeBmIe6OEc=OAgRM$F zp``jiJl=-qPUg%x(7w8_M?mQfi}Bcfz+Vc{F-mldh8wzTJPxVlr6^?eo~Z^^-`S`p zGD?f0UA~dh2|l^>-Sx`bg%1ndn5r;{1o^WAQXFad4S14j2l&%GaYYNTcI?!c8{W+@ zlKwkI{mK0BsHQXy0(3B8XPG()@Uui3lE=HZE{d$Tjlr#541<`*xDKey+n9kl*|Y?m z%CA0vY<0(|y{a0o0?SHq>u?rF6+QsW5a}UuCit;O@GT9~$o=wMS#<3OxShNSz!S9u zK4IcOEe~j?2m3+8pu=QFp-J}))NGvpHHg zQfo??zh1=aPBlzOX1cdS**AB{{#TY$#<%~5BTK&`%6xbT&;K?hmn%azjv*oU8Da&Bg)m@mnw2p#+hN(5x@Fjd! z?D9}4o4_ppK|fiP*^TlY&`$HPxaB4l)bG?>uF>hTHLCYG7LEc1>rC)Y-ax_jrF^25J;f7G3xi%l zzMy!9-*d_}-^iu<*6qNXv?-^Mwq!3d67@S94TaEMh<$ee6$bA+fix$_8yTDmJ|K19 zHqXewl5_T~O2K{QF&0wh|6Ggf$O#}`rJfxqX~r(xChuUWWKFw!0B>(sCgd^{i;&^P zAJ7wkzt+KvXnZL9AGMiz9WPy8oP}Otnoy>bW_B@;_%OStQWUiwrDH?PUf(hyXK^|V z5g{8Kc$nijxf_l@bMrr8bF{wIp6ASkBW>WXKH@t3g{HEe!k&eqOIdIVti$^lr3Sf)>7@iu1CAf!n%2BPg_^C_e11#Xk??gXtn>JcQ+umiV_p0A(t zF3JcXg{Q8uczBLAk&PUvDiC4}Ip_i@+pRNlhu={6 z{<--YUmoVprS+ve?D%`3-<$==(3IxR_vhlD6+tb zdJi6fN(h^N?R_ghF?N0LkG zG2D4{h}1{KYc=N(?z)}h5T8Rwvz*OFT7M}Iia2e$UxpD;B;ltXpnBVS;EnYg` zbvH8bf`S(%D0`t`k{t*`k`8%N;&2wp<-`;sRofoWf1}%3I6^lUS$~7Ldv5|uzuPlV zrce2DG~fwuBM+Is&(&N)8vX7b=6Le2eW|3&aj6ff?fM~_updSFEy1u1PQwnn4O8xT zvjd1^MsaSwY+H=;^~h@A4ynfr7&-Z%BF7hFkOAuro3^I7HJ)h72P5seg-2)f5>_XS z@M2MN&Jl_}4_j+chTkc571(--tex8EdmcHO?FbXcTt&Wp5!5W0xnHke1CeT{K=L&A z7!^$T7k2?KS>|SU6AB9ZaO<{@DNB*T0zaS4@+q~rfh#-eO!aL{12ara0ov5&c&y;bk5QcjXPpo?7Nk$uf zofP~!=?`2>V=m!$nPTVQ3#5fXl(jh;Uzr!8mwec?F-A_8N(qY|=g#;26=Edgy10J$ zVv?5rOO8H_3SI2$Bh`JBk!DkBCi#OAz(AG#jy=A} z^cqjc7~k1=nEK=8{SAa^q4?lr? z@3VONh0+U;p!R2hWL;v8ImI$uuoC%N`gTO>HWsQU@z_}0-`c{fQrjG_HR(B^4cuQeKp*=;ol}8Hw0+MI8sN?n&BptvV?B@y)b?LTq!r`MKo}HI zvhh813$b)FDb<|$&Wv&0klJoM&f{qJ3y-#c5sUgP>`AjmuPx|bc@zL>39}{FwCewG z=a@G0kkjK9BeBrXe~?z*uEF{p4{tvJH(PV0YTrq`Zd^~gz?cXde_Pgi>lRM~mN3MI zH)HgZbV@@`>1OPaMdf500@ z=fAJfSbo7gYUdyb_xu!ewP1fkyq|c0^_nsd<{%vt%XG8S<08(sczRurm_yX!{%d3M zN;o5lL8Hje{5x_aUnzvdQnSDbn|ZJuyZuQ^zlrDh!8fJ4ZPX&OH!3UHvl9!TeZ?Hi zS(l!?`t6r7wrhTlC#<^(lMu@HpOI7R<*E=9nnUX`DY+WPEa|2P|LbzISM~5d`zddB z{~n>fr3X<6kxGA1D}{%D$E~$%tsVw#LX^0R`pA00qY=2lrqz#Jc6P&f);;Io7_q;G z(%R~UIkpo|Ah*{a)rdpX6=CDYa-NcHjM0^|;UEd$KnCXmJR{`G$@-*tTKO1DkDHk?Wq5C^5eO0(?XKs#8+k5wiZE z)_2yubfcl@U=7?xQC=TVeh~Z!{LZl}+&(@tG>4>xT%^4}J|MDwBV_3Kl6;4EMSZ@r zKLgRbZG!(qQ;{|rdfw}J9)0^5An{UT;*4I`1QAG>>0=|m)@CcQ3Xhym_ zYhWz~hz+x1wjsoxe03wB)cO{fE#NjNgxoIpbw!kqlr>oJzJ`6lfqeKtorYXSownx~ z=?5QQ$Mr9Nf^<|iH3%zxbSmt41sG~mxbtCwemjp z+rn4|h>G275ft4ja5wi;xrpQMK|^AA0vk}r9z8GDL0AzFNg0-n*%o7A@{<9E2E<`J zH}Ab>q@j57i+C~{k9-t!!M{6GMgu($pd5JISaxAC0i`ya2^5lgx(gS1a29N^L*Nem z9HgsD@GQ`FD^mBSER)s2TfVq_71a%W++G#vOB;ylN}P=X?|D`IZ?m z>%?HL*YTQBeF&~WuQT6+f$*(w%J8o@YqH&t1{-D`oU#B8tTFXRa%r={bv^vcQeTzO= z08CfYA7pC*?{_tBjD{*wx&WC6!#5dY3ct=W zVho%dY(_=-kfq4xc{K3K2o!TX7zF36=mupDbVgtEyCtAR-3W5oGM{VB--I;$_A8{_ zjDF%eoEKAAhj?U)ih?U-o=4s8U_g-V35LV0piC^0_mC*O#}ZXo8;hMre8OHSJh}$wGX?5QQc*TUIw1)g~DTfS18zqVEjdIu&Oo- zvw;0Gj*i3|-;7+G-*-6W%N~v=8QkK2RvgDc0$GQ!>Iw#<|2B}Y#f`R0b*CuU-y99P zZl%z%gE3xV8=GO#M%(iFL)C6doXu$1?)d=bllTu2w@yVHsriyxyj=pt4~AxPXgv%0 z+(w*$+F}d5I=8KOxl}C6~{$AgR#(bJ_WJY?6*u z#Pe$Mw;jdxnssmZgUFE#>hTcZkCbV4dL?aKdbX~W>P}O}0bbjkomyd|8PTr_*MU12 z7{W8VpqUgcsfX%8L>r^Q7f*UFCcVH=EFKPOCeNR#A^RC0_=v#g<{h~GaHas4Whk98 zbtFpvxsx(;AWo3pwxs@3hXFA}{lpZe&-$-`n|II2_T^}1DIC@^*W>6Kf>il!vVOi2 z?RTQ!u8UMqdxQm0UifJ##&9kmY|3W*wou{@J#xrWX5skH@t>DT3zHl*#3hLQkN{8ROV8| z`ZH*=b%jt2Ca-kFgBi4f7gAcpM&xOEDHW;5oGI|%zm`&Vx})}MRdA&Bh(Xx%w~;s> z@g7wQ2d)qAQ>fJ-$lz4-ufk3;TA0HV_(xAhln57^!CJ z2qRH+uAZTR1I0Dij_QBijL4@pparzC)rMknf+Qv<0z223Aa`o%8|1iMM>$KG4E#Kh z`e!Z0b7kmKlP0`|tx#j{&NBYdHGpZ73k6lP_J`^LC12z1B(?8Y+}8Gixu>16k)i0|ZgPKJ%oZ@A2R%Xv%S|GWupNOgf`g2;>?FlPz)vU*dF8dh; zpuZ(ddLkP-iZjYY@-*DShj=mBjPHuhF6VA^QmvOd(HL7eFEe~aO^q}0s%iVbfkiaW zSmdEPvJbJjaS@qcfpIE>#!IWtxb?C48?@aH^6~B|iI;Dv-R!e?T6SR_FufDmt(?eZ zM;ylLjXb5rtmZ_o)WdzjOqRFFT__@!dE2~h1LQMjx~th_;qx`hLZo+H>`Do<)9WCedT%EiF0E~bb z>2)5ChK6sU&;@bmTtGI(>|`0{tP*IhG365$aREaf{wID{$+}M_H|n|=o=aUJ{&iFH zhrTV6hel|R7zt*aj&z7D|{bbss#5R|2~=f*z6tq==a;>AeE8R&Z!NGctHRAqY2&X zp%U*xOGJtbg^9rtMco<$f2uHsG+p+tfRC5cA<$~_9Q_XfQhTn8LM)9JOB28i8nD_M zNdp(+w}?_Rm|nfzne1!!@RnqMX&ma+dW1@1{9B4}IEJ^`_bFl#^N_82Qp&RHxVZWo zRJu3e;(Z1=Cw@l>&4ACGx<){Df_^1_Q;2(s;$9NyhO>ZJa(eX;P#<3Z6ox%X1vA0< zyeZ8DOCB))0KmiX#&M9LdR)m%6u5ah6c;4pI#4HT=J9Zho(!iDpbI8GZOOjBf@3F0 zb(6?S$E2)71@n&XPHXib;oD=kB)-{EW=aLtL&?5cOqzY0i86 z{voyDe$aQ?Q&4JNvPUf0ONH*qn7JYoEpqm3UV!%V5ns-kTzkyqmUT}+I$V=z=##ei zI{!ejx~Rir$Nu+0`S}_xm&8Y7@~dQVHqQC0A+wQY*pX9zupmHq$$jAn@sSxt|6MG@ z&@tMU#cVLHBAGX_fW4_M^%!HBGS zEkPm2JzD{o*tS$}n8|U;4n*p`Zh|bH9KpJ3cZGZIe)1Zy2uL&hN1f+f2ifn~W)f4L zPU$}k++6?CNJ6)cT1}mW4%Qn14_-`jSWnTjxxPW%ztq4D@EMWTChI@eEpGoB^l1eq zPNn&A0HAa6HWJ(2#dZ&|-BWD$65F+Kcfw?uMnho@3LtWd@nn~xQ=v1RY1dF;;3i}Z zbr}C1@?&M(c@ylU1_n@sQ)X`bPnA;TGzLT=#Om(*V*!?$7u76M_BGYjei5#_Oe=!i*tIW+ zP#NBWdXF{~@>6k~H;JhFm}sdYm&O}eAZN^m3ML-hKkmhi*BwSR4jyUTwCBng+(hmL zfdcc=KWSuf0~v9BT^^h@v5<`5>H#!%?;)tG8II4)ZUV@QC(V-^0|l=wf(er|d6-Q0PZgkJA4!Vi(D^1OjD%;3|qDF%F0r~(oN)%@KsRE@-h!3k~!ALiJvWxtF~2EDkd3?grVYF87aE$(cI!SE16hqR)(9GmdB!)@apj7TozH&OseCV66Q{qCsEVo*?1ml0L>Mt1K}qq`LqVZ;R!Jm z_HS)0UWXsc=5CF=;)X8>oB)-j6eAf}1K`-~2`EP10J2)L6RP2D(SRIaNFkfwpx)Dzq)!NE^;se6L1SAE=|y&vPavCpoAE$aj<3pL9HgfnNjJZ{LY$u= z&d(I*XHmIhAOIrpbQMpgauU^iypK}qk7p%e=Y^0AOR&jhtgt{GVUvnM?5EiMf%he! zFJhcJ4CC;RP6jM%)y1BX#lEFtA6(AAkH!ETG@{DT=@2qI-+j$Bnsh`*JuHndu@x1J z|6Eo$;QL@WL9Sa9j-UI8QXMXnIkS087iUK>^l8w0ruiS=&8i|+>79!@Ot%&)Tw7yJVYI{b))zNSo zJe8>ww@}cYP_%Awxdo=jWIjzCUW|(n7it@UlVrJ}KY7pmOBRp)8&SeL>;TfvwWKUL zjiMQkD=@Elp)JvJjq3-c(`4CLrZK~K>fe+PG zl5EifM&g^X9r>%%QAkqM>)wM;NtyNp*N%#b47$$$1_4M5AqoGz z5%-ow;Y<;LZb7B)d#5Qxmki{~G&+yj3=eF9{YXllXio_PnR46)qG_8Ke7dc{+t!ak zOi;Yr_- z=kd_1G1YAN&U;HLq*$2dtw)hsFUsI@KIfPREBn|G3ruzSA43>q8j6Tyg_Kqwev11dWAvn_jNm6UBrE-yuS>ukuFKk?Gyl_T_j!~W71M@WNm~44 z$pn05Ia!Lo1!l?d0?d1PP@wo|agt@|C?+;t6`QV!P1g}A`7B1FIdmYKpFAzqt)j#y zV^G#@QnUIZAyy>BiG+9qqoxX11Cao}#xsPaK#ARMVp#SjBLo8|R_S?1%KH=uoj&cv zAi1%a+l(R}aEA68YGbw%`E6e6g&KakX1HmsR`3>IyZV1-2s~HKo?pZ(uP#S{WWuuf zpe(Y8T9xaMbae*MOxiG5Y#4&r;^SmfTk`y64EEyWP$QI4b({!-D39D$_calzX66PW zwVts-Lvq)4(?fyJ!ZXO#^b7A$j;n%tf0>RPP*e@ATA#lmtj)&y@lioX$;#D1!lw4>NW2r zE_PH9+XffXLb98oH%(FZI>z(mzhgB26Soe8y|jEDc|eE*rl3f+N_3I;5-EW9AY^z>M5PO|kJbfU;J3-Xrc=Rq_I|(m+|G9%9l;VH`TiwUl z6gZQ1`)x@57kx4ki#|gqqV;8*SgF)Xb2h@_|MiQV0!yCD1~wFX9a@;uqJQCy`AR9e zXStqyAAUqd5Mu=vJd+V;&3f2B3ht@f40cxO<=0PESW_Qs_&)iG+}r(SC`t;Hc2`rQf zyZaRn6S_me!;~BLc7mZmZFksO_COrnYJA%zNWDh|BDMZnpl_ymAqLF9l6@~&`r&Bf z5sRre7B`~t_GywoB!tVj$X=X4Je@&ZHSJ(5I=Nlk6sfRIn5Y)b>)E$o8m@{OP0IjRPm>6_7ghQF7{Q2?(g{lwy_^ZoK?Nuf7pPQVKnih5O;(`$Ka2jG8W+ifrD`QrXL6^xMY}U{3lC zqNBWbJ;k?e`5W_|A=FOaA760e~o}kWVI#6jDatA-K(6>aVD8VNBUGT+!gi ztC**FRvzy3atdcYeH58b^rDPIjN9@jGiR+dpI#qfe$4b=gRc0uvq2^c#1Wr8O!hIM z9H$M)<+$q*i&jXZXeu}GrZz)QvGalU69Bv_a_{KRj+(m;KM$rMY64DK;o5uz1uq`Q zjc%?$eaGjJ^V}RoFs8kgR~;~D`|CWYIqlCGnn)!;SbiYqWN84kT>1|#Oz)D-(2>aC zrb}SCfTl-`2ez5WB1P-}K0==W%r!xde_bJ#D`?ew7I)@84uhzvInkrB`r_{7Ng zX(5Fv4gr*+-5g;wR_+!6a%;%fDB#1;yNBV!Ik5@TdND0JKrEN^Z7#N}w7-+V$XXLm zm(2__o?%|pLtswtDyxvUHQNfrS{0%CIgiQjC!R#($24SYIzHZ4(CA@|Zj_dnpmf52 z07O712-c$q@Vv(%=1rPhhe!m_Tr^A))4!5+_NN~>PB$B>#^-IQXk`QB^7xZ!3EdVb zsa%YJtpv-6?5vEL6jhFh=8$!+ZcL+7y%Q76oWmL zbd#w|;{nK3nbQ*Kr22_mb>zb@{K$he7?xn4hvTo!_mG9=x-`I5LAP1(O=9|j%z zpcr+zjfEu;ln6~lycv1fRHN(L51Bw{9qC% z|A`1X@!byt?AGqZZy#CjeZn=ml)u1x=bsq`c=(wrqD1*|QGSB_dQHGgCv`u9@yza@ z%qV$UHh4x|gQmRW=DM#zx4+zniXv}g$~|q36{e#rR(3@ zVR*X=#^WYEuG$D+5v-X|0W_R!B;eF_RO zUKc(9)m@`l$Ch~K(kNZOW}-)J!$*vtO)4(;>$m~eoOAkr`m-K^9kiu4WklAf-Ne6|>C6?{GJ4cDpI=@FNsh(Tu{K zS-Cms5ki~4r6`^5&aBj5e$cw!pdWF~OdQ*r z;`6+2yTdbx2YJ5$f`1Mds*1bF*)fgW0ye|869MjhZyW{u)SaV%oy`;miM~{`YzC^- zEuO3p7c}C6ySRYj<7yG|F9qU>=Qz3m-M5v>Cj#rs>Urdu*cth|+L!}uo7?q5^&XJD zmTttutbNS94t%Xa+Uz+nH{~TU__bWX%IF>|n3~dMw7>#9P$dpjivwdQy4_|;MILSX zBj`K)n1oN^Z726-nFd>4ZW&CPXdSF zxZS!tq^*7N>qk+QZ6q)1^s5n=n+b1t6HdIi7F8cOKm*JneUNnlWc`O5o;$tOV~5L^ z0R>^LE@Nt~O}pyh$GQDJ2u0Lk#oT!P<(TN`)6ApQT%zG6%wuWXdnydDCZepp*a#=~ z`&vk0$G3Vcxsv;owF=n~vSq=hcOlDOb4vs4kfwZ%fcc!$p`HAF&Yjaxtvh6tqSILl z)Nt6_Cco9aMtTr*^2QD*5SHSMPmTD~hV0(31%Y;8UrGGZo*!C(GA~>rnnz-3$~O-cVHS>f|8eshLox>q`rSq z#^4DUz@p2$xu4eeWiht77>gxyfx+UgW&6vdef3fy*7Or=`inIK$UEXKd^Sy^sDxYSQBv!} zFm>x*Hkp}n{U0P64t{u3Od)p5L2Pc8_3$t7|&hC7{fVQTkPj2+nI>0 zp~faA_y=0X1HSPxO_t|_pX(Uf9z)tIt2>kOoo_xvr(D)uG*lSzQNz`Vco$#$0!L+e zk<3JQeqM_HI_#w87xv;dI*WUevAG4lw74nuH%JwyKE{oGyC?rsg^Fs#=AjiU@LNgA zGdOndn3oYKrjC(RgrvZiN zk5hMBq;Y@!j!|FfO@RSF!vZsT03@=~*$b396%@Q2PHpsVW7Q{SD=Z-t46EQ36&;3O zIK@jDGS+)f?K^ynrXIOY{~L{jJz4?K@F)*K#Hs1ns6+cO3FRL`dD~iW*PL=jBbV2s z(HLtJ^8V5YIA{UvHs;~!Sm)JJ-F%7}rbLmSYeD3_mXkqo^zVq5MadJ8ws%{I)~x1{ z%|i*dD%~qcfE^%-BK7$yD4htK>7;vo6Dn zp+ShXM#{s?@@j%zd0aEDGg;vFD^jj_ppjGslLJXF z2BHrqJHvnBp&@u$#6cy2rrwQ14@Uctqx}m#B<-s&iAxhGv7ZLd_s*bfr&5%*&S6xc z4!>h08Y^*vi_Q$SKnu=gOj3EZY=`TFL7OEtWoH9Cq>t{@tfT(8B68 z;<3m(C-x>VQQp&8Jc$IoR-VhTEk5gV{xNZJA80p}eSPWHaBmQiMwBblgTVgMe zo2Ei;KOeWj$xATviMsvLa7tY3f+y~?5GJ>@1-?voe3*=LO79cA;wr*UAa(v1@oNkm z4eAb1X>9^mbb(Zvunz=UhJ+$RVF3V+pF9Ftt?KS#U@^cJMaII<1FXEUDfyJckot|S zcwsWS;P7Z5fVi%qAXlxMalBy6 zM#e`jOL% z2Q*?!BG!o8=MhF`o{dG}>_&+7#zQ}_e-2XZ`N{BxuyizjRkB!G4M@5CJDv|4mxgik z|COo+X2HxZrs5O(^~-GtpCaVC35Pju`55}xbYrovQtTTg_Kg<%s>Hr(v2P4q=~T!L zP%GIu4X|!Ab1AA*HOVqT+)4?Ks^ANrg?tC0&2n%K<-h2Gb_~{&=5QrDA@bVhCX1oV z#n2U`>wv@0!#h+F;_yxy+q5q>m++bQ0d#34q?)z|9dTLV4TNY+zS-!|7d!BNm%F1e zYZLt$fX1LVvl0Qf88CaCNWc*?L`a&S?t^K>cD^G4HP|G6!Am=nNT- z6UOyVai15=dt8TZ-bkGahv2~8<^B{yp+sRE%d6u4Z_@+I(u@_39d4?SHTaMNQdI(a zQ!j;d-}~_w<@6l|=(1|XsLpo#airQc;h@MCRvC$f)s*Xp6IkiXclg#}T;QP9%OjPw z<+ySC1rA3Q>_Vs0B?a)Se_N2`l7*VOIKKgL2{~xnr!eW*O3ilfM)r_G6<+IdC~`3? zW%PPMeK!xqbH`8j|F`k^WM0xcn&4oU4CXOgn9%F@^EAMN7DC2*%qM9o^?e9%XQ5={ z{U#K6_8#g}&ZCgC>u}*SoF)V*5U})JxLskvvB9{YQ=YmDo_u#2TJh>Phkqw32 zPKsH|mTj6%kUT`fYi1dLU110%mGs8Nk&QT;dWGU{zr%7Odot;IXwZx}hA5OBeehft zGzu>FkBQyK#qJZ7*pR3 zCC_Q+K=PK4eg}=%0FPDtsPEdxz>bq_w;;RKn|(+%^Y38IhflP`b>Azz@3|zL!`9*r znCS&mBOL$Nqt5U21HN?_$mFpdPb0N|%s5EZ^%@FmzAQuxqGCgeS+D`DXa0ts7+-G( ztSqQQWwT}Aw9nLaa1shsZ(lBTpfcO0+>ZYlqlWtV3|aD)BgrR>ZjZd%YN+Fat!UT2 z1$Ed2-D%k_l*)f$$g;Nz;&PYu41K_oT}-3dG@-mF_wYE%2`5C-ppFz%n2d|*>0~?k zEuIIr2}Ihx^I_Bk&m*Hcvm#lL7ld4?4d=0NCfo54dhPHIEDXkQA)_>3tCP?(+5-!> zOB_l%-V#j#oj)zsV_B85!bF&MVPuWGZ61OymM!<MP4S!AJF_Z?~Q(iTWVpM`PRjK@FWrhIZ&7Bq*2vQAm}c-YVE zv_>iGo!>Z*?IauIiJ1xDmu8%XTZN_kbfWDE^dh7I`9;9SRDy9It54Y-qQR?%L1I@k zb{^)W6=h=TTw{0@xNT}Ki?sFtfF6vy2F)2NJ43$55j3GeFad{HA9?v<9g|~%%JoO0gxCNM38o>kD-|RuYs700hEiYCPKhSGG`8>G$d@i256-HZ#mtZl+lAcC0_@2&M9kd2d&H zc0flEGJ4e(5D2EA2|F{(nDWUGY3kNPNbN6tLTTkJHOj$awb-^;PQyxE#tSZB{Sid6 z3UAD+8A;vnE5~6%1!}}`!gC7WV+zcZoLPePoEm%@vwLeULJkjtXXNAQhO&h?oBb!c*(42Z+0rYoRZj-ce0rDRoLrLP6A?%J|f@(><=d=J2dlXV?*dx5XwU25R z1u>Y9Bzx%rGsfy7##?@;4== zE@nUr9hQiD|KXIjVK=A+wa-C?XtW1&YrTNS!GAd3 zM>aCT+fH*R&(jY~^>-$stS>OSx}Gfx1pTNNCbU?pF#*~YExt}GDD0+z?|Bv3faz>YR+4tlpRMunroNiW^@K4RpRvQsg`AAJTwzWLvcukDZ*GBUMkH z#v0V%Ev>#`-9uReZ&Ihpa(%d4!JMKN_ZO9lx+()vHh?q^v0QHsB_LaFRVLDExS0W_ zkXtB(-Ao8IVy2}7hA41TA|4MbPJ)zhT*FcbIvrKUc%nNv2dL+=8F`P~DA#=kA=4hl z1xDiM*W%|l;^((iq&|miU2Cx9WXFY6Gr$^z&^xNJsKMi$MdnCLGdlrlH;{7gRouA@ zXByDC{5tH|ReQ#Auw8A@3Os7--b$)_MCrW`<3<~?4^g&l#UvaZ>4tmCg3n75_3rxi z^r6yH8#LFnElt=6?#gT?B`BC4EsJ9=y)v*Dq?OLgT`|0oM~fLF_pPRsMJz?TIv6HV zQ1{o5(+-kF7cdLiNk7h!)N8&o0dIMM9WelkyT$`}!@Mm3Y+(?3h4mosDeurg{9hoY zrHxgj`j@R9!K`1m#p8bS7a~n)w+}D3j-aeM4Q^wr-s5(`U~=^^m4(VrsQgLu{sE3k z29MearMke`-{lBENiK!F#d#0htnccA0*j2On?2Jb&KJnWc_DWvDR>oVQjfl!fxA3y zbl6k0QhSImt4LG{QB^0ZF+h8#7+NE~>2vG>Dc3mKqE9y*fxoe)#N~a_o8U%i;9HW) zKcb1F7LR*B<7HI1_zc_;T*X)SIPnLFUE3+Vh*a7k?B51# zN1chV$7ux)h=qN+fw0dY-`p~AM_%HKmLhUmqlWxa>Z@CYQtA7Hk>-Cm4dkMI+Djo; z<9v~Pdi;Z@z5}2w@@))=r)I~%jCN_nWLFc*GX84S1?3M|w7zc0_cl2!A#&Vz3Oq>z zQu$tFqrHs9Ow+!0p!|6jc$;=(Fw)%HHt4xq_lt`9#v&@3JemIPy9n&qsAI@Iel8_z zWDsuFee(54L)9b>(B-DiM_FAbXfPa6D-;TG#D&y%Kg!_dT{i4QjOL^0L`2dj)R1?K zf{V=IVJ}O$6mHq1zYkEp-d|U@3AaGus8S1|9y(IgtHjv%aKwf$tl;Xx_4`&dFx;J& zxU!-R(m=xy)MmefLW-OKTRK?d1`a&UZY{%>GU*w4_8#0i{`W`9D@r*@OPb5e(1z!l zKw0!(1rjT_C3dcHsqdr+>U)Mo;`UEh^9I+t%Vyl9M(fGLG#h3O?_Z`YPpJM&f8Rqu zW;Oth+m3~!_5n0zk7S`ti@{+?-OkR^o2nR?h-~nVmLrUfjEwN3paXLO#9F@#P%xO- z(S%~+d{Nu9K9uo@$&?&ZCS5;S;Rko;iRVlVlAvR`zqi=mN9^xQ5xQZ>o%4vCchwr= zyM!D-iQ9E3Sh(>6AkzpIu4Q9*uD$Y`;q0CQ##rN}`;`;$MK;Wne8!xUyTaAluIYMB z&_L}}RM(`Iv?)1;V#;{~G35euqI79h7@wR!>!E1>$ocp*oA*n8Yz|U5xQ$^TdCwn4 zfFe;ZhtlgonM-=Q5$pHqCN$i73RWD+4LqpJF*eC|-JF7IT(7`>-zxxJ8Pp25sepTU zAJ)y{Ei^17Mb=`-!fF*Fuq8wRn%-|%1{?RVJ9@W*DDx~61n<@(2u>dIN4BfP7sF?kFn8?*?AgUhRl@HOo7T}%2}65a1cp#mO({t?0S60*ZsS+m2I67GLM&(R0~nL1r`S_-Lc^A*d@~}nm5)QG ze0t4Mh&O5CO}coKL5a6Y&|r29lTTGWY(R5aT}cP}3_0@xc|%~(16L@o^ejwTKt0s+ zpp*&?bJ?MhwIg%F))9jkYTUP!NTTx@ux0)5(EI2{>@hy4Sz>29q#IJ#>i0i(Ki7l3 zz{>_J)}bz!8x)$}8gCON-rw?{5K^0-!;rc?j5iUv9~zqg_ObI74#czQ&v%)CDf?|V zM&Ahv4x4a#4CFtIQlB$V-va!uAr;Hs3avo_^-238wFSF+8{bhjSBv-k-Zeq5JPg<@ z&C96+s4AaN`|;e`>3@!%-THKrMRZ$0N(q>MsoQ4!wory&1ajGL`W2~i+7bPXDQ{iJ zozo*;^dmm`A#J{VFFwgjL7}gh&J32hf{sK?pbF-1=nX>l0)jvyrjG6D_hgc~FU4_CG|G>wh0r(Juatd6# z4VeSKe3d&plG~kilE^J0&&)m`jpM5?q7&mCqPcx z=rb08)4*Q*-nNa!2F?E(bsf)4^ zBll6)7*k{=55m`0!s#Qt$IIXF#ABlu#OBTYv2REo#Z*3I6kHx+0&UuWz|GikNUEzQ z6=6$mI6?u!`~7;ko=}dU*cD7;<}{B*I{qW<1x(*kH^<2sZu^JKE~~!=qVKvwXW2@I z*t8u;2qPLCJrk9>IfNjC-&%N=MnEPVwR+}{K6UNf5KnEc|2T41RV1T_VV;rbRhSv2 zLZQouQf)Tl_U2CrQ8J5-2(<;{q4-oIrcEMEmA`Dzlp+thqLR!RdliOp&NQk=B`W!U zTzv&xR9n<9=ga_#7|2i}12aQ2bV+x&gd(B{Dq<%VDh6P8>$SVDo!9Q}?(Xip4)4Fl z`@Q%59zSP$&OWwy=GE1_^vJs#u9GB3_R2CQYT%fBP~xv>Qd1 z6Lp~2UME_PY{_RVbK_w1eKm4*ZUOBYQ8R-ay1*k+SQqS^l^)RV6s1I&lqlB=fj}>I z5L4^1%QhfXBzPjU`qcwrX#PkP)yamUpC;i|eKQ?~5kcTO-RlA<-pq3i2o<|)9=N`0 zNp?T84JCtFlEG}rU=Bc*WH6WPq&cuZWM}{l7@f*eaT4}4n6b{v9_`?$_1C!gcd zSVE~qd_!f}F`Rn|4=MNECI)+@q}ErMD-;S+PIT9G%^tQ*B;^Nk9Ml=r+nCQn=zHJ@ z0D&?UzcfnKxFRZf(^$@*V$v1$zWPlq$F)JMRm)h8wf0$r7iHWgeZ2%&fFbXZPWv%^0j98<~iJF~VU5yp3Q zMZ!~Ksk!2UsOLgKD>rlRBb$?15ew1n?EV2e>^x`|rpK)?U8WZ!P1#4yTGvA^uSaCz z&#bR{-zK!k%P0zCO@i2sB9~_3`}_(jIP?fDYjl=u);&YQAuZB4d7mJe0cz0<9R}4f zdpHVa!XxhaGvqmzOhrB{`*Rkd7+6dZ(^0Z8^&Dk1brNb{Q_lt+n3St#ae$vb0}b1C zl$gLoYu<$eq6nt_UwAYTz@Yr0U2&x#M1;nNThH!D6O^}HC?eO?oeVCov;s5{?#F>z za~DeF(oJjWW>e{=4Ya@_2BKPZGOs$f{!vhaSWa>KGr(}>oUBEhL(zSGDR`C?43{v$ zb6_U(^a`i|&y)JhC(oF5g7hO1TF32?F!O*V&$+rK-vkP>9*3yh7d);V`rbo0^l`RO zyPQlrGWp^*fkm9N?^D9~J=mjH7Qzejd5t4Y#0=v*~l^9FNSRP+w<`G+qc47rXQ z@GYtxr6x;g_l;iu4N<`$xv{D-d# zvt=d5@&f!?Q&zz*q*A!*bKRCVZr~*>eHGZUn8Vc=f~^Il{q1WAecl@wD?RB(8I`PT zr^B6bJKrP0k@wIs_TkJfTd|%kDR|LEPzv!^7^IoL*PXT5-PQt+lvC6(osIY8R)+Xy zvqh)A;t)5(5>^CwLH_@Ll3x=z$bdGwG{FVPPHDgmoj#rG($=$Q0g}>j#UB=0efF^o zcYJVkqdN+Vn_!K!<%7V#lIQ^d7Trt^MNkOR?U)n@+|CCZicSAfb9cYWtm`%++c}H~ zsKIRL*}VU%LK~ZTb?%^FHUVpl?ijBB+BfUg4gIhDR^Cn+efP{ z0j)&^+50h5?rJdwC^)WD5WXJ#NeSsJNxt|FzxQPS99JH+`^iVh6`|l1bUy%zV!Bd9 zx7&D_Qcj7#f8yamOUf#2hKj4(H3D_j5B|QG2(g`OhhF=ex`-ByD6;AZQqEgIaRZpK zJ~RctsWi3>=2hygBimKX8E1UlQilaQf&lW(X6z$C7dvwYur2C*6;PW9`xc3!rDPmQ z_799ZbnbS#*IoX&1-#6YQR0c-_2FszfD7E4Y`B&Vey6YjB~H2DeRsL_dMu>EWf zfJnf_!>5eSt9rozt{C8rpO0jCnAD?jRRCnT)`b05Y%C}3dkF5YtH~p}8`mwrWLU~w=jB*nxSOBa6h2uW0V|$l-1paH>J%~)8Zfr1E2z=oq@#h9 zc3w)mfZZvjT_pRM(OBh9zemE(0GLe86L|dh}@CvDlK`<2f>b9G+~JGgw74N<(Ru-eQPSWDU!?ep_A9C;X%x|-8OPRe$oKa zE8@%n z6B@uTZJ++&TjTm|WO&!9knK-~JdzDt^&nEz>r7FZjHpuI;+#nM=tw=5_Q4$= zyQfixtgeG2NF`(x;U|&A^u$VpnwXuiVFQ!5Z2{h4&)<$!m8|Ab`(rpw7OkgKC_Jr` z&|?*aceX@(swUw#nUZI|!u*+$<6b|}5sX=t6?jmgYcndbhQhI45NVTpiA{m)@8c$| zKymQw4&n$GD1>8a_@z_6FUwO0HetjTuW2IM;-;(@#jdM|_pE!30KhEXGrL`ICJZMT zR{kue2bzmA)&1{n7l}q0ucM6m%*be0|0|cy6-npXN#}~Cb0uUqcG-U-?1ThnDleX- zmR~jt?qm_eWVLNW9T#A=4N^rYQyuJ!)8+C$n6=tbq_JxEUsk_?xV8f}^0I_1Q8+&X zRzCVg)N4aNZO7mx?3;uOKtg3-Dq5R{!Lsm$sRXds5OPP~+znz&(esbOl;esgFpu4o zVxseLL0ZxI7&4m=yT*kp+lK3#=m}=v#cN(;`eXi@gpbLYjS+^ITtL&SJjkI?Y1l{# zikE^C^h~9oL@6kV+8=C(dg$hQ}_EQL_7Q4^eu#LqiG0dogpD zj^KBc5<7jz>J#oXqhxDGq{>{|9AR5uM%Q*b&%wDyE<~DnatxN^zh1C-U7rTrVs!+s zmej2&ZfFa8$noVl0ISyK=s>dz<6s^`@Rg|SClH*daVFD9oxI36Pf@qrvGJQef;QZ0$s+^I+BtNz-0;>QU0~ULS z^xPFVj<-4dK<8K$Wht;dgy9P*V|*a&Q|44!@N9Pa43icV-_H%-PCcMupN})K;;21^ z71heof}G30K%Wj|q&aras4?Vv3HRG7GNpsaeD>3_!GIDzEy~e{Jx+YY8ZHtW?tkM!`DSgH4(laJ1@id(046{~A){NB_4Y zY!^)DTU@Sh7jbW6%OK$pb|ul+;Y(1I-BG?B9%@hkK-vznfOdoNtDu&>cHpB!O%0|p zJVTDTiQqd^AcfvjRdohqw(j%32qo|k(Gm$=>aqwU^uuA4(q}bl3Acq@0-7Yapp;XW z2@u(E=!2|9BFDMBS7O}w;C$l)8d7o@ucj%U93Et~0x*fkM&r${CJ$lHqykKP$nB>{ zUf7)?W4j_URRW5U`WB zo2w`t-Xa~wxyvzQl<0vg(J&<7MWrSzhKLiG%=~8@gX~r1yNNd)H{ISB+&6LgTCd}P{ z3|Di=^=}t!fxt=M@ao`eIHhn6Lh~!eULkg7RJC@8k_Td&-uF-js6KT-MWhl#RCWGEg0~Q42^_62FI=^-Y zP}%^0)H4A}jE3Vkg8a?66ZxyUi&9-jh>L%dYCU{UqE5}kwhRm$yN-cuw^@g8LJ}$J zGH->hVNz-He7_V*IV5Nl#}uugL#*Nxd?rC1R%d%@9_)&ZZ^!94 zoyz|NfINhEjL#J`+E@O#Eul<$S#$lWH z;#pJ5+;rFo)_fS;j9R4iM`Mg!Aqoq_gTj|u|I!(-D308W!^?DBWN8e8!#aHIGJ`=< z=C&zNs%ifN2e_j3334s2gFb~?MPmPzq+rdIq*B-td$2OX2nsN|fTQccMe}%=f@ZHl zoe_&@=&lNsqoiZ3S{vZ|8!v$&Gw{vrGxe<8CUhp#e~L+0MI@AM zf)_Ymzt5jh^4Bm?Lg$26OK4dg3eJCq*-rS&h$61CkR*Mn0j{WI zhf!RmE7qhrC8h2+)EQCMGp26h3Lu8~zng(2bIRKUgHn6Yh2VpO7_O%HKsV_2S5!Kz zm}2Mt6!EnCK9x;oj!!8Eae_ZfBj_kWkq3X~kk4+IZWsV-26!XQVP>il^=6=PH*gr| zQGv69cbCZDt{V8O+3>a~&U*!w-rj^{-OHB&@bnUMF|^9`<@)tuQ4`Sl`Ez`8?mr4^ z9JRqJRXN`CoV1vUI?j}NG6~Y4tU7Cv)j6v-Cdtb~cNpC1FD75iBd`CNN%L{KMG)p) zgevm_Rp9jP4%}le^ZthzTH2eoLPA?5 z<>>zd;Sxa1a3gM+m6gtvM|!gc=-QVXI3GQ(FD)G^NK1zScQ;#iM1((WpMNMKG#3db zd6Gk$WH7=(2g$kPQw&(M0e&J*v%R}hz?n5@fom1eYTtJdsj1ufpnRVrlMrj3Xhji2 zYp_UilbUhg%6GskmFRH^zsqEC*0y z9FuUuFa>4y#R00IaHi(nE3toDc^*ZwkQ!bOd9dAjwGUn$FFnv<>Fh`yu2DNNFXd>C zQ*96#Zf)nttfi^Jpye_fz+$Y`OVax6lS?}?r5#z)j^@&iY#KIyB43uN%6pH+<{Avn zxIBS8JH8X8U%OyeFv%9>IjudTFSVbk$G3i(&+UxvdG%-Mul^V6@{$+ts6NbgqQT-dq5#>!_JG+%zvbr z`ziL=RsgBJrKl;l^C+Y+d&h{y=J0GokP4KM*;K(L+=LT8Ob;8 zkk-*yM||Y0?T;6)tE}H{lmab~lKO_hQb=JPGbyBv6w+1-DI$*+g<|a#oK&pVmp2sZ z!4c?imWjq+0CvWVbd16phx(f8TqYRG24CPixh`NG& zXvLGF@}FKus#}8(AZKMTc=d_rRAcdwd2US@jxdZUyJIqD)GUrcoX_stI7E;7`#BGq zM$Oxyxq=O*_GmX1YUA!9paSlVA@B7onP^U1z-Za-{$hkKOJc=*baKk*Iz|mJy>jTG zMO+HOjLle$-x`YP#6y@7$ZYfXarlj=sMa}5_AG`?WTibms;%tMUB}iiz|-;=jP|8` zdyiOir(A^gr*L%V5=bspCorO_nM*`-*dlrTH)!(1Kn$tpws4aNdNKlvF1-g#Q@u&2 zrtRl88N5m~t7Qx8vnio65f7K2kT!Z8c&l1i3fludZ24HkK7s0dVjef?6DWa_wFaOM zM1!S};0GU5k* zKgpv%6qVjBYeJo`3_`1%0;Y&q0OgzcSj5NrAUad}96F$)U0i+Y`D{L7U80#5_g#1s zVK^m#wQF;rk^HvDcXD$=#LG`;G9BAN=97?Cbf$LQ0PB|=vq2YvX6yv)P z>9U*c{gXg7E{W&Jb@dIzM#~5PiH)ld)tXSUa_EVU`W$4MCu_(N3`^J=zF{}SmWuu; zdi3@edjY$9^bw@(ITR><2Oi58uOhwQ=jJ?Vn#GizV+`<`U7u<0v~x+KNh9)z`ihs_ zm|XVxWwMt!Hf>swDD8cWhxY)voOF6CV5U~~kj;n^MkZcGTjxxs_?83kaPlG9y&P!3C&LiKsn7T#iRN^o zfuJYZ^hG4a42;DLZUzCD^<*VJ`VBfP3)XK$5&G+pef$AZE@XokNU5<+(w8i^+p;-# z`+YBjc9h*A9nAz~lIxu=sHk*Ig$RI|aJM~jUcW{8XZEAO=JwTsWE@A1M^0i`-C|oo zv2wgsBWXNT2Ll&6fhNkU(nq?HV@ERZu_)_>g>Cobs#qWGz4VjSlpUOw3DM;BlGjE` zeTW%^S0AZa%v%L(IyxZVG$K|1#B%C(wNWAs48W4DG2(+**8$s-QoC+ zpn=1=$tkP&rjg4ThK8P1({LNNBl(4O$6H|o5T0V=6iO7fap8)*-u$0!vy^N4L zw;74h=J9w&K(2F6ih8b;AFxYgRRG%<7I6-{KLZ12txdtRN7+cRu08oY9|pNq*P=6m zJ)8)B0yrBD?}VfK;TrEx*(QH1v!j)X!M9`kG*;a-D z1L-glqW7rNVQehDZIge_uP(of3+I}gX`hBj)!l3X@J|ftbsy>u| zI|Gy4>kcndhue?zA@s{^DrMR_{#y+NIfURSCfNscHIA7N zeMh?F8GH`*(v?z!03s;*%V&hyN^gW#$%A$MarpOxzLXn}CP=xs!?$rJ%%xx$-+(8m zolG{uC8V|MUan)KLBzV-2~ycwO4+xHm+y(EI8ciqf9o<-V;>BuDi#Q}90L9UBX+gt zf4OYO?gZoFd^rOjz1I9fSoq9Sto?+j;s|ou|6{B#IpLpy^%T_R<~a|s`R=uhp-peI zyv{~cBXgB0BMKyT{5mnXbue-nfn z@52bSeXl}N7vju>LB>K#)aR{jzN9f%txV2kFs}86meUSnnAMB=M~pO~Hjn3{wUy*# zutN;R{m`U945rP~%Z7r$N@HN+Z7z$h0O)BWP-tmgicaS)q%_DuSd%=H1%x$&>Od~1 zZZr_>sf%N~sCzJlRd|-#?{Yw*@)Py2Pe!zJg7`3O$QPmZ9c4Nv<9Igp_Tq)2o_>s*>!9CRlsr@MueXIacwUtREo|XBP|IL}omYs|J`O}rGSyq?3 zWLmQ3&+7nFF+#GIQQwt@ASKFFe1NO;+W1Gk!FF;2O4Cm20EeVX=`_x!-+x3zaiJ?h z`!e7|N#j7;LNhsTIeozur>|t%<=Y=Z$I}%&>bKhz^or@_ets}*EV|Ey2s9;h17uto zyNhw6F8nx3Jr*!oriI!6*!ZCOA;v?k!laVGYWRS zv%Sf~8S9}zs2IkFYZ2a67?+82DWP#K9xgajjd3Hyn>`=PNKIMqnHes-|F1u^R0dn4 z+dj=v;PQ^l@b{xgGe~nD1@~P?FaKzf4 z8210n>#F)|QLNkNBZh{ew3?*VlAg4>R$7DoZ3w0BS1FRXmOAyXKt6{6Ykk3tEpey( zE)(s|NZIrFe`ga8bzl8KL7+>w>Aa*{^yf96E%ds=QK?f9$qfV5))wW#ZgZLbWK zcs<&_e}NbEh9xLoJMyInZ?+qNevjJHF(u@$2~ATUwsPv@dKEv)MWr7 zT}HqzU9U0ZUI6uF(Sll1FrbxUL);&o68oDquwG&+xhY`l2ol5q1$lf-!dCX|{|h$# z50TdyrrSnFJjS*O={*EvlnYNsgWsX({s)*gAF*c-3UqSUZFTL(B{J!H3+Z~xIuvrw z90;;CdLZCb)*>?oiIq<;0J3Y+Yxw4f`x;+F#h6yIBj==hymH-~uK+04=u0&Ke(vX| zA}S<<>B;8pDZF|&9;)9^g6T^%NohXNP%f|MWrtPbP>#b08FbxESVZh_QIJdNPo(sx zpd>5$)e!Caa6i66068|3$(!XvHiR4VKUWmKReM4-C~6_ zJz7)n;f^T1)NlljALGMcve@dRGpQO3fLocp0+uzPl98egc!7wdo@kvgX*YH1))m@^ zaqekiEEM;jQcB;4+`m%E66FhCJQmuly`r@52p$fM5~PcXRAlf2BcX1`s+!SvGO0`pS|_|| zBoYn(31wH+L{YjkL%K5)SC?AKoAOL6%liMXZGP;IXb7#EfYm7EmpQoxHUXa;BFw>S z+EMt^ory}5GXE%46?epSJkgIvCNQ0^y?st5m#!R_Q=UI`YQ#Db6z|gmA6gxpj@O3s zssB`CV7rDis;wI9DK>d0TivjNZUK5zR%#%bx?*r3S`1kZ>R4#;om8`pU^w5MZ^4B- zdLwQ`30!~H`?Er=E^k0aO+SXM!HMH%H0twSv~63cN%#uS8#x%Ltf%pvzMYO+6-gUZg^O8{ zT$G+W36wwA7D`(EUNL?z594(fQZgK~l`?t)o?SngA@qir6Wwxw2@;dZ;0VK(14(;t z%I8?$ZP_AhP6a64QM|Jyg>>G4hn#`X&I{q?p_mJ)ELKUd6qOdOm{reC?is^{tYQp05c+t_*kuzts0M@W@g2H;zPEu+7oPk(~TS5(&E*(o^& z8_wAtyZFv z;}>8LHsUwmlgnB?3ehoL7@{TwGhKZ#9-d8S;niVuJwT&qoPY!lohhg(%hH%F%e5?L zqbOB>w*^RR+LG6rIs#OkjKU5x*o^dJdq}e%pwK>N@U+=p2E%=sLLoWdJ_Ci7z%?pcKbfEfG4~{e}*K$MV00vj{@Vg&dDwCckOV1%wiJdYP4cJ`+Q6eK~x4MNgnNk|@6rP)g!}Btz0WSs-2u=6NAeR@HK}iH1AJ~G(O&~b0BKcIkC`I@5N zL5Koz=yu@n0);3AK9&NXP{7v+v~2Jm&QSc|3c|s*-Jph6ObIkZS9?*+STr_x;t^4j zXTY3}JLNwbjX4PVYy!cp%d*+$=mR$9N0YXUT5t2mC(5 zr@(kH6~=nff*%wFCj*dsY{SJd2!}da)mJ#!+$RIeRKlx@EvhuzxK^16`7kn6f} z;FJbxDJ0=KS9cG;`($5ZiEs9=#)GqwaMiyNjv^w8*P`u{zfx7%QG6_J(pZ4QhV^k^ zdQ!BRz&|bSHiO=0=s*UxU3~EKCFR#yA`ai8GrxgsQ>(fGcxx>0Vm#u$%|#ibdTJ16 zhlL`va%P08y;lsgtmfo>GZt^fWp)THXti!C^P};S)_e=X!lx>+9#%wB23}O&-(|H` z`cmB-if(WZZCp`KMGFpsr?Y^fU&mjJR}?)aav2Wli89IiCP-_~rvWkt67;&^*PTNA zK0=owa||+Pj>Qk$(8UXYbxG;_7<-x)K^~-oCyuXylzq># z%B@AIU(*KUGm%q-?5&nT{S>#4Fe$A(XxO<$A~3k(f}!qo;0enftbC4h(IR#CL(j#- z)Z)ZUL_2Nig}as?a9JbnayylImYsq>TG*cbNAsOz^i&@vc!lLflw4^uhc zS_2W{QKwHGL|H=$3N?ed0@Fz>z_WrgO7LV?cw&{M*e*CVg|dy=6TFA!s!($2c8cxm z0~nGx;uZuE%4FS=RSvtw-PAay>dPd{e|Z$#>KW=-_y(}q^9HxK?7wyc+3bDet_V-1 zf=LVVXxBwx1G>@RAE{C@8KGR}l2*31VYr zQq0lDSU_9b*Uq5sPE4;9*62{j)KZx=XM!|mVitKOcf?(g6Qs15qmT0i<4HzQ(E*a!?dF zo6ci`r7aGVk6Xq?#aKX@JJzF}?#r0B@j0xsL^3?@6^@Up zbFyLR(e!~S*Q=(5EX_^syco$c^UG24uaVGdF2aI=B-0@)M3DThQDNaJm{%yD%+v3^ zq%lCGA@$z%3U8{@4dnV#gCi)*d-o6YFHzyi1?MdMg_}@*Zo2^(Qu17}v{bP=d0E9E zW;J|{km6l)D2W^FD+Qvqu<8 zaZyrSbQF@s#mLF)bbXW(_rVt}DbmAfzHAq~;p$wEq}OK}H|yaFgcV8K5Zb+sud8Rx zGG{& zMm3GI$b19?R{Ll7#3<~tHY^wq^C0+*K-alx_I(KYJYZbyFTm}V3vN}qd?%-oU6ILm z-wLEw22*K%GG2?G?!+mq#bEp@@Ed~PP;&CP1vrvlFhkePg`)roLQ`fUTgMmFanLo$ zoYIYWSlZU&)+AYOVbtc5*+nMxjFx)F)b6CjQ?)|vLb8hC9o*_tU4#SHwMFQ9#v4YV zS5gn55I|}0q>(&zzjxq{(g2{8>A2njbDYN1W||ASYr9W@;_dUtL8>FEX9FVSLm~nl z;a2ltk|A=r__6*s=pLP7cLCN}gPMAC;xpsO?B_IpSc@+qq|;L>>Nv6$j35mP?v zGD`8-MCw@qSX_W6(EtNN{8LH`TL&7=b4D}|ToV`*09nzLr8jBqbXq4V1_gL=j@gY0 zJ?8d@3J@%jww{V*lyr)*+>rhJeHzaudhH~SJ0cg|; zY&8SQc*J~yeFE%$!0!w62p2<-@D8~?^wk;YPVrH3rgl`d4=OZbKqi^(VY1Neu9qM! zSCE&tHKxJmBj0niG%uz&gE#ovt~IM>gftIE-sW@2_P}{WYR2&(CJbML$je_S#f4W- z-V-HLrV|1njk`-ZL!jCt$|ux=M;8_QiFMGd5(UZoHAS3ao@GWR#pX>y(ViEvQeiW5 z$5_V1A>%P2LSCLRg?cSQvJOy0domdxTG+n>*eNjxMbn!Yk*djMKoU4yKtKP2ELAsJkp25;r9mpIazBv|$Xs zz_JvCaEqt0O{Zad*0ZwM83W9Y@36&4AHM818Z?ju21wFl??)_}{O`P@ zH8)u9iid=xF9=&c@j^1^2j+Or{?U=S>fx$3fHM$hr!14{b&!7CfQQ~vOuTKfFDuu& zPxMFH%Hd@|nx_7NTa%CI%j>5yu_^~9B^CsdprfygmCmm!^RjX8!JdIy^upv)oFsKh_!DroHh zNVCkv1`uccAnmu&a_RbW>G}&v7$seQNf{^SqRt=hspu7hac!foa%p3dv@u!Q2u{>v z3rjA-8pUD#^qXTzvByuK)rx02nTuJR4vnYd>{=xAy-ZK3+ui}pcQ}nx7Af6=kAQs~hhudx}!5vnp$Wcq*=h3fTayV;ad#98>}AdK8%gWkO@aO6ArFo4WF}+c z2x{NU0>$OteTL96=9hug(pG9|r?b`8xk)7!l_rb&g#zJ;?rR`t|19^^lad!8ZAgDM z>Eo6V!wP)9W~-4u`c*o@G{;k5%}Oj3*pW@FfpP~PL{%<@6sl;9@h`p)ac1!YYEpRy ziJdZ`mffZqX*c*`tP0OD)TuPP0vzBmdZ8%2kB5Y?P7(4ym_(y0`aq&$*?1X7TIEv+ zgu{EyzMGZI&IlU$Pagq0w&(kNzlMqi}Lc)0|H7x)hnRAfId8kgs4(8k6Us0fQ$z2cc5DQ4r=g(=cT zME1aL9h#Ue%Ii>&YAIGivt;~IsNgNAE77DWfXO#r(mwxuMS5*{5~eR+z6{Sni*Zkj z;%54x5r+>^_s^e^!FdT>$Hp1fF#w!Fn&-4) zQadz6YaK?M7Hy@dL*(2VCXP{Er(vIw%C!9vz%2eF+kQ@nuwQnc8#DMZkhAF1k*rqm zV0*lVX{gU1fbo{0H_D55Py|fEOlQ(cyKW{XB|N(d%V$*CE!5?tv1SQN5=-I9MRS#Ox;SgL3g4_@g zz+N^178H(?qtz1bp<4xPY0peTX~$W_qg@aNUj}yg5ZsUjfpM`EYoMc?LPIrp@9+%H zeQ#rBE?)>Bp&GmL&#=KDSdZ1P1qHkgE*^H_#XcCVLDSK`q|N(~?@2B>INuQ^pLjzG zW|OQ!(lnTVO+-mKp#dU|UA_bd_7ht!UX?o2s`z0!%Ugg>-=Y2ElzGkq}$gw zz;|o9!#*RJnXh*!zUgDQ8i2pJX}HG;9JiZ#^_`7;PV1rBZA5OV@H#u;F1*~tA$M6N zNB~hik(}>n@#-$Z$jr@1LAn`5zD9jncQ~f~b$sa4A23nWR#T4^3xr6jS$P3A?Ix4m zBaN(fie4D}lLYBjU^A=D=&a{0s6D0PVf-G-+XzZjtn-Bu20sP(v7LIA%@{as-=)*} zQDkl6iBl#IG&I)($%g0X?u`FdzaopTyiDCp7GS?iBQF?8BQHWgl!A{wNu<7jQ#iAY zNRDf3j4{V;REZ@uezGTiy|M`^Z~@%iIH8c1F6xyh|o z2<=n&wr3skxtIcMYGIItIMpW?tf59`QX_M={_OndA;7lhvG1Z(YpkHSlCS^w@S01e zj0E<>S!ggBqt-Zz3LnJ@wO`@<-QGYC@S1ybZHaEE-Ex>7uUfhvpfTldPn;)(*jS0t zB&2^Kd(RPqq{<`5k`7Fqxa?=R;5P50D9ybEs8DAoUTr^sJcL6axT8bw*&V1L)WT5D zDc!O$QBzEVU-;tecL7Cv#;4*r?{Q~@Mb&H$Bb0LE?%}QN?LeMEr@ARZ?RrW*)DNu> zZ2tsfqlJd??qXeA{UV+s+9^0fZdeyoMcg}2cry@=jl+)GkO3J%hUH%<%5^X(#Qra- zXITh%N#)E>e-2%A0C-Uq62zYw#dVde;=AjPEz^N4oSHm@Vm3~IVs|uRQI11Qks$g0 zrg)=uXu|Olvb{JPIW^6P!ZNj$M4msG+R17ZhEQ!4E~^Wy>FzZH3N7_uj~8++A$Tac ztStn{bI&k`EBO1;{Rh(hhcu!y{7lG`APeZL>ymm*m`>*BXfMRz*%KM*>$FE7NjE6WiUUdqPmbv?*N zwPM4up;*_$ptT^aFChB^kL8lnOvz~$%F((kgn)Qk18G}B@>>57WXnSr2cX6A_ZUm0 zTGgV3&|2O?d0}4Ib54^E3Q`G7qi^}lt0DAoTLuh0XVb|1%Sf-u+>7G`usc@o$g=7+ zVw4+3h%(&33I!9l>mO;?e%Sc_#B5c|lqW(Cm8;WuCm)@Hb~=7#aws`}6vDQ~YY=L_ z#sMZ*L;Hi3=AzfDFs5ralX?X74-BC0#@BlTC~Q^-#8Lawg^MDt)y4xK7 z&tc9a-5T)lgPB&G@7(HuB+aAs5r&-iLN{AOyQH-lnST4mc|&w37n43=A!ysih|+;h z(t$Fn+?OlrIgsbL=Sbtf!-c2baUE$|G6U+ovOi)=44WYIToWsk=o7YQ`0{+vagmQ% z7QeumGN8nV>z2tEMF=`?x5Kpoopw*e{F(SZ&5?X(j6hp#BGHMbcTkX`bvi4&|M?^J zo!TOEf3#H>PEa6B24l@ zfw=$0(kQfWd|OO~tr?TSY6UiDBdRMklE~SA6sQm_Y*t`#=O05kodCVwGD({B0v7E{siZakiv)+@XS1qvhOo?Y4Z`ckA(Z=oE9sWI`5G>@6`*W@Uu~T+7@vz8%0fj zLcv{@ql1a)eWD{JS@cEhgIiRizJrAqaE9Xb7+s{L>L?4FS_d;|C)Q_70q(7K3?H|G zokH{NTC;S^?&C3;WY7p_t`_=#=_We~nmg#wy6spDj?ICcTMnhXzXH%zRi{eq^Lmrv zO>pE&bWU3wh!QFSA0mv-oQy`TT8iH?$~?aea_8R@3=mAjKq;Zz@-3Bop6XC|)NhdW z04W1nqUF1;kSfWC-(7bY0D?(ya^w1~tteHl#2V5Ejv@7s94Lmn$FIY)htXn$@oj98 z^;8q8?6n>w%PMMa%*?XpV;~0J?E72pfK42;GHDqXb#rC2x&huo$R3R>I*Q*hiu$+( zQTg+RBUIczz=E;b;@KvY;z zRLnM{j~UCfwtHWu@N6De{{c(3XPDG;Y2O7L`*F(r;fa#|HK7o5hNdA)iosOFK*?U* z+JKg-%kse>b66Y{^ti8>0=f4*>S=>ci7xx#G`>O(^_n56$>>gF76N%xbV6tr@lH2I z_JdmD&FOKOAeFk)s1zm=qt53r0X65azJ5K{y;6-C3~*8?!ZVZ5(t(_gZbz1gWh1dT z%kn;=9(5t5e|U{He!EKfb3*V{;q)7!%a%F_y`oGJmO7{q_Lcf!u?+2Hj%THf8K4;R z8*Vcn){*9VOLKiN?)rw(Twlull?C=kH2grGCf%Wgn|PDkX{{~c0aW$g46Wa~RPgs5 z04483d(aYxfD|Nf8n9H9+AV5S1EDR zTja^ks7C*VW27AgYq z2}co^ASn9%5s5t(v=hr4P|UaE$P<6f5uu&$IRU30+AePd>2M*%zg>%VpW9AJUB2)T zCcQX``NtZ5MXDfZL||Xpx(`QDscl9exBsfc2!m2PBFyUU2ssdLR2hLti=Ofi%31T1 z5}WWwNKRuhpxIl#{f*W-elnCxb&ld0lC_8>XL#LD>q~u4OvVE8+~|PCrM`HXRdJo4 zo(B=(y&iNDZ2g`PP)fwvFu;i!UGeKieciw>irUBI{)}Z4o<@`Y7di>;*9eX1e2tQK z)N*HnPBCW}-IHSH-$D_)f7YXv!EBpHGx#sj4BumNSWJ;F0LTKr#8Xip1{*P0*Wjn+$gPu2R>RS@%;8_8Vq2es6CHo^^2vV22dvVgdq8ANUM$0m$q%x zGXfE|iMm;rql;dyP<1n~q>PT`+%DzNXq}kWap}JdLEOH9VOp~Y*C}tIxR(2QnN+MB zf`0mZhL(>H`cVH6x!AL5_ke>v1Ql*yJOvdI=EdFXpF#@%a%Ab;U5+do7@MdXf&uk; z$RH^A-}cd?@7h zmkXv(nk$j_HXTnIx~hkWY3RP468F48748nNP(VOqmKTTBFe$D0^e;mDyci511{Fo8V3PQXVm?-US-rd@XHmWEZvQ^Z+4asVNwt#~HGsU<~(#i4na1*L%5^~rqJa(NM}Ywl>xYo4XbqDb>QBGmw8a8fTrDgq;>twb7MO92 z%1^CDe$RW;5c*r)#i|H-TZxs_HWR-rs93kbalzOjkTcZ#huUQ_BCz%thp=*Sf#~H$ z<MJ5O%WOQu3`x6xeawD}X-JVdBIXnr%?^(iI3({SLpfZ+NJe#gUUD@(MB{(Lc1oUc*S;0H9ma01BgGW+j0sXq39#v&OhNj%g33x5?TvCcg)qM1 zU(AJ?-Cd{~f%e}}>FPdY9o>iDl@B)|jei*npB&bZm0|`O2L%@GGXFj~yPT5(D3qW^Y9cIE)y5PgiRM?$(3ZS~Lh@ zs;y4P)b8^m5ExDB7*N2YONfq68;dY|t1|{mJVyz%%5U&%&@l4Rk_9 z)7lT5LlN4Q|Lc{REJRT#)Q>j;Bpv&2=1m`6!jFLX1XGC3Ec@a7)w7{_wCwuc7;-nt$=3TuMWVEBRkbQ1X# zg}45nj&FBr$H-i@@G?>+jDL#!R~D1&qq{H$Vo0HvA@vh_t%b?L(Lx%9*p=cn!---? zpTnpWwbKzezMjVV7>NJ*Bh_y&IoKr|a?^*ZzW!4_owZi{C(XXamn)}-)MIDFtIHnUKjPgPIqaH?dJ$G`{n|MuXPb^cdhI@|>A%dGX9P)&nQ zy1}*a2WX_^rj2AVNMF2(B_+MZRE(nw4Qc%d;97NLzO23}z)9dL-9oeZc8_&_bkC}T z3`^quaT^mLe{~R;y|5++(DCvB{NOCsVHl{hhe|zjN_AshPOm+KVUIvFZ<8Q3^(Bw< zYji?2iyOR+k}O&DkohPboGmi$;}O+VqiO6OGC{cpsIN5N<0Tn zUH~G`vGgWmMhlB`i1IAnE&?tkj+uv-Hovz6U8}d2ijv|1R;1;8Sz}4KT)UOpow$bY z73EB>j~U<%B}c~~FwUsas5PQG{%nJ_tNpn`Cf$gaZX{q}%^K=x0H7Y;%mE{K`MQjz z0l|K#Vn}B-BBPryrcaP;xgh%i+yVb}^Klx}0tEE95ddz+_LT1t%BRV#RFL|J4d7Mc zjG-W1x&i9>H5O7A9D#QQR~2yqnM?gT0@wJoXpHCF*6CQP?$wQ9SYuM3G9v510#X zt1qs}!9rOzMf7pP2dg$$cn0n2;oPt3V5T3HM!Wwz*hdaz$d0Xx6H{RceoLuvRRHEt zQEZEZk%qjeb1w4ixNVp(*1p16C8GGVwhVFcikmxWB)z7yX(pLWDB_o-#MR8hf7fJsGL zrT|AO4nnp01tbkq9q<|-{|L38gkO)7MHt#`6S!Q{p~3j%^yNGxAvejVYc=m5n>z=v zs{p$SUhP8@yw<2?qN6@VHvAiDtqjf}w1sVgM!3Y6hUM-4buD7lwufO%HHqvyHvQ9Q z-&ss}*kn_THJT@E><<4)V?&ouEj_SoZnhcm0}xUL&iit9?P zCXmbaa1>qEXfj$jd{#d^N1xk-{`faIBQ`N3+u8=`qCNMRo%HonGQM# zXR2g&)&53ffKFH70-K|_Bj!kzmQ1R8OlCsQb02J`8JOS{Z6yY-^mu*I7za;vPSnx! z#};9?NAGkL+EeS{I-Pp^_W*M4L*cs6-Aj~S zzs7RzXNsgDHh~y37r1}%rhyY7iV?lu;dbnJ9y8a+?B&q!v|NN!k?8mBF%IhwP#YC) zEkHSFD%ro((XgK3A)@phRFJ=p=uDV-0ST` zoM)IJ4BGt{l13GhtHD7`KyarLye67bQt)AX9lPiw58qN&&W(On7yB4`K4*e?Nfzqw zM5J_#n9KD4P zKc2y!-hiP_xX69Gwj)Wde*F2vu4F8wI2vD z4;o{#0

      j1nzwGatgc0G3659H0;j#-pjpd^Pa=Gg&0^YJuHDK&x* zPtVto>(Ikog~eEAAv)jrB^70haTTD@)f&Ng2sFtlbE?09Z?03%0`^drKmg-zUrRcU(rx@hkaXR73$9IJ^}V?pXm1Hf^6}d|TpT$qe7W z&cB2Li<67~pgJ`52VNB}=JDz|*HlP`{OT+|GWkVCaX~4yxQ74*RmoW0JF+2Q^R)Q= z4CN1O3NSD&rh**a*3I*%*I#XrBv7~r*h>yO3+q41+npir3{m8|STyEASIWv_x~*Fx zR~eERf-q)kAU@5pr-T!4@Ng79`K%p5;nZ%}iBbbUkws5F-15e0amyDO6f_lwLM$0& zNTgtFN8#V6VIKcelY7yc2GJoMKcKUzp$h_;wdN7#I)dj*g*8ZAfsmHXK^Y>EP)jR;U*=; zxpIokjy(1S>u?kk8sOSy?jc0Oq=RwjiT-^G={@?amYIl04v0q%iboESo!-@pT(+Nm z_+l+XHVFih9xG}hTFLZG5%+73Fz~v@SRAqzrtAN(5fthgRx;!≤FM4j(1&ydyH0 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

    1. WCet6nmEu{IciZSF!&i*A3^;NW{olfFEs} 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
      rHc1sy-A zV*yRx>Vt>YT2gi1$aynxsiqE8s3K;@@Dx^VsH+=aADDxJlSqL&$%+7AtA}KIbrZJL z|NoC1w?ybtMoqB?WT)&9Ddyg8u>oxQ+=JCw+YY^P1-%37u|L$_(pBMTf}8Yb4)j7zE=8l43d#frn@yfM*|rqO{|Ci&ESs z^zjk6i$iY1UWOBTEJQuR?=i)SodK2Nz5gKTFijyU(#Y~LZTyd|<^fI;HZ#)Mh>H){ z%HxkGATHx_eV8U`^>ZbK`Yz)kAQ2VL&k*nIXD(4aKgJ;d54B_JaK#e2~mf z^-)iDb|1vLr;iY%efuc!b_o(+fHnZ}aXxU+6TG@~rKAcaHb`ao(EmuzCQGf6%Q-a? zVKJQUp)ZzSfLc>0@X_>TBkH`3m%eg!CmspgQxox$=mB%axFk6h)Yp8O2-`Kuo)Fgw zw^Lv=i&u2W%Aa_RE~KU%-^wiXwWQpC8POh7&Vv+rVo!njb+DiMlSe9StUZ`d-sg^@ zQQ38sy1^^4V^nB6Zwefd32vEaogJJhs3`0^hD~VKk;>mqfp5!k6J>COt+W4qfibB&(is=#x?CG)6dz6EQ7~!x3o*Rn2?1`@n*eb z&c%-?GMm9vg4rA}y1<9?|ALjFyP#k=nJr;A z$OEBsyA!&^CjasPnROY=7~iObIY+~81p}qozV{K0A^-iRkxOefOKY}BYqm;jw!vN$ zD>=?SLiP{d%XOTCxWV8&30pc+;N@>9E54jL&AV$zxojji&b%%UyW7D6nY6IGw6I)S zSV6^480T6%nhgBsKDjkq%ytDW=l)ayI?OW%TB>go4JfNv!}+zJF2hXLVLd7L2>XH9 zK2$EXI17#}xp!`WE=Y%`QP48RG@ZXQ5#cp4N+$h2B>g@t{XPO=$TGx@*xekaN8B1> zm#!KnRSkz~RH|Iszf#)2O4`3#M!x5A1bgayl9@bOw=Y;jPLprKejIAAx-d}GivufU zwipCrG$9psp^MgiDlw&!W^fJdMt8M)-v<`zqbVJ_r5?EBC zJM=&Y_Wa|W58mV50jTNWm@|78CQ?F=!8myyfi4u~G%7{`$|r6t&i{XZWH)x2SSJ+b z@y~Fj+Ez{K>Pf-4zZSgRO9}?X8@v<#;&-_5_-Wc_qKKqByxS^&o@E#YxEY{R@$-6N z7cpCthz}07UMyDt*FB1N&Qv4bx(Yt?t&{;CGThBo^&2KL1S=(KB@-l5cT>DKpA%d@ z!|p`yUF3Qhp85uRlf!WEs|=f?z&qEtIIknTgwmQo zJFQz!M)qBAm7+}!*p;#_LYrMOJc!fy;3=?HkRQP`wz~5)h?QZj5aVH$jjAs}^P;3Z ze~GK)Sf5LIXq|B!&RTs2k-gI@sg0qm6hi}YSa>;A{xNNqg~*V0mZ zo<{pr-q=9dZmoiB`&R;}fX5I}Hedv-sEhhcLnyuMA5nxJRsKRgUp6~`79Dc!_zvg% zEONiHSCsx<1-x>chsypbjB>zglZth>GyZa8G}!DV4`|jJ*6Xk(_2$WdO^fLk=yt;r z3Z7kr-7K~*FF%#c#1PDh|NhADGLnF$9tP5Gz4M7#Q=m|n`jYQ-8qV|i#_nVX#bQlo-_LEkoX0mU-VdLRA=A5#e*<* z_GiF3Au|mh>}NMc=Z>>x3zz4a74IU0lIyE<42Tm&KNJpM?=I{?1H@N>#s0?Asc6*Rnhy& zxrtJ!okU(=^4Z)`$a@b&$Ezu09xfCKWd4g`V;k>XS0R^)0+U9h%^iUW;hGJs(Dx*H zMfMP-Zx5w!kEq~fH}uD7BXxhk^l7Ro`wGzP7zSm&Qz*;%X&PW2DO97c!>(d_47*0@ zE_*;41k7gYCE~#|)ID?zxvupTqya{hy=N|>+rNH_(E0`Q2kcjr%60hEvw&e)8OAl( z8Tl||++N=hq*cMx|0sBdILr=(YqwakHGWnPNKb=?TXW+B|M?fjQKCvuAiK>1Ccxc$ zebk4-)A6>_@pjVj_R{eVl-MK;3I==)&iQ&FcX!(6iM9#XCR*LU*bTRxu@)uH<$JW>q+}UDDFdh5n8(m-dE5G z;Sl7cciJF*<)!`zWBV|jxyF;?a{J+7vpd1aJK_@upTX-{c)gVWk#D>0#Z~kLA1U6d z89wZILc^-gWk@S9Ar#lKPB>e-aH091}>;7w|uyP{-#(U7wB7huPCwO)wf)|$SC>EN5J z#znr%zX`SDC~YI(4Sm}Z4mWg*bx7iM9K_?~nOueML^xmf$~rDeKU6)bW$_RoI9r7s z3*RwA7~=c@0<|8+`AIuC6Hko-h4gKt8Lo@ICNo zOXMiNujH-O*6-tgguLhWESXPztm9?+Q0&uEf~GGvp%Hu9z?VqLoY{zRvOkUN&ZDL< zs&MIW3r+VP!Wh^4_AG=C*DP{X?I^;M)$pT?Fg!cNRJ;j*3Jfqx^=|0c?tK}mG(NxY4FxEK+yL$jX2*2Ih{5(N7!z~ScGNAULXwLxdMy5 zd=q}qIV;~nt#6bg+Ou$`toD$Jf+8GW>+E2HoLuGbY?^=8@m@U5HHw6I&7%P{q&5n6<9MVL}NvTfxq$ z@#6oIA2B8KU>4PUe}rYColpR5D8)U%+4v!NVjVAGZoA}5D5y(!9?79SJ%rk0 zFJT+3(T)OGGAYN+Iz zlHU=@?W7&(z?|ue+|1wj+(;j{YcW28-p5eGJ;>~Y_bWyJcC81tI5K|(IY*t|rF zMRsJF{>N37v*#EzYZry82fKB-GxK-V!)Dm$HcQeFV;1{2;2%VPJHAVrk@A3OUiQPSsBB^I3 z2CU;In2(rCnv1Yq?{YwLIS6r)%OMaOaluGqcUmT6&T{dVA81YABE}6>=F5QNvkTZV zzRF@DlXZ-oFiL@Y*xy#%M?a)WvvUD!$94nI3 zSX*J+Sf!^hhLodcAe)yVpEh%!Ea8$ygkEJ4p86jqgL8L1X6+A6(U^vMl0ySMQ!ey}w3s)l zi>2J71-np6MWhx8N$EXA*YdFE!N}U?Fh%Wm#>2E#6dTK{Bc*y8UjNCW?k_W-zHaM0 zUdK7`ylnz25o%JeU{9-|H`*dmI*6uuyYX=JJ6X-&fXtaYoDr5xtwg2fY0vPiGHz@l zLN5*+99^IOgb-mINn{0syQ`7Lc0~pgO#&{xyRBRRqE1hm*IAlZB+V-(>l@AtF>mYl z*u&Dc{y=gYSVG3odn^ObOtTF{n07KHEO?7ald;1E*r_udHwz+gf3t)Ktac;9o`G~L z5cqldU{QKngpq8o!2zjf4;SDtx5MOP8O*~mw1#)B%#lo$eAz-xKNtb%-Olk&mprd8 z&-4s;-f~R)%tC1XX7&Fly|CP#I5s;iUd|T=0!A_vqu7rfB##p*ZPr(m_ZG;|Vt_)Y z_(%RZ&vErTb)5nUV{yM9RMS}e#zD0E2@|!+w0L|_l{+a!sort879h={Zs>yMuq5oJ zX#Zg-Z`ME5X~VzJ(5jK5k+{!f_RFif-ACqvdj>ASpCE6UOl~`2q(WNI8%Y1-an!OL z>(2BOv{owK75vp@4=FQy9B}O-&R6oby6r~3Zc#p^uxk^vEe;(YfrZzk*Awf(h)um4Hi&25K z6^#<@Fhd+B)ryk!9qb<`#UpHvCEvQ%?f}4@RXFIG_x9S`A=Mg~>Y|ZnJDQ z4=*MA-O(0pOYr;M@#?;ir&hrJBxH0v=7qhY_jka#+cmOoK9B3u?)ZfbM@ro$rEZr} zcaZOkALv3xWpDnNY0C7N<9!&iXn7o3qI0L>HDuidgk{-15NgL%$$X{Qk64i_zso_i zL&j>+7Ftk2Wp+??9;$n(Lc_Y(0!RVM42^?~f3n_A>6$cE;s2 zoytGuws;Dul>oJueuid9YN7b6KAQ6X{wQ$yMHp5QTyg)&6}}|@de1FYT0CZE8UIn- zrpM^wR_L`Gumns1&C_S;3}6jS#cG};Vb@scGV9%9;DOwtKp&NdD|fvgo3E6D5^ zPreY?Y=+fjnBWYVMN#c70l`W4^}xY#4wP|~i4(V>nzNNO8m?Ge$n@9{WGcD49AUv= zh*J$#lU)=q>5%!i5W01pB$uXn>H#Y^HEb!smBaqYh&FlD6$6b6+=1-@cmFRE+L<21 zvoWxh55nPXeLzu}`?umMRf8VOgoct4lC-$m;SK*tK^&wJNj5TWtC#(I4Il&oG*_3z^8_&xY7GowhhZ zf%z_OT~Nd$*0UHo7k()D{Gb{zi8TVCLi7AHUi}ma+{SoguupL^I99;_#qCE&VfiYS zS~t3eL=I6GWKi^nIahz7j^GNdf~Sa8Z+eL^A~y!b4}giLx+{g+4-~&55xpJVWa`VW13L=hSG*F z!AtJuPJo@bj|w&*gJ_gRwrL|kk=XytGm`W-=oD#q24iM~<@7~{RGr%8%axQ0wM+Od z>qLHjEC#buQh4-hG^WT8KYy}+VGRBA9NmF6`2hwh^0CcwkX}Uje|>S)OQFg4lyC{CR|K5~TZ;(1d%6lmpk2*GERZeoq;JxWAhx zNMQa%6nX)d2?P3(X7?$5y?SPPmUXE#ts#;OTHPBk@eRXjb6Stvf#|I7GhD*~$U-Zb ze~^3$1{g=dlybX7jDcvjw=ty+x`*vZ(+cIhZh9QpHo@Bd!s~pbB70?`HIw}4QDRYf@`$Dz0ElcYbV8?6+6VMPs zu33!MnIQw4)Ct?@-6}@osGbFpf0Y! zBEY5_Q9l>$UQsENj#Wv=MoP!3$$!be0EW5>zmb%2SdDtx@C9N~IhpKAnAz45H$ovn zc6G*-u+N_(Hf%`gbLSz`2WzanoIK?4To3g?+|G}&T7;%7szfZiLxlCV;mi2leGgQdPXOx{TO^|pP zX~Gqr;DrnA+tD!9F}$n4zXNIRV)9m$x*tNZw;mx<`znA>ra93Hxs($FM)A`>kkh0v zr5tDe7n}pOfVamd1MsQ}U&Tne@=9N9gxYVIfX(`o^I>S^mE}og&B^=YRqjjKMqY}x z)1sLya*kqLmXXACm1nEJ5k@&YL{}$TQ_s!6vA;Nn!zgDrZz@`)1nfuJ8>5lo2Sy@c z$wm_ljy98QlR^2wPu(;oLEUxvxA4&`B43abd&(-+Cl3 zK)SMJdolH$MuFD;G7VQ1q3(t|b${-xVtxs{t%FzdWgOC)tYk9QDU#U~ZfDZu(&EMz z(qa>7v68BwhG{@e@5O^vYYn%nseq`WF z#>5hYU6*_pYVVT8Tir=nyJ`s#L~;(e{4Ps*9lCWJCP>qgDbEr&5=6x}QXlV+4b91g z*$Teq3K1;30CqSgXg8CsCR`_^%v7`XX!Cl*k*4TjCxoT>m%*xa9RWtO)E~+>VSMHGMnE{s%WS(D>A!ONU zA+IY{$X|c1^=P*|Qb?(8C1Q@I-(K#voX|_#!xY}Yle?X=VDHoR3ZaS=ssSdkj|9rNoOjgGd-j;J;~vS3$9gl ziI@gMrVb9#m~93kwFr9(`{Q(Z7R(iYg72sv#fBvOlvJ~ByIg(fxl zO~rnE+;nKNQAC$CV|kx*3-~3MYH&9}s_`JLixH-iZ!*?mN|%EF*kMhee+Am2G2|@@sLHDMT6hF;oWIT80ML$W33>)UIkSyIR++uEKDyk z#tNFUO|U21EH6Aq?SjT2utq+~=7qr3{x+Mqu}w&!?91aedI@aL+yHa3|RN?DU43h91HPmwVd~#vFtAL0A?F z?*R2V^2Zqv(Rayz9?p2c740aa;Lr6~&F~_IPsCb`w=l#TduPK2$l#b#g|<7-;^{o_ z)N;Vi=O~S8#pot<>mwAMI-N{i-{Q60lG&r-(^>FRhHJeCLDx%l;Fv1{Y(SBs?Bh^S zdedH*pypl&kkoP14TU5m;L21(>N=ngVq!msAZ5V&I27UZ7Zueqq`Qbtz$dD}7&$cD z;Oy<%DEO~$D9Ia<`bHN)GJ~31opZpxE%y#ZX3O{~$m0>-9${G1Hz2~pCbC4Zd2iC> zRx<|I29*kupFg=YX9P09;t3iQ1=}MyMSZ>i`a^x|31%;desKXgYP>`#-v-GNKO=#? z$={+eye_GnXBfakp`JPJO9#|45$v>|^5?Lgf#H0zbi0l{rr@m>If~nDWvF)E#MsSs z6T``GP6yOdI19iN>qDPe+=H3!vP;A1GVE&s{g1~TU=jWc(xy+Ck3MPL8E-j`jFTyF zc*~-MF-hoe&PtYOR8~a71dcNMK4-W4>lj;`3^>eZwgk7=q5__Mj?WUY_t>WVWniFZ zEHqG{1xuES{bAaWLFyAo zO$GKrkr%xb^_IQ?tt2|WBW1+~UDduO{9l6h0ibbk5q!v8N8zbG>SJ=+O`8mthaq0J z_!P2{V)}`ASfZlDLrk!r`#|<%p^*bNN3Taqkx6-$m$3T{T#dQvPu^Qj10;3U!Yrow zwS8PiXw49CxRj<7bj#oN>KB=)2qDMpjkrJpYIo(o!T{=ZjCZt{U&GMg%rU%&YWlxq zOUAyFegTHfDdg`jP_4Gv(OJey@~VqftR0Mg`M%<1;@;kYYl+jDY#R0kVfsX!K`*GX#)=j)ADiaz`oT2l#-`3UN>P+nVPS#YC6?~)ZV(ep6l`p9AB`M&Ep!=huMFmAh&aqtX?seu&SCWYxByNP4C|H@C#rFs_RI05qxEtAd#P|G)=oIXEf zb$2MDdJ{U@!ir*TB7WiB_)A2Meqo4#YFH(5nQRI7;8S_PMwP1G=zXn(#Hdo zedyc|~g)!8i!SiO1_MxT_jG zmYqf&I%5)SfKm?Xljy(&&1W@`lcYEv1}mgRe0&U!xG6^r8_J_i7!u8wYmz}d@<_je zqPYM1;XBscq{6n1FeCw;8uNM2F{ji2Ha3qZoxm~H)gKEOY(Sdr>?sn;Oo35L!PU-A za0GY9+4?IQN}^yMZu{4AdziJ1YvqN!j5<9Fzp&T}H@(i@LFzKwl=TF1$FSwqs7BU+jkt`*)!)e> z?-rkS98NFL3wK%2MG0^fffad@s;r{WhVx)ZKd>6Y|6M6LlPs&4l52B$bGu|kO$xf9 zhD*vZ7=fQ9&y8j5BCpq9jLX#@{>1lZO_(SHLT@`W4|r0VD^8a z8{8q^dp4Ma|E#0D(H^)97zFbzAceN6)b_Gov%X*4_5u*^(EiM87_UV**M0bG*yCRuC#(jSRb zqh`y5SqIp<4g|>KO(oj}s=Ms{1V3sLHpF0P_%C4?p}gngAulkc;>CS&)Um3b1_Y&? zeOIA?F)Rhn8YFX~a9=hLN$yR`{5FOLMkel1ko#wwBsMe^8=6sC=v;k6j_LfJ?KF^G zN|q4*hOftMW@|liwNARCuj5b@h)m}N?G(Z)mEZ1vlL;SN6Y6{jSce9W^~KXZ;jp;t z!XKux*!W8d1XcWE9V!%Wy8=Sj;v;^a;6aMlT_^Zk#(8GgeW0KGt#8m@<*e8LLjYcH znY54J^AlzSh=)-M1pynftYVVMF}pc0FxPho!Y8~EF#p%Rut#?|!L)woSB;T6_{Hjb zUA{LIl8=s*wCgZBd-5t&;$c8HV}_V9Q_PqpX3VCD7l|locbt^{A&de9Vl}wH8@3Vb zU`!=McCcEc->Oum*G(DS0l^y2!1sCf%a)0`IvQ4ng(&&MKhM($6S&62x1-c=hCNy} zKL)p|X;3lOwD}#~F{kFKQH->KBpXr5fnapB>qJJB>dS-STF{U}x9bHA(c^|8(^VFT z$|jbS^)&}5GW+O5WDbqHhg9P;f%k^!Rts@s`H4|X6U|>d>?tEyDdpNJn%L+b`V~?@ zeIiqU<40O@)!rjN0syP`)xluK$w6vw}KSXCd)d*fyNMH(|}MPJdPEg;Vy?yZ5{27^n5z2*`1 zOX$yzu5~@IL!Af$d3_=nOfX9ApN+QeSCaA!unDkEr+IiRvk9YIrCpUA&Ne7wZ9CLy zRiC=eIs|~O)}Mf_WKj3|kjNyr<|Uaw{25a1)>#;B-*t?`BEz@hfc6yM z(d8IfUdlz5mp-I|){NCaBo}y>E zOLezNHoh&XK6@%mFten&(j1RD88{>L-Rz8+ap=xp@BO6#_$IOBw#o}?1DR$_q^swB zF_J{$1L)s~#E0;Yw-)hYCc_G?VD}@uZ^WBjSX=?KVqhe9hfhDAt`U+!XG-Y18bcI$ zqy>bs2OZ~or6?NfR9qh|Kdub7GE8xXT;GF48v2s&;fDMzvM z2}??!%zHt8*#&lQ(f%ECFl^u!Gi9uyCGQ-hx@pO3G*J|X85^~Y67E3>2lRPO4?LFG ze+F{*ZKtRiOl%H=9Lsfu848l-_e8;o3*=BAy8W1%qw5i6D~G%{c9Mw?wN805vX>wYyYC7j$Eyc)&K@7261``-s!`VfCFA_O zAh{Ysp%1S^V^?C8d7&mta4 zzYnX>eB*T#HEav26&7GOlZ=K^v&g564IL(@B2^7O&dS7T1>0~l@bxs1Mz-IXDvj(G zgMsh1ryiv)IE|~nM*)04OhQR;mVVvG{|rI)7RZ~n_)*7H?%4TBZ~m}Z%}c_?xh+(RAlP6=*!o$acH+DQq}6l) z;M`Kn+hkE|46@XYhK;DkUFF~XdAh0Xa&P9$xgEHB+o2QY!TC-!|s3ScT@`UdV*Bb zl0PA$uQlA2x>_y85UVHcHLR;L5D6ua>G!v1+M#e5i!XZr$JBt!>^kNy-WrK-dv~4+ zOp^Y$Nkv_|jjT#5Y7=}MYRkhrgpo#D~3UdITW8h*XQp9TwM!0=r z{17Q|=0+BvLs;Mr&s~UIWCKOrdxI(1Y&BZc){u5b7KcX&tXAP(^_C)n_u=W>{f0Dt z)&lfNwFPH2NWfO}pd`()g9C{Zzw=yV&t%fB_8OGxF6tMydLlX%RVPP1uf@=)f4YnE z-morVpW985XBTIWG~l!?npY07r?hvEWC>)Ir{Q*&en*<~>3|+JXf6bB@C5gV<;Zl7 zoQ>2~nIiL{YM1^nwMe3pT;3HN)1E<>0{`&GDXE_Sjx=@MK`8*56aoEE$F1$JAw+na z^@F*W!%r!Z?Y`exG8Fxrl22172#U-QJ;6+_Cv4@y%}BUm2Wsuj%So5>1tENUi$i@Vpdo)_^)Vn7liL(#or)0(Nrbln zjIeCz4v?(pKBGcv0iOczO`~pem?7YxPD1K*ZMhMqTauR}oZd;G7_Y9(IS9%gin{7F zvUFi;sY&HONR{T{=1%w=IZz`0V<8+VmraEQ0??FOf(6b^1KyRv-&@>l4^+=N!I0Kt z(;}pH#G64_(q-N?BTiHFiEU_q;$n(eaTFIVp}n!N6>7M4L~LCSHD15=TaE;2GiMkaX_%#({j zkHnzIVo(iu{>-tRGn?A$H4w)(-VQX{bhv)2$&1I7n~|eeosdvFak;o3Xm1h^@( zHkYA8&~-81Wp(M-j@15&H}1NehlEzLUqfy0GS<>OvqKsM6Ba=AUw09~dK-m%?Xnf2}Jd!$YDRxbjS+tFQ9RDw2IOjiD!-7sU zy~cVhE)Q520j`pIGfFD(X@H$p2C+;FX$tr(lJO5}v->jeL;Hajacd1PGk<=-KGJJ% zI)Ftx;fN$U&6iVU`EW2*yev9nnKz?M`|W5Gint-)d0yhdLD7*_`V;*+v%BvP-WMh# z<{2;Ld3h9D#D;YX`#`*958|@z@cc+0Gb06N>A^%sQ)SXZ0{b zHe>YX43{y`GHg~zn%3;O&Xgj}OYumjGW@!cZJ}PDQyKP1|NdydU^#q=j=2kGY^gW| zNHofB6W~F2<{%is$>M5?xSC2)T`JK+#b^A!P_xNeaQQO&GVoLGfDjB+e()UN9aUSN zp}?K_=)dz>%Gd=&r8GU;T+&b0w*UG+3WRv$hbXakIqMz6ZY+}C|j zYm)W3K~cf$czq0>O*V7>zu!xEz*cd%-;lqb;(<_`wHWq}`x)K4`8I`&q}ypkZ?l$( z3H``n>i}dcpEY8$CiOKR{kb;cl`k4^_mR5Y?S#@+eZC;=B>XU$O@1Jf22*RJ~7 z>;Q^TYJ)qkwO2v1n!qRedA#vfK56`6GXji7@lb>Sy=It=bllWhtfVUxUy}oWA6B|^ z{5q9W$A*ZgBLn}Om1~E-H+fu25e!*MoihtEs519JbRK4pQ(3CB8C4!={}KMC2Oa z`%5|O@+hGNh_k9y_^rlo4JiZHa8ER|%M3;9clx*~oo4b0w6fDenLlY(orYCp4n~;T zthf${G9OGXK2>bY<%;OBhKjmLz}ROF;ep)P)_4Rs2%Du+&CMfi* zEdyz=u?3Bl-oP%W3n|NI!jg-k@2Dk%aw?15h^HnPaSKr`H-L9&E$4P@Hhe?sFknB@ z_(u$ktzW#wmo@B6J+8(vOR%G34G_BR18cH$;uC1Xz9UGJ_VCx7d`kAq87WwO`el`? zDp&`KQ*-ROOtftVIUpi;oS!Go&qqMyT>y;VfDM29f?q9p?7xlYnk2CA8gxLsw#Jtu zp!%;rJ+qC8NOCl0Qd`w5;D2xLM~>#qxz4QWx)chO$b2l_vJRVH*&g;76W& z2xLoLMcaTR<(I@Sa|3 z10|5U?=-}Sajaus58zPOKgKejQoZ{Z+exc91;BMfybsZ9GUY9qh?mnD>N}oaG~j*+ zdX!wa5<_$jCf?^RP|ECb)VThcG8Z(LjKCEe&(SLIS#GI+C`5Ne&^9DL1#c8ZNnwD4 z#&G)-xfC-|AFz~su^25~fa2_s?o2^yCqKbZ#5{4=&tZ1A|B&Z;rbpJ56=}?zl zG7La=iUJj^UNNK5^W;HT?k-P;1E&30n<+&SYTN!(gd(?~*RtN^k2qK0*kqIQV+Vz> z0Xc0?+7@>u(e8+7cNFnPTEJmO#DdMJ)Y6iyt_;JIwm-B;T|?_bGNwyh1UdJC68yS| z16{>|Qp&S%1rU|n1A9yE2g!DK3~K8pUj~GAB){MmXsSUl1s%Ku4eQi7mr>Zwjm5mq zeq>#rXELe@^VbIXl6BcB+$PLh0CLZ@2Kr3^-{OS{$m@Hj3!d=Ir0U>Q+_r8#AGZyP z$+aJ-9^ujnVmOM1guAc}hS2}OTsfdXW__1RS1x3=JIj|t@RY;8EWMW*Iijz@9fi#! z(k`7UiOz4~JI)>C{&?>?_zAjgh2^=FB1f}nT92EQV0{_{Syr3nXrW-M9a5haX&A|9 zy$WL2ge~ZaLohi}M>B|wus`x2P($gxyIAc#GRNbIUQbq{mUb8UUS>+)>J(I-&{||G z%wqAL0g@b?)dnkMqN*+V??9kca=oBqVRAGOt9#x@erF@_A8O}P#f;-jOu0)kCyLyf zg)a7Sq-Z;?qUpYhTlKuU3pajE5|L`x>-lF!>&tC;t};{sNfZx!6e6Pl=>~wd}OC`LsD`(E2hH9sUUN6F^1dP1)7R$fqID+0-WS`OG)tc3_t6;c5nogAXpP0%mnb(X(z50A3rnqC0X zlvj2bigY7BRJiYYAel%MmNJyfTTLGc?2`2^;R{UJ@id&vSmOzDY-WNI@2W+RallBtPabdi@#nrV zkv%L8YAjf)XFj2d=3geCylbI0_N5is59RiqKK?WkMwXy;!9I0%8_l(yb$Y?HW?e(R zYu}L_hn0;l!e}}?Tf+9xd=w@1AL(+D?trV1u4@6C1^K+Gwaa2hQkKvd%{ku@Pgrkd z@}R>S25I+=8}P6hX|CVlhP|g;MUQ(@hHex-@l7^mMJ40nlag%KF=h!4>i{ej|94Yd zhrT!ls;v5cDGu9Dp#quB4d@08lZjIkC~}$=_Q{?X@VjV5z2EM{yBzckjff{$hO%}Y zDbo1}E=r(ku+js~sjjXw!a`EuaOgZO(nLRwJe2B-YK6$IFhD$NFE<$~=Fh#2)NbQ? zeyF4tFgVt?JFeBUe(A9!H(~zVnJd&JCj^DA!I1Zm|Mzr2i(LXJh4Z|V6;C}Ub0(GS zg+eBQ1P-DAxdSYOb0+_ZXTL>I%kLG~)w-=ej)moXirU|vjE6cVw?`TXVe7YsT1`Mnw>6#k<%hr`xc~L5ja^QxLQAB99djVEM-FZfF}4cOCw@SOXOu+ z@Ps%N9z*JQy#-fxSM265?=^$f4+oyH0Ez5z0cwQ9j)ELHCWaj+Kl2}WwV69IPH5uw|g_W%gqlQ^M+{{Hp#9G4iQv5NGrVrHxHz zo|mH$RDWPyUU~)k_*%ZL95!YnQdq^MLyq6C=Fy(KNDi zdW+m<(4oS<@bRi#Y?v%IOtHYB_k=g@r5S zb$NvRHshj!F z$a7bvB$kGVrJ+>NVHO_E-QEtV?gfkSJ!+uPy`l;7`Z5@1=^ zi0oEBMWNRI4$|=*)-wxIJ?xT9#BPEMfDuw7NLx(P@$PJd05p&1v30odqTa7f9K0?V z{@rAR691h-&v)R?UZcoN5VbhY;U_5N&@ANMyhL`-CrWrn)1l1YbFt=QfKJ{Ka;L1% zz2tEFLaoj00I*)uhRem1Cu(DgeH@35df$7DQ&}MSzbnLyI$nUjD3-g=Nxb1QVVPKX z0napvNaVAo>e@IijTsq=#ydCSEz)P1m$9HJ`lTpnDyWdQa$)ow%psRk?a_NDs0jeP zyEc$F5Rqxd6deL(ShV4Es2_7NtaFRGMaSH7Y-3JUQ2hZIJmsTLiM9-Bj`JAwvBPK9 zXj0mC)6@7Mf>GjnbObu)UhfjV(1Wlr#ONthe!?F`?&AakuWzLAP0O*&ViL`e7x_-$ zi~3h$c)bJpmCBPL$S%;hVwz+vDJ?^V-cBrGI8426fz)S{w|lCa={2GfM+3|5*9mdbfH>IcWkRhy}B8B=T3eMe&#nM_t+hU-5%ar;Yr zjpND2a_)g^!&21I<&OcM_q90mhBDf0M@HrQp-2;VI^%G$oH`%iA+fT$_PtQDoKXh0vhKrSxwsWAZpC1LSI)rmj)`lKmSmj8$2P;M zYi|lJG#jY3lH~_UTaE#QPELh)@l;d`ch_@qlcOlLq5=i?=TqUMmMCyL_Yx$%U++`M zY`B(Ua`o!5GnybQiwD@)BCm|1o*ic$;<2Oq;X^$mm&(PYR$>yuMff@~heY0v{MYg9 z`ae}-I&3H7Fn6LCs`}?^Fsa~+K-AkEyaH9?AE>3Z9fjkMi5ZpN7>9jJ)s306 zMQwcv#>Q!_Sa^J{Cyn)52s3TR6>I{doyB-CQN-XSX~`wOj$gh-teGe3*o3ee{N8kVZ<2dPdG5>yfYP4%?FBPbr`;^cS(u!2UVo3;L(2)oa7JyUSpj z?RbjC`l?oAm!JdIrvFA1ZY0*uY*^Mmp66QAJsl;Sl9(anNq7ct7?50Asp2mePl zOaH@*LcR&K;S)#^Dg4H~d!+vREgzrQ;KlvVy{Ho9?2eK_V<>T{5pGjcuj2Mz4%w74 z(HY|x0%Yd!$=TS%1UgL6Vp27KCi5hhub{%@@Mk%_qa>dE<4j3o>Ou7FH{=nXHiz1C zx1Atxdd4u5F+85Ja`s@>u&YJPi0MV>`=8@5Epu@?l^R^e3(o%a3!as?Y!S!<_H4cx zsJ+dU5}#a^qxvC0jMGy-a;Hy?K*_6yRDoD_ZK!I*zsPJB@(F2J4`yRTU4?fi9Tv%i ztxh~$t_`YC<|iJatno(*jv2zapo7jpe2E9j_Ojm)yY{gHMr{tP|3X2Fc$ zyi(RH#KRu-48+5ph!Q#)Gd$^3y`Nk8eC(G)GhaJamXkN3j6V6uFDlxE8MFFu9M{gZh6+m@ zy-DlugWIyeFd*SDk5A}b*ek6b^V@oFLy6<;%~JDNay5>Wr`eg1+x+XuEd9PqGFCxP zYcoDtJLDHLw8eHFy?kT9JKR>1(*c0DA)LE;Zg#>Wlad%{RB6QkMeBP#aP6_D19rfn zhynM)0go)rrHNY<0MU@KG-~KrRA_p$oLf|CAK);@{Acp{QX$zJQTkd&4Ys#=vFV;z zA`Lh?h#g&cujq(vsu=|hX38gIu?7Q{9@!VyV*`81f+%t%4@i%>6#w!WdY*QFH5;Z+ zIFEx6!;8a>5zn7;Pg9-0POZpj%vMAuhC}^dE0=UM@DC zh5VEs3;{MZywr+Kk0NzgcmZzk`E^mba8?Q))G6jT!Hi>|V@X|MEE!CV7Z$H!P=^TR4 zrvm3C;W8iY=zF1&Vuwhi1&k^_vb57~0o`k_NNN zSJ>2LG8Oa&UO{VGmU}pxdaj589%xg_jkpHh1L%iVxZ-+%pD)sG2bt+tIq(oh&#epV z6uW(Tikx1x0|Bc|hB9Fj_537yTKOlX1;ydEZ9HQvn@Q)8x_)DTDY$V3%_^5?nK~HQ z@+QcGYKxHK+g6Hgs}PhD-|b~i*)3eqPHi}i_}LpzDYH#Y5&IkNP!kQnOP$%3N#&3p zQ-QxTTAh>)p$>Km%w~APUObfy|L!F@=$^7kf*et{NSzyiHq>jAkPdZaQq^woMx@%k zVMu!w0of7(dIY(=7IkSvdAz0EE#8vU)vVkDMI;Vie%N&jNaN@oT@LwN2IJ z;s=(0e+oF9Eg55T8Gs!fv)qs3FEwLGD4eGP=t#!4kY)2KC=9hiTIB-GJ|KZPD#kr- zU_tW{-t+ElNvxhNR?mSp#2RE+h3rP^{3&1mdUccm1m2U3M8IV7I;P@qJwum`)7`?eyzcJT zhd2m|UlgCrqViv0AS+ZFirsn~br;`)J>efH2r_1DkiCL&V@{)ODEil%1`g{PxJL%;}*C}h$o|20KyV`YR^uW1alf}s|jb%JL@J&{#I z;iXn2z|YyS;Q;YW^PM<0`8H)58uW2M%~W~a1nAZ~DyZttQmA|?2U_Uuj5V(zcPIku z4e)VvG-}&eQ)XlCX#eN)(1Dh4<7iCQo%1w#1D>i2D7BgukkYQ`kaT?z@QHJ z+5OaIw4-ur%b(=(U5Oeo>apn2G>7=rURVuhiNq1r-M9-r!Z${x@)K zGk6DJzgbZt1B*+`|IpQ@O<Nv+oE&CosDZ7>!y{{t`Ml9&lAx|u)4 zOrnI@jBZkfF+2{LxC^QBVVz#Q=z4alLb!bqZnbE+!=P@^=8E|-1r^c?=jnO0wXkln zA@9m)nC|&WFD|(t7meQS!V6nc%9=4M-JU38aA53aYfoAM7~+Y0ry4 zkm@!=`hD>M`EPp-2yn1qTxK36H1` z{04n_k10RF6pGrn0y%NLcHoPhTK$v|VK96=@9wETD0izX%3OQB;q@$0Mv058?f~2^ zWI{f55saYC{=n0+AK}o>S+C#Sf_$IAXnMkdWahG2P09a-2f`mSgC%nuxenKWj{-}j z>1WYyx=A>)pKm0qOjd@$uuR;CB_qx^g-=!;)>!Gv?f|}tEvADG=;GK!7D^5^O2pO$ zK*6O7_}but`%i*Kf@pk?ye=PxMc_Z6%5Et!V7hUuv2-Hc`0P_Mi1I?2sBw7pxB)Pq zfibow{U5206oN#SU5DATu&{7M^-GKvH-60xRRRLLn%MNI-Ag;Do z2n0+IawvRYb5u*Mq6i1x!E;~>m&pgs{1}?(dj@N>MKyX#o%-^L*JA;|b;xvTp8o}R z${kQm!4#fN*T3ItQ~Iy5iu%Avdz3$QjCh4Td}3h?nn`}(sQ~Td&4Z-W>{S?8V01L6 zd$B82T_;#19dmL^r`(LoXgE@tiRtdV9e8r;C^R+f6l4TUC#n}hmpN&nNLnP47E_Bh z`r~C(=pNJ=yoIcO|NU1790-AOOfer|F2PW9DcHIng2<oeX`?E$L-J@N5C z8!`%C{ttKnX&3Rkgx_V#3EGXGd$}G)-PBXv(f)(`)W*~cn@ht@ud0in{Q_B}u_{QO3AJ!2Z!{g?3E@MoPtg*r)(@WPOFACaR>+zDbtGJ~Rt zdbmO|68??qA>zgundrQRl(*KQN=~g_u9G>45u@s_g>aVz0<|IhvbwK`#5+opnW3ZH zb5d@AAOTKyyJBX9qKu-CwFA+Xd({dgRG*<2G4$?@Y0wTP8dTbHsJBD|F!6GpNEt@Z z1n!$WOTc)X-9yaoDQ5SgX(G6+di3Uhr@21Fv zrlmr~hW3n~!ir^-+pr^YRc;T!!1>?ufx)<1!Rom*X&k_}{z=L$Z-+|O z>BYa;=Hw!4ukT;LP@pLrY906yL*TTog;64oTBeA{sqQ3Ub*eLb6e6&?DR^nECQbsB znW?BPqJ@AKt3MAoC$7+h12)?JIK*9;iS0rm%sx`=siU~BHnPE1<~(bZF@qu4T@>=? zOZ3@$G$j`Dx20a)2mx%NSywb{c%N+AjzgyJKo*5sz5oQG!#B6+yQ%!A8oPs+@)V0% zyq?0E_T^3To{$HbWda5F^1!6Y-0f&wuS7Hz3@rtR9caYgo=NGp*Q{l(YpfFQh z51bz8db^tjOHt_L^ILN3Mi`8vT~TSo3R9#`wb6}mP}HwpoSO8b2WGexpQqkLfb(O3mKi!nLYsG1G&ZtDO2BU`urWJD#}C z?sfvH(+;NfI{aN9UvJxmhE3aqj;Z6pO%C{IBB0|P9li?dswx?;Dh%rmLv;1u7fnQN zv4J^0P~^75j4$KRbP(3=fMA1>V!@s!XvEzr2oRVi((qZ&hky(77)8a1afL;$!J$}| z3{CrF3o7i`9$79;*hJdf?IErsjx%q!%{~kY6jtH(Z5V#TsZ~x9I$8fO3N7S8wrXF= z(GEWj|{YBaU8na?J8-Z7qtmk&iO(4fwPi>oBXGAn)^hHqfQ5*C^^GQ2y zV>EI-Sg!s3Jpwc^+yA%26u;dJ7n?3qPzm_YGWB$daAVVu1OO)1ULOjb7m zaauDO*i3~&wS$B!ZLIk>`9wYFQX17Q)MeAEfxk5FGOc zs~%43KCCTiAfiWz=#k_zIvAbyJ0jx{U2(V7Xk+BGH?q39l--6;KDBAo=0rnOalO(V zkm)gCAl%U(r^v3uQP^!T#s6lGi%kecHVj&OHETr8T2ZqO3Jpv|+RuBfW3(t7C zHq*8UH8dCPHtSMEyDg+WHD3d5r3e(*YYq^D13OFHw!xh=& z9wpT7$XgI?Wuq8o+;2^XNMUpq2srsL#9+J!4DJy003{9?^^iJ2y%UO~qR%fIXix}@ zr}+=kmbsQi66AV^eLL zd{iHA*%9C{D(VRI*@jT32Az$ZB=B7}Y#Z zvEoD6e@uY4|8kl=a5wK6hntaZcV!Wz`$xhe2})&JNv%Ve%%&K=l+8!DS2@f0v}F1F zIi#wu8%#u_Sm;q38es_SD;6QsArA*;5Od1v>6pFF<~&hlP?9A{b)RgNp!LZ`+fz?r zd*);7_9536&ycA#<~SEvOmRJ~Vc=F=)lkMjHqD=8xeCQSE-Pns+ym)1_` zo=-6(<^YtZcYwE2KDmNK(YfbIVrMNF32WywQ5spp{DgkHD9PzK`gNonzrN55gew%l z|IA5xw{AG=rkzCm9H5QicTv4?Jo%ky27Y7D(g5zZ6Ar9kI-mFpDt+0Trt_mNao8t) zMU$1}TCQfTS)X*68+|)TISqMlh~A|_I}@$Qebb&_^oh3v`-6^jv0~?KCH0}C+Z_Hn z`U;2~5*;zVvOSj6uA&jYPLa;vcIODL(~<*G^!ON!Rqd7xqF}$1Ej0yovR-S{(7-ep zzImLCZ_Av>^MJo+_bJi>uR1OmgD;Dk`wSyB+|H0}+c!m7M9@3j=fbvcq;n(& zSGhFJ&=^N(bkvaLRIhK-sQ408ES%5o6?L~8%Ek43alOEpit8o-S-K2$Kxs_tQ9ye! z`ysNG&B3<}w^D#_i`UgW!b=NdXQEF27iMIZeSHk>g7?qAq}FinQ0*i&wxhrg_wk&| z5-J)x4g$5t7Zud8+jcbW(P=gInG_tKV{q1QeJKSERIc>{vB}ywdSJhsu}*zlP8!97^>6 zE+U^XyJg~M2qnyTt|wr|oj^-&E$Wyqi&VGAJ4^iV^T#iM1|OXXQq*QAZ*a=_HrP>d zh62Cqu);ti4p%`CcCQfQTU?A^I~u-HFMsvC9SwkK)}$XlbnYus)m2-$0`5>e$A6N< zf<|>KDM9VVST?AOMrvS1p$ptl%j%e3r%$Qe#}mYXG4Nz}MnlOd@%Z$tjhUd6+KlHG zbwOZn?|Des%NMcQbm8~@7=v-zu_&5&wh*am;&*ssNj6}s?lVqUYF&BUGIcp%4MycN zAyi?5pDm@eO2y>VAdbTE*K#Xioy}aK5ioy-N7)rM_&uTIMmBghyo9-~DPJkM-6~w1 zSCZw=56HK&4@TW@{2?A${x-Y^M#ro~s#EX83`g{TgZ;tdTC%L}9}3*a zz}qAjoEGQ+KZnN=k%u@&W@q6Orybl&U&RVit6_(yN9Ug&vmTlD*fc)!`}mh*F5@Zc z$Pj#v`X`Jn3Zo4~VN7F+j|jw2W$#zwb=9FIc->$Jb6MS=)Gd)Iapz3xc^}*xNpppq zZJzUr&535=#=naxuRF}EWcd(LPRv0YE`j5rhY)h~2ui)<$)@9TbT_>@ud3*O#schB z>+fP00`;#khcG_fBo-wubApii9E1Lbxb6(XbZjDe=(KmELP+_Bz`&|?Ux5aAZc$C@ zCn+2$c*%Wm&-(N|jkj;Xi5+eO+g@aFOq_EG^R#~vev2uw-+SEbTZimVj13QC95i!Y z{Q~YX+em<%<+VY0xiVtCA><=)rR?awm0`%QX9z^!JzvDZ0MYy1B1wFKld`ll)|7aB zgQ|~y#Y4j!cn|fn`VE<8X_VX?T63~Z6KEIr&#S=w6ma^9QJDY6T)Xa!hKpKrKT{){$3)bK5vT#T>Wb# zq3UWvn$+GHfcVNs7&h6)DoWNc+CSTZl;O)87#bt+=`YF-)8_v8A~%`UwvE)R0S&kX z_tcHvfIFP2fE2XFh{i~DcH7|!W}n!$Uu-)-altpx*7CiSS6qa5T9zsG({AN|kK3{S zdJUPru1u22XHsR$a`+~<(_1g;0)Bv|+OuBl*#KqVvr^q$bn$#6926^)|A`)H0mMF~KJU zX~%CtSQ&O_DPVh@WEMdkiY_3x^+$eRla2PktUk9#VG|8^P6R14s<{mL9{XbDVyM3u z8X$%u-s+VfSjH=tQNX~?fKmG#Lkerjyx7Pa6nFk3-s(K1NNSAr-t!@jmrzl%e(E$aid5o>@Rg=x!rs%b6^)lLwt*c7n^Xd;*Sg6Of}02P|*DpS#VF#wy#9>mYP0z;916l_e9e~dg`_DGVbPN0DL zu>fGNgYS*R^K&*04Gf!5-~>Ok7J7m|JaTaYQkUs^AM2RAC#Con%?!=2q7kpt>EsW#ZBj@;NnvZ-XusVylSS$^$i`EB2NjI$T{U1ovzC zu3ya!xM2@C@M=rZo6Au)VIzKjJ%(S8mXD=g zVvr!;YD@#X<1V0(7dRhaGa)Lu!ZdEwo7rfq@*5Rz>WW+IhXau2?mC0PwO`VkTUSl^ z7it@3i-g%?IJEPSM9~NZL>>zvvNsM$7BUO~U zZay;lj<-ZQ(FIOz>#d~hBb&Kx`+MbB(b^r5FP3}}CAE~g#}M6lFoarWGli{8{|Ezi zRPDi}I?J7PI%NH0h92+9Q0*N<9%dMgDrrEyj}al&*3Yuo~SO;ZLAi30ZUYKqTs zMw-0X9ew-rHd)^H;mj^hJdzs*QsEV5-;T-EVf@Esrs3N4Eyl@9Ye*yG`B0(UHy)|a zmzf~*`qbmyS+xa}ifC|#`=*}KP$3dlh=i56N%}Dh*ah|(yEm{P&Gq~e)K=FhxnfFh zd;YIXaSf}d`4mflcQelhoMrXo6smb_Ybl9}(V}7urDrWiUtcPq7kM8g!F{*m*4>vv z%USQoFM+}=6LI{=tDAybF^SZb?i?j0KHd(s3#V2iP1TOaFy96LuT4QatVMGpI4^t0 z#*+zC=At}*4-R%#fWEg)VW5mosIs0&aGDrac^GX*uO?lfjJKYRV$UY>_Rf{yYB6y4 z0Gtfnw4VBi#wAB|XvcT*BFtcfaUHHRH~V8DS-u&|AEoNp2m|3=!BjyZ4!Uw0rFYet z1Qt6uoyJsh0fKg^*>BYB37^Q7uZ(zd2VVUJhg}`BQ0f5p0sgBwrh(#l8?BLZD>d&9;nxq;yv`zLz1m)LD?;rz`dT7?!6R3Qulco+*i|Ay&pn#xfym7)cnacp)_F89VPiZ8f}r&tU{ z!VF$?BbU#?!7;9KCq_`^b*1h>(LWTK~ZH&Oqp-J6)jz8Ry>D<+fwK?))Sc+0~I7L=Bi`t#9kPI_n{)NpCt%_1S zW;Yn|OG`nx`PaT?b!r#)?viO8k?znbsgbz+8IcZG>vx8%jcd`YyJbrzv!jb|;9H7* z@@lm7VWobbGY4JHf~_9loTmL39~vH0hT?Q92R;{!S~L&p$bq(}<(QCkA z=GCm(ldgn(P4>KwT$5Ov(`r^Y8u4s?Um>Q~i0My^#Pp{WGi5jG%o;%sPBtj*JN{p! zKITc72$yh#?>5DUy9GqcMYr1qi1Vnk7;PxFE)!dqi>)gR#MYG*@nszv=wLya^`XFr z+Lk*zp^0X%o8pxYMSF4WaKw)1X4JtTNot0zF;`YjN|%$&U@!xZ4R|tjmfki&bqpfo zhTQ;k&O?8);de|#YYf74wIPE2G5LCgAn|zyM-x?PW!NUeLbswgd`v^=2A`DG%_EpBNC;z(2SreVlNtiX_>8 z@GS@fU_gBYc)VgVT>0rWIS^1dr;trJUlRJY$I$%r{F5{Bkp`6kLdybyAy8W zZ2nMw+d()R3D3cHTdK!fsH#5rcHdp{=jd#KtY+C-~nK@v&ES2BwUAz#@ zrwxCPN1s?i0O${)fU3y~69KQBe6Yl;qINQgI$|A#J%r0?Spv+N5-RW;N+q`kV6K|2 zBFh#`Q#ZT49+DWRp*#OCSd40|3i+O`#$xS>83$;jO)K0x*tTSbXX||r@pMBw>gcRM zuC~Ez$oqruXW`l-^grO9$Y2}(v>vc{;@~RI#&lkgxypQ2U0=xcPj08M^wltx$XNt# zC3IN!xu8bA;|-*p9f!zaut_egtP%n&}_R*6@R?MsJXp9gJO?+10^vc2#EK!AL`lug%HFp!28Nmz}CkR2;4fg z0Ss5&=7GnJ6H_pgsTt2U1AVtnUBFo}cMy#eA>aUa%DEud@ecPeTS@ep-H1BTI+-$}J-5jGB8%XA}KS8@1}IQ$rFB#)W`Jy%2bZoFhB zZoZ<3V&-fXi~#@iBQA!65wOY<4VXNn=o){#qKS;5*nW@$6NZk~G70RJ*rrS%^jpb? zCC|r{{_s10QkI{Qm{wm*GZWJqh-nSQG*AOxoj$?0Trh=rL8dM9JVt?g<{EB@aBP8Xc=%48Ky+`+xaY7QIrY1>{Qbpt4n?31**7{ zChj)lc+Fm>=fZnv@q$!mvVJ>8-+*7wnOLOR`-cCb%L)>$vA6cEV1Lu&KK6vZ1^g29 z;tesYgZ?;^`=T++3G$j1;zb3i1q>lUgTG)&CZ}HKo7N=&dZ|HQ3O!T@&l?3)iQ~1Qmy2-8DUId-sV%tY1?63zsdL!XD74F0IadLMW@f=#y)5tY7 zky~zO_zJ9!*i&EeoN^h41RIswwCk_gM)yhQ7%7QAti&JIRJu41U7C1gu*`*&D=%Z= za|=nI<#JP!o&E#A9i;v9p=97ex;N_-;^xLgadVTn`8$o>-3BAj#9%t!qKm|-W8YTt z8&-`DnKz-JefOkzA%`NG#XIC&hF0$@IV^1xzT;FvMOvT`sd0aZ*>>aBeRcz!YCH7L z!?joWIGLz{CPNkP1YuM91ADiv+yK^}!#;O~f;*?3z|k&Ry>5dFE*;t<4VW`P9%ECt zj*>l@syhoRL2(qY=9XE3J=p(lH;k`sh#lp4Zbofo33DdYuO7=qzMshVH=)ou8a(Fj zM8%^`&@qd(q&wveH;Q*?fC-=2oc>Dyt;ZuHj5Z^Yt<$d?Gkr>KUtaMIFvArS%ZH(B`hf40k}PJgL13PG5xI^>(IUW10Wwa#(p#cF;++5QQNnyE?`&m6sfYN zMA6GoVGY6eS}6JnlkdXhKUiZuU`IbG?T12E;N8^*q}aP3@TcGoe+o0nZ+-%!O!N2T zdHa)Gtk&T!^~)Ve$|mpBYMFTZk-|-RNhT`z44h!z4-|RY+TQ5eQy5vEAI?@6fqkFj zUNwQ-OctV&<;%sG0P7M)WiB4@s0pTe5%cja%Nc_uUh1h|RhGpYnB2##I*Hl!6paKk z7@;A<)H)K7UjoEEpc8D9Cu$hm&n(hevi0wU# z2Ri0SmaOhM{Kj?yddc3#sOYN?CB^c$q;zII<*S#C$f^OK;7k5lj@0uV+yktiMNuCv zpz^378h1AkNC^SB_VPKQ^@;A-M?f{&Y+@+!_;W5mU>FF|g$UG4tuWuuOOfB%s}O0o z=Y#NBF7-%h^c}(}hI>8I)6bLdZ?RD5{6?8>fpFX@d;f?!x5ZIeLfi=Z`@AGI`#WH2 z8&KFWc3+m9^AGxSZWWBI!uiF{lcW%VgHo=UKgWa1pOwmwOm4)46ASgo|9XaA+}uT8 zAj_sWpKEx0IU?T-3j*j?6$C?4oLI(0PgdMc%x|;qV{xrM=pr|P%8F*^K31G9-R_9Y ziqFrG>LQ?*B=!}Eea*>xFW3=|6xpE@Mz9QYciCl1J(q)8`EQ_WN0Py2YCfj`_nNi) zrMemrst~3?X${Ni+8Mp`{_wBf$jHi~=+51t^%T>sA3Bk+c_5w%ULT7h4|w>wmS{+_ zz5uVjOYv3IW@a-KciKBx=0TGtU6a*qAm{o_5QR`!jsqC?LhhLw*c08jI|09m zl>hwz1B-6H8$L4fIZNXD@sWXj`NB8^)z9-|W+ zPhJg!4aMD!49b-Mf)8DOcRwSISFvABkDGm=0}>T?rN2ctHO z#qd~nXAY^uMYVne4B%nzioG68-KN?}p%#>0e+;V@#ZG2g&;NLoBw3K>g!fQq45N^I z#yOz|DT*TqNii4I#SM>dW}F>mK<{;yD(h!68Su?$T$`ar=0 zlJJPryv{sJl+wK;M0)D}gOKN3I*ftJwE#Oj1~~t|p*a?zIP{aoH;M;O2bznI529YX zVrRU^svg-a)X!(IpE1TP)@l`|Vm>sG=D&l^=%1*Vv1Aha+fW~wE*F`xXw$zCTdK@* z7O5?*6~cFl@STcf;CXKw;BWOwvHFw(j_;t&zokFL{{9UE?sA%OkjGvyK!>U*)!-lS zx=WM$$PI$P8kn>aWjf=Rh>0OKub_l+kI;cXHiM+7o+*LJr*j9LzYG81WpuaqFSz&h zk7JK(>XtoCM9>Wpbkjft-4a2!jXXur9mLy`|Pu0?X_2L9Q9laHJ_eC&A!dW#O6P<0N)HtiE}Ik33YkH(<+2KCyQ>o zkl}cD856SEZJoKn&FZ!TBGE#Den{p9X^X=_SA^8@nspG=e0+H@H{|R9nbfkS2pK^K zFi+Cq4HTO`6CYgSOx=rFGo6b-BsITD(Xgi;0cbYdL0|l61_)}wsxvvJ-NzXEuSw!X zZ;w+bikZfbZxM;f*#hD#?d}t%%U?y}7eyXT5)BbQYrmni->5#cGAr>Vf5`Oa@)#CI zGm%g|FAr%#nj9o|(Sd)_W!s=;$gz(%LfZdwAyV5b%u&0!nEsE8p~g=f|4jM7obPCm zW?v69*MuBDg`#ANTU{1wl$M

      pF;fj^Ujb;#yhv!~g7$;i}$YFMH00-DXq6CT=W6wLcDvSg^43dx%oSUNwyzavL%xTj!y8 zrjF7WnPL-%o4WJGjmQY>4%0KpKVe{-b`WjOLF~~NEc;1lz!E(3N16YVWO(?mk}0KK zGo)QJ$-K~qhsn~n6$*uJ`M`C=+@$EKZvj#{8YXO|D^wti!{eMy3)35=_Ei+Sunnp8qK0Oedx*_$s8JC zaOgWcia8x78o?1h?;>u-JbeL3b~?`PN9`ro4hR<$yd+qJmwjspIpH=J1sNnoE*%a{ zLHc5NXbEqfDa+>*E`HQdvrRiWO0>fFEDEXKuz+Yl>oTNPFd0Di{AVR#3gZ6m2zb(N z*P2Rc&7`zktZZWgDGleT`1Gu#a%QkL>o%DeJKf=FzPA z95hP(M(<&vx!hU=$K-XgDOwetSBz9?JpT{MVekQ@8bi!foLnC?lXYu5yy@7~MC|KC z!P9e?i;e4!tiVq;z#;)ueFa)9$+!VITi)XHm?8(ZuK z)Z>nt->U~xg^?)f)4eseBA-^-7zMxCorE$9Emb4m=8HSmvld7R+md=68uVI2gDrVw z27Kbv*Blp`Qc%M2KdM%kq|KrZp>_<6p3X9<;X0||dSK7jun-gt$C1zEp^yfp4nCq^ zpQ@wvMR;B~PhW!CB2L7kwr-E{dqP$B7a_~MOg}iDs>wL4wb;~>3N76rJ+0fDRH`C0 z)M3Y7lycs>0BLkTHbR_o8AQnh*a`)-TZhch{yapXqb-qIzE>dC)k!y!1UqTCw_z=5 zxDR-`-!A9p&r$+J8Xw@i$htM*2en_sMdBR zr*UmoZpA}mk;e1vxwQ>CW<>r2c^6l{EyH3{|4Na=0RzCZ;vlR>8vp|Q%b~-A3B)TJ z4l7s^1L0+|3a5x5o|@Z$yP`pJ@;SpN<>t0FV(CYM^#pE2+VUA#9##`?;fdd1Mgxjs z8nJQ%zT^;9jS){Dyb+miCQ_R%x6!_^WsI5QuKM%Ktx`c4iVbH{uL^e*bvKKJS<_s~ zn96i|f%X?*s&0b->hBkU`!FY_wGzUaZQgZ>)a6fcDEvk&oGP5fWdmK&o>K0!b0Lfg zA?_ZhK-FR*McJn?5F=!>33*&>ElQUMNS6na_sU|XJN>%wQdPhq%6Jx^ROT|cKW_w4 zH_Gv?Qp>AIdrsbhw0AadzfpnAwK=R?1;E0b_o@rb@x}|#oHL&MIs@hf1;Q5p9LNJ{ z)r68aGPjyCbPtH95WL#DY4Ne*hgjHJ!|+0 z!ZaY@gjioP?L&bf0qC34RSK;?SzgPap$rCXEdGXv$UuhnFROQHX z?$Kfb(rzxh`TCNvAYC4hs0SmU1Q)I}z*$VoShbcQT*Bid8)F{z6IUp3*e<3Q<>>99omj&&vXSfl+CY#7OQdV15Tz-Dr71(mB?`{ug=^|kac|zJ zI)>K)6sc{=&uxeZm(P z150vvxu#(>(6$+(R{!^hXI?A!zfxy&#TjpP)Z@Bz>l6+IJmL{4gH7y$E$YrI5a zU-I%<5l+eHcpR@o`8#?SR$Pp^IpC-#ggH#IJg_5M8DmUkr&P?F$2N#|&MzVN4+RWX z8TS|sG@Z`4RV*dNrG~iGgl!NU$a%;d*p>7HPw(n`0J$X(nIOqp@E0omWkmVknWIX) z=ZjQ;thq{>Sy_O|YfaN1!#o=r6bq+8K(j#bmFbJ!a)YZ+Tk?wK%P$KlZA3A$)7J9(aL$4l1gujb zOwk@ZlpZ`Xq}ZY#fTVcWTIjg4G*=A7*{f}1pa;yhGY7Og-dd(-DibmQh(Kd@eAsU0 z;!0Ge+-oL>pD@I-#cl2hu~gu}z~{KRIooJB%Ncpb-rs^gEPsYD%3X15|8*m1HCDYD z!#F`P6JklU2}T!yaosLPRdH)Fk*5001i|pI6`l@uJ&BAVnPWr~gmyh)jF@y5)8mj8 zsN0LGohDM%z-zd5%fd8t!;wAhOFFc@q%9*Ge@!pN;T#XWHj=)dt zC5m+J#oJVhg)Iiryy+jGMaQ}kKnD==N39J*#iJ{!blw_FaM$O!72W!g#zq6s3fs^T zuOnf8&6v71V%UlteFwJ#CXnO8UW{3@n=Mcdsp zY|0D~gQyCf%cAn&rS&m-p6os+?}!)L|Z-6lc8{NiNLzRqf zRwnP*?Cx*gn|8H1H@nxbXr^I?aI&{`^rv3v;n4 z=*1!``t^WKPuf3Q%QLi@eBTU5PZ}jQ(tqQ^7=3S=Mdo`6B6*hViKNJ6$OGGus^mH z@-Y5G3FJm(b1O?bQQJ-|)XJgK2c6MEhhS3d`J%5Y#}T}4^u?jvnFW-D*g6n}5#1Ft}*2A4cQDunHrx%PQ-qb2xAVI{C%aICaW>T)q862 z$YW<$oCEO-Y(GvgCDAtrVsY5v0ptez;~m$4>EIm79*}pxIGOb8Z|T+K(jTN8d~ScU&6%(tv@g7q zN_0Ueq)=n{(U_ROyWp;WtDYFT!FxXmHJ2&l`zee=7yW_5SsQpit~h6jPn)gTk86)1 zy+rKENeEbhCAg>nsp=oz!kl^@MjwO1s<@9DGZSQa4SUPmp7&2EC*Y5Q6U#v_no~2) zZdh746ho#ILN0Tc$swE++&rk@i35hBULg*IXWA&s;3QY&w!jNFzVolkym9AzFh-PG z!f!|sKV9DetIBV9tUI0|lNJ|Bi;JYit*Nx8qtJ%Bjd4bUs%_UGEy=kIYSX={0Y-S( zIt6m#^V@LkZJc??9J{|`Lv80-2Mu97Co?2n6;An{dC8QLuFqx4(SPIv(ZGWoUsP~p zKuL+1y3H*Ojid)-qz7ZA2jip%<0&HRBA~Uj5KF8U)W$-aR}>L_7oUp#$SS!NlPR^- zgUuAJhBB#dZ-z6JA)#^qkzD+`?9@(L!yIhl3Da zLc7@my-$e!vsvo$ju=XlbEV07uzJb|QTqA^>KWGxze0-H?~4yF@F(-eqx6Gi-GC`t z?Z%}@L;J=7>uGIbMakC@Jyh|&W<7<{+kV7T$3-th$u1uwJ83M=s&SL%xJz?%`)_}wP0Edtmez+u4P54zAH$7ni}^@Bacmh#O22KdL}wh4 zFq2X`!Uk8k6GScb2O3x`FGMM2$L9=`ICb|oQ(A2T7!zo}PlP%s>h5hQnk)`6abjQf z6scP0WQ-{5LCn%+Jz~1j2A=F9HD1E}gEH(V#s_R@<|wEKgztgWqdRX-=Eg?E6K*ZgV>Kf>76G(d|0TJ3mr6yrglW+jtMH}$%DQAqKJ8t~SKv0uc?@OQr z#@Lzznj8;?v-wx(q8X?w8c|(MSa#i8Me#3P@u{LsF>I-4>mH697b6&rx0*mMMIRB* zd^r?bdi_r`_+&}qJo1Q+XG5($jVURly?&-r{10FrZ&l$pl)U<1;Nffix;3gQH(-i< z2m%vFlHyk?Cc@+0B}__)xrqFs$C4p2RE*S%TO7ABqRd)og)}@pm${xC7fQRyyVff$ zHQvn>p>r?!A5aQi$?Ag`=nP__C?~ovo)sOqjuoj`L8TWFupZXs*m)rPn79?s;zBP0 zITbv5f$K3xJ0d7Y7&&!cfho|=3c`v`c#o-pbZ1S8D4lC2oy(>08q@% z!$XLbMZ4W(ch?UObfspPFpEu0DUQ1C1e~UHIU{R;rmG_6B2UxdC!UYm-yA`)c)j{}uDo#IxX^**^fKm&AB1>3p<>3jJo1LH?hJ!nX z_wyt#G^FAIeh(?)<_dhG$=;EelBiWH@Y?7+a!h;r-otDu6hcCCKNQ4 z(Y&s_7SgcG^%;u(QB{RKc|1KXNLOp9|7_mU9qOiH+jjUCS4%SLDH-*` z?!i?-1wDKZ8f8@3fYOfUhz5-)*mM`zGlgYO{)Dst0{y?QcV!ts+iu%IboBT_o>CE@ zC+QB$4bRz9+O945#DIC@z~{P+HbE%wJ>;_QE5GS-s2=7|)9I9qIpTthb{Nmh49KfM z{`S)|jf&o3ygVYM`>3OtU<`i5$ls! zr#+><86%1&)VK3b(ZP(=YdT>IU`o|nTn)D@|DtJVp=}AZF$_T!E@KBEbw^}Osb7FO z^}VqaFlOGZ0e|B!5W;8_4uQj6Yu8{j!#te&PGwuu;+r+td4^k_#3OC`aGW4EmeLaH zqw43kp$=r&Y*yunPKfduH0aS+n3I_|9fn+MuO-}5i@7DZu|IiFj@UTkg%i;V^f8{p>i-`uYa8Y0jO^2lcrg-${k9^Wt ztRY`WU6R5<&zpB(Jn7s?@81{jW)p6ds}qgP>bi61ynA+*OTVh5U#!iln9tCgo6b~a z$$);43)>GuYkt)GgHNLK5`>yb6!ZNh>RF2a!=!YQ(-UIe<;@)OI?z1NJD86XI5^A%_CtcrGFls<#qWEQI{y3r^vifhs+EeA0+wt?)#@8djAT#*A|rmoC?N^- zIVgVN_kA*-$lH?p-EV?4s3)~={5K%N)`_~suz+eXjW|77j70#3XFe#E>OC4SJlS^CRJiO(EwB;oE6qPEBSSIouvWpK#;{1@l`@W13>UYj58%l(K9LChtYXHY%}2G!IRUO}L6+L{BOc=u~0O23Zb=^-Y2q8}&2 zI(yK#=OP@HhZmG0OPhKV5u-|Z!ks6MhT{X|C8`h15Nj6w7ugZ$>Dgz@O((rdB=m3+ zU@h(-^FaUpyE=-P;TS$fZr~YZUGKGnr9{nZ%NY}0vkwAlH7RT^BQab z1!UD6EvhM8^bces%H6%0<#YdXAETTY%iHLo=?EM!9k-)5WJ6(UfA2KTd%)2Av5`bA z>W^heofRRhI}8oH$+J*#mwRM!>H$(~En^+0ii0xAF&F%7Ps69>(kxp$I$t2CShL+^-<%awWtp$+kyX)qp%MC)T;V&-K))hV)@W%a@ zY-HJ7WXB$T?|fH|N5dOrQqq9UpyrCMGyvFHDZXLkJRQ>D%G#aUJ?{*JS}p%a^amZ$ zZX^WO;bXf{K%$dqU=KnXxS3LmuVcLzx8;$IJl+Or<>XID%@6Zam#yjW3cL?ph)o`M zIV;lurAN)gMk5BjrshdZFw{Ow(aji1G;I-&Hgs5&4H`Q{wh79QA+La)MSHR?pNHq6 zbx~XhT2E<7&v2{$W{#dn4U#EsSvu~m^R>7asbj@@4A+=Lm-&mD3ST(@&8EYhkhUZAv^o zyW{a8Z;#OkoAi+)R>Q_o=&}Vrmc!ibM`;{h z$x}#2ER4vy=sS;alO7mggnk-B1D*`wt-rB+C5EcaKWy%6)*h-qY+7gkoS~#u{3EMl zS_>RgLlyw}nr_91YCnge^p5kWzOg;yh>tj6+Ugb1fyIUxWZEXO97*GL18L|!MpCg= z)amtG44gydt^Wz>KqKD6yo#2kWcCC4dMuLo)4)vR;Jz1WLN0Suf1RbGfy@sC{N`P+ z!$M!jSw{%{}6`1VZvvH<&L z%ws(Gn|i_XtS*fh!|b`&K8+}S+$??ELScb3xE*nKCH|N6_-{N;_MVF_U-%VBUKfi+ zS1g);pmb=6__PetE)RGZESoZhwEWFdmbQbsLK!%o)X9Ib=@~P;tRsM#>fyC`?ChlX zPD$&^cI-+|9FBuWPT%hS0S4WK5Vbe}-HVSaJ^pMGhVL6KSWjtXytBYTMIA=to9>pam! ztA3EY<9zq6E=+%1YlY?>p8<7&GSbV~NlzjJZ}j~Hv=%*co>((oq_RD~U}@`S%O)=F zCi9_P4V(3;I!hG~J3oQQbUvENi@~{Pe>iLjkRdqtX$8j_GsLQbq)X81V4|dt!Pepwpf9M3$uYOV zh>ki`Uh{*AL`~i((V#EsEc>Gk!B=AO+-o&8-q#xAJIu%h9$og0nW&Dn(A(WC`j^UV zo8n$kYX(wfHmHAq!U}*7w#_rk|BRgLco&%o9*0Hd!>Z5zO?`H02O5B3zR5#?hs_cP zJax!uh#tha@}`+=l!q^$KT5i$=M1Gu3#Cbm45Uem!7jb*DN3tgU67hI{r}0BEgs&% zOV0ECMRyz0X_@#?EbROLty1sL$06wmE8y)vc{-)`07X)dq5@j*o}zx#9~%MY-`VpC zx7*cZ0F#q}`{%I3pVz?cKOeCLi>kf*0(!QEMj)_Uf!QA=7O zV^!sfbXm<#v?KE29`MMaQ9Q%pP84@D1s59-67@2}rE--Dd~riG94))2R5Z-gHnvZ`H4nUY9D}7%GwIZ zs0CgvdQq%;6LS`>PjYdP?@`cC9%fLTHoD0I9seUNMpw2VMP4<^m?MM(Xt_)0}ywN^1yW6{qFk{KE-U27xPRH3@CvC{S!*01i=Y(4 zVIBg#=n-nsc?0qz-%dg0RkbNQl$VOR3lnUr*PM18UB&zBtx34n6cg6ly>fT&>MeV^}}(y!aI#E8Ka=u(qLz zu@QCDxI=#8BGZcu-G{V7yF#D;0+NqdG8hG|6EKfhxurUpWK-b@h3A!IUOnz2e587_ zqxVd`cwBd2v&=$Tlr1gFp-x7io<+w%1Ul@2hB*uv&xC{lpGe;1=rZiExwSJ;!0;y7 z-wZN_O$hHmrV0-Lsr=U2*&0NGoPB{Ag;W@}3ap z!q~n`9Cs-AJ9OlNw=cyS`r%>`4pR+KA>UrRpJ@_rFZiy0gH4xDLR~f@2)fQxZ{T~# z-vpP5ls<5;yk;0rfYXE%g5=~y-UnaE-BRF0k@@8V7+39)jiQus8Y}7s>yH$dVv*Xp zPXib`r1MhGQa0u(vrm}K|6J;w1G4a0oC=U{`|lW`Esfk|iL$!WE~2!gp0uPsMSmTQ zfu8xeKV@C3jS9>Y|I?E6-EsuCQHrlJs2_$dwxQTVr}1j@K0G7?f`CXxUkFs43vugn zcrG&v(QSI-s8htX%tkZ^C=p@h96dW9)ldD7-w%pOaz#Jq3?Su&b9l?Wl@@7it5?We zGLk$Ibr!ZLn-R)FbeUL-2KQ!lziOf}aueKn589PM9o7!OhwTQDZs|be`<@254JMy% z;YN4;o}sktE7ZQyvTx)a^HY?*+e+WU_b;lJKjSKF(u#4eHn%t z3`YQ$-aNZaeNJHyX!c0JIw@%8hn#rBd|AzE7FP%xr;)wuDdc$&v{X0NQ?s?^xbrG? z7Y#Jj>NyW<+}jU$bttd^teLLrH@gFy3?&y=$pviudn0uX4@Ll64bJoEi_<(-OXJr-@myAh z?v4YLh4ZL)MMD04p7Hn_BC|~Wn`Qb*g&t+ZdTd@??>Euj!}C+oe!=?^V}{l z9_x8n>Uo5cA1%jsp%1a1_7^5D$)9&^v%`$Y)Q$X{|1=N&?RqiTf61TB|1Tw{(rWhF za67XRgjdfM;^>aHT-*|MpU zI1Xo1+#S!~)|S0CmLls&k#(iWdQxP4DY5~!k!;xoHr)FiNR=nX1N>C&+i~ICeeY3A z&ix3iaDz!?akvo3JVEvgnax)8#kIPI1)z?D{$W1J;{`u(?a>RV`%ZsBs{BkDw#I+9 zGv#yMG*tc4f$D%3WK1M^cZ2)#DqO_Pq0;98pelQW)@O5Pr@6yq4J4<*jVJ}N)jPt7 zX*v%>;BV6pq!PhGcdLa>+V8DI3@csq#IG zh@HRR<{Bd2w?Kn?&ZNO}^}skPdKsv8#aMR9!Zh7*fd^ma9MVnRDM)j2C}H3x6yN=o za-Y`4zM3}k5_|ZlmqK?25m5PS#A%D}TY`_ImlYw^hJsN60Aw=Ji;uxj9BFb4QpKo# zNS)8ZAE+fPM5UI6a0FW_t0TjaDl5QnJ}o0JB{NkKeYWG1oxYM^7`-gT50V%s`hFI z;pB)1O`*QW>EYKVV}?ZIRite+0_`-$8B6y81wOql0tN$Kux2ahWQkZa4Up4d1u$+C zgmJD-{+8RA;~uklb3+1ie3)p8T>*{wL!2dKcQuQznY+> zR?R44GV>r6P-<@Z7w<)^zlhr|?{H@Q5lB4Dm)t?7^BARJpA@WNxO$t$i4; zC*@gZ-l}f?%Qa*$*x8rCFfSYnj-9N%L5eoeHz{)3wS-g3)97B*C2Vo&>of>N#^h?F^|J84a*s5 zaD>uyN|?I~g_8BIhd~XOLQSS2we19i2uhSpk_=z~gjMUBXA0EkFq&6@=Ke-Zj!VTx zxm0{!D!u>)BBm3c2|3mVC%e|}hJf9{@)lBjefY+>4!RG^Y4}g%AHkb$LGZ!oS`C1E z%tOD>pE7Z{hGY~>tz$vOV9ic?fMTWR)&oH7Yq#Q8{$7f7K*$5`@hh^b_Z7GKruasE6>V3>ykfc{+Mpby=yHQ|Yy-uw+f%9&b2vHD+lqnd-yo2)~_QrP|9F6M)rvxz< z_}qTM|VrPi~8K2P-S11o-=9p5|-|a+09Ml~e0uiSoMS(c@pa zbX+YR*GR`5F_K5tVcL|Ww=#>|iyDHS3Qk~(-lIO1x-kk@R@3Oo%&n)d&iJzrx##fmZWB~26yey; zosjIPG8pB%yl)^%r7JM}Ertp;C&=;#o1u8ZQb~Gon0%(Ph|}1LdQ7WCwYuBnH_S)O zg-FD%0uHNAV{>I1V26a>cQD{~;yYBR9B$9Y5GCK&yE23{KEN}QV-tW!UU8d{2AnyB zWv&SBh->SLN~9hQJIka^rP8L3(xx&}dp0+c8R?w|3W6i?xZR#&p(QD;t{Xx02I>Td zbMyeP=TvdLi<$%0)cMz9q2?rwKAH|_R`*E4in>E(V|a@mZjpj>rrwfE`@=G+*c&62 zccBq_VyYucCqr(U*7_<2BX!jy{f6N>=7CJ<2&c6jGhzSngH)+4IdFv6w)0S3K(Wy{ z&61D$R!aZIkB543*IuoTyA0S=8xSeJ-4?(L3vvTs_U)cwcg zwBR(Pyv~bE*$>XAeMfve;?-KfNBRYR&s=zlhCu1E^ACL*9>;K)T}@qP2IBFs-L3cx z0?m~u47l^n47n@~ebAlT0N(NgM)JG>H>VJ4I;cKi(D{=&^o8+l@1YG_)?rLpFL`Gy$wNcASGNlhMOec9q3cc91XrVKbBH%t`}jBZuZev&ZAC=U6>y^5=2e3 z?NPePIR>vzb4Ot?9nX+i>%0Gv7nW(&c%a>ZsIL%%s@HeYkE_dNAK;Prm&35^cT}Ug z;VWQyBnHl)QNc_ts(Lbgs!$YLm`^G-6! z?FhimD;npYzF7>+p-5p>aJ#hWT*pkTkbsR%8(|G3 zOiM*>v&C5XqWm$0G=GkU@*NS*-x+>eKXUd-tXSkfQadfi3^`}+hFSs|gefv<jTrWx2(eLS zgEvKuEh4Df;Ui67>GjJhp+D;F{CX0yQqO4M1d??ii+RvrB~)s2O2{DVc&5laYH4Ii z2GWMlFf(%%r0Ka-lG+6MUJHW-XNYFoqA7_jDY0`GWERPa@hP+Bh zwYZ+0GEkXOz4+A6*e%eb3(JmE(&Z2)jx;8V1gXJV^2(hjlisof(&{2pt~!fLNWH(Z zJWXg%%?(X3z}g<;MJc+r6pfHb3$6prb$B=%bw=iEu}brHZV+N=@almm=o|MCZ-;gd z$8~sX?5GHEwuWN+@b>BPI~h!lbYnPq-FL&ieGD@xn)W!Jz{~>V-3y+MP`6@CM<^)& zwAno3Fa4bI z{HM*6^+6NtVKa!}{O~t7p=QNDA=#0qOFS~uZlieAx)KO8MvuX7EDDbvhu?ULZ8i?i z)CMY$UJP|0A`UM=PW+|mJn_y(Jn_nA)7eM|zISU*V^nUSI}Fu_nn7IX0X4i_5QQVMc@5BD%ErI+Zg?$%+KPraI?!|w zx*F6GzcPxSTYye%i$I9F2f!WLcOEh$upY_HnQXm;W7-UkV0%<;p2z;0jw`|qWl^l| z7!yxm!Vvx+($db|vBG{C_ayH)Vf1H#_TX_k)l4J4-J%KMjfzMXqh|Bym zLo~bM^hgGSu}Lyp11Ub0!nd!-^MXYDk|@%ptEeTR&jIqC2md*$@H53L8K&h}H%^Nj za2>j0H@*`SOj!-=(S1Zwxosv&x=2YEMSbU`Vd%_u=n>h~`Eo}y7Xa`QM-=r+TldRJU@c}#kJ4ihZp^UgWl2RW%!(CP92iV#cQDMk) z^te$^YEgCy7xnSZgdBiH(7ZZml-oUOa}P!(qSY$W1dNsm7(^fWAv_ViDA4f}E}-x8 zaY@02Y(ACF7Jz9xhsWasJ%0V-LC`fijktE70AG`5BRA21GO%Q3^KOO^)Cu3t0js%Q z%f*ARSSzIV${zfZCjX*dFV+Cm>#I`~zoS2%Wj-iC>hP@s{4CpXu%yqbfia+3CaW!( zxR5#z(^TsVdDQ|l_No_UZoP)q*ylauDw~WS4kF5Y47*EsAWW+C*Le!L$t%&}-Xh-g zwI|>c-*~!S)`rk|z{}L)BFD(ob~$6{AVtBoASzCZiYFh{GDhOEd~)hj%F{sJ{YPWO zeebgqaB{817>n~C$f$CZ=ob@1rp(lQy8x-6$%EeuBZR8%XVp z*yPlvHhy)ed1M@NYj32G8IUj{wxB2C4*y___ji4$=`2$`6uXhNB~t+Q4N>j35b1u~Gbp#p{O?H~_uvXL`L z(SKH23nM&fZAXacJl~tbJ1vw3 zpJ%>z2qNnllAF9EZ;Dn6@y$NYl>b}D9ZRHw_aF7`4a$S$682Wt$U2zen$*jniv!eO z@WR`=$Zl}`l*aa_(n7XEQFw>)Ls#8mJdAw1391gEsvc%=_lzmTcy z!(pyzB+LAZSM!+Eya1gk-g@38{BA&ULtkr$c|V+X2((7(#?Wt;2X}w@6xwG~(V4v?xki03Os~ zd?VxpG=j?&+^*X_$4#j7cBqV^W2Ql-Td-&_a)up*m_c|+9%kI3h<`j`055cRr^w$E z(59+YYA^N^eunBWW9K!zGtn8zM#p#N*Dro%AP|7wCzC^o@>ayu$DX%J`lU?yoq zZH!gp-a1YnGK91!U|=x2uu@;hKbq-RpVdu3)FiLZgT%IF1dpg{3-{ckK@L*I=yP1w z--s7>??YWNL4AK-#Uy)=C&#Y$WOc%9C~>YeYDkMejFvvXNnNHjW$!KX_wDhD+jN#x z>3kXq( Phb0>L#cNbF;;s-+@o(KxBw5Hu>hSZvGe<3}3trCxgUGm={}^zL_}n%9 zA5auv@ET8GKtd;^k$qjbeI4i617mnugR_3^PTp1x@Tl_%ZnO5oJiRzdQsO4Amp@vQ zvU9-yGo7*zVv#i}HQ`a!z5RiZmat-2!L0GX>r}RW2`1OpR&P-0P?~F0v!!Nh&9<8D zH9N}4y_{i7XS_s^hHWKXgFS%x7_}?joSjeUp#?$=CG4=`MZfnb4LUs@g&pNDWii;G zHGlI7e6Az5>#=>~Aepr9rm3{=7R8kf1Ng6j9?v1qL^OeH`^Y~qj&uYmcbNBxG2w2^cO22H;PS%`v(p$ zO3XsI*&C3pwZbA)p4u)pg3HK1S1_i52LW6#gEuz6ynF_W`f? z8@FaFHt|xj_4dS#T|^J0j?sSL+H82~kw^MjLE1N;y5=#(?)nZvLn2Vb6+(GK@?Bsp zTGgYrY0yE5);QJj1x#W@=Z7??9C50Ja&jDAAto5Z0+^YgpgJsWbh%F>R2+G4N+Y3cyg z0dLI0e%%nKz_BPdX>KK2+UMqPd}-{q`N&bKIR?7}wqqI4{*OXr^*dROv|8RBl&D|# z?Pyx)j-gn43IF_s{P2NO@uA#dl>FWb7dKjx%^M!6z}MYz>oS-kk8Z}T`4t{t=Sfgm z6kMjr4r_3i(3gWd>^=h=R8xf$0(_|?w-;KXjH(8ujPp!h^5$zEq{l4*`?=RJwV1RS zE4A(+OuN=el%}!v zK1jJ62grL$4BoRLpJ3j188D|V8}!z1%AAaw@PDA^G>MU9uFW2GLX_* zkZvBLc+CYn7#7kOL7L;!c(Vx#UytjcVYi@*D4Ea7hhcAO39U$XODRgryW#Wl`641K zS=Rxvduc4%V1T!?Xop!<}tlob?S4lKfc{cJdhYtE?w8sEb2nHbS9O z*-Wa;rL;BYWi{6fA}DydFN)gv)`0@b*%?%7zBkMwwlxJtDD`0SE@Ejf%u$yl{E{KZ z5JeEWno*1^0vb0(YJU71cShY;Ld!iof5G`vLvHqa@TkLi7QiXJOpzwlZivR5D1n_h zXmJF>oLt16hZs{~Np9aya?JgJyk_{68oq2nty|)qga%AMIl}cxvg?ZRk3Awt{!ig5 z@)}ho)}{_qT=0Bk%RYd}z=4bv;+nj{sB3M_WFWT4YIPLy?0s(OWd`cT+puOe`?#m! z9p4~2WJ06)sA%UzN}0lI!T!+=69YpPXbNC;mFg$5yszKjhDBwuBSv)#{92ORSwHS@ z_N;&KGHoXJfVwEDYw{L+;>0e}#IAVg|MD;lUy^+tP~@U1Wd*&)`W(FK2;25O>&J$5 zY5sS(mh^qyu>P!rdZUVg^=y%L*9IURDLh7F9gaT{5tB!KdpERX9OfOkqkbm2PS>G` z_uO!#xph_pR1NQvZk2;fnxAVR&Cesvm>s|~s8};8N*@T%@f}Am@Eki5T;t>U(&Ggb z*%2||g#O?i`^%}L`zlnWIyjD-6#bInEX95)Qj0`JgO)CXc*=C&uy)s;!V!Lq_F4?l ziv7XbXH)yWAcjQS<}k1v1Nn}%31bD_On%dID)>6-iGng#j#EWbJ>#bPp}`cVUV>*X2$M#9K1<~I9$bOC z*Da*}s}<;8)IXRHVaz8=@bX5c^6)a8$;svh9&WZck@=Oh{WZnOR1nAIWOD$cnj~nv zFNWbAM=eGD+XJ(bupKgbVedhzc(WK)6yb1fBXSvJ0EF!(Fn#6`aY$aX2o_$_?#oV9KUh6kbY9(at0%-?dJdW-v0H7x)@{wcB_D_0pp<@ zxKEF-dq>0q>_pGiRQ zAh>#D^Jh;m>)c0Q(D6CEr<6K!`4Nd7#_iQ9LFzS_0;_q8Xk#iz+FkgNKg>78WzjG>09fx zaI#qJOdiR75xfCd)#tVx!tXv?IrvyfPivtsHGd9GgIH%B4gORLoNY|z=Mb)$2hjW; zp@6e%qkerBYlI=mA;vjbB8zD zrnebtbk}lZFyL8X4QKU4>><`pj6=My?vs^3{OtGlXfeZ@s;gW;nAvx{j&>-gwK6h* zV<8Zx_VOfA%G6--+R(4<>;OzHCKtNSAn@n0~enf5BQPGCArMQ&_b)~pfFyNXX zuUGR?>Uj_z{+b(TzoN7prPQBhuwjl@J!8n7)a&f9E8-?r52YTA$Fq^ku0mq0Gzn?I z$1d}q5rmG|_HmL=TbvelxNaRv&tHp@nJ_E?qPv@gG^S_-Ms)6A{Dx5KB1d$;X=DiCJ~ zA;eS5DbPWwJL6UJml;UibKZ$kpF23CX3rQ=x&Yfv^Vk3Rep~F-OAtN3!1DKHcdF=p z6evz}5@$1*LzR*+fbmAw9!Lk=snE~@{q#gIJ+v%n9@BMh4=HqYF)m_?$f>A=Tki2U zY!@z)6ZN`TiFZe6$01caM=_SE#cY?l*%Vnlsn#nQ1@v!=SJgWaH0=>C8gGZ8!fdvq zaNDlIOP&jGbjp*P?L^Ro?Sda+1vXu`h39EARgU(=h0hDJj_rb4l%4P63{OH11i0+-?E9e>8Slf}RNc_NYr*TsXzxy|&eyHDSI%)MvJNi4lHw{0E=4 zGZ_R@HgwP{kPK-vVgRqV>cm9oT9J`6%ElQ4I11F0Wu(rb}h83YvMx+{b z0Zp_&3zJ(p=^n|s551n)2x_Wc{}AoU3S~Kc;e>Ta9Tlcno|^bqnB(wY`_PW!6_gfm z507#@=YUKyYiNP%$QtJO24C1H)I24JMeT8;>2eTh)3`wW#P2%*=wHNLN?m~F*&r@U zthNyE`;0t{d!w27%_3!l2S&&kQI3b`F5>O*kHhh>^)dX8Q?wD&s^kAbNNz?Jm+}!L zVHy|eTZ7x&6dJHJ7W3>ENV)O6<7hlK@~3@xS-Z}iv6YNsZnstY$`9}u$>h_*ouKYjOv3`sx9bo>A zmFyCR;X`jpi|B_)yB))x8@0TGyo2tun_kSjuBd6@cuLsZN;JXFk7z8=@%WeC0f!T# zT8ei<(pvzbht`$QEx)Nuxmd|wBlVsNC#~OKWR&lI6}QcEUC^kakt49Dshrmcj^wuG z1us$lKBcUL07SS8lMmtUM{0Q|2X81#l94*>-(x6=n_y}LY|(BuT2qGe>o!;5kxQ2s zqOnx`i3T=g_%Yj*gj7=s(`D?6K6|<4rjF#lzz-v1-ygpLG_vhvl(C(_4b<8-kV(E7 zk_dfS23Y}4?RyNE072-TJqR+8Ez}Vp=<9Idkx^(UIakrFbv$J@FfDY(pVi z(ooLtA$jdMi!LNxZUuGv*}ZzCW1qGVHR%lZLew~fe8NjmQtk!0_E?DMLXO~f6!R5w zj5?JmQLsref7o(e1`{Q!(9yhjT)Q&2)*Iu48nNSTM}-Jil+KSk-Le^FDLZOB$^xXH`U$>oM1sXfWH_!0)Q7Q8HsV56Ks zKL2C_#7wWq$m`Qev@NI`555~t@VVw9mf^7C`Y>ZMPA8AsZQ0*RX9A=5Vb>^i+i?_o z(u#6gEoE7xXD2P(pWtv6IFz}+@Zl@)IQJ1HuieUR@axUPWq>>$j^Ch^HFf^% zFR79lo;~YB&Z94|34+f-w#_xopwML_1P6){c`0|T_&=1rb#xTT_XnEknHYfpaZe^A zad+bGE)YT>1PKz{JwR}G4+|_Vi|yhX+}Xu_fkk$4TkKZe=MMY(p7Y*+FNZ0*yQ-^8 zZ(YAE%_*wqqs(=H&Sy9Lse2Fb!<--ADvocX)c1U}-WX2VeqgU+s(sDC_l4cmk^rps zghyWhQd1(LIIHv_j$_HRlt$#TU@|C+EZ;9cAy+j>3mmjoUWg!9Mx#o*f;Jm4uM@sp z6%0YKOnhiF$1l%!h?5yMXgN|yfXA8BsWrN^{+K&QGFmU;; zDdc&vP7=e}Ph9y}#LF5&pL98vSYRU*4`)#D>`@qhFu_qKEcgEQ6VI8pZ}Ek zQn#f;z({o6{RJhxK0-oe1(9StgID+Vj%KBDKAu+nGV0al_;dw``14*CL$tYcE7Wl!p|@C(4lkT2tr zrhYqu=3$KMsl@Vk)Lgov8B*2N0Z85K4ufrouffx^H6-S8dkID%s12yV zcJ>{bR{jD7ZX>wW<_iE`E)7c<&;IeJ!<)d2XJDkAx|5q5XK;(XiyrCBmAkE*$r7Uo zua2l9B9=xPd;*`#)C>U~dGp0I_D7ohNFTW;+~6(|*b>Zk^qK%xjVjrSyrS0iI^KWC z$`1H;+`gxHmhDiCb1}DIH%BR~5KJ)+ik*j5Iid13dfNe>cp)}7qS*Q~0HO1Y@q@+k zJivtHqGLb~N{kpy?Q@3tmA*A#ufKXruFC=>D+Q?<7{igIlmq6_@oQR(2xDQD8TA3#N~->l7-uxKyvF2 z|BV&9j3n|8`G^Bp0WeEthlYV_uo}W=YVtcHgO-To2Tuzmjh$eyu5`kWc5+d&s8F z55wgYwE+OFDY%uTPhm@B_MnjkX}iP4Upz(lF@GllE~+B7P+rVq+id<@oI$I`Fcrl|i{--G^m+{%%KU4CQC9;Nnq#3gV z?*$$Fj;BsZ6q>vW7w*uCT~dZGXw-0kA3)?b^c#Fy|9}3-H@5}Kw3uy!CZ=cMmrX4u zLeWN+uAtPHH=#ftk-{9!$P1vHz44isabUAJum!P>excCM zI)mTXC?3}t-lVxxs}Onq`c30$XdLWBz&l^|8oMB1Cpq2qW5p=t+f4L5@&f`0$SOb! z+anqqHYQ}K4saXiOUdIHugH!Yqg!`wks~mZK8G=c;>ic9SvdijO83r~HXNazZI|FM z83bm5#j>Wn_0?B)%YbvP$8uj` z?F@wd3Dk$gH3M-Ca5d%vxD)`9bKXk{ScQQlc&C$wGN;I82n@aAB;IrYBO29hT!ySU zA4zo$8X^!-#U|svNezPWLhBl@I^Kr~g8jB`z;x7x&>IS+ZXca77V3PmBsX-+-Gujl z_Q)iRt#c)VN!6ub=pV6`qD|urENYieEnq8-z6yh4aBbi=6&2@j+_fg@3-Ith-8jvcG{tdquv?@W>8uGHI+9gkS(G2t9}lb2R`7)6;* zVlD=#8Mc$#p8gSRay>N# zLbnF1!P18^5&zE!nuj3S0Sz9`MSU02DNm;t(&yD8ykzl@y>2p&{^8x7h)-7}9 z`vg_4K%oGaF?h4_W^(p5~b3M78A!rsBO3SQuG=Y**xOuVv9Ky@9j>9)%WysXbRbfTUl}1#^*56$ zf$HTTl>HY-0DWsf;(KIgW6Hg9Hu8tHy|tK({5xrAGC0Jklv_6dE&1Gq+{P5hL}er; zWElhdNWPteW*q+uzbBMl&Z-~Y-R3LA(eHZVD2bzjV%v1Zi!;}gclASgv8Z2$sdXoh$ipb-X@RU*W<{_WO%9`1Go2T&Zp#)-lfSH=ZXh*q^Cy#|3;Q zYh5N_Y0E{)S8|xkM`Zpx&J0Xrm}_2+Al=LvjcS6QDaEF4!S`$L<)X zkgvl?kdnzO%~1H5BNh3AwvpslDgH52J*yEfL!v9py8N!E9HZrB0H0 z4JHl#bOtfY;mmvdK2Vxr8=Q15GkE?2MvcYhN^Hz#; zc0Cx&&U2HHF@EYSq^jQ@B6U;j#DJDTmCr1Y#^*6gTDA^np44m&^|+D==8t#dE^@J@ zt=Q5|pCalR`%6$z?7Ba&7ZNjeqd8mu1pF-Y!a9MQs{v@gR<}beikWhBov>VC5N_0% zN|(H6aqm-n5;7wUbkZaR@_R$C0nrIsk@phz;E^`7KOUO@wG=?Y@h#%JVG#iYRI+p^ zXNU}Gar;uFnn~%3=6WL0QY2cDZ{N*$sdag8eq*Jo3sTcjNOzvp(bHfPrNHl@Tn*vv3^< zn0Z2?# z=plt1>T8__<2Qto!lF+kh}!(7kRm&`VfmKpnb)ud z9Z!{%jk}~%1JSDe5EQg){)enTr8SBHMO2F>+{*&8l{b*w!UN|)(O_m@-yu=CZ(E|Ja3x{ugvBsfI}dt8v_Ur)fGA z&1HBi+_?Q=gEX<0Pbt5@k6~2wPHSK((I9JBMrBW90o^(m&&KLizA08-TT87*_%c1-c_WiL%0dsAnK!ym z>YS&Na7}4W!7s0(4%IY@2pEp`M_l1x)O|)A;PJLLV>yuT(}$3!oFcy+qhYZbMJYNf zhQil{$g8Tp&kY+k0%^e12dJs(7D_OLcwL`b*m|MDdCK$#s7KG2gz5qIj{88Av>L&a z<}@*1A9xq~>f*2;ZLTVhl%h>3cpOx>WXk81p7;|=W$&|RTifC?1s|}NU^@tio>0jD zjbHo@1>7!okwj-`iKIX)8j9jMu}~llie*8c-9Q*nacx7|Q(N13G}#==N|$Hj$@Sr+ z4w?lvPXzS7zyMe~k>S`UUA^8Pz%jfIN5EcxV2sr7f8vk1^&5a2ug|xnhVh{1JHT~t(O|(6|~I`__^a#)Z^%Kh^q_PqZ4_> z*|+5hSm;V|tC$_RbPVK2bzHzAuMkwj4+aSZeA$Z3=6_J&?oCo2%v8EH!HP|N)(A6_ zKEM_oPai@&=HQo0xlr1`i{ApE z2GGTX+&04PS;wg$>i(F4@(DNagSaW-7Ui`V$WCHB?fRiZNz?nIDSHP{>P+TOT)9NK zHJfqqSw(Is2hrDL{}Z@942V?wr$Qvyi3EF*;DBBBmh?r9Nn=rif8a1B05xaq;7tAxTl21PCJAR9Aw9*U2IhhT0P4X>vK30K1&M7@xGJJUVwQUaP@I0 z42#42&_RengTT4y3FR_LSq`@Kp|N=1y_8q68T1}--o+flnW2xXknAYQP)*5e*#qdY z9Qd!)US#4bj>_?k!4ih#4koxga*;}hKg4n=UugoqtF>hu&yoAT`k02X^?@>> zf0!%^p7BHbyVvtYJG4yghIi|On1dE1r;h=rG{7G#kd_eY7_WmHeL4NI&qFS zyy{`?yP2Xremxj2#5iyI0kG6@135sXrr29<38hzm=OLi)@;0sGGOpXPrc2;amn5S$ z6f$%TzMy$Y=B*i4J0IJ@jZs;CQwW<@j8(a*uHP`}?w<{Z>2VhG$B zQ0)3lKm)%yZO~Di@QI%o>HhT$b?Ubr1ikHnO4J(C>MqiVUuL6xN+2Sz$WHA=mFm;b zr34^P&?2|W_9QRhw(y32U12C9^F?HVh%BUHyKl%%j^}9Xhi5{{5_bdl4pVfvzjGz8 zeT%vkIw+U9{k$xJhIZuwf&X5@XKW(yYhg=q-%>H^S(C2m%K5!}kFIoCz&st58G^&u zXo2DwEszxOf?2Zz?H|9EGF!1U)OHRt+X9SY@X+KcMNMFmtGWv%JU)x|Z0?9(C-RN| z#-hN;d#najzJrn^Q@oVgFAukWRFh`TChn&90GNaxKaH!RJIl1_T#Vt+TvaZ1OttRS9<)5(8fkS>Jkpq!w-nYka2Qs*g+hL-2lQ5{5evoUC6>x7 z(ij0U@w@y7ON*6xk`=T+I{lv}SZ?D`)RA-U0#ffSSu%0q9fDBx=8iF zPyxpUKBu84__QCEO^O_h@sU$6>Sk@yb$fv8mZ7{sySHUMIQ4b1N5Bwlp*>l!dzdEP zPA7GvY&O#j>=7rK15@A6yWV_vH~x%z;%W?M{znHqvYJwg)Te$3r}mkMk&Ax{D3RJ6 zmbp^ZtrHl2yNSJ#8=3!r54zYx?eXBHq#L7AeU8$5fWca13G4P+KftlD7w-t{n z&@$_u6yR=&gFPjU*$C-Pui~`_yYSmhagD)6M8JCJ31#P(43>m=s~$VII);&{;oTC^)WAK^&F4cj+v6+J%FziJ zq}1m#6lRUF3X*07V_~}d_ElfcK~FE4lzM;R@Yem2n@?lVW}xN!STGHj)}4{j3@XhFN zwV=C)Ux`5}tEoDCG`{&$RH<5Rt$>^Y0{dx@y~6^F}xd0x`9f=H=I(rZdSQEwIE z-Wo$#_GJ04kaN?DQx$O9mPAzvH)K`hQ@RW<6-Knh7f1DCzn2rI)q+N_?cIXEs5IW7 z+l07uy)zRZ(b$(Mn%L=yfLI#+n$fa|#mtO|-9{sytN`#0J|BZ`B*l)^?UUptsaRA8 zFGH*Et33**%qc+OvrDO5(G#B?HXs>C+Js1Mz02#*3ZefGuP4v4yZr3{du%LObI z&{qyL44MAd^SJ(?iIZ`ZmdQOpsCH>_4H-^fuY+sm?{4%T=u1xIwW*x|uL-3qDB3lf zgH}`rHvyki(%M3#+T%?NT)G_~ufr?hcd|}TEMHD}rd4bvQ5CoVc}`2HOE@E|N-OG` z3o(-9T1c+f1EGE(tgyHp($JAhgUHpnr3@HM)P8(0Av+YtVwSVaaqaOv6{*z>W+Zsm z0)rN(;Y=xPF(X#J);J>#w&b<$0vBTkS-m6(vCX<4#dFJux!gopT& zp3>NsLSN`7>lr~u!==yM|C?XcAvFduIDRgWth5mk%on?}2?}T`dlQ^W(*T=V0do`& z7Lwz+If#FaI1d!Ija6zRDtYi6RkcW6PuF7=c&_yZ3o4nsp;ah$fIdFB0eRN%o^XpC zsv2SC7w_qf!7!|%l6MRel$taHVYC5ff-u@Bj5bj|H1JF*RLyX$=TFDj+R?f28J7Pb z3$Dxa&>Be$-45x={SD}K@FH^h#8iexodJD~ulS5+*IV3Y-C(Nf&134^dns-$oM3y8 zOeedprg~QTIwLNqs5Q|GB-f>5rKaFk`@e+5E`kCzjbsgvNgciejrAHEqL9Rbbg>{q zEXX9MbD`W3=aXaqLjqwLMs7N%c;f<=qm9*T9kAwxe0_~i4!s%(uVx`zV~q6m4Rn80 z@cRMuU2iD)G#r-1^Vj0}8;YI9SjFtkAV#}^RVg*~L%gL=3el_(V?vRO!qJVEb`(AN z6fTCXCNCd|A}8F(Y0&W~UYrGf^?=YZ_@2v}3jKyRMhpz&CtT+~4?N7=Ij<-LF`S$v zCMS!@DOgN7FBIZ{pE%&(9Xq0YEy62UM>F3w>trAwGIWk7Xv2pQ0GLgg?J!^()%a`Bi{LKgd;BAiuP9qyv4c}< zK%0%*v=VGSn-M?k+x!ND+xYDQg}-V*3G;<_oBM z?L;spJnujRKcawAi{@aMEw=Ecb}4)dsjBkyZiQTiP%#?Q*FZlFg?|W{_cqbZx%UU1 zDvABEU$Eir{|vyq22@_ctF5b{4b(V<622cr+qZ;J*272W&Rd|RPTS#<*q&5r>{=#Z zEuV$qi+CgglPRLmSPrpg)DrxblEc!$JZw382Llzrc=MUU+oj<)W}qo{Rd(m&c=+xZIa>3=)~>AtqeTfk zDUH2$kMZ~i0Mx1Ui9QH?%x<{zSSIBB1XXMvje)lgrI4e;`H}V-WtlS2Y=2p|(e}S( zblhVnpDX@*HUob!HfeYQ*!*e`3T5nTr)%w82li0l9~6x?$Unh@_!DG$pIFH%Wx;tN zxXHZp2&u#QB&14NIW&ia?268mHUtoR)pN7_sS5 zC&i}Hz{R;JX>;=dQt$MOuvCn(7W-q#_rnyK_>e)7?U$hSg?DJwi+WkZW{Q|?iu>3y zC@=Rzw@aSj2e+an&nV#6R&pB%QhfJ?KfZe)t zs3fif`EI?9rYA0QgsygB+F6WduU8AP(#yZ_V26zYo5r~p6;&7N7GHMEQbb7dD2BAQ zcWd&Q-diRfJ)~GaH#B5=4Su8HwE^xy(326*5VdoTI0@T*N*c2dU)vjqa00847n$A_ zsbj%Dz}O&TF#mz-C^PUV12LL#({Y(6ZhShQMVjaP8EKcq>)0aWoI1jxgv0Qac%q7d zcPQIgq?wW?7l~s|7N+~dCwPer^A#kjao#ntXs#kj`a0?@^wXLvNEDAX<$CDR1bLnXih%2FXB4M@iJ12Nd-Jy z4tDFXtvw%}MNoU#HW)9IEX6G=%F6o*AAQ}5@(lW8GZ*FFLF~6!&sKOiJ)e>i*gz&C zW)*L)NF`N7FgiBS{THO;cf??vZFNovT%P8m>n`(s@Z7yiccj6-hf#$K-2X@Nj!t=< zi`qTb9>KLwW}UpTzmUqwXCLB1;7P;^dlZf{f^%9A)`qC z7!|~D4d98Uen&I%o|-^;%yDm`&TdPy-NjgBScnWuk-?VVT&Xr4%Gu_Wx3CD%SB8&^a27E=ViSptoA;>>61zk2JJAcp=qGz->6a0 z$I(J6#eX;E;3nD6mp|cl>ww%)bOxAl{<9MXz-99=_?((<04+NOg2{Y%3An5`4E4!g zK>dT6VE*vE`UUoHVZEq}WgvEl%TaQ_<;s<%n%+Z!OE8WKWco6qpa;?xS*duK>Paou zF&>@aM(S;C~)tBL-K&eYtw&Gz#y)B1iw%(E24EIJ7UZ!Au8VVq5dEx4*N- zSF7?mykeF5fSc`p(;GJ~d-w8r6ZvZ`-Y%`An8by+7`u^FSIUs>-}5=nz|bfb1f}M{ z)>L-+8#%0D%MX`EIO{`6wL4EH9Kq;`*voY8sn3|2J=ti1$h4#G=U(v#?HC1c&r<8N ztpcFQ)IHcCXJ#YFqY^cG-=>Oo>_wo>@ME9^lUG+r4ydmeV>xFwK-U`KTm~J6+F1Aq zNwOs6|y&2k%SAb!&dE)8ncU!bGWgL_SZGs>5x+2K+hZ~NO7wyJRcd9 z3mR&Ip$b~g#^gJn`DtD6Ct_RmYq$r1IR1z!#JY~ZH^p+}jw^2r;$9^l;b}dwI{-e{b64@myW?SnI5J#M92p^wjHJZB6S%mt*EB{=0&~E6 zmzjfO6fxilu40lv&-K}buWvA;+=2aN4S$l`pKI~q^fwo<5LMK@7bFCd`Z-jVb@mi~ zt4x4Jn6FpjQ;wF8ewbTnZFTIo60Ka!48+$w>a)SoiSl2JiaRx;Dzn~_+>?4u0a%bc zwB*$0KNB_owmtrD1&!LtOc(PmgOU2jv-2%Q8|X-WeGK4Lutg^n@NwS4i%i_<0RN0n zZ=py(xS#E3hA=~sc&o>IMqw>&8Qr!ntL9!i?YD%p1t`?6g5saWI8wE$MP?^+mSxAp zUt=xbB&#R?M@|oAX2;PDROAOXx+I64PeofcOE)Gz%R9gl)u%vuVT;~WDfARj#L~7* z!9*8TIH0!LK2TXj`+xc2BGU2Muf_@lR?!_c6!yy&)&Q3I5VbvzttnaTqnf3aaB=Vo zLg&3$!D&0$ktx>Jy;68Kd;|R2so;|VSfvi251rZ$Rv3bpL@wtTMNwBk^b5Bq-EZP1 zG%@p>_{i2g{IH+Lrr3euxq(LFi#}1N8j0_;}N2}1UQa_k>$!KH?8{Bw2M?}2-1F0;o2SQ*5uV4`6 zI*h`Oj=_a*9z{)VjEm~=q#d+dGOnOd?-InDal2cOdi`%dLu%cl7^!;HepY1BhL?g_ z*zz2umYT~NHjvFH=Ay-U9YG}v*HLATD<;a;lswNIz$|;6%#g%SAb))n2UvG|1O1*-iVIwBO3pDny z!%2M~7YWsC+lw+)Ra-HUqIm>0)Aj$i+0-*3Y*8n`|B}aW zsVThSeEA(+5g$f@ap-6Otqdt!23;vL)H;IPk%s@`jx`x`ZV^WS>fB%r%*CQ#0?q)- zwwA~aFvEEUTl1BtaZ}Z6JkqE?-|~itsjEbDCcwqpgmHN4Isz{AF$H4_An=6InNR-~ zc!6z)D(u z$B*!XFVW~}Ov(*ALfPTpWo|Tno;`|1N3TNP27STrD_Qg~z#~nIT87G+<*)Tc$};fW zQtD9d7LQ__doExG6r@rcOV*I*oFdN?f8lxBxEkz*)IlGm5=T(Z3Q5m~^4fRhe$FJP z`0qaevdgJA3L*D!bP#~M>SmK=4HuzkC)aPH5YwZ?^k@*ND!e0E4WS;p7`03|^%#xY zG)p4ut9Dq55$H2S?jI4D{U2O>>cXU=%aE-+x^8WBz@og_1aJt@zlsN#D9O4jY4da(YwaP(gs?s2eeq88 z`=dyc7BVQ0UUC7WKfF6Kb7VGn5Fi+@Y5s;H4VcZ8{gn!)w1lj|yc;8d)}>6UxFz{Z zq8wULRbRK^)?qd1V)97_=(vw4@Vhg0R3JIj#Q}A7?`w)o%VA6dSw3el?$MLOB1O$K zL-o~fX>jZSJajr|qeHku9AC&>DE>AJ8h<`RvBQqyV%96_{yURT%AHKWx#nNSMlxGV z5lI%fja_JrGP6HW`se%q9W%Zqkd43WLB7*lAq>@EAoXieP;=lH}0v{BooToSpZ_L&@%(iWgV#-3^W1s|KZBiS3&s# zn2vT*2%M*eVz30SPE2)=Yx6sN1f*na!DOF?*3;=B@Sq-v3afI!NnHz0>SDx!+hl~I z$xlBc^_v8I6BE0Tw~k}lF}_KgcpI$B@5u*va(^pOu^AQYJY&RK1(vUJLceA~pl1W6Mbk{i)_AXchHtc(G-~&*l z+`6uKGfKsqu%iWy=(IwXNg*o|@i1f607z(~moZR_Jbs(8C`m1|L{LYV#5@CDpr zjsJ2m#3d1Uv>EyAWgI_fD6blA{aW~6>aMNeOm^^iK;s@rXaqd(wDo0{mmiKQRFRQV`m|4`1-T z5>)VBah3;DwPLD%EOr_+bl3fa?}81IUQ&Yk+?qdOlpry$1zt@H{fI|Cz@Np#CRC|& zZEN`#A9G#}g>tb8HIT+&uN<1Ye(m8<{})7)x21^WMgT(TpO^{rB#ku7nDr@AKpT4v zK96^uY}y&>!Bk0(Yl}UQ1_IHF831MMq=GqkW%oXywlle$gL7lOCXN56sz528QM*GsXDx$d0)}RxQ4A!`yXF3`$tR zO)?H3mt)WmfB-Qk9}MS*lx8s&1}Tk5cC&_ZZ|P7H$CurWvKZ~g_bBkuM0_ak2&3y( z^BD4|W5aNW_!}`%7QKiO+2}X-F)lTs_`&+54O1vxAh??H0dpDH-x(!x>pvjv*y=D& zcK7GdAc9&@0TZRl&+8PjW?*QmH@;^yT`M#Ig)ugU+;Z#6N)*w|gOmXV##j0nh*b_^ zm7`eYBvXi0h@`0D(07sVl~{^nS7ri`v~&B2URp*_t6QUy)zxY~D)6@bh^oa_As1U4 z#5T-^f4ofG)2G&T|F9OJ&+n}6E}j`sT8 zU-lwx!ale~1%C(#rtJ{fz0N9Q$-k zYHo0?1jVU;C%|J}TX43V6H<|vt8?q_Wa0CF^p>~DNJ(sQM^NBIj$1tDW_O&N$$kuO z54|JHmI-*tZ#;B=ze7>eGGjDuRTnP+x5x5OZ-*!j8+9t563T*l2^2`mjD`5P_bBjN zPTm(M9{^|A_fd)tqL@|8$(-F8zU^EVQ*fX0aIhk%%}Kxo~=P;VHx zmoVUXU;-qn0QxXsL?U_#SqIhfbNd*b3?g}N1Atcnbw6H=73=i=CAf_0YbCsHqc311 z$wuCw)n_e>RiT=(L^BRVSEyX!+karCk{`nx##2PVma0^@5?+#_^_ zO!OK@BaSoQCvt5CKwsY54Y;=axEX21VrHX8S=(SOBswc`hB)0)$>6B&{Xx+2>%XH# zBPSz%_I|4F7L2Z1k?s<+M!3}nO>kTqo{kJ4H5Z-SZlTQEy1NStfZa-6!!;o^>XP7PwISRv$NkTZVdhf4SG3DY^{E>dNR1>9b=!mfh;+oeVrzsT?1@H}0)7Zc#4>5KTbpD227 zF{E$Z_FD-SnTs;px$XGCMv8BK87Q=?kc^hMKg-=iKffU>fg5 zx8X1WZvO7io;SPSj=MZxB>CbcKVf6}z z>E692%Ehq)ajZ}rD zTKNeB=JYFWN8PvrfiuFcJ-6cKg}z`FO3w!kFDYvMPOh})F-owxL+8#D&#K1X!8ix{Y-z$;k zzCDiA{06UKZH}AV9Qo?&Yjn%N^94k^aKlECpTK69Rb)}Y>)t4*Jey}AOu@+ErJ%Wf zS8BIw18jOK< z`LbDG82scV3|0t(m9Tj>S&tZgpFj=?B z(kTZ)5xOWGv(RO_juNwc$qWzg$+mKFMk~&^i8JohB6Jy^#hjmq>VRoE)eg}?7#SrP z1W0;$WEIWFS?JSE=u~QCDN0?=rlKuNF=YA%RAurPa&4yZwEMLKlmDw9MNB^@2gyuM z%SsuK!F-Ui+Y(8btTZ9-fLth${`Q_at>>ADflDN)g8xl%El%TNktP#?vzu(xKpU4>?4>>QgdILbmJ3%ZzScu?8VcqoYWG~H*3LM?mY$;2jN(R zSpz7n{uSVJh3LMLf@iKo4T-a+1E|EG>x^p;8LMx2_$El^2x%9r#aF$qQO-f8Qa%;Y zM1#J_c7;K*F^oii{;@LK`X)-)|K_iB9xM`$&&Mef7s0zE*ep*nNTCd`v6$dO=c{;> zbZV1s6%L`)&S$Z6wKcr^6AYNOm#t34oK&mcK(Ezt&*dM?X)ruImyd=b#WqTr1;HDb z5HqR58ZDEo%E{VdDtFdtQw4+pT9YuDD9NGhhddRoRv8Kek40|Y{oesjzp)y<>%8Co z$MX(svH`s^izdwm*j1;kgNaXTyqDLa5UE}5c%;r&%p!7V%cp$uz|jhbp5@d!0J113 z#o98vIJt*FB}apxoR*2L0? z>`P4aJTR_WYg1-*q$Kx5wWkp#(KQG~qNlw_ns|3K(&YIJ&Fc@5<|mEZTBNLnj_@Lj zA3Co#s|rxUtw$x6m3vki&uF`o0l;6!gdIhOb3Kp0df%V=5ZaR z9V{VGxOeFgg*cRBVtV2;CLP;^yB08~!#G~9LFJon!g0WVb~nz? zX0x|#zqdn>0r7iUZ5l?p^nI2rp5nd&JC@abq>ROUf;b*^0z()Jm>lo9>qsg*bedRi z*a$&U*+E9)mg6YD;{-XjV=k)GW)}m!h8hRSqbYfIIfX3}lE~PRrWs}DjlwRoXi@WH z4_ilp3ySmq;(KO1N5AmEOsI!up$_j_h!IYG6Q{nD58};;hs#L0pbPeCjQb!QAISlA zsPHgwrd%aT$LNSjco?XsOyeWS`TH5UHk?#+=hkV&R|8ReLKL4A#bBKQ`R=tEMV_sr z?8hUp|MNbs!R>drNqumNTjM>}T`o?Y6{pSt0et=p)w`VBA_=(*wyaUgkA}O&aG-Aw z4HQj#`H<7Xd%$+#Q6%e*B<>#+_YZ*+VTct_nzMCU;Jma7n zN+5BnHzpW*_n27-i5^WQ({3X>y+009*~8;hxjqiJqh~$A%%^U*2T(5<84BieQulr+ zu%{y-?gk1Z4n2**NvmQa@{XFE;f@sx_20i_qUH+uT2&*ygq#x9KjTB~jeZ6cv)+f` zv$s&lZSWDKy=E~E5HutN_O>#I0c5_*6!!^P8$r=`9?d1X-C$m3*Mc*wP1f2F3J`O3 zr@zN8$Xm6|se9iku)px}WTLM;<`N8*-BwSQJByC#5>-xR_D8RC3HZFysZS^O z!tLNOq`70&VBd|4ut5L9pH@Ld4m#)esE=tfGF|(@DXyNrDS6E3gIfz%f22-UWroIB z0IcJp@mq%dB?7nUD=Bo^daN6dP58m@+%d>$8pAIq_{kUtc>uDqp>*YaccmoY9}uQG z7VkniFXE?VAWBpEy+nyKP|rGZl`?*Tut*}y3C-|1?de1`EosO)Tsxi~Z~UKT1m1KJ z8!>G7Gt%pT@@Nr$_@nqBW?UsMV!CZdIF0@Y%t8t=rLI%@;=*+$S=A(FBbgE6 zQRYs;xnjD)o2p`mnPu+`*0sqN<}$P*!6#?SIFoZ|6pMGRAKz()=hU_}rSUl=MZLLlk;j zC+2+)&YNu1GfJEZ(VT4i8*+ach|cGnWhBCVM3vMQ{H&i4PT@@sX#!O6$S$MWP(Kt& zzKrO)l=hK%`Z=AM7yGddOmvu-KXQcHp6i6?14dQgsC7J%480Z|XI4QYJ01p0p|Bpp zc@UUy4sx4jLps}`1-UQF!13(W<+NPPb;WbvEAV9S?h?fwbwQQ7Q)|y2Y_;a0(p&{CHc+-E>HQX9xA<)}e+}f?l(XE(y2wec6bcm0(!z67S^ZxOQt@g zuE8mzf~?a1XMJnk2FSCFMT@Ny7$bA`P=(w2S6*B?b0 zpOgmTSb7VKVHnwNB9+xRIeI`I5!iXX=280e89xS!H2;|Ei-J~qqM%e1v=#+rZErlPWut%&qO~fO=Z67ggj^DC=oW@Fx8rY>=)<_tw!E1r_U*x{{ zKYu=NWLtmc5jh6$Mp<0=m?cZ%wzarzLq56~edEJ=0(9C`SRm7N+F}^(>Hgrnhdr9R zov7zsUEPdV@0c06z^n==XV)9tnXl)A+QRPEk48AHc<|%GWAAfz57o2HSvK!V47L~3NI7g1GNZ1q zL0Yg)jk8zJOUV0^WmF41aV?4C)_JLh$;9|b_%Z@}kTSv^^TXVCyq8Ma2Fo<0iczDq zdg^AdwBgG`GevFCa9d9#j^ywAOHNQ04AFVmt2&;9f)f@LBAv9PJKU4FM!e+O)LY*v zgr)~z9)+tAQIEo_-O$1SHF<|@!baMS9>*SLkU94jr5OzeY^2aiMs%#krXf{Ev25EA z(esS&Kt=QhFwQZnf5j0yjVyOq^A~KE&tmAO+yu$DXtEDs9X99Tgci#jseeQ}RAD#9 z0jc}+By=l?ig9hZ^&3*}c(^d%doG{CDj38T)N-&6SOv)%&XY?%%O@i@GCtd?KdEDm zqeRfuKjjSw^6J>gm|B0wAt5!r1!qYK$nxv@I$k&Z|NoNz_wt7XZX>4Ie?kL}JcIRW z%=NHTG~muE((G=~7nzOpM5c+z1V1V5fe*0S)}yNzH93`hI(0)#VSF^5`6S94uKU-f>Tq;O__8*A#|T#S2E zj~M_vDmNQo$C$Yfb0s}r@>)?Mi6uipnl(2^wVfO#TE>FHd9qtc6jG@XII6y4k4#!IYy=EazUCkn|tBVq`MrNG9C(qMa8mjfW7ClgsHJ9PDC?Ci<+i?AWX9wEd{1$%aE zZ(ak_zJa6)UagzlEh~VJYxFNk2mumwi}!y|7Y(b|_4WS^FM7=&mETh6O$5rxf8$=j zKF8HNQ7GmGI~tqP9#cHujw>3lhEIdxLwMxIjyxb)G^2smBfzir&BiYWzg)7I;*H#h z*P}5+Ng$DzeMB91H({v1UPV(abBnpA!sjYBUdy{S35A{JTFJH8*xvGSlGyZ2K=H=m zT|Daxrx<-hH7DDU<-3FYn*F`|IszmjEDg_Fv?srsP1rNB*M_1R*TL_Q2_;#7HKxq% zbXOeIT-uN{vmY4Ajr382o=BQNZjB@Oyzmyn^Q17A*$M(*6 zI}e#&Z~Y;{Ti;8p?=98?j|&WMgQtOak1?WPT}%;^V*$OghYrGEbT8&TXa8jzH^R$| zF@GPYwhD143i$1vXbNh27-e1h=tQMHpPngY=}z4uhOSSx}rZ5v8|5QhhUEv3R5CBv;NCnbeGg~a)waLBy}NK?*x zgOoWx8tRDfQ~8Jqxw7;J*b;W97$*-~$sD7Igl4EFvOVR)6&(X?V@Hctv*D+Z= z?{r5!PJUw>o3s1Qrh1aCIbv!$o9Ih$9iSSKilOr`oxv!%`Qs0)861Af8x;o~qR4r* zxF`XxTC!Fa43!4f)&cDF-}^6~8{3o9nr}?r{`fPXgqu47wz{Z0VnBL-eklQNr`S~T zRGqA+?D)q#F&6q2XpWcvGQ`R(p_Dj#)O0$CvL6NgKyZp5&cfSO!EcZ{7C|`}?`Ul% z>U2829;O(Y7>PBGVvQ4Xm@*B4R?7Z~XM6+R0x_)a6SFdlnKKu@dw(<&jy=a1Pnu!#31^5+Cv~5%_?P6<3`=lSDytw;s z(abtivdo8-0OrE3*Z*w2(Yamc6r%MFuuy3*tY|#o?ZByaEuxGdl`TRL9v!v29Z@ktK6D z_nzGa551lt$kEzu za@#vaUvw(v(WLSzgD~V(Czr{6FoE6^|3p!ZjDulm$z!#>O!S?O$R|6|{E`I}75oV! znSF`tbF$4fgz}WGlHjd>Va8pL;ddOovu9nA?=g1*UN)oDVgCYh2AO`vX<};*8Q0D} zas^cS;(fEg4p+$;P^nk;lpAP)IYOj`6?pdp{6@UR^Y{m;+{Uy&)`0b#dF(20ZYM`5 zeB$$geug^5-6jfhZS)VY=w`b+kn`PbcukwF;Ua!fU}odIU33YpAD#zciVHIPUT4rf zY$?N9e}mgdgX{1W0b#1eYCGK8t$v79+nNg`Ml$<)Yik-mXRJ&Z{YpLHTS-pVe>Naf z-2lNhB-ryRI67Uzb)Fo*dAyNR;vlz`oerhcZNETDEW6f{yhgzt&-`Oz{&6w?1O|HF z0!;G`%KjI8C{RojT1(LoD&DK*J73q6lK5w&_-7Pozf>UCxi!qYNL^eFop$7V7()|_ z;v1O#tT8(YJXy}(Ogykmas2q%c9x4z3JLy%vVO*y4Y2m730IraZvtLZ4$`R$t3I66 zfhLblBiN$0`fXD#5_qJY1XgZH!w3*P<d zR+}YpNTr~@_X1J%h%a4`TKx8hu4d2F%UFD)JN$%#u>t>L`lm0)?~fu=AD0 zKEm%YoTT}qY{F%Dt{eu?==zw~XV>=ak#^dVigZlaXITX$`wYT6hn_(Q)&^)Az||aQ zaG3nIoJA48t374yY4{E!po>l6FQbaxKo(7_V?dzTN%5Om31ig`ijCfdN@m1jZOn|} zN(yf<-fK6FQ7fgX0fROCk?Z>qb|2M$?~DU^cCfTF2Y2Z zw@U0vUU-)Gbxd3D{?jCJe3Cdmnc^n`;K){vLxj7Y`g(3m5UcxXux|~7ssk{o-Ed)a zOiwI0PQD?Hp!F6(10Vbe!Nj29doj~~L8O^~99(hjoDHbnEtq31xgCB70OV$ROV|A_ z+`ggBKH$W%aQaVRpgs~U>5Zbmij&9->Ki0E!Y|yuRK|Hm~nlsam}xG>5HZ>na4|-)M*MCbHchGVjRC$Ul&a8L{jZ%lD}0Lz?x*Tnyg## z3b5T7hSb$~Ee6bK#B_Z?DYQXZKL+gtYk2oAK-b87EQcuHMoF(CadF@dCD(Pp#W6T= zzEzE753A>jRa{%u3ppxxDWF>4nRu~F{d}p|f|Oya*wvRAX;*CJB@u6RficjQPn&ap zYjPO__j6(nN$R1#NOPh!Nb@gk<^b)(OhVB5JgRxbr<(WlSV^3@BEbBP{o=~z*2!@! z4nI7Jl8-Vk`1t?B)LTHsl{|05+&j3$7+eP!+}+*XB?JgDAZ`#R2_ZtWMcX!W5 zHyd})Mm8>Wd7qm6{@?jHXPPVBeOs!_yE=?Yjg}#&?UPA*>RLb%zqwS3952V~v6_h8 zug!6}tvEKMd#71A?X6ZiQirp&K&2m?k{+DKPOLhi`5(#+VBLo4A1Ztr{LdA@M??dk zGA=)ky@qJ{c>Vd@fu#G46>1;(vv?h}LufusgN|eIQoe8<1w3apNPW??8vsuAarU;ji&XjmMNCO~~7aH07Z+(p1~S z%>THzLH`Gp|A!||{ckWQ<$EkaNTv$-ijU>KrCs3R&p0tfWb2e`$4TYxTaG^Sd2 zc9HOyhyXk{&>K)>-}75hO~c-Ccpi{NQJtBNPP4!d=K-BD!aJL!=R6QD0ojP=IzZ|* zkbGt?Lv>K|gse42n{D;dSY&hghbOThaH|FmWW=(noz2uvzN0fz2W?glIIaFAs#(Jm z`{wU01c^E~x#mF^HL&W9wsUbWNANaZc1mA%QBh(wPf40F&s|!HCaAgm#ByBQ-n;}k zyn^Ch-eLD;dD9(UQEtszD)tQ(I;|ThQ>t6gz}4T;D{nh8+_IBD-($Z_4;HzQ1q$qN zi$YYksNKljy}ug(K=I9mX?!N8<4R9t_FnQDX_47jbkN$y2OFrlsc{D%qUYNa$Z0l0 z+IAd3@;l7zS@>7;+lp%}w3gobhh_hzOj2_fd}V`zV%#8r3&JbR4-ma%l-RrtwfxnH z^JO|??RHb!0lYl!9E&?fCq8gZwx@D55%oz=O_JGA{^)Xa(>IW5z9BZQtYlQ_9)f63 zyFZXuuL_y;Gfn!L4$j@cnc15;TSzg}7kLz0moSb&=D@@1#+uUZJZX16g@%`MuEf(+ z;tviHQMZ-kXx$pyQFLGeiOm?u4d{eJFj8p9sf*ZjTB1FZTh>n(srS{5fDheZ5QMNK zz+&{ypSWLWpiRTq^aS=eK~-ONptZxLWbmqCaCN?bU_x&WQuu#6(ENU95QBLLF5YqQ z)(}*fHl+fcFL^o{b7*?w1&UgCZ>?H`+<|>iX6lk_SC$RK38pfk|3Ff9#(wwkR;0M` zmk2lJfO)}af@2nlWSj}|Sp+a=<@&-wlJ}#TdCM4j7G$qMjGK=2N8Hc z41Tfr#o-r^AL8vLyw}lE9UY6Zq)f8{UouMaZv^u;;4A|7uO#JF$bP6o{;??*(ASRIW$4G*5l8l{zU~dvRZbf3dGXz+cql2SGx2I}J?Vghl3cmqMS~ zF%OZrjdg(MyHoT*oGBqJ#P)%OL6p*^5mg0jnXkdYJ%IUww*W;5*$?o0NZFGzd70#N z)kLP^MH7+Q9J3Gu!2Nt=jwIvfZ(U><79nCN(}^5q#(%5|4=J;>3uQE;TH%@txaWQfbBFcpfCVa(Z5eDA#|-)&_e z((djTq2F=TE2N$=hlL&#w5n1)P*TT95gr#?k<;6?qExjMo}VtQ-U_x9_;fa!;Ch96 zmG3}dx0ZgQG-{MIs*#LB595LLnYQc^rZ~7wBNwv;$Apt_nJw`!E8);4ooB%-D_9u77q z_b%%}USCK@UXuUL5!lKXf2|GP$4ooT+A^cMP7DpU|E!g%OX>+=cAN{*su5GtxQ^-+ z=wF1vT9kayktgNe79i~T2#o0fmo0||a_ou&yf9@CpJG1Co$+&_2zxDjxNZW)S+ld; zrcsnT&5ys)#p5yRY|vpcW}kWldNi|}aR1+onTfA{imZE*sC$bXytVFxvxn6n_&OT@ zDZ&-b{Q|;qs=Nk*-WMUGml@^hVZmxpZ48qDe{W}`MTQRnZaTZD>#;0=Xpk9JC{#rj z{OyjF{B6^dyxAzSz#nxqPNTpJXK~?*@b=ek;ce6BiD-)P0uk3%S5B9wb7xBtK3iIy+8C*fY~ zDAnn+6)Ap{tLw4`$h*q~QKlf{Ijgyt+mC&sg|sf0(!bzbv7uOTZ&l6^R`)*XsOh#; zw}O>UlY)#?%l=*zhB0EnW>lOX9|oty_F2ccDJLn>cnRE)GL?yVrJOpMskECnjIQG# z1OLU*zV6%NV}|W*_?vbf9aJ&UcEPIKPnY@}_=HkMj^UU#t6(!+TV3dema_H*O1DFd zZ=I(JLi0U10L_$1_jgP8_el5mQuLae7{xzu>fLf+0mSFKNk!OmgRT3EnHPgeTFx?} z@`a|ll38=dWVtA|At$pqZbkbEM+94Ju(m+;W#P+=G@gpNFR>sGrTwj z<;-vK>Q#>Kq$$N^OK~|;T&^~7Yy1Kil-&CezenUbb`A3Q{-uu38soUEDaZdmw+?HE z^Bn2};le6#V7L=L?+15lxF%Lo@M5OJzOd!==pafn7Yo$xER*W?WcX0EN5LZ;CvV@I zN4_dwiiomn$UbN-WuIM#uNnW*@P8&<%oqN!@pTWLr!RVfA;`QGzGv&i}Zba&QXqhPWz}_S8Q{%xL$of$5clKQfSV&RnP*C7l-L1Qk&s;jD z`MXQx(4}0Z;EXr=f)~TPOZb}Ae2YOP?L68oN;t;P^r@ ziX=|!i)HUv^HV03w8k75t`Fgvw0iGt069s;Z$RY;4|}(EV??zu3aeuEKz=0I-nat8 zUl4Z49M}Sobz44NwZTf&c^C~A{J`%g%qArjc-!qTR=TL{Kt|`>RIPD5cuQ;pEH&pK z+EB2CdGQg$GjKg-_d=u=fhsDUA+^O#ZvK6k&V##ipe+C8U+{Umi4-uSCqO(bI~JtN z?sO&iYWRw+V*#%8IfH6KO*f=z9eJ178xIP~Wt*RSGKC#vsibXZ{JK!FC`YF5%ggY2 zv$XEG_WT6TnNLaN)$aooxD&uG6(Hb8-8-r7Jy~BYhF76|SsxI{xL#Y4+xEkGSn6Ao zd$J++wWa)2V)Vnt)Zj~nt*P{4h5&2M3=vFkZcYz`DYLS~Lj^lZ;-iZ2@8Q{I+hnwIfu{zUNifR$mKFI=$ zFMLY^zSt`o;nF6^TH|fVkVvFq=N*uScWuu|q2?MTEp5gC+Vs-q@<%5N(&Yx~9d#R9 z&m%%IP{Dxh6s3J7m9lb0b4f@cGB0rzIs^$Kjobp|Y_afK$}wf*`d_p@!ur zp|MdMhqMH3Bq^UDE?7>mloLW>su=18Rq)Q|HWUw@kJ;C6O`R0eaAE#~LU+QiTSz@d zp|=K#2>X#9Ll(Oj|Jl9&N7O-Ja7?d$^RgSR87$hw&ioj!2yK>TLZc;$zcQ*+PUH94z~*geS_hk50xZO zz#>Y9p`r&P7h#|fNKWUDh+3^Ee(HH9;G;cLu{zw&mTAh=_2Bfk)R?>mOlF4~KNCH? zAGIC^4~;)5$30c(LOIub#8S|uEOy59n7}+mM8{@S-B#NS*G}GG=6xwff$fYfn;$0452upm3OrC)}F zqF>p=I7`J>^Km_5fhk)Tn><*WQPw)jEa3^}ow5|4Q=bM$^W7MPAsYZki@PF2L>!mT zJsHPdDwS~HNIxW#CcTv=L3An)Nya2U+*68fPw)mCOi0Y4c*T;cz^O(y9s5EdB$y3TywS+(#g$?-#ytXt^WNt_N zI#E&uWE0`aYW&tvYMCz>!iIZlQG84G>Df5|R?{b}$on2ZiqX&|0;9g<@sE2#hLuq$rId8l)wFaCD7G#R zP@HMYdaCL`8>DW@MF`vujmaeFkfO6j;Za3cCi-BMM-Cf;gyu;&#h$&cjw2#242OW{ zG3W8sA-w=EYt2=CEDO1T0&V&u2H65FDeJnF^*4lFDeH!m^$+5AhJ)kllqx@jHag}0VwNF_Ra=AJH8J|ruMiPNBC$n< zh(K}q<8q;rD~e$x95~w-Y5aEP4~(8~M`~jE8mY_YXGq+;<{xGVTFqxT!+pEpQ3_rSmhXev-zJrHea=&MG4_mbxGp$R<1P3>X|hBknkU#Hd_Ya zx%-D-NK@6nF(T-=sSzM(KA&7uR|$3$;^0f_;gi zyxS!VZUvcx_!HKD)_@V$!d#K^+jV$A@W-%)FQusb=nI0I$_xOFFx*4GW36F9n4(^dnGHI_;+Utlxie~<#?npKq zprT^}p-Ql+*ubiEhjA?-YDf;y6aRXT8sj&S(GCb2kPXM;q=15*tZnYPj@cr+778Xo z%5ixbQtV4$i`Z8No@F# zfYkKq3RGowhMVKqVGAg^VXs>5VEV-v6n%e?+-4)@-hALN>tC0UNij8eK&R<5x`;+k0#D~Gn-jhR7;;@8+tSvE{%W}Nc$^WecML>=Y&TWTU zpcNvzIktpbk0v#>=XjR!7o$a6L(1Lt3XGz|PG4E`XJB9Dd?mwor+O@Oc_v$Mg_7g?iuPgBpe_0!}*yay1 zjAhQvu=!6e=Je^hOf5Bnl7?yE?bQQRt^X&)m`D%S<2CFhYoCrds1AqTQ+nM!F5tfq z4F{jlk=zq&QLWF0Zool)GaaF4?}T6vKvdtT&w_UNgj?AO4Qbj9wQ_XSV-3$u@a8X= zU*G!xqPiAnB2)>XQU|;!aSW0*&$R(yo;4SxD+{G7izqznI^M{QV^o4KKArWiA3oLX zA*_$0aser;XK6~|``N2a3O@ihI3rk-noq!h(HZ{BU=pt|nzCHH7pd2K_Qr+ds_#x~ zR^o;y>x z;6(^&EW8ZZM;SUJ`BQz&nSU|t=&mAl{%4-xuFJd)Xs6XixT?-j^#D`qHFL78wWb^S z=RU-GNMD|UFTM}ZrN-wl)M#0e>xLZAqlTVi00;iQ9nrRe%MnPuRNfd~ucDD(?FfEH z$<{HC`4`WNUw}H3uR3$<#xE1qjHrXdZhRPr9@X_>DasU*0-_B@6)~|xK=z%>|BHHoh_y0D@R!&@ec#HmF*9tfj3#K51Ycwa^Xm7 z+&vXS_kU!fu@8?u|6;0}@{K9RvjUvq-9=N%c2|?KJ(v_&4B3Xa5sHs^TUSp}Yk5j$ z+$D=kEJa)WeU2^64iDW#$sM_q_x{hiQGGQD%#i6Ll@F0~SEg?+E%K1MJ~=Cs>XY=O z`eZ71PJw^7Ib53-Q(e<*s3^wxG1p?)6#_k=ZS-;0`g=BS=ev+)ADAMS8HZq;+7wdv zwVi-p10P!AVV=MQsiXf);M(vZ3>O8x-(w8o|7KYu?;C@Z;e&oiZN~F5N^JdwtIRC^ z7dJU~RrIxg7cn^ zJ1Ge5u0I6w2+f=`lZ%Mcagc^{0>LIDh)U0qIMBNV^BvYxPpb&LDvT^8_FzFZ?;+z# z)8zw^x}9!?&?QTbN=uH>h?d;iu^FuXGgK=$_GfX{(kduAh3rq1Xvu7cypq{*hqpOS3_0^XoSO2*OVmrIxF!wmY5W%EjTINBszY`Ky`V}S)ZX8i zLmPfJ9!zZhCj~fZtIIareCLY?L>bO0xFA7UzKLuvJoMFy91L=7NMEiyX4Dq3r4dyv{f2hh>?Ys$0=gZ%CJ`BxwQ&EA8blG_cLLpw zzy{C}GbpycQB+r_)VvtvkiUeb8@0Gj9|)KHZsdDq4{{p6z&dQ>D%v7+XRRx|Xxl$M zh}umcSI4Z@XdZznD1(*7(*hnouY;&uc?I5X{wH!Upmq`kgz)fXFXv?vZ9fs(!h|=g zF*yaH1*k+bjO14U4uF`ptQfI6wg@eNkb~Xf(vQ{D?L$7E`tDtf%8brYP`mxO%}B~* zJY%zmm!wPFHKaZjyTvGVs=dh|=oRBFNZ)KI1{;3h52;vyPRM%V*NXy+yD}=b3aeCg zw9=FpoWekt4G;{|YU-E(znwhS?Mojc^^6&YBhzefd$U`5BYC) z#J^8FF$P>fZY>((eT=e9_u=AeEM@CVM`h9Ef!oDE_N~%!YwOUD2RwA<9Xw5`rs#|a zT+BO3%2Y@q0{L9{2luUmDX2^r7w)4ed}I?Yy4|Fblm0lf*r@hDRO8YA1w>X)Ut=BV zjmiI1VbUAK4GU(h+2f}_M#1SMCB#C4(4(ZPr>Nq}JIYls+I01YJ8_*0jvZp+V7IPO zlr@j0q~;vf-}swN#zXTdr;zqbWnvoDGzg`qwGopsY^K9Q>v(|ifm1{Sd($!Rn&0{-nkrjB;f-uX z@9sfXcb99a`9X`I4&&{bAN)o8S9K6=;@eP$s(8Tg zoHTBoI7Y{-0NUn})a~*^U`XeybMPi`4Xbfn%?0X$U`=SCa>YPa3&e&3 zhJ;mjaONx10i{j!ZxD%EaTAo+bdid+^+>pY&Gk7z7mXW`X>>lL%|KTwwPbe3M)_98 z>q~JjTvG;OhRQuO7YWkM{S=je2xxFngynYv({0BGT1c~7FT^*$uOg?m;{>TfPQmB? zWpBDbXn2HMOUXNuMe?+A#_VlpJ;DB-k^X>G(f=>9^PH)n=Bp#>lFO`fc%9N=q$W(} zPzaE+Y^tUd(jbM5!oNl|!n?W?>eDErsCx|Fvn?rW!EH#^-`e9>iC+gAHtPeU8Gm1l z&D@8eP&tjLG^x!z;-ykjfRfqgJsKlXnDXG*xi?;*8Tm}-No<3BU9#XO$@Y^C_8@z(L&9)P90W4~&KT!}=1uSt9NIo>3sS59ijB~5 znDyZN1v`4Lu*c6=nYCfL3R#zi+D>}~UTO2mE`mma``Usr) zwV;rUp!9WTxtMj$p5KsLJp8l>J%4TPUCfSM(woOYXuW_2&4vG-3R z++<)73rc43jMSYBHlnw_&u?PP|NJ7PX(3)H_IfC#jbQ@yW+ToF-wJ-d|HFks^H{R#&J@O8@0KW; zyn!G#vMp{69d;tMe%2ifh?9)x)zx?#c)_(4mUj}BW(+y%-5{YIVsd`Pb?FtT zS;SVK;BUSLgm=W@(|D*@@l|Fk8B9VSCtd}%@rTe@PoWVr(2Yc}q=O#fVnGC@47h>W z8mhr8fPGaQ($SuCAr9A4g>jzXNUm4Gun7~$%C$fyfCp3#$AH8XQ^1HP$Xh%)7pX(M zO2~B?wgoo1LU=%S#6#mXOn063Fw0otwV7$C{I)4>9Q$u&jHscIgk_f4gfWO6N@6w- zM|+kXC9C7=nix$+Xp!c7@k!M2`ahXMN2+S1P;7ER^Rc(-KuferNdt`PFiNBIH=)HF zXzW*RjlD$%h8v_|h&Cjo=+UT3iXKA|D@FnOhTg>Q7A3~#qt`Y1kpPqg*KMf7ro}Ln zb@%KcN;~r)O#WcSTha3k_{?Cc*fj}lRGtQ+f%YiKZW@#{>HAf7hjGgSxlgBxz?W%K ziR6JhqY3Si+N45Dh;9U?7~!rlf4AUCZEKA|?yHPIsxg`QH0D$RxbiQvGidW=L7n^ILN8=ThxZ@@DHut;jZTtUO_ zrmU4oawE8Ux$K(E(oRNVF-rJP)Iclka5mh|b+`>_eGsYPo^eQX`yR(Y*e&a+-aG;V zIfWh=0PAsBIh(}tCgC@kQd2(hERd7&gbuubsh55z$XRku`!8PlqW zOWL<7R!zJ^iZ1Rl7pxWaVIN!F8JX8jq0G4-MEw?&^^BR0{42dN3GxvtP%^f+!=u;< z%yF;12A-JLasR2V7@a!oAHxpWdkB22!;_e-#R`L)N~%?Fz-!l$SFyLyUvR`jn<*5r z`i9UvpA;)~L>nxhg2SrjcqcQ83|a4vOjr-mec*~9EWn|a8!m#I(pA&LB3L&83fla| z&Ja4wqau*q_Ck?{Bpa>HoI-vZ81+_lzW~{`TMo>UqQf2pcOpD=F;IE;d1%?mq?>1@ zo9ECXS4-rO{Y7zqv&@+Fb`>`w=G_Dpd=EyD7G|{D4r@kg+Kwe<<=~St&mt+hKRLqL z5`tB0CdS<$KS1M|LIb-j#;x2X;eRY%!J;6%(DI^j9htf%R2pJ`WVIu2DC&(!4hA&f zABaez7h=8LeFhmFOrU@>Zn2|ysxv686c6(3S+I)varbc@1?kLv@|!RLa{^nAd^Ls> z0}+#tpsHwg?8m3P*s6}4R~Hj?bjj-RZPe(%XcCo@4XH?X@$C%U1USqGZY%Hc3?G-n zzbmUPzJ}-CZWl$l135l%=BjF%3h~VK&#j^~@T4^G6eWFag$E96Cy2F@(uExF9l)_> zQt4@m>QjP7O0l-U0LF z^B_b_Q-dt;F@2&aJuwA~km7^q0UMy@0R6Ce!mChmKoyV`rr{4GaqIE#00D6YVk4oi z5LP2hnRyZxkc7}1rSQSi37~#A<;XVX4_BlE-ZrXM*PxHgF^=upfK(pO1prnXRG#`? z*~4LI|L#G)tK;#uWc^6c^cL9e=SIPHd3aLS_6X9EVU^&d#_sQrmffPE>fLZ~N#md{ z(D2SBdwYLDGQC3%(^Qge;OgDTq)mAq&6s3FT_`ZWiyEwcRjKTmaCu`(2U=in^Gvjo zO!vYy+ogr%U7@B0wIilq)L`VQT(6=wR;MgAL>5uVtwN?@C{5Rsrt4!*qq`R(|I5xb zf01_1C6B5jLI!nPyBHr-CXwe?J}fi){y>15JhdAGtAlL4AX%R#We+}iYhW$YobDEe zoc|LAuX~2uNMB|_qb*hY&g9NKVm7Z>~~(B4E^ljP+KFLlwkT_rSA6aV65U<;=gQ zA9&1wZ|`iYnw*GS7QqL}DRW&q!m`_}`3t<0?*R@1V)Pkd0VeE4Nz=Q3GuH4~y9#+* zb;MSyhj^NBkYgL1fU)9)DUDeGW1jXA3hS&5dYNyCANbaMBdU&s;!;%DlJl{042XZ( zH{b_9XC_*n7gYt&lp_+hT&qHLN#oypA}rG?+S3fy`M8 zOQGtFYD^P`Q1-*Fcr7>Wt?G`=?J2l(X@}_1y~mSV(moA1IY<-lOA{ZEQSU^&OVpjj zsn-&;{q%ZW%6g;Zit9ZB5i_B(JHH&-UtJhT^{(MqSEl_A^Xux+t=)W0u}BP{x?fNe5f~)1OpXB*yHAJQHG;&TFve_2h;R^b6V-DZ*odu5U zG?qS@kRK#^P0E_;glTDNQwl@VbTTg5fJ~Nkv)CWmNvl0>yq0CCOSDI#y%OyMInQOb z;IlVX4ZDT6F1vsIj~oQHtpitB|MetfrmX&TXsq38eXvFtLx->!+y=KcMMGCPT&$Qrr=W?=>dTuIltXzxZ*w^i``{UetQ&oNWwt<@PV5pmX^m_t2l)}cFL z6Qfb8u$T&7yF*|ra%KoA`OrmlwLsi}-%4u5H!qpgDvQ^>S0iRhLko)TpEy=S3o4s; zSg>nQ;~FTrjDJV&xauxOVw0w(Iryn@*b)ae^LQ_$iobWT#W;4=Um)xS!?VRu2tONG z{}a*A2CW!83|pnvV8pv0Pr=;SnLfcQccrO@wC%98?TFY~+IEz}?{U_?HDo>Cl3CB> zdv+YLs>?%3i)qf%xSlk++Av9()MOG3F@JQL#z}#;Y_s;IkIVJ zEGr%opCgFJW>XQ~F@|54aYZkBAlD}&a(c`xkLQrl5KiL~7hL12B?#@V&7lGh@cVf&Q!jDcyj0 zD$s7(_9zwg)XBL5d=PwQ|+H9Rm zRdWWQDvz}-A#Lhmul`%n8pFJ-D?YufJ#{~P5N{iQL?f*cJ0lGn^h|V#hNkvk&`ff2&|zLP9Ce75vW~%N~oe(Uxf&Hr=zokN3q{k0~%kP1`?JDe|`f}*t|pZ0!({s9jjE= zhEUQbhEdnl0Hi)|nnd-kQ0INYjT4S#0HIG&`3F6Wq$<~I>{b1-3M(bN_jZ)-+J|}$ zV}3kh`ctGMcbNh%toA+Uky4c0lj%dF=QR!{eHryW$pde)Jp(k~XEsx?m~)R%#qw&( z?4OF;^k46gj`;O~U+tWWSIb_If2aXko@06sOVs$_0lcyaI?OdJW%5;N&160K{aY0P z6wQstNb1g`xU<7hdiyx4DEf&fMgu9_lwDRkMxjr~m#B7#Nu8gObB9nAcioPSv%;Tb zdzd3Q*$3>w2b12hX+CYrJE13;u3n2=PWsQ`t$?^39|L7=0VM+uLJ|_aLn*Vx3)VDd zhUVj&pB|I7#bqX*DB|vY19nvp`)4xg&JBP}cGMPR`Qc01&sYx4F|ovGIy^%NW%rrT zsJpKR^}V^glBl^azGU2<#MpM;nHo) z6H%J;N`ju;eP)9oox4RYm6w5Fw^4k!6;{Nsf3LvD-Fo>E4K)jnx$e-r3eoMz@etO9 zDaAIk4oH53X^m}{7^IHY8+hA%`lX#;|=#~lLVQtzUcfEWfW_*+kT565*#Eqy@Q4cn<^k%gJwcsDcLWIep8OlqN!UFtShwSnT^I)*1@2bte9B|t@Xu6rL2|`u zCgc;^8l^jo9)i@#Bwk$~o53lf^-`{EGexE(;9}HI%B{@06y)#p7fSd~ zI*<2u2+)2t8@K5z&*AnxA|U7M%ff2`C!<%$q%&F4nQZAy4#mwHD8!LTc^720A9jKd zeAZEuEWF57wnns-YT-ll_baTI@l}|`2{UEdvKk5xJ0t2wQJe;=05{I3v|Dqa%1{=Y z%cQ`zQedeR*p8B7n2@;dgFfxjZt{>9z%?Vgf|2kKC}P9eF~y*YN{*B;R;jrhhv~5U zPS!VzP|D`?Xr$It`$GlJJP|3^ZPb#IUrWhvG-Xoqzi^^R-TDYw##aC2q01PlS{#)! zJW_7qy>U{?XL8Zi7Nwr`QqSR(|E&w^*Vsme*z1Amx?#>($l)C03h28I@t%-6KPI$> zeFUyCJ)sE)b(Sx3MlpFQHR_aO=3>sSL93Tnz|u4nS%>cW30!dz2bJ=YiB;6$+7231`NG8-@fmaq$ z1xRgwj>HP*&DhB!XEnCKSH5{rR?QFOG%}r|avf1Yu*pYtJhGM@ zXY|0948}Vto@}3cm_tR_gW9~CM9DY4BrnXPRWO@*q^PjB7U3*Vfc2v7qV8-1d(ls=t@%^On{iX4MEdNud@y_|m zA=H|9k?C`n#%EZX(XHS@CCs@@NwR$aQ$vn$hnf0zN09PYkz2H`Oqzg^qCs5#BInRV~!e7v``J7{ zSDOlnGOTnPN94|{BHK${A^xt5#ay1ou1D#4NAjMYD%ep_D_*K@Z7I^h2}(|DZG@?`-?yW(YJs7CUG99ttjdEbI#eT-l40i762{LK_W@$gR(dHB!KqZ}a zok5c=Mv$EbR3EJnXx4%CH+uCXAI#{%Xw)qprc@GprAu zcnrRTwB#-0ev{@yNZoGllp&rJPj5E|0DO2hmMcH5a3hl{iDBB|K9@k(c z;2YjWFOf07=XbOpd#Xb+bWm-0BBd!c0hNaHm*cI|cR>Vz*q*Dv5tnK$Bw0MU<6swQ z3lQdz>!K9BUW(p81FaBTn}UNXQGquQ;4fXE#Qt6It0D`7rKm?SAQk8bPRTPlXt3Ag zQiyPaW*9*Tc0TzCAMn063`KPJX;8!(X#0d=`V?8s#C>#siuquIixo{2pFa&%x$Qb3 zwv-l)p`c*qf}+k>pyaIf_*GJMxdI$d#b2%fvv_UhfdbcugfMj4AtUfzL2I{;Wyx3LxOR-S+ zSlfFysRF?ZH4upERs??QV_lGse?Q6+%) z;wOKyq9wDa5|#jmF}b)NHBKLCNO~JF29xMRRc0zAo_6yS17cw_qot~W57AJoO%m@C zwmteDkKD#>6{NZDh~@#m5CEV1AUt&Peu}idcqVGJ%cxeViV!bw{B|ao?y;{$X`dWp za$MyaVc3y}$-2F#s%O^6Hpns!H7O(aF4tFb3%WwFMFtH*$a1WzZ6lC&ubm;-QffUD zjgrMlLJ~Pw`totEZr|bEv(5}LHC0~C3NeYe-2G-&Eb1*4>bMrf3zg3;tER|51F z!cXZDPgRTu%MnY4lKtf;kc=g(Mf%t{$R-kfOA6@x02j&y)Nq3XwB&vIfnZwpQ*JUK z`L2B@+F+bADXAZ8=B`%bR|Bo)2XAIxyffdT@zvp*!QsevX5l(gg051Sm`zC+;V>iI z=tu!crd+)}xjinxr&qR@R#r+Y(buS2URugky$C8fR1N88`FhN<%ekCw-3D^Yqn4diR}DpohjuN~l7cYe!bR5f1@-x_6p zR8(`PvAb#jE;=}1u{~2Bmk0w;16MtGK-U(Khcq8AUp_-X^?CSE(0s~ls79y;hqLg1 zb#bSdTa9?U`~(iGeW4|#+(ziJlsnjMKpx^!_$)wV>!jM~zTd&TkqJ#8fJ$0S( z5qRCM>paG}%Gx*ZtsFy9_qPCioO4ULtN!2k&z}tZAr%e09G%YsCpibR zkAlmMFu1FJpb!fsM%3}mPImWmHGvhTb_4ZZqmK`{hLTOj3)DPn%tX)@E6)aQpKLOuHgpOxe2 z#&6*I5lJIy7b-D)%Nj-h&b&!|)YS9PEE)blltRp?pM{2}Vnp5oq_*+xF%-c=5`kKL8t@y1UnA9a)5XjBsl$*480Bz!hy}vLztW@=xgT?-IWSrYbA+S04Ph1m|X8}Qu!Z3Z}`c-a6Mwhoh5+j&@pk(Zv}jp2k+b)Z2S{Dt%!S~|UI4kBS%cX;h>XrG#tS1!71nyIw#0#fCUP3=|8LKNO2QTKKs`SgP@nTFz=2Uzu z9z(|+b9{}cmPVc<5ohzAP()!iF{mxel#+Dfk*Uk!lNbu`Mz+d?jC%*4dm-`*Db1Qi zb%8pV0Go-X4=GB$5QQeLqNs_RkpxR)ux_^ym_rJq6XPeY;dCJ3@yWXxOAkU zDae$5wG1=mS;bjTFGg(%8nze*85?}S@<@6*60Z_xbwV0AVG>W|5{le*LaYNX zphdmgZU%S^_T@26+~SMZ=S!)>{CjAU*+6m`GgOrNY=|T`(@-o3@Kufb$)l?w25k}L zoKDQ7fcoKUoY^%o@k&4BAl3KBBI)WgJ}6ccFm`pHgnA9R!2M zEsRF2+g+0(Vk9oAZzDg5hP@g55KV`XPmdzZOp68h{Q<6Q_E@Z;v2*Z)pgz16il(m( zLh74$2lj^0PJQt@=>vZMQOs#JBQ4LRYKR}n4xzzvqc(mA{L_%Yo;%!>{T#&k@1ngREyN%DBddE*MjKb9_TkB z2$H@qU@;l4V=2idw-9N)zzR+04XfuHMlGL%0!=9sV5N#1RwgtbL%if306dU~$N%z7EDFFc zkizfo!6>J9hMm~}>#2P;v9>1b-4&1A%HS|v+u9xL~P;~u0*o`>ekqz@OQ57@9B z)a~Ej^I*F90=Nn9|p8lCLQ4fA%H zj5o5)xC|-u!1GWYCsdK3kCW0)!B;&rnfsNb3rAWOLUXt0VlU4xN(m_oI$VcV~$}xLv=o%oclcFsfZ&Pv+wX zb7j-IYV=@6kemiHr{%7gtRZb(D{WmTZC#H#eQp@Rto?+HG~22M&|U!@rRga+nZ<|a zp`u-Psdr{F3fAp0N7}PDgelS4pPaHz2vWHZg&459pkNaOYf-C!oR*9RjLBUT|639s z6I!W*j!BQ#P`6hd@oLBnTjcb0Afp#5PaEZA$jb2w@>*Dedd7t_3uMuTsfOK2NnJDo zIE2f)@Gz8gsle0@+G&VdV!d=YM|EcnZEbCAq*rPnlz+>X2h`7hJfLK^r4;b%URuG``|O9;bQ_AFy$QYEy9p6g8L>L*U4Z^a z2M!it>664tOj9VutmYA3HlA`0KExLaUZGC1N#OP?nmZtzG7xIlg))J?*p@vOqzi|s zJn#=t+R-19kihe|P)%6#eAL?h9aT(u4h)lH26yTyRuKot}48JZo@rcUL2)oJhaAxBZeB$$V zax-@2qhWfEVa2OOs3YFlH4KB61ZObMu;ZPaNozxq_3t)Rly?|!$8EpLZL(p_SY*fo zSX(29#9{>81!n6Le)4Xc%oPmJp)Ga-`wIzCWb$kfs|w80!9lkm`^5(tt$BGuw*Cr3 z&QLa;tnEsr3oW4_C~M6}eOh!kMhy<})~MOxcR>HJ>CvdIa3y}LaBgQ0b!o&&UM9Iq z7_=+=hC?qj^1)|ZhXvFEwPoXEhin9o&t5|5U1a#gyGfKgoGEYfKFS+94J&a>ro{VhC*5 z&QRbwils<5J~UyuowVGZlIQXAPI-F?Wu95Uqx~`<6#ne@VPb0k5hZFOzYER(k;~?I zkc^~GACQ)g`%h4i)$PfsUWcrku(<=izT~pLiKo})+&NL|w@~Vb4ga}p+pel7j}wR@ z^*jOwk4Q>gk9wFP4n`AmD=R97WJy)tuIr2Z7Kki|S-3Pu@cY>gFvYtv$e}V#~ z)kDC~uAOLW^b6LhEh?gZ_nFtSKH{U{0GtHDDZhU&Z?NtmfY%BmGO z{9?8gK8M^d194v+MOl|QtnPS|7hoFfT7QCtEQH`7)o?Mj?m^= z?yu40uRUpW-X6SnpNv?(XV2pJ^Y>d381qI1c^zfoP|P)nctuVFc$eCcMpfoLI<*H^BC7w_u%FX9_15s4+hlbqBoY5 zl|*hHu@E4}9+1X@rAYmP(r1QH$j=wJh+j!#8Z1%N?rD__iXI9s0Ed+- zz9>pN5g(cO1P2PR&0&3ymmW$W|UDHQu`B)n(C5OB-R+V3*0^`V^1ib zjVv2v#;}BM{D!kx#qfxDQ8sE2j+5zy;lJBvWv-6rvHtM55LPXwM&CkM(=28_#6#ye zxTSS%Pi{RwfeoE`h0I4k;(o>6ix$Bdb{lboYy1MjCJ3eEy{jKQc>`mZEsdOT0uRS3 zDDAL5Zk2x>(1h+cb1TgA6rU1_ce~5UAs?DdG^~#`ve?hhRCU@ltSjyUagHwqiy7bgI(l&E@P(UxhSQ@<@D zg7*3yXW+H&O<{Yv#cd%pcaBDnoF%gV^KYOlr;9s~4*bR}fZbRRbwkPUA^Poc)fj8; zgY^h1%Zz&Xs*Rua9Z@%{TEP zcl^%+@PYwxTAeS-+E8Yvfv6<-pbNCiiq^9YjQ(fJ7r{9pxWkaHG6BMb>zfg%Eb{J0 zqyrz@1J&6f0xVdwFTnSr;s=GyZ_C=n2&;OYQa6DyiN~d_p!(1M#qTXCLe9w~o#WWd z==ed&(ekNe)O(DUTc>_FTB$FjV9l3UP1XTcGJqJtl~<+Za0{?kS8FXb=}Jv{@UWPR zzI}v6E;bMK7jFst4f<3*Vsd=kT7@EYuAN+sQR z5qUVa6Q#Q?q`NK2)A9*V-LW^K)cLM8mF_LUZqcsmH=w-zbCS1)OA(;wU?M_`xj=My zZ~|cDqs`zGHtR9!EPO!8!DYC(wE=tNcf+YXr7vULM+eF3#71>CK$7ErsPiG&JbsU2 z{d9N(qTxQ3v~glCx8}(bQRaj5Y`{XzK8gs$0g%mw0TZb{qZnk{;s%eV{WW$1bSRvl zrG_~9s#@PfqAi9Cv&AHcIA7X{a&?N#(!n8r2{S;|aBBTh8ofUTTgl#&R}e!(#p@GD zD3zQsC^FQ3ep0R)_Mg0KepaFuBz;d8|Iu#iA^JLiF>(pcXxx7ikPS< zh@hyTVk=_js56d@F?Q?Nj@{keGj@)xYx92Bb$-wL{PFPdZqM0$_FjAKReNnrW5(G3 z^pvYj8d$UbUeU-Kb5q4gH9>`yDQ#Dg&HX5Jz?BZ*yMl-rb@#?J{I@9Nv0cWTd|0y| zfc?Za_~pab!&XF<4;>0{b-goR7L^Wq6x{y>BGX6Ql)TBIM-|{QuPrT&-Rl`LHRP|3>bS-dk1w|y=V0Y^=9VUHo#w}2) zV-Pz=__#i3D!Tfr?NM=Aj}EZ_1DfdO8MrvOU>b zjD}iZ5N<tT^%b{@Q0!BSZRi8{nyN4W0#1_OuI7iXHUNP=!Su~{Oa~;3i8)}7&;o-XI zTaGbh`ZbevT2RrfJnRv^RNf#SD`#*3>zRCeQ1qy^vO^V(N}Gu?9%kcksM&2Me3}gE zPb2=mjyTQpeHbP9TXqh&Rn)^RDfwI-17L2`n6cMD;fm1hqA5c6Ogp#>H4sz5gbs8| zMNGcQE9~ZR$12d1wKdeUdng)p>_ro@(xm$Jq?x({9R^aa2c%l`gOLjS9ti^AZM}@W zJkdrE#(r+;{52l9c3iAmim4l{$92?F%0Dc|ySJA#N>&8v@P04fTcM;>R9MO;!-*zjFQN;yMuW*R*Fv4V1F zFDfm_;Qb>#>NfCSQ5yq1Ysw=LCcI&N+}=mjbGAQTz1D!Befxx>3t=lOO~)yr-FFQN z8s)|b%^%=YTnz35!*p?munFvvsYydf4z+(2Jp>LXq#6I<_k>z4Yrx$MeNl@_;y=Uj zCzF<6gQ?e6rc=syG0_t+!5@*>zj_oghuu2a1!%3~0j>JL%H9W2&U^Rhitb}X_gc|? zEc&)kLf`x;@YO5eijYyzwqjz!@3858M~te}aT#?#%A}9mfWI-hiDDseTww*v;r#Y( zK^Xah4_u7+PW`V9!8#hzVlzfBpa}&xH~}MCAd*NEK$KK<0#|ZegU`xSBwhbNBc0dd zI8Q(yYpI%)kB-V%F79<6818wvY%gsmtgpJmHp94w&4I}94JPqtjViPU!9IKax))w`l zg#C|@dru^!6E@!9^wdMNwl!{Zal~NILh}2SX(!W%)Md*IG+oqF$q-av!G08K?57}9 zS+ak+$fpO9Z^UhK35EQv6tcce@1^=hxXi;%7c+yCHoaXGqVS0*dc|f6CAmtH*%kUtLRn zdx{ls7AcuMpri&)NHyET3&gG4d07l>*^u0;j!I(oaPo^~ZapjTI9#6O_OU@bIDBY1 zS}R0XPO$@cSz_hl!~OOH`f%`i{Z8Nmzp1InX}S?d+(xrc5x=3liA3)I0?)qE@Fe__ zNo4_*fv~K=Z3G=~g|&J+ez?vEmOJ0S1GPei`9VQuxs^O?npK}r-ur7S44yO+zfp*r z-5PUf+F%M&3O4FVPBh})HRucTy3fb)7?Yiy5U+`bCAw(a2$aCQ#oMdZGe4-;`uve$2x4NT!EIva+P82T4?(kQdyAI#1B zYq-z2&CjXx?g1#*yq=CQX(Bi4v@S`niAW9QFAZ*_fEV$JTT7S}QQl^h9@2XfYVh^K z^^k{o8JwSkWA=i1}!TUv0^nvE6 zY1TdRYq^4JYW=Dm?kQ|Lbu-`Vq|Ct~We7UdG))#>i*YC8j^#XDvB6Y0H6p!3Jc+Z)}Yc=RpAzt0a(9k(72q^I%j?nLv2f~1^k2yRu85vY9U`Y2j z9u|j@v(ZPkZgJ7a;fj(%%2bWRUZ!5jlK#*wUT7%dP63Ys&Um$_);m7}j~VoWZN?oF zEfjce0X+m;k}u~0eI9|O7^i@o8{A)q7L?@9MqS5;;|NZZ3Si>ejD_ff^6eq4b@!l2 zvX~HWL8dEq{ReiIH+myEW^yEYHt!mll|IF5(qUtTj;S7%&0h;}*G!`^(qSew)>7d| z9{-{~?+}LA@g0=jFz)dFPNDydMGf)$D12QoOb3(hEyC;BFe-R40a>kjWbv5WzjaYG z7kV$@1|~ZnFcf&G5fbfJ3~mVhqn?&mW~liUbdG{z#xb&=w~69fGb!I?8a77RGKmsS zVTob88U_7^Aq9+r1+YvM)P1rH#|dqRt0B>q8<~S%bi6)*M_Kdqu7T(PLLZbR=!mp2 z2yNFDA@t*WB2crjK5Di&OCxREAU7Vlv^j)((XGOeL#5Q7t^iw7%M{?{5OOYIWEJ<< z3cRijpsK!1Ju1Vlaz&a+OGpkX|KHipSaT1QTlA8u@9vP= zP;EG4k<4;?Fchx!fs&~FNZt$WjOxe!qzkxG|Aw#S2un&C-UB6XZ=;k$L9Dh4T5OJY z*MBK$>K#0cOQX=%ytPN{q4+6;ht2n?@~DjJ?ZPG^bj=utZ)>gWiruQFx)~tNv;90= zjd(%azerKWFiMq1)!;XV?CgdjzvkdDg=lY&4)~Sy1L#yI7^9?zB`&q!cu+@dJVZ&g zv8bi{j0YGzn;ztFy@qGa@g44-(GeB~!orYT!~TYzzUcmE?1L6>ZBXr~_SYGA^uK{H zvDXg%z|wy6C1;wrJ|4-cH3N-=&2FA6t#@Xa+TtLI5LKfxK7Og3yy&0ryT#OO(^qV4sCVk1Ul zlop?cqk%Ly8fZm6xR4a?W~V_U#U2qT<4qeBuuGYZ4yZz)a<;-12*L^n9YTXU%blz# zT%W}ane}9GZ!>Z_xrd{q@GBL5FuZm>RSHw1xm2=kKGHg^4#X&#R>K2x1H8KRvz5fa zjqq5x0B@0oov~L|sqjOy1u=rrcgEs6Bz3;ZD5dBEA4pX?8X7d!k+5P=dssE%Gg^E{ z*ei4{kdoyTh`V8~GI))?IC@(gy(5m^Z7Po5)1`qAPvTlik8fQtTA_my(B-HOaItNU zqV6r`D*A|8V^M2D!I_M=T6@)jhUok-7tbSZFq&4`hv^E--8u;NP+04~P(FDGWh66i z_9hHo*B2pE#!=ozdw6?-v$HiL6Dr)K0-V}l;o^(r`8Wo^Ep zZZ5`Iw(}*MVr@HCkQU<8RN-Y@)#^BeJy);7hdV`l!*hHR^C}zHQP)za{A4SCG6`YX zm_rC`&W&)k)vuuxLwR~7Ah2YeFBEW=1>GuJiaGQTfO|n9Hv3)z2s5o4^Ru~AvH;IP zIOC5xG_wZse-42i4PnF&$6tn`!ANpUKaWWFk_HMf%Umav#!UBv&@izdFQ*jP2Ec6n zS9hRhxfH)%3SBO zwS`%s|KEVUPSemlsZM?a?GPqd1)sT?qKBtR<&?6N@ywvme-PR}@cKWTS4$5V6!RZd z^XUZHXCs^##Y^_&5P1-yC~()VGlOMaeF_=B3Plr|d*Q3|KY>eyQ!Ke*IJwvz!iV^L zRH3zoouIQ@hirK;p9B^4hR3%|%N$rl-oi|@H#&$IGv!8v$}VoQ!UV>lz>p#>NTdae zv=FMA-X3YHTmR}B!bu|~UF1+b8ZqynRR4%_a?aqkFZ&C- z6n4Pd>XK!Q_=L(D83QN1LO8+_f@5S!XwPD#9UrN*Rby^pXIt3>o(MSch4_wVU9o2y!Th{r2D#sZXnA=buu#vYVZPIL zLivFDI6N84@ zdNJ0Is&bt|w765IPrlOzBWu(B)KPaeM&I|~2D~_jH@2G;k7_P16v1U(StNM#Al6*|pQsL$)JU}UX2EM}Yb^ zmwbQejqi{69p=n%AY4Z+kB;S>#itVGh7G9mcS!hTa~~?(XN(8Udfc-;hb#2BXQL2T zobY67t8F1d4nWmiY$&H4JHB==N>GTIUB%39VrCKK5`5|*{u70LZ-J3=`m+W-PAM(` zBhvCUV+#0>qM#3;xEfRVe5Ty;vneh+0&6m&b4%mh&}@HH7SZ3B(i-dnY`_w7!5G90g`%vdHxFjwtd$6}R`E7dcFGZ*33FdAbJ3#fGJS&n@t;<<=;K`t|x@N&O9R#z-&U^gSz`i{*d{BYmphzc|xC}&|-1|tO^7}Xtd zKKtLJ2MxMXzLK$NgX2{DF&#iq;<*F>;h=n=tq=;*BbNFiGel&D;#dznVFo6l*qqlC z>pM@%rNp6E@Otn9B`k~Q4~ik1x=hsW(Ri^W)-NGXGXUC%vg4M_faY&OTA1^aOxbOE5ejIBFs*N*^_4rD@ok? zhXP)@BWGKK-B=ucjhA8O{G3K(i#6Vi-xfPEef5)@awyrx-FayMcYE7~q@t?vkjTlN z&&a9obxA}$1#yja0?FC*%lLqo56HIU4R(;I$qc&VaKUH97UWm%rB(};;6e93b?CrI z%XULFFXSRgHWV%LDgOFst|jmF1Gx!kiRj}XilTAct3oWH&CGw$v7?tq5#YH{9)TsQNadR6VmC9Swb@A*=^WnN=k zP@a*9`3UbkgI7}C7K$y`9?z+Rsk`$^Es)r+n%F?6aYL-*04z|q!B=J704l#T4Xs*7 zdGX0cz=S(*Tb?DOVDCAC#vaar`HJl|D}@AUg!6|X3Q>F+z~sJ-(R%XzKhX1Q@2Tx< z_;iyS;Wn7ks02Vuz~BUYsA+1B_DTj+YHW(zXB-*{gL};YlxRms$6cbV%wgzpnwvF* z0~z=DR?X76Gcl&BGc?@&ARhexB(IAbVYaQi-(R8WO0t^wa~xa@EX5~TApmH9n023Slr;yrk|{_ zp@9Bsq&iHc-iCilvE=!^h}98;8=*z&o&FT#8#wMBN5#K8fsEVMK~JzqZk|r|SCP|? zlB$_b?r2bn(~{&Zvq0R4+*_W2V7ezb)ZkU^kQ{NiwbX?yzD)j~{4jKT8(c&Uf ztK1)Qo$5*tO-WBU+kb>Z-j@LrSJo_QBS0* z?9eNC&g-mO|1S)h^I&qDH;0_M9aHGE5aFw!@-JmpE!}byO1)@AR!Q2eSTnm;))xhz zDE`+bsJ*Kp#HP|C8rLol@T1&)Np9Vcat}$sh%P;ySU;2f$86-w&e)GIaK{0FOuWt? zNY0+2K}^n&R^4OV8gq(|}6m4s3frMpl{ie&x59&}5D(k|(!~T!5aGr#t`=$)5nFg}-hyuFD<=HPao(?ag`#!Fh@O&GkC zJ&!=XzKS87pgPe3FXaXa2rI5HLFl!y8^WO8t1-%5ma?gqSARRXv4%!|nTZ$oUzbZ_ zt{Y`mzs9JjVFyD`35bQadX3p{Y;BFHJjNrop{gniCoG8Ep)5r`n$EOkY{|8Pkb+ zB9&}YHXw&Qey9|%{32g-mYf78jFJ4v;^SaEyUR+r3u`JyXpKMsTM8>^gpu!8H8dLM+3uG+6mc$>!ARm!;^IclAvf`=8I56>|MXJ+eNP zk2Y*KF>bT_wJ%SD>+h5ClCXaZ!mb652%~O#B8(sQI}-y*K}#_0z+``ep~VNTZ3O}O z{O=U@fH_E$My(J=7Jy`}}bn=FcP<;-(Qp6N-J_1TdES z|FoctL2ppwn?EUXAY;OokE#&nKYxtSK|F`At{Tuao(;Mx#LcGSW;1cKIeDGTk?bkH z`xzNPUGZZ&Fbl-CnqAWsjYYfXxa$CRMzAefpNgeqcKaTl)fq_`o1hXuJjV^NV}}l_ zgDCaxTfBEPVe;7`j~AiiE+$7@eU&miLs~vshe93~!sSNd(f|ryUIM_+f5+zwn&W)I zbQ+M8%t&nzCHw_*0Z4G%VcI9FCy{C3EL7vru7o@2SP1|$fiA*nMUk#ZF=Y94>d-`4 zCj>@e{gBTpnZ?gxJ(^>(h8@7jgW3@%<$}Ny9j{b(x5;VB_na3ba%Z%q~iu93JYZ+c+w6svFClx z-A!NCYk|{!kFd*o`~_Ld1xsC0@*!Bn!YuK;GZ8SoMC;kX2Lhj8)x ztp(~6$_3OTQ2_(zq{o9X*=GyzYe$)BXJkOGPv3A1evHQx)Lpz}2jjIVOZ9amZAU!D zmBAg)MsWfN&UHfp-Bejj#Zoa@byKp=`IAe=c4v~i zZZieMp5&3Uy{8qw*!N|jii2VmihKR&2LrMEi`(V;omdA1B^)cNI*&?3AIw&gDy0GD zC35Xc#xBERsBb;nR=D>dw^eRfvrQ=A&_^t@z@W!yNqq*6$XCNT&;R?6THF5sEGFSL z!2UG+*Z`(B&Oc;_K8B=zo~AE6z8LB_@kA~ApsQnS8;l#bZi2xLsBVezcG!sDCW_v^ z2kn_G;Z4g_!;a=adz4?-ZLBYgL-)wz7dF9n2!qxKwwLbt=vAXnl#u6x>>Y8S&Wg(4 z*JDpMOaIO}{GtydA^JiU^39${Nnco;buO$Am2}a=y3@2Cj<0u}GZ30GcX$_srbX&k z0Y?VgP>J&WguJ8gk=-N-rY=d1cvM^0dSdYO z-&4)bKTvNT4w5w>%gqyzq>SkVd=FT3FTTW6<+=J0Vhe{dMUgeNGwS*hMcI>i&;It1 zhIIP`tY$??zrVrU87}0N$gGHWM-#W!tZizE$m7H zCrki5g@^DVE$<^N6B=`PB?i{>4Af5I$wA7(VN{5+6uT6{+g^A(2ye*!x(Ha7hHgbG zQp{)Sv2iz=vpqv&`k%sV*z~thup+^!(I-9O{R19IP<7xVu!^61!e7#Z9bjD}ag8mO za20%dT&-gC6RGTm$_8Xphx2@Wv*q&xTHA3=+6zTX)DWb>Jv-2VOP_99{< zRK#F7d>Mq|@a>k{SPs&2%@fIq=~?_y!hWa-~{u@ z8A}p%!3yI;&pyQU;L63Cngdm*%2Xv8NB zd@?U{=ly$?$)Mn^Us3EeKDz3X#WZ>3^k{@V^^y^myO<&zJNpE}^bR)>+AO$_oQ`>i zBw@UfG;=mEZvHJ0DJI`GBDB3!$4BNt8^XpPZK%KC0&lM%;T4Q&h~`tYF*Dh%Z=bbm zklX3Z5na)e{T7qg?e75Ie`By6CSAb5H=jbqmsvVzuMe?+R?nL~_X>Br`1%Nprz-mA zfll{Iz}xH&lvVsg27leEi$2QeW>CAL!w~D6ynBacLR}%J#3b=6oh~(@Q6^sQeU!rk9Gw+(TS#@iXp= zf}q%MN0Fqw=86-{fe>+L=!-Co2y+%;F1(@>zpg=U^$Ez5Ty20;br0#9!N2}GV@moI zgBs2`zym8&!8sp13}p!p+1X}MbNU@)aKExY(TB*rjCF?Nh+M`@&~+x=*gXYS_b%S~ z91>t&VMxXCH?c}QH%)_SRa{sTB$#Q9Ype|SfnZSW!~nt;d1^GOb1~vgH|KdCLZ?5U z$vQz45Q#P=`$Lqm?*$&-jwN-NCz9J$Gn1j*1Trm-oa%5lSJ6)=ctF&jntP~V8qSb9w5oS_&0=kO(DROVNYTDemGvury#9T`*Eb>mw*H*)tdR2+@X!R1)FN%B(EI?SPUs{3{%<7m~iUzdk)O-HPc(L)WD>$ zF~hd!f;fB~7D$T*T82G$%v+9jxO@fU#1yG5Zs4|DPyX-vqMLT`c9kC{xsh9S8<2Q; zt%6uA()TfQa!Gx5qoXHriA(B=4=9=5Y7a`hcuQU*pcr`lg8b%vLxd?&i-ZNBRva%n z;2;&_WKaEgS=?ABZmfqh{l6vgEQr#sO=U)_$HChe(%zF{>8A%vr5Y!29N1y2r)vF< zRQ#qZ9_ku46A$&sw*hZI?F|xfpto~x=9|rClTE8ZP!lMJz685t%c!Y-BDttw65KPB zJht4I#kn=&+*NO=A~h_gRgk5AJa zY%XcYcgu7JZmT~S>g@--MCkOr6MS!BZy9XKWoiuk5$Q6JjW>O6>HXi-Xp$ozoj4Av zP}Occ=Zzja1C#j+REEDqfpt$%en$FsXi%a`8ROT^B-`oZvDCbB*KziM2ESnfT>OCi zLDxGYN23qaEBYCFXE`Vrk(vc;7u<2yb%4T{ZH$SP-70i-8td3n>!d`y4yj-zgOBA- zJcrDImRivgxO2n^;Lcuu;I{%j{}tCZh_Z#$_73AUr+;y;jmTS$u}U5z10Jl38z9<# zzuLge$V5jEDs0s~H}uiv)k4JkJ$bJvgGV%rZ8&KQB1fu;BGae1i|M~VsI89ir?@z? zcWAd*rnNF2ev}))VN^rv@NESXQytIp==Ps_9g4z|d^JALL1&UNthDft9RxOqRe^z; zYb0-VUv>lO7j;m^5sfwzanqIr%xALaHb5Ea7TJu`eeS)$z#5&#?+je;j6sy`%OO9d zAV6fNndVOaryPe%oNhX?W7*~q+GilLAiNJBGD|Q6(}<%rgHK`=$Cu?JB{LlUvAKoZ z!45!rF8K|4fyG?pmDeh1CP;zMReX9Tri8NcyFy!$Kn^>uaV?q`kD1|4Z=+-$_zQkt zae60f8)h!hB@Og>DJ8=?y+@pixA zJ6tNf*24w{Qx2z9b7YY+R-}xh&=u#A8k0wnbUC?%r~&&!yG?DKbz*JKjqtA3h_D2<55izLL8BJ`|z?=k3gKcC33P!+g#5!3X9b0PaDH6VO}N z&*2pO$2DZ=@=(oehvjNA={g(lE~yt0di3C{Niyfza}Uij7a__{wH{$)?}KP$a1zCA zoeyQ;{Lj3er1@XSE}U_R#&xv93=Sl+pI<=v{uv7pT8-uP>;MNQqG2N0_Z`4>2E1D- z*WZA7?R{&EhQlLr{(KIdc8g{b&tvXw*)R$>7W9Hi02U;;om!y~Lw>72B8JSN__NIMZ(TugUiV~`OzEbqX?vld(U-=< z&$uy}_1^k(5qf@NYBZzjHP(Cim4>jf9cX_Z)tMUmGY$mRj{bT-OT!HMBnNA!%-a`^ z)A&Hp6AcK8k;SW|E@am7j+X4QZL(bZf7(u_BJ8)h>nbF30BKlHL@OwE;6hBU-34~j z8t9dZED3vEQFZDI2o`XBU#8)W$063P+7)_8SI2dDj@->qIgBX&o;w$CXDUJS*J2o@ zwr||j1@u~;4Yb?4$EId{yNPL22vV^_)Z#dTH4LJ{LUy9Eq&1LIPnU4Hm)lPG_ZbY?Py$Qo zP9#zX6${;(mr>~}W)BO7pM|Gm$2li(-V|SyvGoH^1~|@**Of33xVviJI>LoUrA*nbzarWpH? zfRqXQB|w!QIZrwT)ZicNiY~SAqv9uy$lCwuXiRKPl@-=uab+V}$B8Qbf}k0zFPqdC zf5kk6moV|uDxV_dsVI?9(jTuo6DX+?nq2ARRq{F28u5;}oCG;D?}J5cz7*C?Cci@NK(BAeNQ zD1>=`+<~(zDjp0MJb>JmeFwkzVs8sO-xMX&Pf=XTBw0rZL!>5#qLB?RBBp@`3`jtjF@f>E`{y6B zSbamRzDYq#u>DA`_0&Ft)2mkB0y*S7539S|UpPB=nc0tm@wnjk6@Q&$B~Eq=6W}%P zzbcSD@!SQh6~C|_cy3etg0qaZx`HTm%?IsTRHj60DF+ZLDb0C5i%^b3jor54Itu0~ zmOiB1x&w$WZo3|PRZ>t(JXe)!Ko3Sgxe0*%wJm-HU@P{;N}*&*OpG}mXr|D`|AjG( z(9Ks<`6tj?vhx87TM&*)Q@4Bpj{=trW#V?X4}XKOPFj)7mfv{4xkFyZQ6MqxOK z^^x3K;(Ww_T@-b#1Sw;>KEzIxeoljayjoA$aJSKf)cv625UN7bthGZP{{hXlD$t1g z-Y{R3`azKupA5Bs;@N1VCZ{kz-lmpUrmc0nyeYZ?gN3jEPxR&N%hYg&FXS)aPSZxSQ{mzbJrOr_P$5JTeh2V7 z2q(SwQSw?(a;QuLe4FHsL=Mw*u*;aSqc>#-=>M|XA}-#EC$H0W82`wo7pPZ379P}R z$+`PiSrn$hGkaV!WH7J0qMZ!un2uaUV(tWNp9g^Ps#ckRBXgs+GMF6*JBklM^-jI3 zzn~hIaQO6Lv5@+8DHB#v-R<$xuYC>D+}AE3&Rh-^*Vwep2Ml`N!6s1(S!a}NzovP9SXmQmi!EPS)A593dVryUeV zSnrN&JroV~bSXl`wi!iM6j9Ae>0T-tG4%=Zx%8foFf2%tq47*wNWLu>Bf0T?^2eb= z@PRjf#jtctt|r$HKX4M`AX%(=i1?h0u0OZ^@z1A1Z&pqoR~g*Hzp#+UVFaraLvY$0 zGTx^HNi(A@`~NfzE#vXb%{mARejlj0%(Ef-#Hce=sSgiX08X)uVcnt~k0#99=Aq)&ZWguVUkJUhXD~qC^~XcUdZl zJ4qBEv4x`DEJ``h0SDJi4r-an>WMEfyLo?`A{^E<53H8c{w6qhmXRegvPDJ?`sj0r z8KbZ}K?o!Lcc8(6t(dtrNe)G*KD$|0xNg(&5#WoR?eMYC;A##}!3PygT#mVDyp@9D zwn~l^>$n{Gi+c})RAkHn=*;wq+-pxt;-5C@;YQ$6W0U?y6Lp|0PPr*`5-|YlZ%Zx|7&!zqWyM+0 z*>W}cKVSh^+?B%$zKf&xK3=^6ns+iZQiZddo9F(PX<~7GfRZ@9VM=CgsoSjCiBz)J=T>@ng5H#cR+~vfuaer*qs^8<-_? zfB#Y;R-G5CF6dL|Eek*pS~&OR&$pYjn>{!^5dA@1EbD=~B%gjfFM7u)#+s>;jLYA# zPF+%s|J%U4I!potM>KOlrmiDNd1V{-W?}=_7G>(5XA0+CDUEOb7+rDdvK?vOR!0H& z{l+r|>XGKHFZQJ3mnQb4i#-`2kbl_^#|&O;#w*0zhv<`4#~#S&ZU~=pqxaAVJ7@6T zQ8(*R??k?{1}Y=DsVOC`gAzeH9gANa*-qnq$?5n?77vEh#Uig?1%+))!$VpnMP{{; z>ZigXEB){+LdGCr$JPOKb zP!TfaU9SNrmv6rksbjy|z$4W+viWlf-W*l)xNVP4-LYBMBqqaWj5=c$&w%qyFhn>b zzLnAHu+@}N-wwms3Yu+z^}GZ`uJIuIS<~?9@X?h;lt?blev8#pako8UhiqhhkzX{3 z+mYJ2ba;9e-<(q+2Yiqfz*BNuPt4|q5spwj0 zh&%cmHkiUE48cPi+(qbW+py=#L3NLIhWbKW#>gq=dQ3ZhJS<3?SkDNM3y zCXd1Axtg_+MDJ7N=AuSil++&+I`UF)xPvm5&2dKD8CQ5Ozm2H!eIa$Ai*aqHRia?PCMR?UpHu@ zyp1m4vWPUYl*XZ`^~Ux*G^*${tSiljNf4TQt%`$Ni4$ZwEeRQv-LO$Xr-S_%syBxX zSRLQqVJae~c95|{NM+Zlr7e%OXHh>Aw8Lhf6ec%HWdO3v5-fHFYjuS&!Y2ahJ8qxAA8f4~+0kIv( z+f~H$LPVB*qN+K@Qd=4q#M(Q%^Ky|7K@G+a zV!1<%KGzs`a0OFtYui!$ET*Nlm{G#Lw&>>GI2=#)+ly9wR+GIOZwVd`>~+PJLE=ia zxH1@Ww`us%)7cewwyB6u|Q*6gBEN-luh-LjH4g$Rd%QL{swL3rp z%RyP-Xwy+ct5-m!#$@rsmcPaKnF?`nd#mvkYhCbjCD-TMfx5g@4Osb{{NokU2W1I_ zCgpJ6jxx&gh7g7Od9(b&_yu`S>M1vBMy(TfF=?0VBiGkM2zVe#o7eS}IZApeSBz(+9`^AQvKOA+5(->xK8swXP`ahA1C zDnoY9?h*;}K66U@BN6$^lC-3$bH+}jgy$(yckUL7qpL{EeLobQG;H^G)mQwK>1pn* z15CPh+k}txIu6$*@14o5R%^nU`0^7EgsG|T&jsN&w=Zh&{TP8o8u%w*Q_?J_&WGcH z#yr-7IzGFSV%{A@^upC-ar->-x`y+C1drHQS?t;`b{(LI-h8~GG?oT8y@_;_Qk$R3 z4D7$A!y4fd?j7Ky@h1zPoef|Nq-24VM~aoMPLkODrYU&_cR)n2oe64jpGy|S@!Z1} zI8~2@`{@l^{J0y`Frpj14jjPjF;XXroCM7*L_^2mR1SNTMK3@7H)sOsl?zu-`T)y=3<{U|rAZiXAiXeLH?3-zT+zEd$a# ztHfm&9n7fZl`3RbbvuF;8hX7WT8(dnUt_YwF=I4x^g7EXeUANw&NkRgx!2hwO=k?b zFM%|2-cH=I7yaM%hK0v{a5@?V(SBwH{CWI-P~SiyJ0sF_b9*^h{Da#kf*zp>m;UJM zk!$$e5w|v>KR)Ca+6*W5lA6B6TN>GaeWpFJhLYK8w%Ib@)Qam)%|8O26$+2PtP6!n z3oj!GX1vqbKW*?|>A0yieiYwapJZz%>*2iN7}x2VvqoE!WZdyT|I8f{bD?%yh}ESB^!ZShvEhXe8q2X5cjwYzjDB+ z>L%bBzH;vD#XPwE0NEl&b)`NF?J+{Gp>V8#OLdPAKwX~SpwxP{hH{k*L*g`S{>)I_ zfbC)2QttNYcjq7wQoL!K-Ymq9Jpc^l%96%U(EQd-cale13abh1;Ui;FtCY2*RPa@w)?3{TpB0 zd>u~zuWzRG7(UjgEaa1`E*9oElKYM-KI~^wxW-8#V$X=!vm*8!g%=;?z7Fg)8|`^} zP;hND1n?oNY%p8xtr&LRGwK65s&uL*$*xC?Mug6NGt1LlK&6KB>iq z>APP7<~knhC&MLN=&jKVdhom+A4Hb7D`i;BSvLzucJ=)&+;aHo>*!P`?;&7eO?Knf z()X}Op&%948$9$fx}Pwe^}xGEP@crjT~xzr5W0QM1V8K17stL19~XyDh{GqzvuU;@ zZeAdpyN)RAI3C92CjU_I7$;^3QbuxXflf@)hk8v#Vbj$SoUN55LZ1XCorZNTg%>NU zYkqhRTyO!cYC2Nf^$&7;3piX>BGw}l&;NKmfKkd6zrEzk(mdHnT&i zMJFhFs24JpK5ToVYDc+z}`4no~}fGDNDo{(~@}^F^$3Rk;SwNejm_mzC-bAb8&jzt)fd{8)yR z)?Y6{nNwB}4T@aZXSM=J47Y~p{vX~K$R2>u@wvVTT_i#mi_kg|xlIf@_rM+#?~cDN28_!35{=w{5LnE1 z&pIPsbG-6E>8b6(b_n}Vq}gW(j~O^?OFmmyp$WqylsNGg*O+woj0D&7CWBc1Q9P9i z0h8xzIYqs8r!1V}F+vS*Bh9IUxuFPICqmYXkPSK_WTOb#BtkZekS%1F7Y4bH$LNDt zo4c^myc))X>4h|}!&tO6<|+lR2|x|8bLJyd=lm{1I_dP=iv}XGg-Em(i8js(B&F|wHQ^=t{t9a(vT^XFXQ846snqWfiH(daZ~5`*$!M6r})x_~S6gk+u$_s!kVC*7G#^AKQRssT}V{okm%sRLN1M zH`OlCoMV36>fg#@)X`|lt=Rz-Wxfwo5&-Chy$sSz^MjYo$YbA8Q@~0}(`TNk<(th2 zl^30cf*aye<^n{tN$*n~{H+;wKSqeSVRPyV%Org`(fI==z!F)xS2cT!&tf>9h zF{rP(KXvY~95p%mXtc297xV!AG%*4z`<%zyA?7lx5bMV>e8G?OIh@MM4hlw|Z%})+ zKlT!NdU_Xf4Igmxr=&zKxBNs1^1nmZw3mXV?H?aUAY~9lzW5_m>1qYM5R3u>^I|<{wh?8xUPrs5 zY?!Ol%qd3LYrdb}TH2D($_s2K{r;a2_pI4X-T{1feLT1W#|lwzp7vuU(jA|3*5;Xs596dq)g<&llZ z>71+t?vJ)+fzFhJ)K&cFU*G9p3kVHd*NxCE(h>bmh<-qs#eYK@>R@ZtSi;!AxI`E3 z?0AqiS1Xu6bAMZ;kh6r`fvk5MU_BR+d7JTWLG<09qo43#B$irg=dai*(nncBl%#AEj||HBn+-j6 zbONCthDsQgrkII*=G$u5CtQW&@hR21yH1!r&|(z$D33-kf1o8PXYH`et8*!LReA`X`ideKLyg z#VHB@me^lRA0I%PtHpc(kLZ1$Tu--@AVnRq2=L!xPvB*5AkP0Y<+|Jia%r z6R)nP9pM2XMHVmhf^ll80QJ~rtwI=9qCjd&bE@?(#;8=ZIEG03x&%d60Dyn~a|ku$ z@8n6Qpm8qayk`uCJf)8L-aCgOjMMj%>T4*r=^aEYItCiB{shB*YdkR6O)gaskKiRQ@k} zr!y)UocasG+Hq!JyHpC0rxpuH<#5yhL+Z*?s6O;vs-I1vJyVgb>@TbXYPE4LD_g!l zf(i3~n1JGcg-L<51rV{tfieuwp|wmGKWtf}D3i zUT&(O>Q8eJSJ3>Uq#~z@G4Q;Ic?4Bm{u_k8$Q-+$=QTQgFR)0Uttr1a)fO0tI6o2R zFX943T%aMq!ZULhmU7COndt026PnOgf&Ag0+2?FwC;U1?H_|x^6{?n*!ORGxMMl0I zI&A%g5s>%Dp*S>^Qdi7KU6JRAJ$TW6?lphAg78 z2N_tDZ>kyKTMo>T_4<(Yd05H8yV%2gPIImDl0;v3%5e`w+ol6s{D&tUG=E~1U?2?l z^VS7i61Hk9z9X%Gjgp>bQsBi^GE6^H$FWTPQ3tB2YsrkH?x}{@yZ-kFFDXn7s0L@^ zl0G)B`~Uv{CK7gL-avJX*-xkQ?dKYIZQBJ|& z+25m*Y30}s9HxM@m^YK3<`$A^Z!PfIJ-&!eI!t72pjo*?#?IxjP%9EIXC~X;jJLIf z$am=T_BRwUi~+LOFp5`MV*H1$H$tj=Ng_h8q0B{vY`_dd`g)#hW+&lYy@n=z|CE&lJ?C0}4f_KIQD`ZLhMwbJgTC7@#QliNrS;P-WabOpWV0#_SPw zZ~2~%$iH-Pt#-LdI?OG)D+6w zAZlDmQX!e03FOKHhcFNh>B*9HUodr` zko)r0imjgF_YA-1Wc$$tZV`A+nZD*fpc7@r3b?uDzXrI-!A2qBxQ72ArZFoXGwthP zr)EbuqlaIFmpqW*F{2QfQ{EB;jP34@23St|Osprvfp25#G?9rT(>Qpta7Mo^beP%+ zKdi+RF|ND=&6xuq#t(r;d%qnbIg-P^b&3$+50_rNc)Y4$cF>rjf?_c;H8_oAKYRqf z(|rhwoWcqizlJ?OhqMfQRK_!k+vfnhVD_;3C!AWeo$&L)F5)UvPQh!L<@9_@*+qw7 znl)zCMx4NV4B&CJ2lfVW-vT3t1C47abgdSJ=Z&#Iv0<6j(hy3zSjZYhhY6wjqR}F3 zwaA+2)*K`H*8%(>7EXNi9@QTmOIdIF!w}0P_!B-kCOi*S^xdqB(AmvWhBisHkdL23 zEV9xPOZ6a`XwSczmA6F}t0&1QWI9!Y=N8Y45V{{a${wE6&M*ZOt0%NYE=ADX;+Wgb#&XvT)w7so17#HOdykF z7A3VtD@|y%o7EI!rA#0dWy1t~BZd$Es4#9QsQH$iG9(ck>|=17{Fpvu zxpn|Isoy~s&m-$EP+{g=@O07Z7-nZRqHqO|OXgi@aJw^Ps>~U@Tb$rNx9!8%1MDC( z3Az#NV%}R3>F%V}hSqFJm+A%CwqoWr$@MVUqY^S(oh%@7I<%)n4HbVzqA z4JslwVRr|Jim}ETYj>?{yLNYXcdhH%-LB{I|DAEa@A;nR&*NO*xbMw#&pr1f(%_P> zJdq*(b>vzw=dXgQn;FIKWO^f~>EEd3$7_oJV=xqW+WyX4vEDpiHmgs*ohI;9go2+a z&4EMB5~i7=`cbPv8h~fLBuaY~jqdyd8?k@tQb9A&>AoPBW^!HHAQ#!Fm@@h=U@2pZ zIfwB@t$EZ=$K-XRKerpS>!KSS2JohQIKiE8nD2-0!tczL6>tjdaTlOAeqAUYY1%vU z-spJ%8q9rTMc+8lH=aDtVvB@L^@Kxm9r0)hiRzfJH;fA<~&-CB|=%GgY4!~w>D1i!XIUnauA$i&(-u4g3lpBhuq#}H(% zXkLug2WhFY!dFU$2c2R6?S6T$zR2}+sjK29a`m0^h4mm34C~x2eHI>dyRe4E#;V1Z z3NY*_XW20fAUz=EQAVJRn%Bbc2JY&paKc?x8*5C5+W;t66*i^b=Inq~I*FB|EHYJ? zn89loww~DHbtqvj-1AR32si^(4?ZBd_^*InoM;q_PWR-aeniP0bUkrj0j|}JC37=y zoUwGw$aT8oc-@{6uOWF2>~79#x@x*8{hbf z)Nw0E;l(tl3VvfZM1{TTf=^cXl$p{IT|>dUX|;b8L&ZGm)T;$Puf{7XQRo-|R8g53f_G6|onq}N@R#nzda>ptU6 z1x#m;LM(6;S7zd-_ZmRF30?F&ZuT@JNHG2=#DMQ)YF4p{Xn)b)(&APNRn<@e*< zd7p@N#ztzRn#Bkg;E1L#{!Sy8u7H++W_)`%fI$x3OZaLLtIDZ*!+xM+<&*aOo%@`l z3ej?zKx#X5CQ?YmA#l7 z+oXCw()hm2j?h=bh3CmKG&XWB19A7Qalt%DYT~!VhGvj20ljla^<=DP_LI$?w zCdV@GA@1}_q@MRSBDGCF2H40dJP1TEHYO7A6J+rM`?$6oahoEqQqn56jMFZLOf&fi z4Id^+1F85IFgaxy#g~j8j|+zk#AxBOYUe+AzLOG;;0w(k9dI2nx+@x5@PhieXCtTn z0R>buH%&Q`oZ~~0&Fy+7vV}f-3h;?uXl*R@=SX-}Hk0M=9t7Uh%pk3pSX|7*ZhNK+6vGa^=bQpV= z)(PvNP2nCi3{kPVuJAw+DRqV+b-ez7w+Iu+C2rg{7Fh@ijuSSV{^36# zYl!PNQ)ti#w8gI#6~i<@rV2AiVk9+rT;}7n*O%Rrs60mj>pt-(k;NU5w|p?gthx`) z&Ov)lA&+w?Z}9H>f)t`;5`f%ii57~Y;5&G%;$wQGe{B?7xr5h%dfH-RQM(50G4k`Z z#Dla3tjF_UFOAyHF<6xm*YL1Wc^p#jWl*<$3=C5>Z!d0DE8{_fp$%T6IDSb(igfsn zPdiS9bsVFEB->wbY-;`9l_wO;&GGxVjP|KW1L3#>C%KGVq^{*`k)j_Op%BNxY(EY~ z=NX5knp0HqXHyKKwxR)SH{zlxpwb+rD@#fFpo?LKeCs#B=jk(+BXv{;B5jv56?NI1 zgl^M&oSR&>AK)SCE%TOIy^Vp!t$d_H6k=DPG6xy=y4v<2suMnQpSK<-zlT%sFzQ@7 zu+E4}_+6$fi47`0{{Tx2oKzT_9%+ayVbzz>=aP1%7*okO#wAv7q^6eNUW)H4Gz(Im9Pn?c`NVrvRmWQyy|Zr@o8C2Pqm)cJJ) zjhgWu#*E{rsRsB~dI1HG^I$a&gZb%62MmWzg%w49DFitz^@CDqKL^-U903Dx&u4}Q zY0no5+^`QHI{rm@Zl;(M$SE7Sa^E9<8-z4|dL`bjK~vjr#%)OzCPa2fB;~_2G!Pu1 za-Bk0{(`cS^4%Hps2XoFfCVP{f}{(V{|hq|-25?DQsA zCl;2F?&Eyu8hBIjSZ8Q+dy(3yH*?WI84B~BhBYjOPF%<$~2tU;Rad=-D^Gq5E# zmVisXD9z>(MVCcFf2k^aA`qxAg=&47J3gjgFPwvX?7%2}(TJk+twB5ZeNKbFUksup zPRf=g6w`eLN|@S@3N%$Hz2#7zuIOqzEDifYQ?ALWa|hPs@rL(y@pqGYlrr4WAW%y6 zG*j3ZnN!blOZ3sBhMJ1=Xp$p6u|)I#=MP~V-MN$z)2;$eDl+X+yz(T+v%y0@zxJpn zcx1IybCM=_@*&at&U}Dg$(j;eyMA+L&E6Q0kMZ(OJjga`BI_Vlt{~NxPF$+m^roed zhx|`vc%sSd1Pq)%y(6-BbO=G}K8e|Lo+&oiih6#4*uDxU{IEIfccROTY^i1=4e-}X z?a61Zuk4_quv?7r61>PYid9$jw1F#XRvnH)qBb|fyWw*wE{^3=iyu+qspYuXGY&d# z%)rQ_ix>+<56U!If&5;X?~&@;c!Hun;EB0|Hw|$7dyxC!p%8ASx8-$Gn1DkDl=V8V zmTLAvSEnP|>FQ6ONeyMu^Rejp5BWnMKtaKU3*b^q()Og}mh8XrXe#pRp+JC*KEYi9)*AU+GHSE@K&@O>qIq>!QTZJ&lsK-E(Y2-r?CmsD)Df%KZ4Jjf<>#2_rul$fjsORZ5SdwdV*BpDfHhq6Ie@I?*-m7 zE$yr3iAwc2jmEgFTEaaWSdXQ4i6!r_oOgynR&C>hsysK5>;9|8!o9U{FBa}?fIR=z zAfJzqo7881rN2lw99Kkzd0`V8!hyAr$SOC zHz_5LXTG2YT-NcqCLqur%(mFKeoQ&dM|S=5+wep^yJikmUM7_37WswM*23?Oz)eb6 zBBz~uqpg=}NV<%XS(67ws)t7ltY|mNzIYELM#ht!jNXe6FfYY=MJnpiX2wY(Xao67 zWetHcJC2~#w^n-`>NTV~GtNbe;!rlqc!83m zVR#6Bpc5SAm*Un*^_2l5?+%O=alrT1_lK3<-8I0H88h)Zyp{=SN@^&P%~<9p=yRNr zR%Ss@3xidDEE0D;tjv)rxZY^tQp0a2*<({!pl zl_}NCAgf7Td461?KjUl9rx&4tm}mVQ*KU6{0;VWBS|1Hlz9}`-qzl3+0W?|n#;oCD zH_q+n(*vU=v1mRu9fJ-_FV~Xh)-8pwK{N#N+qY7-f!bLTMQGdNW!3<4m0rv6`QUnQ zx2ez_Li>#sl(~c{uTMY7zIO}?_P67+epqQH9!8C(*iPGUF?SVdUV2OMaD&nY8aNLr zb;>*p%H2r(qA2}Z4+WpeI>5CIKFt`3SCLuxWs~#uJ|@E0-$ahXkt2)=y`=i{;0^`{ zQz*9s;_@euwq1AlmKiF-5r5u9gbydZfF=Kpg9ul88Xt^IxPeiyo3RGhk&_OfHQkO; z?0D8noVSnSkFp-k+8z-7=Kfr8ZIWYo>Yq`E1E26oWlkNWRpWNBZnE0V+zw3nZRk0+ zIYSC|5Dv}w!?8E>;t5pMvpJ+8vd0^E+M0tFzV#1~sEgln*(iy6H++P`oc9kvaIE9z zrsO)Ut%7GTq!hp@AwI0jcf^rZEyL!&i4owkBjkL(yMm2{!+LJTgD62G^oy}jV2!zb zI?D1$y(5b*I6-?JT!vf6=s&PjRL5%L+NGnx^u%|s$}rP$hv2{kL)#+9K!%zyiK#Dz zG1$SsC?K9GxlA+W)m!!1gzHg5_h2!Gbx~t3qITl9i>yArFcf56mkAcN_Va&4P*`6X z=MFFUth9zPTxS_;EjqA1Fs3Tni$}%`^Q5_a+Bg>1q+YBxW=~U;Rgdi&ife(jE;mf0 zvP_=)ZU>!^s?uPfG99a~rB^>}Uxnuf;$dp?Kj{B$SQuVqMCI2bm{+pNH2BFj$R5hl zETlpjtphkq6>#KHjJ84zt-K1`b|6evlobDVy&@h_%{-s|0h%%DXcoR7F_dCIPC|Jd zl`jlSsj9vKS1n^Ct3I*Zn1w#%wj&$6Nr%3>@USdlAqFXa|2(ul(eYnA8T<~TD*MOb z7f-2w{RUhqk0s|-e_65@5F?{{k~y-Xg zMs;N)D^QV`oTzjgR5oZWWEurWkYiNU??`)xECDY``|UaSE%`?!xN3=ZV+8M)#XQQf zPHR9CwY%LO*RHR60RIfu`rtaSZ!I7b$srnpkUF_P%Do$iUl66vVGbYJO-jmA17%m9Tc57_QBtB)_kyEVeybCham z@nu1jh$fY`_M z7k`z_O~}U>z9hgNwqhI>e82>0O7bK4)-rC`cQG+4I; zd%N~Izlez6C7U9A-7$MKdcy1e~%}?>E%ikSqz{xs!QU$#MT6FryeQ@!I`F8OvxQ zS9$>Z_kbdU)MFYoTe6JXkaIwXl3H$y0LG}@3jB=10yMC2cLr)3(&#PTsjhUzlR?XP z6Y^_Bn$u(ON_+jjLS#(?i^{guUreQ_?yO-d(QnKEG{E#13cKSan}Mp1fX%EUcf;Fo zM71VWuLbZ-0<^WTH3l~BhYen4hsJYTl+!NY#$i?f=XcVYK=Oq?c^qUg4chq?1#50m zgv0Mpg3hn{fVEu|<{{OLBdLM-@Ap$Ovy-xd*O)phoT9 zy4bkpk!TwamYlu>D%=NGQQU1`O$egDbit>I%KAuc3-2Q>f=Vs+?r|)g9cGrpTiEPL<6S9>2J7H5C_fFNvcmRkvFq{V9bU!G-Gb`or%_@TPu#|*JyD8AY5Qv*t*w-buHKSxJ(P|`(KVE`7>b{u@mOhni@&g@Na-V0l zqRkg{#KnSo1(MA@T?{y;=<}OdIzd zvKqX#&0yciP5j6zaS?JSS3H%`#j;Uj0o=MK(}6!6Z`fEe9czytpFy;zCm^G{{~X@T z5`Jt%p~nd;n%iFBD?;Jh6Me*u8+#|9D~m<)#X`W*LY!*DZHYx~qWOTSa}+ zkLrbUSGkFfn2_&n}U>Kar6s#rgIDKdF0#-P#Rw|N&BJn?U&W8xYk z{;I-V8y9D(<~cR7o{VfwU+iKK)P`Y0g{)k(}M5wl9gtTHjHoN{R>v|2+SzD4Gs_2m0!9jp)kBUpP< z{ZBac7`m0Ty=CsqAdY&2Aq9kVpL@g(yE1Aj%I@%G2psUTHZq(A&ST5Z&EF@Nw{f z_t^QPpYUY<5{!uF@gPoJAlKSqsu0@mATixTn3e9K<@2@Yv_ce~KAm$vbA`Xj$#|%r z1^(!nP)fb`!O)I?uBGsklHtqLX!ak4NPV{jcE5{aArTjoUU8ULzeH zkS;6WdFbLelyY`Gs3G{mK;Ey@%y2s8Khkxtl=Wi93X0e}8RfOgr0icugXP8=hWUN& zVXL+uup8f~4#XK4K~fjAHSFnQwA=k`1NQO~_Qx$A_SmkJuG(nWS#S;zIOtkrU^V*E zxS>yAny50L-4HAT$(BLV2wNcjk3zAVo^r9SEgb8~DC2#Bn&fYanJmrE`b@QvA~2s0coc7PO1nOoM& ziiXtReIvRs<{vwx`a^4FadB)bN-6+TNIFz`J|s zK?eC|-@AzyTJB{i2`S4Ydei5&% zUx5<|w(m9;f@VZ9A41j8$A-0*xkZLi$NxX21>|<>Dj+j|zsjJKFg(o#*_At{{CAXd z9cPdG$c~|aiOyiKq;6()#Cy3E`-utJg-2;X9UKN_pLp2Qr6_E`)=>XAWPsq<<2*2} z26aNJF>`_r2lkc>-m7vivS`lt;2KGYYZPdo0Kf@zF+q8uJ!!y^M3`~(%J~JQdOoL$ z9ll_(SoQZtDf&NgoH;+3BGY}C+v{v{8R zFl1zLTe#KBZc@_c{C*XuJOs@4rEH@L%yuzqc*?Kg; zu-+Vu8;v_plP>OtEPk1R);L^*ByZC!v1vAdf^V!jM}nM47s{<6y6rU4v{)g@2E}awby=1ww=#3g|@GUEMhch z=*x5eO-S;7?p)>2a;&L9w@8db^1vzR)2UBnA63qcbuzz$9PZl21~0Z&Ewf-%Rh)m+vw75T)Tf@ zI@PoF1X=W&BzjFIT~rriF=3FHFc=Xc(*E_w+pK-RA$1%ch19jSg(AgYPo-nJpihod zsbDjkPlTkzfs+mi>3X2z#C#_-YsUe~P&VdI&U5fgm@4;q4nOT76sdt6L+S*FN~_NS zkwncnjZ7n6*hn>BXoBJhZaQ23z+A-~$4Am{?)Z67V&h*8Q}!tX?;VfF8eq}APZr2) z&lyb-^rAi$?`$a5%%h>X7m&p#?jjF$Kje33Hwpj@8P)pIu@G8^MM%5Ey*RapF%WZN#NL?4>7Urrf4u`wq`W^NeQS(wQUo_ zA;kbcz&r+QVr1k)>WAx5p?*xdG4!-$iagi|x1l4tpe+$|5>ZJDd#GRX_U0Dyjz^`{ zkg?dlvi4}DcBEd*;#Ez;-*}z(Z6wl|CaiHc`2`Jqbe%2gt&Gd?v{4`<2>X5(TtL#n zT{6r_0p zV!>HVTKevFPlKCdd_b>?^8|4lP?Z7Et5sjG)6VGn$OQN_GSCajR`u z24*Qv!|tE39m0*or(PJC0fOl<>lCKG)qlhy1BO+To{ih;);n?dbngUB>~?OVojZAS z`5=j|b15WaJR2PB;>DUf@`em^AyvgRbB-#40fcvl_EYetYs+Wgiw$nffF99#7@Csb zj$%fR#Slx=Y{=F=98@2vvrhxEYn_IR)pSqX2XF6`y7$#lj3mVl@3fLPm}K${3uGn!>WJ6uw1L2Yysq4BGsHBIF#}HN0~r9S?c!^ z3K{SShVfh688cs;b`sx=N^!u5s~TDT53qPRq=OjjY)jU=^my-c_8Kg4JCOGLbTg5; z7NobxTnA+u@3RIzM)Yq5D0=K@D)@Ieay#}KhBVxtmrDM_H>joauHIM^nrq~=JNf_i z&G{O5@&K^Ih=1JdCD^N7CYIx)A$bPr0=L@rP_aU|KN9YLgCW%K5L)S#$~$lT&H<^A1IqmC7y|qnnVLb}xp{hg}%B*T!mF2$;ux2icyE2r7HQM1 z8)Pdur0h>_iiO68brxvCD z^OWv`QJ}aliM1c7nKvs=zJ>))PN51zrwL#wqIKd(1AxWOnoFB665QL=J~NLLg}Gl*A=?)m`FU(+vtyz~Y@Jo5?D1 z=udHIvpBTHNF3Tqk&Ah`^iWaX@z|%yX_UDkP({pZ-tlKnhZ&$?e+JpJ3^4=?+Oew@ zwBa^%0l-Yc8@N_KTKaqHKWPa4tnz#+v9 zS$_v$=yf{TUu^A70hjv%VMhz*xlJs@4{mv;Fm_EzJ%rR_&KN0ybXzvdVqs&k(4PDU zJVnmBAL~MbS;C{4)x{L~y3cXKI`wjyh$S7i@(Z%Wrs9`I(K|<@x)_7w%Y;TF8CPs* zOCwvf29IL2at#n*-t(L2nsv*UC`NS-z=cAc_U^%5!k4QUi>;T*u3`gjwcC%I)HY&u z1KX%4ysvw`@<47kSWo#Q->o1j+{GRk%T*tc+d1DI*DWl0kyS+Wg6K86>Lfz@Od{6- zW7z#SCTCzv058r(Ij>Iu4Rj;dUoQh1659gsq@AYlF1-;SH`=%#sk+#iUGV67EtJHJ zuaHh|$3xGhZ0=a-U5f{zR}bFkyv(TWwlR2T_3aH(z4vKZY_k>H>_|Uoo$Miwb) z4^Y07HRbx};R0TAv~PNvi#!`6k!LIN?69jUsLM-7wqkdD?PTx+3eW$3ZIHRdl+t4# zqhq=Sy}4EX?V%kFjNsMwoh$|-xK4|g3~*sn4k2?)G)3v_V)#c@x$prkz>;Zeo2om= zp~~EAYGfjtVHi`F>_+ChXQ_B~C-k7%4Nd3My<|B{1zHd{AkuLC=qVI4J{BBzcdB&Sqx9T=X^{sHI*gt`M z-CZQ{c|YaO2*=Y-O%H+W$^N4&=WEqlt_>aQ;cXDAQ4Yj1bqg%QJ`m8dITw=>V8Fvp zF0MRZ>bCh%(c&U>=5RGqwHFR__JQ4xp@J#jW5jzLf_Di`+OaW_YH`U=n9=7bjm6$2 zMy4w2kvI!mj$Jk5IrsS1T)}WJET(ENUT&c?LeaSZ4fzg#jd;jE5HTPG=w14K8!5-O zW3_O=aYts)4;W|xO0>h(y0~`SI|P^?gW=5E5vjLA6i`RN4M1nS^mOH2I;q1P6m#%6 zjc~Vx1kSH>I|ZNPTpt#JPpXF={L^q*=nn;u?ltJ6Ra-qM?$ID1j1?%DTKonsv|MWj z1^mrqP}GpWxVJ;DlFf9SzcCbLTLD}?wOgPc+BW?p5q6POJ}qPmbJ8^auCQnTd!vT$ z;ZCV^c4rjixQ@EL8HN$o92kN|W4sNfqh7aON@6%%UmscoOwj5me#a=c=P4AO@n{q3 z)z7}65NA3VxlqK(N9aw_a*CW~jf?L6DC6-LfNa)^R=E9INj6`3pK%%FB-Ko$^ehMu zq^D33`T{8}QXAZ48rNz9%x+iHpkSU46qb65|brjS_Gz zsxN5_loP$<33_RBnNLHik*0?BYqK6h;X8OVAH)*B9s--jVF&LGiEqv!ZT|WWI&D!# z);GK1R^4wS?|JI8XISz@Zhcnq5T;xMmX)qArL;Hk=>0z`;DW~^_>FSTEdI}C(NFk$ zn$6rb?Q4Yd&V4F!pHWK>J{nk#reaIBo)~qWNxLkYZ%D`NV>2er(B%dnDS=i7VQs>| zR~!(!`)+s4KxKK2)RR)C4npNuZc)|3BT&?IUH)_XfE0m|xxtWTw zUB%dLVr+LYwuczoQ;h9JK}mfW9-RLsm(H!Yt?@=1xQlLw{*^@$#DZaP1)@<<#1cLt zwb(>)j=V`O2J=0ZF}CvbRsJf-jIm>ODxZbEXOZiDYf0$NQ^3Pt@xT_>x;#>XlP6BrcdxZrUuWYSqap0QxV*+g&lbf9joLgd|*mVX0p)h84d{0 zkBuq_gO+cz#3Oj-9yAtdFW0W%QAeL;{!9Bq;I7Gb6UnWAso{{1l@O715Jl(gA@whP zO+@YWMmqFa8{t;*@adihd_%Mv7?>f(V1ka9Rit_!_@Wgd1 z#6v>+M_uy#Tnp0R)1+^VIBT2yjl?DdF7EDx17_UewrK2fU&=Xp8jen?r!l44a>5m~ zr06})gmMEnxS@Xu2nw}K1-$zHiq+O^3GU;2=itlLmgFsS=og=^z~rxkp@FA;U~Vk3 z0sB}<55P0H+8$89kxwhdpF!%&R?$>w@vD>u2WP(li-8$M+Tt^Y^_4JmGt5*o4WZFh z{h$U7KCAZrQpgLymU(Lm*0QZ>Q$xfU&Unnkq6=_%!x2+VHT*aP@D7@oG_n`sHoXMO)brUJy5zqARxQ;{kl zSRom~73brIAOM!rurnR;!GvD0_qN;!4dD{p`84m2bVxkY5z0{J-`M|MfYklTQl@@7 zALz!;wyZxqw!};r27()^e)$MoTQFQH#GHGO^Vm%81QRgCL5Ec~)K$i~(|{3=@kX^4 zY;qJ=xeGApWeh=Ie-&lUVzeZU;TjEM->!kM~2E`aInro^FH=qUTM#we|Rg_vG#| zOrUk&)&*Oc+H{sdUx)|%=N~1HU@=8P&$Sr7KS63uh0NWSY}KFek+wmwR6y=S9C6)$ z@)fzZ1r5*aCD+`7@_zsT7=_>oe9RO9k$$WP6TXGm_ z;JHai6>Sp|i z=fUUc3)~c3<(^DrNDK!em0KqKg@UMVYpE8ERCgUC=4Rg-Jaw-^>4lG!4j>#!q`)Z_7)xQERhIYk? zMmo$mr(SDGtp7^UnY>NJU*MB!%o6M+(lMBCX5cQ!cMbA2U1x!D&`^IF`&*)72~^KC z;l2vdu(7#lXbdjsEI^6fuCNCt^9GKDtFBAp@d8S?JC_?%D*!`034xeD3=oA@RBOCcqiBU^N2xlnn(^s4d##8Y| zPmHSTrws~3=JkF>{&80LuFeFA+py=6+xOW&1tpj%eZUH^BU+_EB}2|5ml=*|Gzg9~ zFfS)kY_pF{nk^meg4}=!2slpJ((>m%yAok3v5);tL-H;E_`2kd+x9 z$Q>8uA=PZ>P|Y@Zjd88}LjovfCOgT#P;!OK`Y;{rTdhcU1t*(j;bIvA3Pp1db>FE+ z(|zE`J8mBXRuv*>G=*$tFEv~50i>2qF7v)BghL3%&uzsi6s*4ljR$zxt<3=6^*U3+ zF^CWkhj*8tAc0M2sRmtgKUxQ%5O%i%UgszlqZhVCJWA>j*O3Ny-_7XZ@j_f@?U)O{ zrrL`-@LryaOx9);nJ)pHv&Um>i}!>;A+vNvd*qC6&Q>p@7gF*9MnQ!>qmkNdzQ8M| zkh&^bsbHw-d`0Sn@@QQoC+4m*axm*csY`d6y-emt@sNW}=(pUY$J+Tb!iL~ET8FhQ>$i@raS1}yN9Pl)``4HJCh*Er5 z$a~={4c^70+T0`*spsiyoKa_o*%-Z@3U2Wc$!rV9D;tE@+Lg^s%+#hLXxahunS&-rL%N!==8$v29+gh^2Uv(ns%E&CPNz{9F_m?^ErC0Y0aQM-Npt`Mz@ zFhcs@dAKvzm!KcY_5-Q!*h ze$Gg|Jx{}RU_i=&;S?6avgPnx{PIYBueNcFkwrbYCqdXgjF6kSVI{DQLY z4Zy>~C(YrEs&0FC2$~jc=ip-j>#j3^ShuB^&8&4YqmW#ZYFL-3#S<4mddZ*7kvd5| z(CDl)OR;$K{^kujN;?X<2P}tq0@&r(CQ|CH^?2;`8IHdwdGkF;NrTRK;ksO6?ve8} za<+3thM+>Gm?E3_V~&fnRe05~nuZF1upBUgw65==+lGH8rXm2Avy<3EP>dEoH;O*F z3Fpr7_W+W~K}=S}>%XB1zjuR^bvBl`{1Cst@Owlf%-Jqd=?>X4nq>J5b@`l&hZa*8 zFQ~FP<6E~@D}e}fFQJ_!Rwav7DGpRAEyIhjO!oP!w1t@hz&L7^VJGp}261BdU}|13 zj~|!cW^Ab$tp*dF-J5aF%PvftdVvXPd7ks6q~yyr%e^UUTSIi=>rNq!Ce^^#Ak$F! zNhZ8}iv9%v1rHj8)FGFB5Nn#eL4XPV!?;Br^X2%BkXKxw=nTkpfn(e$zTYPFd9@Zw z`LEze<}|kDUzfuf?VD-T#4-Uj>0%M#uIdx^lEXB5&n&4JVMmzLZ}=m%(HBc$=FX@G z*o7_Py_3VRhqr)|DvqMBsb!fX8lu*g8v3m{+_*k8o&Wcb$wJa@DKHl4#YQ5%jYw~c zm`mNHW)#-rA}I0vCCdRUqtE%Ed)l+m+y>(!*&O`~TXO>wQe5vcG|X(q9A!-H(gI4p z@FtLv#OT%w${zxnE0N{9;WsZ?{n7BPFhysBAHd5ov*v&l>x@QM@Cw&1^OkcSpPMdl z4s9bo*pf2a7bU4n1~WaYdJAPDIL|%LJ5YM@Pkuu5Uo5)&1#c+?Gf}gY-0gPCw(x}? z-5FB;Jv?*Q_JWXZUx__uCH%X?CJW@<5j#fo?s*%3veoO>tarfU zgd0qIruveM503#pYH&c)>mSZDBM z4|O#YaEQ<2EB)GgvMIPvNtg8~P+2vVtJWm1QuGJcO>J(tW8lFpmwD}k6~Q8NFfQA#+aUvBpE8M-sf7OZ8}9Zm#*)h zXD*IzhxPvsadapC+lAk5N}hZG197?nze=1j56IR){6>4w#{8x0kT$wH4yofkA9LQZ zz&%2+$c9-87FTAERPmOmIF5cu0e?F}9M{a52$qDy8iIm4W=) zBeHI7;2!B~L8(Tpx1hXOKY&%Qnq%;7S%h|4%~Eo6l}#mlZvW^sQm+N0nP63wY2nM$ z1k%gxa?L0lGNu}U#06fEQMT3>o(=-GV)2B-wg_?pu|tsW+~3ixxJj;D`O?*-e%%z6 zxhCG@{d;WPeq2T46Bs1-xgqc`unFh0i2JvJZ;BtmC|4@}n?fd!#OT64EUJD}T=a)H z^m(iSUY&;@#pjxl#n9h_a(LuAl$=q*q^fdTcckjVR(PTr3YrnJW*FqdE9LFG#-d&U z$21KxZI9xdHqqFIOOUx;_j8~V-R!$?U=^RGe}V??LjL|t|Lgahl*EOb)PXqK+nCAF zcYzeNa5)dYRn`!sx;?LvCPj5bS}^sa3>N}%wIgs-wu9a1=%tYmgv=pVMIf+&UeAYS zv2_!bTxb5J?68h9>iiCb*>}|6;AN=XI4oEsVZIu|`Q1t``LPF2Ny)t?P&PIrr!Gva zcpCj=RK@d=$NK9iq`n6(BMmqYa#^z3O)VZVndsDGf&u(&;d*!D42eRAea375>D01l zA71zR#srP?t`Y41F1FzZ+=Tq_gQal%v2^CmSvLaAk?IkegLukM=7Fkpy#E$(AN!D1k9fSWs^ashbpmlGq84<+l*V<6#iPuRYxs-L_bIAB z^CgEYr;35)K!KIjO39h5OZcqWct5j>oIdcDpdb7N6v?rz;uz$f8Ql=F^(f*Kc;QX; zlgn}k?4Dn^!t(BRXtBD8vgj;s3)=c2ZShpc2d*J|*|noM_DCH28~;5f-;>>CQ3FMa zCIfdMTjT;LSxDXQQPQCHY@2#$COl#C@l^TfcW(cPqVZrgO<0xyXEBzSUtG!EnEbVNFtjH4_bIF!>y<#3cl3o1iL-8$|G1XVbs1 z%EG^O!S^YiNoc}_i=^E@+*mY=G!f09vgP&GmQ|R1w>Fa1_LOe%18ZN}L+(+)x#l#+ z2}HIW(wH2dbvD#GI&=jvNTkg;+#wW*w3K}@uJ1~2YEL-{ZCt>#s^=fikcOVc=|~EE zL2mFIfV1`0cKFhz5m>+@;nWZ=tQWqgOt06BAzWi|WE5)9`5sZ54N9N>)ywcrU&L4e z!4WF}7pt5hTODjK%XLX*rDG*~gSGOyC4oHa<(LyYnM$uFc;{E+23 zaNdkHA~keE7<32Z*M0Uu?86~q^-${jkm)S_MhZ_{icgZiP;}69g*mKmOwFmydeHE) zay<1?{*4RIwN&|SDU_b9x-xL7#vsZj_rUEl@1Xwm3X!(almfFY=yTAGP!Suv3iMrU97hQZ{d&m8YM28CO1~X zOasD5xponi?bhJJ={}6Y`Ai*FoAqczrb6sGpLb0UUnsG6J`A=|Y%p!_c zUxTEel>>u(S=v>JWpABpnJ{r9TvVj3h8)gF#CJ2JZ0ieH;VE{#AP-Dw@4pvL?lv?o<}O z6CAitoKAagR5JphB1bLinud` z+=9T4P>@HHJbdbTbS_*x^>PTH*m111 z`5$I%nH|JplJB*s1GK9#K5g0|jaZJjnBd3X$6+>uSB&$P5)*q^;aS%P-{>+}!|%6~ z&iF2*T%`!#9qPJ>&(xcn;hR{joQ&tH|LBpxiv6;Q4aF2Xqma0pY^$~$vV7Gie-?td zHC7tD->$o@kWA`RPT&P_yse9WN=`gpuIGx+ZI*Q|lwr$Ens>{{_e~3w0W`-)$MW}Y zk)@XpP>x(d`NOXA2PQAkIqjp?GE8lg_us;2XI@e2coVz}XnBRPvDHQjde5AT==@tq zHN$oQY{2>S+44y$p<#VKVV(jGkVZF50c{oPz1Ig1bb;i48`05`Eue}QxgQ+bz?OFj z1w;E&C_*T)zBvxB*ak)|N2!h0-Tk?uoVN~E4Cj^AR^V}zA8#B3n^Cm>D-@M;!nfd| z){~E?Zq;{@hN-6_Lue}XxO@h;?IthBm^g?C%(zpwK`!i9RE8XY=&-vzBsCSjdkdn$ zM8=m~2B2WvG8a$&b5)@`M;$&F7;u3f!4e#2L*9(+OrINKVZwTQou@NYb-s&l}4@J95Uj~ro}Mk813HHw*CEY(y| z(5gzjY~`~8>qza~#6p<&1*e+*c7rz=x(n~zG!@{Bz(RWXL)`U$@&TjeqeciJJ_Tr| zIh(WPsF4viVXuZYfIi*BYDuhkN}0=0C@!Q$b<$!>LK}MQvdc_ajVR5Wt_-m@?~zNcE2WWU*5S}Bi)?LH;kj4e1;%3FUNLZ=Q7C1;Hn7{=m7zd&Dsx}F{)mICsBA-BrW}UCka9x4 zfjZ0o`W8cGvIQ{_UvuHzKXY@Ey?ues(#P_FtxvO&I78&NWg~569^}O6ShG3Yu{9LC zV-Z@HR`~vZ`4%}ZUmN<2pX|AT&BT$m#}~426L}cV-wM$+5wyA zG9HZ-R~G4CSP9RNZ4K(8VTahhG42IwEAis84l-%)({vk0?~*LUD+}^fU?e_16(65b z_3Vy#JMIwAs8hqo;OuWF_2W=(itg+RW|Bp;ehgr1U4m_1Zm^3Aybj~GP5<2xRTa$M zihZ%k!O{N84_sHkaT0LMw)e=_a|I%+I^cG+e>dy{ zE`9pIqO0)<^855Js<-TbHnR{+YS*43H!#Pqre@X@ASl)LziTr*ceWz&oh1^|ArPRo`Mad`c= zS=fv-2&6m;bc$A@%U99m8+msNR)~iO(3c8GEc=pm#B4M;Wdv^nmrqgQRaU|q-ysW! zSyzv2MI)nn6gh5Q=Xic(F2r?cAyZ+Wn^jiBP zQXvZ5B~jo(KF&w*Nz>fL$nfF`6`cq|4fP+8m6rLcYDZ}6*0uoH-Jgk3UKb7K#{L2j zq1}F|K|Z%i(!V&$=+$~N3mVk6H~Ex?SQ|K&Ew3XvQ{>1JHrtO402@r9g8oc1WYhK= z!O+z7i4*~zHXoV8;Y0QtGsP0elf4mB!m369eiWnH`^XTYRpZ|Yqvqmgh<<_4a$#6F z#x$lSL|k%+jtb&^6^e8PIZt|zkDXKIGeCLH1!XCb*Bg6TR7~wo!DXpZ&2cI`w+PGC z{m2Z3NhUI#{)_YG9D9K6aLkjv_`qQnZ;(-!Ly(4#!9F0RzN4;IyMVyDJqSfMyG?w0 zaQ^m*8AB|TPnqxy-xZ&6VAb&MYxywi-<w?$TUNAf#z#3U@pAJw{zWWrsU;KOYQ&tP~?35V$GAv&bGZ7`yO zE6@{((CduQp26F!p$O18(OAGgDH4g?AC5PCn(!B1CclF-G;W1c(i@->^}r#xc6G$* z8*XtT_DhM>B8>;n6EPG;FFnQkcgI~q%N0oT_CVt%kw$iEhnvg~6(A=*-$A21??9>n zCuM>Ck1${~Iv9&#&7IYYZAII+n2*f;rk+E$ynV>?1~jhwek0$JZx!N)AA|+XieDmw zRi{(`k&Lbn2I4-g|37H#Usoxk7Hf9cZ|7YqC}KMvI&X(8y*Z{zm0i~aD-R8D)ofrk zmh7jHZAHOX3S7$0qMW~v`QJEAJZTj1@hBEjJ2;4JXGcZHN>QZFcd;zSd5CeI6mbbd zAhqs9*^>@Quu?JxXFmBhcvo_Kl(KWUP`suFh>hI zO72UK;(41fI{}a5q2?znt*Fs0UY_o!3*?$@unK<5QC&SBZUb!>R>&^CBVXY65`4RX zYfQwkATWA@@e3jSkAIEDjRl|yZ!DyMV*`-YrWn6A*fqw3FrzA;3cy|h!db#iLS5#O zxIEa#bfD`W7bT%}r7rD~fLLw6{)1PpH&JICPxc1(j|fA$wX4B7qy>G+8wkyaQpwW<6D12qr=jn>sxi;eHa#t%HphCfR2 zV0D%YrzoYxbYuPFk%xvWuiVx~ePG7bUSCx;`GZpKkebl#N{xNe@}fos*_5``%g&@`WK;4Y$h zCQ8ozK{3PoAWOvjB8*Xnq+|cE-4rE|GC}Tw&kVm z_~&bMOndZiNn{jJ?x7T{L!*||CiAxBLcM1{Ko<2hjtJq|;sj`s=kOG>OGabj8ZJds z^=XTs8M?B=KhVc0( zdGw;Jz*v+WZr&F!bxp!BuAxpGa>MrrendHM`Lycpkih&nz0}b}tepnlmsmTUQb&zL z5qEBoTUsqywj_^b=Vizk9CsF?U0xgDp>uF=iZ)$^OqE3CPQRgJ&m0t)%` z4LWrhVPnwX{!@7=rQH1vW|wsRE+tukl9cw>rwJ>oq0glm8S@|R8GNWIaAI^Ot9xf2 ze~L_>`%`W*dqs(f@WkyDHGKUpNAK zRap!|s%jH_8`v@cV{fldhbN#pa;UIyBTbZ}0o1&jLJM=iD#Y^aC)F^|=*TSQP)-3(?b`AmmM;mt~l9=#ils=k8XRm9BWJ~p!FZCBl71LyPX zzZNq-{EY`>e#u)IC#Sw+O#J}9)GfLJ)-gMQbF;DkN{*dql*cQ~c;dNcNDEpW`neQh z!Uo}kDHdc^5{d6M_I5lbuHU=j#`|$Mq>+8kVAGenY{zd0x!oy*NULa@1?jC2gl@x5 z$f<89AY1Z7-VM`(_pp>gdo99P7Fpe}T4F}LL&;KBH6v z$hu4jz)Stk7P7d|MO^4g`Gq>D5f}NfgVp+~a2m179T`+Ludx`?260f}%oD93(aF-* z=W(;GOaTPCJ!@@hY$Pw0NLhm1^c- z`=Ij;$}p{^pr`)UqpoHvDJSkEa#?@mp8GE0Rq5HK1QgHz{b-zJCNB!zN*c1?uyC4VJHj$76I@ zJZ3#fXW1T*I;ycfCG+d# zoxBG%_Z28d)iNKx-%tTsk$F)4NbsJYu`dK7os|nL^GncI=oY3c?n z@w^xt#KlPrXpSc?1A8;Y=~}rMH+C}bla5Ank-C|(yT|4Ze&j#3A?`zW4Ml;0K@?YN z;5{gVnOqAPWC3^|JRW#n_IpMiyC319?b1a^^)6SCMzcRpY5WUnX4epBs4<^F$C2(` zD@pv(k9>+xAxn-A50gG%6KBuaD5)u}dp}4&vj%>YJKIpy<^_bQ4MIlA1?xZ)}g_TUV$(-DC$L$Tkn00X7tS`m@69?2@@ML zvF}d{v2Qa4tXu(5wT^J7urvKJ`i_noLsQdl0JX=hZZ{mA{j**!J8=Y^M z^K{VNXOchi+!3VzkF2kNt1@f;=RTJ*uxOFE+gol`{byQpejs)IOfc{Ghb} z$k3KIka$oKIpFAu^WRX-e@!JpyHnfI2g3ImH57QdC3@leJGA7M9q0C2otcK>6tkFE z_Ij0sbrx$EfoV?9;~xDOLstEvm5ODyr5^-4X;n;DrhZ@n%ik($b;k^^E;D@PhL)*t z?aoK9C_%aXTLVNIOEj^`3(jkKdpnQ616I@R1t?pUr{-AzY%H866R@l4Wq%$y<#}W~ zI}5F``*acfb#2@V9dkda=MPW_8Fr;O448gnfrBb57KDK22#Zz+?rx4yJEk7_f~N8= z7Vb@P*V&KB`PY0U#{r+s&vxZ@L@m<^hLS1kav%z`^?i+I@N6&XAvF=_p+s|F1;k#4 ze^bH|mw(}8qz{XWQyk6zeT~eDLd{-hn9UjaS3N>!Slb0huCgB{+D`LRpJhK}4^v41 z-h3axe_o?s^qsYgMU}EN+Kp4I# zj?~WqsiU^;jDF{81110gsP`ojM8JBmG5!83T|1P&} zAZ{eWvnICD^?Vw!zxKavP&?#8*#c{*^$loa`L+?h!I;=lTvoaP8>jL7`--dwZcs4f zS>{I}^gUjI-8J@Q80RajPC}IV>*ola#x>{p1t%stTY>kgpa%%;Za%^wtNyS7YITVO z`+gFRUVSf9zu#x0c(dnI{vFb)G_b@$I5eLNS)kp9t+3xnV>(8FGK>0{%WJXUUwbgN zDfdsI%<9u)5vm6Dgi&e0XD5=`b_*)-8=CUzt9 znK>*v)1G{6AeJwJDwiSo=+5pzjv817NnghLDy3OA&_;^F!x8aY7^D?+>Vja)2QkeE;D_NRd0+&sf^XL6j_J)V4Cb!R&o z{*MZgL6Zdi^4}1s=l(>y)lx(KhDK~~u*VT3>t0Vid&s%rqi;zKAlj<8 zG8EY`B_^`Z*~0)u(}f12dX}i>lK^SwOwtz%A@|{(tg|;5zmj<@^{D6Zidi!i#T`hY z*swWxO*_bgJp5x7Le~vtI3ZyN_k0Fe3k`Gz5Di}E3I)nKG$`IZ3*9QnG(~Bq|4=sv z6J)7aBLIokp{{t=79|>pnd`*N^?G9F28g5HHAhnG$28{AEqwO>tAx92N0D29#cM)Q zFkWvxq5&fZ;&fmNPp4Qa%!KFh zidrZuY5&UAO=^4>FO*hSN9hfUk$zao9T`mE#4_$MYqsM*TbHIhYP- z$z8y`A+Tr{ck(Q-YvOcAl<{aGjeGn7pR)QuY9;9pAln^mCPCT%fh1a96)mq(a8hS5 zG}__rcRSFe?aV3s%vg&o58=s4twUkm28?CN)_Y0w1}h25$b|A!ky z=wXkC0j@I(^~9M)r5GYerM7PvOZRE8A1k9N**o%< zuhehE%@`5NDiEVzL%SbZ-965y;gjc@G(d0o4BoC(6?Xk>Yy{MeKiq*n;;PG1}0=9AD4p zn_810DBa`y?Efsc_|t!(r`N$^x(+F`jPXW`a2n3p(jq`@YntD*Qx=IUPALFsM3;(I4+uy~{v`J^dG1i?5BJFL5&5iD>8II+~p z8CFdeXTb2T0-mG0vtRq(gO?zKiwPwZpJ(ZU)0;kg!OZn+vLq^ph{~Z9JNqZvc?`$+ zV|yv81s@B>r8kxIvPg3?nMWtag%``7B)BYMBBsQH$4|XHMqk8jGq4nK+ezDXqmh_( zNKecYk<5oOhwlu;W{M3Cie zG_iGm%KhXGOc`dyz-c~_vAUJtDgcGT>$AR|C0^Z!Hj%_bprEYlOHs60(mrmE)7j%t zYI3e^2(2!S6S-F{f_2}&X;>Z4^Qb2^kR#?DVH>{6!);N%S7tGjDlruG&QUV3rGPU} zkI#vlz!S>9djQPDkdUa4qi3VO+M~Vw>hN8(QGXoiDAgdR7h;m>38tEd}^#V>Q zBCBcTcyoC3)=(H62RtL0X3PtjC{7^F;k#};CS~q7K2Ey;b1I^hUI1(7vk)XFmwg$Lo0(@7~q<817SUe;@iyu z@7{%W@z>c*WLSncaGxwZ7vV)=wWkT*@Mj3+VJvKGDm&~C08t#HQC`P!;$*f%Fp)TaJA#-awIT|uGES2(8{WCCe+O~tVB3iuLhy3 z=Pw*qw3ycv75#afZ%;M4iHvWAUCMi#O0&t|HZ~D>_NN z+l&lY8Sg6o=tdb4CQ>onOq{2pJ{3qD{CNiYQ0R)EmfGRQHs}dB3^OC2U;E$=XSe;} zT1&Qfm9T2baD0MDQFL1$HV~RpSyTz8Y{cFdn2;K?f#{_@MZhhakgcGI>oZYOg>gCt zP!S8Q3PaqrcIxyyj()}zJ|!0!!xw;WCYuF!&sUhw(QzUr$VxG~H|k;8%zQ1M0qkm- zh;iK9Ofu?A`3l}o%fFcbKx1Qh+p)h{DOmvUTRxS9!v*l7p%?2)X15`c!mOUNhV#Na zJv~<}0XaOI@9Jr&7o%sbX9h7bV;0i`%-k@&XUnNwS`?wB1!b*(l|mOWh8!7RiJn}6 zebr4kNj2XM0@QK6G1{#T(U%L~e!{oE@Et(oV-5lQ18$I&KGP)19G=od=`O;o;TxGg zsu>A|U&CeOX=EvZK^P6~K-`#JM7gpA?RU16s?(owSbZf7R(SIG)@9;#v;FQLQnIe~v`A5|$gt zdciEZ?s{-JRdnBl*>nPXLSuA-yB%7vTncJNaZq-{jf7}wd#VQXu~`!~SBLR!YKiJd-pK9O`)Xn z;f;h9=ef8yI3)?cy+o;rBbZQBb#?$asLs!XM90l2LMAp>!{giK{}E$YZ00?|VpkbL z2a|jr@8V~jktHL#2tD}uCt1WB;hXKHY0yx@oa)dHm4z+@D7w9CDHqq9084}~?1lH} zTl2q8&iA;dN4-7$}G4q;nw!O=2po^z|%EvqKhs*);KOCd8l} z$tT(iFq6IP2YO`$YpG$MQL2ahAWj;kkq^=TJTGu2z@-`SH$$yMIkVsgzGaj%B5gZ( z90AjIpw%vWX#AkN=tL1LXdA(!u^F_4CM^<^76V6qkAtwZwVIO7nj%}DR{&IsKlzh1u~gffq0m+YH;@}c zy2=Lx(#ld`cy07|9H)2h#@B%17ZAqQ)nJz63=^@5C9UMnt0(l3i>NmMpOBe@(e<8= zl#^wQavKIxv5axFL(Xi3ei2M?J6xs-9ylFJty@s}!App*Ov1=RvwigX3heBA$h&86 zq-(N-5|apI@PnJ&c`SwU&xr2+ltNGUM9)Sp!I%xW26l(%xuN>9j<^xsdL6E$$gWfH zheb%x`3y$ro-Znhj0T9xmVbhXI|g`5u`eIG)<969wG8ua?V8ENZ(`nOCz@OCmK{|jU{Aha!b9__z z24qX9VprTt!$dh##7G}le${}*6MQ~H{C4DY~gtX(|Hp(`@D-kv5GBQnJZ zDB~!7bh4m?)kau@?&3N3-g`|;-I$IuK8@6luH(@9_#7M5T$fD2hh4B{(^iZHf5UXb z5+u+}fKo{@4w1!+$bS(pbI0~j5fClT;rz-%#E1~ z4RrmXq^$0MrKDnU?+Mg0&6UQdEz{lp8gr#wR$oP?Hxs#GO1nc64!PPz1m4VTvG5KE zz^KnF_>*0e(+xqb;+m=ss{1S*BGvCvkZtrj)aH}I?M$y|kHUYfpwdo!9oFemuD;0c zY0wy_!%fUc$sI`%U4fru3wPkIZ3sr(zl_|HV`SpsNb+BR8=`-c%O92`rc6FE)cn3TA?!hk$c$`nFIM5?~tWY$KV#gnr_uo^~LE2;`Bp3 zarzO3*p6iRZOKB4dz6Nn6m|dT;87cV16E!^%hxI)ZkWQo@P0=%Q$nFk(Ke5XqP*1w zfESB~yoT(K9MG9L@=U6giEn49=X+Q?gvUL{r{mG?z#rRzY!hxbLdy0#b%GyvMeR>^^VH=4#b0^h#dO0K)mW97Nl_VBL8K}*uhqKnNF5t`bozL za0+6&T64dtB(Mw9K-@wGJ`d(2$pR-DQO06tZRG{Fgdyg_>zz+8OuXI6_Yy8^JNyWh z3&Ty=yS7~E8~#M8_C2}fuBU^g7NRnbvW(k+nCY{gXG#4}A8QsQpXrJ(C0N8xFJSkdQOtrQ)K0Az)PuDC+r1*P$PmGN`ETS z@^Q-}u>fI**xTr(wqUH(NX+;EmvhIk=SSD9)FC4E4516uiwG$4K>zLVYNH zHid`BHZsxsGX<2yB2B(&cj&;3!p%pd4>scV_9D|vF4p=y?pxuSW5HFtIL=TZbiH{V zCeh%)!-UsWZAL4QOY*u*Y$h9zwWjpf}RNTs6_ zQ&I!?+#9y238r=Y8T`(YA{@NEhP=WQ%jMk5q){C(KF|MxEy#`X46s&JcmIO3y3;~? z#zjvC=Wr4*%%+p%v28Ol)mXAXC3E|Jv|sw2H21zDQhVqUeBzCzFjWJl7ICu@?9kAQ zmn2gqg{@nQ$|n@HqT<&Nk=FL^RGkg^=Ah8+4GRI;rEp%PCEG@PlsdzzUR=zK5dYdh%l4x{XYO%5`KmsHa}1@NvaUiigQ? zG|yUh$_k4r#LL9auh3i5ZB<;C)xjiY=Xfs6!^tzm6uKZJD?Ujnd-)V;SC)+Ocu!Gm znhIkBI_@+@p9A;(g=D_4X?BpQ zv^b}ysKaqjwp^IKMVW5D<>4~&3s}+bFNrH(*o^|1^HR%2WHBWNMQOiGh5v@xV#6G< zVJ=0;1|lw9U5YSjBd?$MS^7*FO^ZW}+4|+&8wL58|s(&IE4A6zQL#b)x7n%?u>`Lrw;zbnVOx~ zAHM+<_izo0y^usDpCQkZT3#oInc$DW5z|vwNiT$|`oIOTv<516d~g`iWe>uxTdbh1 z(`s}gf-zJzbPVFmPZ#m{XfLue@d&RLD0KdD%66~Ew-CKF3~l>vtlQUpSaVK&xg|oI zIqwiUE^UQyjqSj+Tx=`vXAIa33T*f<#yt4|YrIjG+=G}?<9OXAm4)J^k4Ghj-Q^Mu z9<0S{#B@+)vPHNR{xAlwZhNhq7m$8XgJ&i@g%r zu8Ubf3w*MS;r-TQ2tP-C1OJv1d>3;3uY9siJGone3AZnONqc$_?_5n+A-3#TKZKD- zk0H!>oXOS(x~=4{Ia4bD8=*rjqQH!B*}$r%*4MF*gS)Nw3Mn)X4k2`(%mW%{ujDc_UcmMV zggHc@w-9h5ahr@eXlB1nzfH&OrfNP z3q*@SPXP39q4R}GFvC=f}gsMQBG`&GbrOw14`9t z)wFe*fsD3pN`x^M-vP2l)bBwc2GZ!AY;o)O_%tSoow90rgJE9OK;MvpzyF3oD6GVIen`i63j={LT<;G0Fu5P~e#TcE zs>esLi{Ij|tWeT7fyp292|U@!Av+NU*DVGa+Oa<@CS{Z-fQrnze-Ufcpf|1)MlvvD zzsK-MMt7(rGZhalW687mO_WsN&*zZo!0V&S`tD60nB{ z<+h*5;J)A@2IlcJ@pw9US6fTvBx_nsDeFdaTCO6(5V!rtVchdaoCc(CU?QuN-ny*2m+B^fQ3Bgq?W=d?&0M#~NHclgc zGuvTL%Z3N~t7u34Sc;Ffz{hbzC&N;%O*y~shq`FE!aN0akoUj6L|%&+KPTNvOB{o*}Z>zgh_MfBJza?wZ*OqhOs-TY;X!huXD_> zYQx81c|v!&73CgphSoMNC6{>%z$|gO^$nmEm)imOc+?RlBP+i2LIS66WVb($<$j@7 z%!(f5OsPLtOSp=lFdW-h81>|_mGn`Ao-pb~+FY38nSPmq&xRs#{yr+-d=sT8U((>= z@6l-h=sZTJ_BGEDY8GKTpqep%BJ|nDi{5^l>HlkTQ~kq95?Pl;RvnrC>7^?}F-@m$ z>Uy@fOjM4b@G7RtW;Ud>rqj8r9VRJolr@{MRF_!uTd^#jJU5uh^;$NifUYxvLY?jq zDvO!IyIRnTS;!szlt!h0mDNwB;MYH~kUK}?7lU6c+1YJ|NLL3uT)KLFtXw1vz+E)A zoUO2-^cmbBe|_7=lBK1kg$4gero1H}sPfp;95*LFz@>rLO;nVyJz9dpNp*b(#zd|u z%`oh7!wT`G>Iu#_a;Vb0;ydT4L-n=*N__4e$k{lE&l1iVSS95T@TC@h=>+bFn-xAo zyt-tlTm+97!4vAolbiV)o&8!r#W6muhyCJ-ixjd6p;TJy%9klDuZ=(!#lQkdH2Oz0 z`ibqhBkltw_nnMr#}SOyoR@Tjdd>+^adH%e_qOM%3sa7Q4>w_wx2(RFoQFcOy~i7h zdHx8R>%YzCwvOHSH&BBoHef8zhu~;Q&0&=i3y)z#ehEkn|>$cOlU->j~E}gQZrdXd<&8|sq zC8S>V$VkL36mg66MBHMwP@3ej3Vl@Xml=rUU~`ciVgh@~BN%TM^=XXIFRLv=kICF% z$0EqwP36>jBcspIuTxP&)o|Fi!+rLT{iv{`n#J#?C#K=6);5E8^)?@DQG2%myj+!T zyxm1qoJ6*TcfrhK@ny+;V3m>uRGP*5jWPR%F_t;-49-(0A+i0J^$4R|48i1-E;4~m z-Gr!<=&URG%wuBLacBfr>2&xmUOaw&VVXK-u8db(s`+*l=;U|>76VL3;~vFp$K?R@ zWcoXkU#Ji2b~ui@98OSW=Uci3Z=E<#$9Ql%hs9C%P*2o7qChjgglsXNQDo)it^oB; z3uUtUr=;rk@L$oDP=Y%28qB+A;GhKHk02jNQ)EG};h~JZ0pN@i$UCG%#YE&**hgAJ zN0k2<_5B<01OHLs4_;Dg*Nr;7NKRoPfCA^F`HV&*SIot?lv_Uh60?Mrc=r=2qnqix z!8WC=jF0$kJC~KMRgK2VgxzOy*^`1eSLf;2eWTvpW}sG-9gtixOMU*q7wt7)nOFt; zp-Y`n+#fF}^%|cWd|T8q;cr^*hZnOBW(e(0GfXJvk1@bnI)9K>s)U2G`dOsj zcSkpH;q)uo>*eZ-q{XQ?g-O;XWNCj7uLE9tAq*1-P|xICa`t!#Lp%G)t#J&Z^PddH zstz3`@o9dQk-j0+Hc4d=jZay3Axn}Bx>JwKL45Po^t$!GW9rliU%NC5M5xmIgpQIY zFtXD*2A{w)loQ_tAMEDAt)ZS0qCyYYlpXW}QA)>N`YK`dCpJotmMvxCl@}HH@>(k! z(hU_U%4k@Ze5CU*YA1=8xKp0nk6}ywX@?{-aRzePk^}c#=gIB(WH{YBA}$}L-c6y1 zBRTJ;;GH~1A=fv|K|}Bjk5!T!8j5+{Wp18X|nYUOgRsEc7P7U_dh8V8dK=cs2mD= z+D_(3c^5fb2uz)ktkjosuI zT?h(+WCP3-b1JX4$BO9oNh2j=D+|4i42qN~a@I%A(=nSmT^x=$i$xHapvc6V4;csd z0|sem39+KmXA!=ttp7qd;A|w2&tXbUU&5RoyMFsnvcswy_~iC%n_OHA6xV_PJCkhm z?aRcw&NyT?W!JRI*XEcL#Y+gtn(l?X((^5HjDPr;3qA9PJ-g^3r_4u# zP@=;N6MbP&jG3W1SBPh`@%<2{hHwQQC!yf; zu_<}B1>fy^D{|23nQQjFgPpQ;CGKmjhSkFJrzya!2B|~34n5<8zmav3N-Rq#6;v7IV5 zGx?YCM91gQ-b|CAdYK|Ywkvy^ge$F2kwdA#1=oT>U|3Q9Gr9ip2Xb>ry< z!t*N_yx7D$orZbUb`xTdNprKeB)UOZfk_nVGhx2JCwiql9 zxEeZ1p~1{v8ho1~8ZMW?q>iRvC*Y4_~7@W(Spt^ z0K;$|-xS=@!#5E<_%JxWl4k)`YzYMk?NnvUEIp^G&!LHxcY(Zr-+@FC_U}>O{3IHB zSr05pwc;SyiQeZxiss!o!n_`Pz6{3#kRy>2t_y_EJ;Avq8AwnuT=WN-50AvV>mWwF zUeh}P3M)5ULbX1jWcHp%$?9x>Ot&)74oy()U_0wUmX4^hbyrGy_f-y4@8mjcI}!$& z9^_~Rg-%GpL*-a_sQFV8$2EW}f8GF-4oC2Kmq5DJvP`7zp>v^-D=zyBsIHXxz+7pEp`ZMwULZMn7y~{sRu9^p2v(en7hIzi?5? z@iWooz&*XCwvYwEW6!!Dn4i0b;bgWfhPz<*@-^zPZ_P+ggWyn$Swo9=1b10W=N^J z`A9Cb0RSKOcW^28BAoK-Bf;Nt8*oe#CvdW|>}LSDu)N-wi4gCr$P!fAo0mf93|O|v z<=AEc+zM5jXOaO7_}v(fG-L0qKxnp0XFfH3WqY|L2)u0Y?ZJi2rS|8C$dpttz!JQq z1X8Xym5ElH$mL)?=FIKyD0!)#xW1ga`^k55ZT8E_^bMmMi=A5lL8@#WcT#mN z9ST@jbwlNYIp7%|McoJFLJK|`n`Gk$GVyXD1-FCd zx2)YFISduU5D8#*a)5ld%T(_0r{Mf}_GqBb%^6hPSh4_>(rZ#;< zzHvwJ&~i0(Ity-+1n<0skC^1`UZX%?)&G?1Hw5~l)DC;~`P@fo)6M}CDAxEI3X`eA zWEwLl$oX!qEQ4G=r^_P9EaG2{+zr1pvTqLbDJv1OE-kc%#%?f7rA5h(G3{AqsxEWE zx(r!Q2~C(pO0M15aN7?0ZpaJa1PHw{eOEv#U=4&zd+sfFi$U0q~Oyr*m_^vxMTU z59J+Zj*snioyt+hyJiwB&u8dt*x2q*G`5ws&}+bDCx75|lJ3G_X-&?eH`eNddoPa_GJmiW$k_PJo+~_weo};vQ%>H`;YEhyf-YBOg=#cD+@v4^!SG{ z-(a0B0F_R=F{#CQF7Xyb?G~*eN_7?>#KNxTGAz_)(&#NcFs#8o<57QlCo=WsW512X zT7-F591!{?50$%O&U#Vx$}<=!_bjl|0WF72!KJS-;qBA1b09*8w*khWPMJV$PKx{O z3~)`{7ma^@T`ty6X(rZAC9BUe3|E*(1;BL7Z(u%|SR-Rl|2?QYOiPu6Jn^bsIu!bW zPUN}gGdz`-Q=9#Z@Hy!vg=gd-ceGPCgr>9j?Cab#^d(DcsStA?an<>e85aYGj7fdU6YK- zx&21CO@isv-c3>SG8$ajkkdKT-EXYdz!!?`cZ|Su#vgoD9Ae5?-FdKFv)XfLiGQ{6c)ibYf%U46~Hu&;(m&}p*}=vO`jV&U?~7k zyJbV+34fCKy%HWD)*FhX?#w2G+M^E(#?!md=)Z?TU(X}&32u9jz#V}!I}C@a{Q(r1 zZ^l+fOqZR*vw3qSd~A<;H3Ef&KU0j1j3QRykSbeTN%_xWfr!T(8v-VQ>0cmmF@9nj zl&y@Qgm2UUFy|;>Ndl@2MsJa0-bAWiJ_yF`LtJ9ejV^FX(4~qZ)_ma77LjuUrWM^_ zGgMCt78uhWseKrHN9>-Cr4)6%4V!E!!>>Dj5WQ{cL7C4cW02($ffoWwjEoAc=i?P~3rVZ=NM{88cp#wz`{b2wDz%UT=agdrBSexlYN z?b;Iz21@3vDikl3P%k%NO-b_=8^dhwfa6$8bhBG&HJ0jps>ytfiPNS)Giu5OG36o- zbR!r&`A2rfWhPc1-2r>;JFF?`^l!S==xGH(G)~01quIexr=|#`7AZ8M ze`hfC;|`o))PHUVwV&mV!nN?;CdL4-Uz!T+?z^oC;<88c2pc{n+d3PACe4^JWtaI? zhv|IMlo)fAke2%$4fz~LBhH5b>XeiJ0$E@Jv#c{mNn*iFP@spnD6`-$JTxBRub{dZ zb1)X2N<6e4py(6_AA|VfeX={Kia7Vdd};dh403AI9Vdz$D92Oj;S32Ss!#khbks8z zsfA`r%A7bAr8>2<cV0+O~){uYG1% z0QMfthg9A7G;AhsAheGmuGbD7C>L|Ci8uBW*(n=|ybV8S42*%MUtA{+dL@f8dh^;gMbI3IDAe*u^-y zmfr?Rhfcz8GC9BQr`w`1!`uCl+WymegeePj=iX1uAWxVaiD|iGM~=22hOrEfF`~5y zqsT><0qN=&o%BUJGtthx3#k3THlSke=9AOCRCux}qW)EffyA7jGv6WO1k8PYra@mu z<7MKy2cXj|4(#EBlWnuFTyo6BF_KAh%HL6jYJ>EPP)$Gpg*RY*t;ug`bje$cwy$g+ zz6Kt+43cl?@t)kk;7TO8d4_WTVfd)9Vj|ZuJsHNMnS>d;3PBKyA4M~;>HY{H< zt*_zsIP9%z)L6z`EFq<0AaMit#ZeRz)tZ?&Yfq9>dVfwABCnAY*xbUY@=j}fckUd4 zFxZBNz^Xq~=`aN?Z)5rTB=YS0e2+yK*kA@HI`S1ob=W~k^Y{#Jw&yoQI{viALb2>f z!EdLb1D#9pDmbYPLHh)mG%(sy!A#>gUe*(tXNs zVAn_F5IBbc+%J7IBEu%|em3q0<(_2Sj>g@|UONKu%9e6{H>MmSRu0XMN#e;r*K3 zHHhXk3kpz(`<{LX+u}S_LS23^L*3zZOaovZw40l*X+Dz+3#!?JPnOT8Ayn&iFc2Ph zu=N?j2ktYJu0p!T-{r>mn7YCj5uZw6$xgR3tE=qgHfV@DEl#b^xXI<)d<5}A~4HmcVkxv4%>LQolLY=GP@Qe3?P-O5O zNibL^x#|vQj@7M!2Ab$8$nh(yCiy>`g~~LrKiZCwaD+)a><0;+j3*UW@315`#G947 zyP8r|*H|8Gugvy<4t?JC4NSnttuUnV|5zct*+yO^uBl9vgq7X^W{xsxC}Hl_lu}gi zab#Ni8l_hGV#&LWbd?-29L)#m+u>+MIgP=|sIA^CiFqA>h}s^)-Tj#PnUXzd zk24grJDtDBG>PN?B7R)N7^Y+}som);_rS5^Cf=(wH9V}YcP3$K6-!{@#v}=}rSBfz zel6zlj^}vecMvXSnOnG==&mz#PRi1^-p40JpIT&d+ui~+QgGkV7`m*FG;jq^T6Nb3 zxTT?PcvHU-Q}s^guAqbYxsb-CNV2|Eo%=%OK=%9YLT=!87@BaGJCMhy?|jIL>+k~w zo%v4Lst47%^#gLzs_V2Ei=F3L}tU4l^Q1ZR=Vc=gR<6x$(i3r4odb#h+O zR}vLhMFp;ycq&=gn3%IrH?Xl0%+gY?o2xGp(nUfB%GYLC$iy^U;`qQU$mW}<+B^s7 zAvI|R_c*H!v+b;IS8;V+-vGn(8T}oi{;*+fka}Dv3cJEp+aCDNa|vNqRPPn|u>J#O zWXu4e)V-9oLNpaw3}0S*na378<~gDq1~U=lc4Z)pS(nSI(22;aS%@hd+yTyd-NJ?& ziv4zCzrEP+AoeT7en+uiNdc*uDBO7u`7G#%2ebF^SI8u>c_#|_#ypY%el+l;2a_ls zaG3QOn+;e`Ne6k+y*N*u>T#ZyOxu!q-fdK+tdW{A8|DA}gY561L7{LuC!Ed;rwaz; zdkHE}GP}cMA61 z=|$o57`6F?Tmzmk1u(%(TKiP+PJ&Oyv&q@~P)a{{6O)}^ITtyb4S+&z5gchbMWw@# z37Qu7s4?PgfISZ8 zob#B4VdF{u2{>`c)UK4C^bOuN`S|dirF{3Xd zazB*j_FZHG#%V9b54-^ga{XtGz8Iaz+d{TK^Zi2S`*4Ect;xPUJ3vcG_=248!pMIy z3zM93C@L-o>Ef5{LTD4lB)5GPZxa~3CelvK$s;OwnUg!*&0pLucfSe zj2sH=nVqD*(p6t~^TefqVYp2v7Tw41qL5v8f%AG#!EY+5jvvt%&TWi^b1?ew{UMep z8k*l#%|qOY6sKd2S&h*^229i1{iIAyxmCP3C~wZ-MdJK{?@s%cj70^b;Go2jl5uei zR_3dza4nb`lBGKp27b_Q(Y%Ej^{-nC8;YI-{n5mbUl?2W!V$Pv72HJ*mXN8>Rf?X* zdqpg`wnmgX_aUCg`X9zwdN?T#9KxG&9f#@$C;x+tH4A4*exNeu7R$xE>*C!Fc$vD@ z2IwmtF041s0}^i59b?_BoLYS`LeAi@si-!itr3;hOk-6-r6q5dPOS>zG2@z^3k4mU zi3E|~aB4aY>5T00buz7HSP9whh}YitsMk^@`sJJtV}IBP0I(__&;`EhkMk~Ax=)2L z`}r%(tHbFmN#23n4%q-@+EG#%v-6+rfYHSuq;bt(!5B31##qFz-c4Eh3>$W;b(jIf zhqcZIItZYoRv3E9cd^Hqb%bcDJK1?cClXfjeYFPIFVO(6?a4?IkROlUI=?_~onKPt z+i#JkbChzklS`afu`j-4%!KQPv^$#u0Lc?>zOjrLv}h zNbKZ(4x=b?`or!M!Ai|zapokoom7oa*~Ns={LOoW>NQCQ0R}LYL9wd_Apda}a{m=t z!cU<-Y;9$N6t)}65o$)^GHEgB{KnMwa(6@o-Q(#Fp1>TO_HH!pi2|Szu%B!n)-k;) z0iOp4-)4wY8dAvn@vHzC@|Yz*{csocZ8`U>e+?08af)+Oaj8NNPjSzg+PyHAQY_hC)Z3N#t-^0LemE_^ zU4!3Ra{2Cuw4SFju;L?!Cg8c&`8wE)gW${(6a!{^>k0|T>ZGlqzaul7Q9f5LY`{Z5Qmld+^~hO-US%M<;eJy}DlYQ}jL9*=R`C9ZBU z3>%?z`*n$2{iity!+MNE31e5na$9>@{dTIo&8XeIJ#_Q#_oblVQL=ohXm<{Rgo(G? zt^$#^tr({&zwYLXpvhfQ@zQ+{?`yrLFkxz&#WiUP_$rdy zLv-}&T8g^L7<$teigPe!TTf;UPcZu(e}<&?@JD((!vzgZ;hIBcf=HOM+yreTumCF8 zUIRw3&8_+uzq-`!$IXTF$D}D_WDc%!$?owkj&ek#fR|q%x0KXM+(VPHyEHNDC`mMq>~y@Kv_rD2u?08<*Hw+ zDI;_}GO2%oy0M5qj^dp^@0U4Hu_H5Kq>dh0va`3lzi?Qmz`D=QAKk(q4% zdtfy$j+zfpy)#l#QVNrNDaYM#0oANeV{Wga2h%I+@yD=g`ue*=;;nepM>ld~aN(sj z#l7<6b?DekjVX!EWm%ft>LQ>t=v8;D<`d|kz`lTzk;C#Z8g^Ehx}zh^C)$sj%n_Q$ z23S%!GAcUOVLu#svc0~6fdS0oY@LUVN8N+c5+D%;tFAdE-#Ch4cyoztVt?hPh17v` zk@cNLX=eguDoXWqL~S|0lw;q_lYs*OXS(0mj=eUqha{#1f{l0a0_y~LzG7-K?DP_Z zDv!wsoy*-3x_%!i6II{Id$bMELVSloD7~%+uq2We9WiTPXkcD$2YS5QNnNzeS#CuW-fW zY*H4ObU1AX-h%a%1D7QmsKQTr1?~3Y_gBz@$|o93wPqA70EuEX`M<@UFVoagT2F4D zU98!EmObv)x0|Me58N(xx}ObW?seoW)T*@!goR zU6vpT3_w{Y^+roo%j0lo_Ye(VI|KzMx5dJ3MLF$%;-y1h-ou@0UU3Q9lxlr3S%b&0f z1RMR(FI|mtv*WRT(vDVRe7=;B^U^iE+0(&~bw0cok$n$zfPo1+r{Ne%V^B5Z^!qR@t)Rri$Qpt*H#LZfCD)}hBr#-* z81gG=BX>$-(sVIt2Kl_`EF}O(RQ3W81+QleZnu7LBcG-!BTRBf-aAzNXJC+8UW~;z zhh7g61$x+rk!qh2Bav%D9|-gtwt_t_OT;N{q3nZBl2X?XoHo|QjQ~&&ve2aLV+dN<_kTM?1aXpNn83g13 z-MirjF+_upGNm5-vDYUc^#00DLcF@KLzpm^(T?V9S6y?^ZI?4Q zpb1|~nQ@_D?^{nV#|S%5dm|GS!zjm|_m_ge+dL?WNjd!}shtBe6W2!f|8z<2866i~S80SR;Wj z`1AtY{gdU7p^%SHxD-&87bxL?q-If6*q_CF7O%*@a~@(9HVh2;M4*b;&UPG3ecX1TowPS$lhq|c)5a=j2G97#4s zGRI$5>I<{kde|F+wdW9#2)PK<6&_KKXX&ib{iZLJPQf^EGE_*dfFqi>0U@<}4C=|1 zJ7P7I)`G&7>?e}L*Xhv0#%5uFD?@sQa4lUotU-mIGlVa;D=>T%_>B>^*N#O%1_j>^ zLeHePWGm^lA?Mst_|W4uldt1aZXon+4Oudba*zKmNoM4|#RyGmHiQz-@VWl+4H|rH zHzsr{uDOjzYR3WW%@A_&pYvg*)`5Jgw@M}r$ZzxxTo0=nR0-t-zllQn6$Cwq%z7(I zUA6<|eCkNqAO1ui?LHeZYecyR`d3(6s~84VQzpT$tUk4etrC)q{V8xn4Dxu-Cet%a zL-ZfA4qrsyX6UOU?lIMp5`u2v*3GA-{G^N598OEs3MwycAnmaWD*{=ID1Rk{0eBlj8GYpyv zMQ23OSvgEkYPrb~GM0YN%fw~JQRZE-vqv>!*<|!*TZD=6a99YFV5iB<5l0dbJ~=H| z3gEJ}7+=R9V=xW^W~NknfJ(OaPEZVld7+_Yk@qwV9A_6L(c=;{psB%8>KnlBX!X-nP~GDC4Szo!<3%5)Q>|uY_D9J zhrH_IL%0?hErMfU3gGl=d}?rjLK^JCL(zHay%=n3$;Fpy`@BQq6wL*Iw|dZ7eG$G* zPlRt5;X5ee;xG852ps@K4*cynuLf3yB6%p?S|G&?@JWS`DKJ8LnRb66;FL_Cuv9g<$?vnb$^w2Lq&nB&E znW6B9UJ>AsTi;mrF%a3M9u`AkcPK>MvHXwQWIc_cxcg>%%(h2*57|7DJg;KCpQP}H zd`BE|khHrklp^CEm@^soDb7NT*g0=0F3$-WJ6;)$nbp+pPztMosEgWfyMD0A+icB%94od(I)%$GO9lPT$aEdYDGNia30*;QRh|oWfD&fy(2>k#Y8bbHNT1qEP zKt~?Tys^os>e~f!EOb*00IySH+eTT(P&D=c7`YA`eWLG6Z0fh!VB#z%tK(%T#<3IB zhERpNHtD|xIj_=!FoDQ|!~F=8|KJ)5_qq%(S<6;aSSa7%`E{gm+4_4WB~vk!+J)EC zl}6~N`5R+T*S6QYmqq_h|&J&Q9A zB24sxv=W9VrXF7Uc3}i;On=_F7J7kWuUGdKV$Dhev1S#uy32Pct{Xv`7*oIl9bSUt zX7Eeojpt}^Yj|pFO^~z)*pdz(f)l*~Sn95Qd5c7qH$jTdS@>mBMwjQzdRA|ptbkA{ z>53jI>luiHJ}#7KG)2--s&Ox5@f)!Y z8UXOPVK8KMgj%?EM|7{!tq3jhG2QqB5p4kf+;Wck_X9%RyV*(`2q!lWgQYpRf4e`B z0vvkFN+%izKB6!=3$M=L>0#gxz5zZ4Z67p5wXHMEME_u>uIDbst+TY>5LO5KqI-jv z#o*a0(-oor;t+&!!S-nP+?N#acAs23A0Vg zH(0sawd#o^iXo(^T8&1Cnl+lfNm7j^;+8TnfisrCY? zW7^aK;ss`~5g59Hm-yID_0j3L&C^lDg6mXv;1JpqzffYrXFTe`Oslu;6Ih^-}6d864 z`hs+B^G6^IT>|q}z<0g3!#=skPk80qYZ#8c?=2}H8Q1v06KX287{gFSEl`Qvh>6J7 zy~SAcamd9PfD18`k{Dwi2k)4lc?c$cp@gwZ@vv?aoLmi7*osacl@!&9_ebYdl)Z;f za`m~_yd1TPX?O`Za}M7uC&6(QFYsZ3BLPIsS0?{#j^~l*uxNOXd|?}%B!fQG!sazn zxobK@l@;d39bW10i9_3OX9t41Un$}AZy13r$7l)O;XmyK=H?sfh8}%}By`)4C}Zht zFfbWA(uRU;3=F5i1E#Y+ZJSXjpN75503?IsmYEjdXE_&M1Yc6vnv!NjLxlm{zUd~l zQiwC_#hDG_%tn~5WORMVQyM&x5uBQk`T)A2Z7Jr#d&Ex!$@=a!VthVR#*2GM5HtNT z;>UHR)O`#hlXKX8bf1|ec=n(ED=)K1{|cnYi-tQAFJQ&yt4HgJM|{zphTG!HV_~bx z?_4I*nEXZN|AI)tWHy}*;vl{SAilJ;l+xCYMtK!eB2lx`Y%-s@k`u*xH^%45-N`*} ziX^(^Q5@V%V+%l&&VtO{hvC^Jcs{~p|6dTs4rPZU`IG12+0~DUG>jVeDj}FZ(N*E^S_? zL`I6X+cpC!7&x1$D$hYc!TUdhlbsMaVp=kcVx}<0IIfUV_VTf>4qb~?WU`U86BqE5 z@R+vAU5&+3N=b=4e97+?DEN-2>5(Z+3=BKPNgVH8!YA$AMn9>!UM*u_#Gz{UR74JW z$pr1Nyv=B3HFWox1o2h9LYUNN9)@ubct!o%^07NKhtCSf{Wu3O8^<9;4Ul-XK#xr2 z&0tdB{Y@G|8}r5pn+lvdvcX;Q99w`_zpjH3Cbnd1BcO*~D3>A+pF{;M*WX?Q(BIT4TFRN z=Z@f8nRU_2m_}CfK5JG;`PJ-fSm0J|mlQElE`V8p~$GV69zh+M~Jq&*?S))3n zow|fgT}5;JFu?%{)D7PQaKnd^F$^U_-fY}0v^DRbJw93Pn2Uv`J;Dfh;8rGz6K_61-t8~Q zvjT!d{X4-2;T(k+8bF=@V)Yd9ITpkA9d>MDPTgXZZ zLh6`nO@Vs1Na3T}EyRXJRy}J{!HM)0)qZd%{wL!74S8!v9Bs!HXU2ipySf_@0o9#R zqIo=7w(rC%#NlZH+$-V&6Q~P@BP6mewjrFCHfU$S42<+nRY1+%jct&%N(Wgv*{6gY zudrbY*Dm#82ME;ljJ@D0SqwKu5-Y>o2m@nzN?b4Vo=BSSh&5sbD+*|8KgL|#J4FKa zM_#bU=sMJ8a%#Y?#R%IqW8Rae&s~I(;iFJP#(C@!h@OCplT3{3orL343xF}BdKA#- z3DO1svkyDXZ7kM~Y=Q*8424C%OET;Ud&{iT0UNim7_NyvNHq>#j>cKgnEiZ~WcIm^ zFI>&)E~V$>O>nKIKDl;iEq6TGI(3b z1`|=hfhx+J;i_;{Swhc_mq@p8v{QC^{fpn1Q*<|L~c+@c?(+02G%sPA8)zfV0b<{gIpel z%nmh+a6~vNDgt3%3{y?tysco;oY#pP$mEnFxS;%1$xdhd2r=NAB~rv_g&xp{mbl(qg9^0Qe7XW&e1GoT1D zX20?LYaDJU0`l<7C#%PNIyib<{|Uofn<(+>_Z_=MGMz}B_PxZbd+JV* z6nP<=F$*zNqhO%mc5<~sVF>(orJfe$`AeD!5trTMKlPz(tRV9rzap7S`aEvkJ`-i_ z0?Arrc84XG3E*OdTH$96l}+xmD@3gUj&#&ai7h5>uBH4wy%8V3;wGB0yfQoDvMHed8See(wwVn)bYK9O{l4Z&*iZOVvhi zFx0-Y$T@E(fV1211(@IDDkj5n`xz>9XuRj81oTb}_J+6M=BU-799O8HA^DQCY$TF7 zo#bulInG}a)vnadwk^ujzNNG`AR(o@1UHZ~a5wye{6{jWAG&caQm4+1!8l)w#4n06 z2lWOr)iT`)85_VxR(>Ns!X+dN*l`@mEY{+;juK+|Tuz#EA7SiRW^^Rxr}4JiVojcV zo5*5ddhK2ER-Tr{t-+9;+j#>!)9q;jMx>%CP}E0gj=?bMzO4(g_HMTwe5}#?o}8X5(eZ zy19P8S>n0Vk{DF#qGDJcl^n$^xsKJiWgmxk*Qb_fN^7j+<_l%q+{KqNgmu5ihlOwO zCg3%nJ5qGZJiO*qIU%&@)fAz2c923O?H5VEi=+eOCDcZ^XkPzAtS7Nvi1oGP^A?xu z|AI{11e+fuT@NLPo6xJQ1Na4Y3bx0QZc1U1DJ-&BSfjyer0Gydd7Ul;2X`NM8141g zqr=QZ-USS&&S$xcy%QLW#u)cQ;t@umVSmTN;nQTXm`BL!X)PZ;UUBolRh*bkQJstM zx$_=M{r6u$<;>KNNK_EI0HO7Vb*RApL0>%ExbqO%R{0>ze$9~HCX{iY{9E(&Fl^lS zC@G9m44PmyG&M=Z7w2nVvG>5vizv)QF^P6IsAqFeax&fzRMqtZB)Cn;vrU0)BKmt# zXkG|D>%z#FY(cF`hlG3!%Qwy@8+p^VcLl?vV=nuVA44GK z)9i}AF`l!S67y^gJ)-_9ioINpqGxTQq}Xz)_IJ__X(fxeA4Zh0U(ao=SlA9gse0&P z7|u$T?;!1g$uvxT7)1=X3m0hjwea8p_Kg7D z^?3meKf)NPxr*0UxNEg+iUZ@seC(uN*YUeS6)_l6+3^q-*V6}Bllhm)%h(i&v-8z_ z`%rUNj{yu})FXQaq|fkYodz!*Uh(N>w!^?WtuLV7Nn>^bQ|8PaTEX?sbi6oBqf9ARLj5Z30oR zZvJ>laEE@oOzplj#DrPRA+v$ZlT3caC}z6M798Eyw*<5>Wk=9SiRp+|FE9h559tM; ze`L7{ZfIg9(S99VeHTFfRX;A%^aQUEW@o`;Nz-;bBB_Vw>KBSdb|Al6O<^)GcmlUNt;rS66jNm=Ouh<} zZ|1P+?b;J69>p4@bWgmAuYP}T1cq0aI})eLK-gKm7k$*YQlj-7EQ8HORI+&xRz=Bs zo(9(uPO>N-in90e$^Z96>fMNk!tCE%gqF1}5juWk7euZdt{F-UKw)+)m|Nyjp22^j zw9FzYi>K14SE$G~2u@SiB3HtW9^f5xDFk0mcAiWQer!}Yyh%qShGFgO$6QO7>WR3$ z4m{EW13s)Fu7YtHYm)^D7(l-{@$lpj4+Ton8L15Gij7%fW473sgUdm$-(>OfmXJ=7 zwo6Y4!s$e`w}=MwS=%#77BMZ5yTue)Osy7E2T=Ze7CNKDkYF6gPEcL`Y4`KmF*lQ0 zpr3b8=xUzd7*l9d04fFI7euid<~&R`B_B8Vn}4|ue7tkMSlkW#8K85i+HE zO+%>5H~~)(9VyU|;kLKI9HqF0!$Ki$f!~pI>KGz3-i$%$JUJf1{M&@xcG!n={%HWj zHz5!A{QlU)7a1ANl3xJ8hVZ~zwL}w2J*fG%a!F0?CSdhT)5-F8-jd-DLV&ZV^$HJx zjf)Tyd6+HQwcOa3T8^Fo-c8BlN-RYCg?e;4?2m)8hk`QK?L^96O*$deK^k9NNrua6 zpw-BE!Ga<(?c^wdtC#q1Mwk(&zGoq?uj%zlZwAEucmsvAj|KIfG64WDc_KqtT`ta$ z-y_8Dk>d9#^6R8zwrJMhb@0jM_LL+#V zEFxk>L>yQV>AbXfb-A4$p%^AQY87Oy_e<=k+^D}r)qgeqxvM(#`4{lD{~L4ka7@oB zsIFuC!3aGg8c3ol87lcvdKw^f=@m#dnVsN6C(NlFkh0*@e%x>k(A33q*2DIQw{5=< zpUo{&KttF~(QkHrU;bY~9TS-7Flmp@k8{IT zi@9+RGe4m>MfCZBhqRUu$4x=S>9s9Ts6*NYhK8yMbHOk_L|*S_m$W}1}W$HReu%YvrLT9Z(VcxHo%i=lA*+otd0@Q525?0yFuD)RS zxk z%W@>IvxtT@y@Zd$&&|Uj|0ot*hcQLWgS%q*No4P@}^>pa13|t>Y`Xff2RqcLyJ9 z+Jz&u3+H1~)vgf+N-e3`NSZMA&?~$%O|JPp2Fs&=r-xDysmzm+R5N}0&+X}aw~q`( zKce2hd7@QbT5>sOtpv{woQ%h%hC(+==ti4C=2v?+0Xz;AmTB7^{dfs&-K|gfZ1>)> z4Q!|S(4Mts{kRAXVl_<_Z$f!z9A(AcrGhgaktasnu^ zIMQrxplBe>_Y3piDW|wG(r7=OP#TNEJW-f03Y${Qi+XytafZ_ag#kRZdVSrf6zer& zy)!Ur7Yh4pEPSlQzJwS$$i_ib2}el{Y3T2JF>c!PRwyreSz`=t8rzsc7uv$3HtZt} zwUup}kb9}b-3qAeiT0c8DDTQvn6zuGrhfBhqZH2`r9dF(LW^x2zE4l3Soh0#n4CZ* zhwM>ikCqDoNX9q30QODcJ!WNwNAsGCY=9qzdDLa8c0Bx!m-CF(qs(*$X+yg5>Q4WM zQRJ=`DR9m+e#>Rq!jkO%t>M8P2-%efD=aAL%|5&)96uyClxc7y7VB?1?xud%m^uBo z1b&2|5a+fnBn=I`dmPX1&uZlcew6=WDfEb&>X@u-QOg>bHil(9j~o>I1N{Kh5gJEh_DHz;3-p)C8H;Qe}*f3 zyJC!~Jw@%;A)=QN6xzDsVGJ1MZaq2S_b(hCUVyM@Idcl@C6V^d7Zb+C^#3TkEno%t zWwe(CI;sI6kL|+k7=GW?u1Yw{X+Uw; z80sX9)Ymzd@v*j(KTh_)))hS2-hQdvA2ReO;l>aY%HvI%~5 zAwRbeb?p5@{dQhQsv3(hPz5cgZ-Us4$HQ)j3AVW;D^=t)Hv&zL?2wD7!Nr>proUN+ zuwBAMumrsBXBdi=H(^+Onb%mhYC(iSUmV7J}{W~hwm_J0rfAvN9t zS6*+RP|@_172*xba2seYRnVvjU6IAS36$bdkjo@3-o{ioA{^c0JVNbmkn9;EmAoAw zF7uZ!OdsOHx;BAQpXvo)a@`$}O4Uto)s-8AQe20(#RvwEX8hS=ZxTXXa;~x1heLAT z2(fP@VBo${RQ<{p94+nD!$!5^jYV!2=XAeX34ovMcMby9E&kzE+|GA3w6a2C_@Xi4 zsVSy&<6!)TP;v@0k`5iFtW9O8!TG$BnQ;DBLb2HZ(bCbDl%1wS zLd&et2pwFR?rd?v47gPD5*0v<|4LrQ(a#1V+pt??1HDLG^OcN8=(bkKqHLrWMILVf zjfGZf{51GEo& zFU+r@j~_ zx0cw@SXgzN;X}x<4v5O_`~c4*TC(fPgrRB3xvoF8_*5T}W;JyYdX06F#GDJ{`zxGF z69id9)Fv2ZFKh$ZTayGZT8W9 zrf&ZX-as(<@qVb*t?yT*jS-UiZyU<_eRt~{tgg>2Mkv@KVd&LSsL^LFwSLG0<^E#? z7)>!dGSR{ss|J*4$+NW?wyAR`axE6S^|ypcn?@jU(;B^0rFrkMc+o6iL|8W+7yD<& zD9Ll%E~OZ7yn%rjaDx1L^p-p+D-kR+=}i#%RkuP0^EwlL?y%d=c(dHzjms|%Vxp;E zQDf{#ZzWC88;Ez%+j8sU$wG~>o0VwVOf7z{q#H8N2tEWxi<4sv;7DLBm9&9Lo6oQXcbvxF%oY-|6i`W+bAXMae8evh9!;Q zpyrql=dO_JwjD!$YXguhX)RlA-Paxfb*>XYrFscy7|eWAJHWpNBI_f0O@^~&e{(+6S zXRfl2SBr)e`FK3Ow3$cA)pM{%G^4L!F(`0>6VWn)u5CAmn-Kzwxc8-wt$h|P54^enNmv+Ah9`Q z$S_R`2x(g_rX&Tf10{08T>_4S25aEH`;ypnnMNPn{~z|O>fRln)Q5c$`feBsE=Jz8 z+c+V*YM3GD0`~{U%`v~TEMVgB{YfNBJ2IHN|Mv+}Z)D9oT$D|y0QoqYoIhHi0Uq&X z5;WTU_wGcq8f~Y*bMKg9J71Ke@Pbd7EN(!TKdJaDFY}Vky8tL1Pt3-%c3oX4 zk~8lVPD;*mw!ls--_inFY`7wPNY;9_JI5W%^xo%34Y&w+;OvLWN7}QB(70a_wgj&x3f&M_6w_bn+UCjt9p;s`du+ttQwDCCd z1E0WZ2M7sdHs1i-Wskw?`i64~j?b~oPJfq#hXaK+=VMpbh9UwPkxLm(s!N|hzQFK- z)(c`N0hQ$W>bjzKi9!r3rhtxjk;v=~CEs|)19&Fsi8M}aAixofnUnI^=_yL3< z&*(P{eMP=2f6&bRAcH&Rxor^mbv<*JB2|C)h6r;~B!m&BJFwcDHC`eIK$s@rDx$pJ zZBmG}BaqkU6XYfSZA<=h`XWBwli@?ezV31(R?}Fc2xdTdKV4zmpe}Se)+ojNn;_BW z-=f%WykqCoqk?`%kVWlN&j?e=YUj1-b7?CN~xgS*oL2dVZoMfX47_-wD8*jDMiFJZMk*ohsod^XaVHGP6_ZqfFT6f2o6O6Fit>hzRqSHoxq ztACYS;Acrrx2FA{;=KQ6bF?{QgMJl0_>NPwuq(50l@;VtkfiTOC-VeEs18z> z(keVSFQqOAj$m1MjSB-V_K~7W^3b|Y)zoo~%=Lj>L=#*)EdCELdUj^T{XzYh6mdD& znbisX&48Z(V#iTz4ijrre!y2mC>j#odgzn8xqX#J^1t{c1KvD;sL82>5oWT{iiLcr-y=0LsuvCA`#Ajbfjf(FIO46|ojYT*kpN<}7_1L5{ zi1Hl#!J_dF;R{rcXAki;xz9O-Sw_cy(lo8^=sh4ci@JeW=geK0F0YYl444~P1-C_< z>RE9eBSRx$*dmI{O50L{n+&Jq8XmkB5CO!!_q;&V-7HmuXPt2u@P&S%fEz3E=IwU} z6h^n2S$H0HkGGUp5Uyv&f1==XtRm$4gOa?885PBac?uQO1H_lHJ3Su+11pPO;VnVR z*1rKJTB--=SIzXZcOz=nekqK2XRYwU63n+eg~%Tr$T9AKv4PT+`%NCr*MQm4mV7G? z$>Q4yIPKc}oGXVxP_g=)SbbiszCdHYK0utth0nNXC%*Hpg0L+{OK#zZF_}Ml+}uIgWBPBC?O+~r5e{j{roX5BC+=T_MuiCklZ28d@-5vWgRN- zn#YddtatMc_t-O#H&FCGRNMbMC2xzu!?FF;y9=Y6UC)h|L$MI!8ZjE99otur3ws;2 z$5{~h*LvPlCBrCw8)Jv+`^)qrnf4Ka1*0kYNE+Zvjo5(VEqAZ~Z&y2Rs#0nVoOI;- zy$lseYv8+O4K91aP8^W>kn1M>I`;C4k;J$G&m}rT#!H~7P0gc4vuhCIW zj@%sDWRBFKjE|}@3t?H=_)n^7GZHwv**?ax6FarSBHHo?eiy0WrZb|fR-+d!IcZHQjd?>c{ zld*A&SI@-C?H*+ZyTTS7nPPJGTZr!0i$)!6xl!94|qwDMy;5WLn?IdyeBuuaHQnL%DcD>smi{;Xv zw}fvea~78pFkAqe{`rPaz7Wz9UmwFYWg<3y^6eDFRc-kd;RN{#!UXS!ijJ7qX0{B% ztQ)5xba;?s$Y2g-G=I-tFWW6^!5J!x5aykm%SdS-;~B_hy_~^f2Jx}yn>`xty}y%7 z*)lfS=GH?a+lzKjDA73zOSB#M_PEV*?XH9uE~zXVzZ}Z?%z(Ig`UN=wy4+hKerx{% zyr2V!EJ-?uC8(m&ZcpWq+Q%>?&-pV)??u1=SxvcZd7ZkqvBg|2C66r{xptH21Ko%- zT@atWlleDVgE9J5oN+t`nV#RL96Lxa9-$7M86UUtr?C%ib0IgfB+-37<>f{JIS5t` z#+6#~`>~k$?pt|;)V}LYgh>=*Q>Hu8<`9K$4j(Bfm$aZyqc6@SpkxJs~?%4dL9IaU(Bum%|09)(RQrXDAG z);zp9kmsb?irorS84 zP<0imZbH>vsCo!hPoe51RK10&k5Kg$s(wOMDO6QL)nBNpg=&CM4HT+DLN!>Zh6ojI zfqm}4GQEro849xsP-0l5;XfPT-Liz+ zSg`E^23S5s<`=?2vV}G*h_uQ5a+xL7a>k6bWa~VWs#~ zz`W3FuzWXr$sj7#MgS-e3OwSa%B=qZSfB!_X@znkvP)U zT#!X#D3m6$6`bJkEsSByP55obHLkO=#NI%>+(2<>hvI8~Ltgc5a(+kH&HOcH-ggNz zofFf4K^xUsiQf?qFp4dhneN`f}^IEQT0aQtqM>RPm*P;sQJ3Vea3g z9d<)@7V&M#!)G+0pIcv;7j7R$%_j%T^&l#HgofItOG9Y<1*QdZ2Q5T6)YKWF%bL29 z&{~pT6DS%=@?{`?i3Qsjl>4Sr;`_5mQn8590d<|0Fr1|4sbiS-+yy;=PwtGpR@SJ2 z2Ig2ZJ*4w#({+pU(tlW1CSJ_K|uy?JyWRsz;1Neel~UXa6sCCuB^9i4%Nw|KffTM z^t&^DF4RAcDNjvcfI^btpZM4SRM2Y+MfYc-V&G=dtj)uBkLfoNMqhb^$YGY0ls^ZD zy!ZGs`li;+WO_BNX(>MbIe|(RF(?XL;fpY`h!NT7HQNwsX8gr|Mm?*UF_!i9A;b4~ z=@e7{3G$67CYvBega>Ttf&0SuW5GAj&U{kX53jX)1=56&Ey+U2y{M!(z__yqiZ%{|_j5 zIV}hGU^n@6Y>LY$0h@z47;QTkaJ9pocd4&J%y1Jk+)b$KGM>1qU(0c!IIQU`@Tvw- z=!bBiKjB|nqD4tlDe_P}1Kd&gji$^V8CaCLp@;G9^CTJ#iRwC35On~Tf32$@139y} z`3wbWPi`<4*(o*%lh zy&112O=Uwd>JcTuNe=4E%3{gJH(68>$;0I_KMHM2*!dcf>pxNY{i(eAybZbRKS1$I z69C_K=yiq7zPHe$EKVlYa!4e^#b+r|Ao_YW5byw}uP){yBaLEj2nBVzf)c`FvjHAQ zJzj+>(ptYjX@8!hVxvfWYT;>t(B&LB^}?esxtZS;t06G{Q9~%=IgVs0>j4eRhZHlE zTReK@FftRAbO7Q7Yb%l>9O82>O1vFBk)CZ|HRZz-RkYm^Yw-@TM zeBJKH3URT-KwNACv7rWXun{>pt>AOPXIHACb`}Zo`t~>ay4ht$g3ROZ#XT;D+VJv&f&if7ubZez6D`^FB$Yc{L{+Wi*3vS9!IAIh*;hyk$V3$g|ZH;WI<2{ z@={&ceS`UyYuum!>WZky15?r1mSuoe@AUvMIf0>P!drGh(8`>PE?>>F-!ruUq1#%l zANEb+RrCVOe(F^!+Rz-c`zzVE;dK@`0_ZbI_B-I5oj0J9@j3>LWm~ui^Zn}(YQviv ziok3Um;*saD0{p?{rM6lyUxHuP`!n`zBO9sWenChM5Mf&pDM-J3q*EsIa&Pa} z8Knd!O+r4~8I)(P*Wny~6)kc>jfAPrB%fVoGiLBXsZ!8xIOz%^Nqr5*sCs_OtL5{AsJ(=$o5gGPI!a2}&c&B)Ez z1)u7{`u@L%;qIsxIX3KN0ts4+ zv3^J$yP9CVnc2`t^%p+Ht-mt$s(Hbd-aRuJUH9$D&@t#wV@XX}e^mUOiEM-4(E4`( ze@?%=+v;2foF0x-TYxNI8}hF>@(-11ZcHIg#qTiF5?y9~Up41_f&$bvHyu|wzgm?E11s@Rx? zqt@l0M~L((-=bt8Nb;Y_5IEk1RqYnfrd~@lvPmP-EQBP9c@+g5-w(XsZzY4J(3os6 z{n8f=!n6H7S6PSC=*q9M=zGf;itnsxI5-QNX+Gm+>-{N5aOGWIJeC6BaVQuY$Zj5d z+vD1}F{RCi@&!$eXi?D25zA@J6+PN598n<(QC`88;(J>W=VKy$HCQAZJ)DWe` zYIH~fMjG{DB&z6pjci_qB3r%;8ZGeU8r0WZH37o6PdFg~tvzBYuV$}xzi#PA@ z7qRFMQ@Cw!)Ev5v+?CAs(OuezFvR<;oUNpxn~~#K?Qt>-$^UtBPh8IYwb;(Q`jb0; z=kV(**e(I!2g|C7+oi(JJur8Loje zS2iky#a|Fk9Q&6UzPlfMCkK^~_o^34184DgNF(^iNkzPC?hSBMi+UTtjTD%qZZBRS zvUw7Zd$=2fpjD)PI|t{8682~IG0Z5OF5#QY*?F??fR_pFw+#5OzbOiD(a=AqU{(UZ zQ1IUVd}ZPCdbdIeIpzwAIjv`NB%eFZBYJ!irM2bzz&~%o{NWzl5m`s$iW<7u?GX95 zDK+iqiU;7E-R_*{8=mZ!89X7yCmMkVt*+c{D3`K@khFoZm|9;KLpVp7Mv=d4mE0*q z8Vf+-u!FgF>JJj6r@eRL8sJHHDq6#2QS5Qt;{b?Av+PMDP2lwj|J8*{acmUo1^7zs zy2!PMKppO|MB&;$?qmJu?8I*u1>WOzoO}Ef8u#Tfb#mwnv~186rd#~2Mj(vtjK)d> z&0*EZ8lQYm^)}SYU{hS!Lws&Na4E(IhH{+Lod8DN)CUo1-I_ON{0Q7D8^MDFpGspA z-y*lgvOfCdZ2jjav{(E58Ib6v5I~Lz+XaA_Sg$Qxh6;3lh8k^7Q~cVQcvwD}QhVN% z4eOKbQXLPO2nu7?AGE9M~38^Bdz;UiahfK53Mdx;!73kE&DMXVQg9q zs1w(yTNpd9yhNp#d{Rt4WgsS>hHZW;w{K@u`b2Y<(x$2F#X%W&h`*uxVRH^lH0N zx4W}3TCUfrW;OhWnQF;7Csxvs_gQe$N`%yvLg(*AO7Df#_5v_S88AY3a|H?whQun= zrzYECjFYObBh8-MG_1`nTu@YzYITy45f~@nYpd@&B6YxD&9NV?veB5d7nt#!)jg2o zlR1sQrAO|AM;i&7maw3LL(n|KL63=q9WRixtl5M0E;}6}3tv4nb!a)8bNF-J_uEsBxg}OW zGY4J`+9$~e`$bXy(A1)p5 z{EpmC_7}NjZWA3O(cyRUO4H*|niX*ztJ?Hj*~kDMbG2`mDvX+lf>a7W&D$fPEiO>z zBYUB}p7JPM4mw6wzJSIJLwsG3zhRo#wNvccC3fw`(0Aie8R$*vH{dEldYofPMdudd z>NrvJqC4j z-Y{Qo0A-{zZ*!;qyps*tC-2KM{B!M(W+qv)Q}mZ&^H? zDjrUw*0;-W`m|lS0;C@N$u#aKM?oN8Wrubu+EPmJ68*_4Q46@2g-@j+G2~U5qv)%! zCm&A;GQ2!Z!CRPkG7n@5#O}r!ggs>sgg$eZBlMGpp#yMMAc2M5^$epUmfFP#9pGC8 zFw6ENC?m)G`wBxW5Xb44*~>0Z=H}Z#y2>De*Y2YNHt;Cuye*6~w+g+B4bbf$m@MT+<P)HrtRBK0VPyK8@}L+^NC6L$@%4PQ~nX1BqQ$~J$8|z@ubrJbbYcIu7*k;C$0xpxT_%1&Bn?vaajJ4oo>P_Z6WKj{_@lv=U1`xN~=6pPB zW-h>x8_E`NpaMX`)QsEGeAG}7+Ce4$_x&lA~Gwp)X$Li-U=BvSZOZf z0T1B(_dD}Ol9s`i!Du{WCQyX9fQRh0lR9n(FxHj@2n z#(C7C?|ynZ^*XW&hz?KI5VG@FoeG z&kZpS8{Sb$yWXgy=y_c!iAIe#fS#}C(JKn2S`7R_}Zd_lVED$Z_Z$Gr<8d@evz9{lQMvY-1`kCid?U< z{lzxwDh#OE404+~o(I%Vg)sZ{AO_K@`Fx7G+*z$OXd=Ak0%8648+cbA$Uk(jjH2pC zQ-!7k1D#s)5()DHS+?t29kMXI$o3IbTOt)wBOzTQmjxr#vt4mvIhBIEIE$(u?4s~UcHEYPM))4>2WXD8PC&Wr(2BBez@Eg*->dvvD6cAIOL5w-1=Q$nA_p7H5%Ws(w=x z9{mRfw@2>aDRU9VO5wAf&!X^^H;|=;#H^U!%7+Lm9{q|<9Msta8X(ywpjoANL*R#j zZF5MQ4JpC85?ymPUL#lH05x6ps1&;QC0c-1?+a$77w^s z*VB)&A-x*mGGx?dNH5RWi8gtUz!+Rd`0(-_=gRXb=u_11+f!vN479pp_Ve`<0aYtsWk}mebJ2kC4(P<^o`M z!T^EiQlBm0BBaFY#fDOI@1XEYwYUx#k&CkHb|>cpc3|Maw87J+U=Brv7o(u^_2d}j zW-Q@kR{;Jb2gD)rP-DveXDdoHd(E3Ycpq=Wq@-^Mdo4eUI&}51Ib5!Pi7i_adMo@eGL;(ux$(EZybNhv&Yt0$R9D;K z7}Dlv>XAoXJ-}bO7oE$o2t@&f+xwtPn$_2ts!$JDqbELmt6Snz@@scgcwz!Bh~mL$ z6nh~lC-%ZlY4JC(?XbM>LY4x{X9n?@3zen8Pi~fCSjuLWDuqkHir9*MP zsA})%H4Lz@b0~5h>wy%(-L2Oi?nOv|90)!2-c9Ouu=Qh(u1JN#ZlLUjmRc{Q zka{tAaJxtC1llfJt)}QD?GQ6~F=b2&#>4aaRQ7N`SaSAD^vJ5C(Kz7ay!=70p?>q- zjB&;7xR0>>7v{vc4k?zE;7{cYl0+LF4Op+Q)@Kb0dszhAl_#(=OljyZGA4Z7loMce zMh0KQ$Gna3+i{Nje?eGtjSuV=c@A8G%}PD-6!75*W=+?u3Rj#5 z29VvGDBcEPiSLmz{NgsWDPcDaa~TMmU+N@1A?Mz?8FE-%Sc(*RpSlAZD^(ZcxpzlK ze^s~67_rn6Fbu830@%mZJ8GpwcqV}zi|t@Z;7%de>mZW0dh(7Nl01U_Yvxw%N0i+S zK14%WbdW&}Mz6Szmx5UUFtXek^jERoBu(Y2Lcqd!{T16{h|9+^f8q8=8a(9)5(Zo$ z=bCn0Zpy(qY&txDTLemR(lDUYSTMgZ;vsg7l=Uk`T(n~jU*>u0?Y#=K=C!<9A?9BY z^ZyX@F9Mxkh-5D2l+t%GcEOn|@L=-zAf8@*gjeX?HEHh@oM?WnKW`tTQFWE~j`kH%QmZ&qy5WDUS6L z$9juneGJ60z7%+qx1!@sat_AzC?-BL`6Q(5+?yZ6(HeSjC5mh{b{;y|Y2gLl_@kaK zl6p{{-bY=}blx{9D&8a+W^5&==M07v8cTsbJ74Q*%zlY*1jArxH7E@8E{sZO2UP;X z#!V-WgedS9ql+p*u+(lM^J7swIN2?#kSPD=Vtn)MZj9#`y%>OX%?AFg4*Y3*&4gh; z`gF)s7MEh{!4E#~$NWSlSo0QrO`E?-SZHxWSROfxbM z_Q6Oe&pd(Rj&3K1`i`j0ar_J%gxoUqye-V3Z{xlf(Uyl}5!z%rau?D*vEi(Hz5p1L z`SvmY6R&V}>3xJ@vmw1YmQtes1p4|4O7{-bwQ?9fglvyPXr0ev?R(xEp|0;?jDa}b zjADoDAw##bTzcGOM#Sg8rBqxBf!Wo*2x-+(QF;GtU6UP|G6i#S6`MCRG1vfJMfCubdoG)TFaBB+;Gp4sLQz?aEva7nnJ9(fNi14ncnXeA z$nPG{Ro&}QsP##CUL9+OwU9B!sYH6z~%tjZAfWIH0AO&7uF_j9I+JyYic zyK1&&4c5DQYaH)JCodjO-8>-q;@mIr@Kq1f>HOmbUnq8fbP%?_)k@y<4p;8*32UH; zW(!3A{g{){;5Ic6+=9WV6HVQgUIP=%btcw!-KF^UZUp%k97Rj(!&z|Pr3geh!g!@| z2zr{^Rzf?>4=_@qZkZv&K!*F#RgmZNrr5lN$TQW^kYew21(rX%9)6HA7{;l$f@dH3^b+=b#GBwQ;N2LuOd2zrPxo8EB}d z_u=aY&g@RH&X#7vD+s!Nl1yN-!)5vujBL0cb=)34`{o`}B;tYR_`ao9`}i znEnf5eKy@eiohBi{TQOS#e7kpJGKwLIIX`6^del>4J`<7Nr_XLdPtM%V>oVp!tXPg zkJdBO?22Ba2uHtWN+a}wv>#yMqF}FqDA}W2e3DWh3mdtUJPL;)1N+ z+(W2)^%Y|NpD0nuJgiMn>uNb$hj{buZ+YQZyoAwi{8fL3006F8Ax#MBfR7O6J57$A z4`KsiwC*xS={73>p;t>>aJf;^@6LEh?e-95UUA0$jra?Vc3uk+VW_nQ@%ij{10!fh z&JBI^T!H*He*q>pon8;0Lhk!;-J|sui);2VVq>$Ap;`K%

      KRPa*8SYXZW!lS_E& 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 q_Q<`@P-6^6L7}fG$=DI-qjq&)1=w(~3cpK|CE hash mappings which must be in the // canonical chain of all remote peers. Setting the option makes geth verify the @@ -137,6 +161,7 @@ type Config struct { TrieCommitInterval uint64 // Define a block height interval, commit trie every TrieCommitInterval block height. SnapshotCache int Preimages bool + NoTries bool // This is the number of blocks for which logs will be cached in the filter system. FilterLogCacheSize int @@ -175,6 +200,10 @@ type Config struct { OverrideOptimismCanyon *uint64 `toml:",omitempty"` + OverrideOptimismEcotone *uint64 `toml:",omitempty"` + + OverrideOptimismInterop *uint64 `toml:",omitempty"` + // ApplySuperchainUpgrades requests the node to load chain-configuration from the superchain-registry. ApplySuperchainUpgrades bool `toml:",omitempty"` @@ -185,14 +214,18 @@ type Config struct { RollupDisableTxPoolAdmission bool RollupHaltOnIncompatibleProtocolVersion string - ParallelTxMode bool // Whether to execute transaction in parallel mode when do full sync - ParallelTxNum int // Number of slot for transaction execution + ParallelTxMode bool // Whether to execute transaction in parallel mode when do full sync + ParallelTxNum int // Number of slot for transaction execution + EnableOpcodeOptimizing bool } // CreateConsensusEngine creates a consensus engine for the given chain config. // Clique is allowed for now to live standalone, but ethash is forbidden and can // only exist on already merged networks. func CreateConsensusEngine(config *params.ChainConfig, db ethdb.Database) (consensus.Engine, error) { + if config.Optimism != nil { + return beacon.New(&beacon.OpLegacy{}), nil + } // If proof-of-authority is requested, set it up if config.Clique != nil { return beacon.New(clique.New(config.Clique, db)), nil diff --git a/eth/ethconfig/gen_config.go b/eth/ethconfig/gen_config.go index b006e034fd..d70729d7c6 100644 --- a/eth/ethconfig/gen_config.go +++ b/eth/ethconfig/gen_config.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/eth/gasprice" "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/trie/triedb/pathdb" ) // MarshalTOML marshals as TOML. @@ -28,7 +29,9 @@ func (c Config) MarshalTOML() (interface{}, error) { TransactionHistory uint64 `toml:",omitempty"` StateHistory uint64 `toml:",omitempty"` StateScheme string `toml:",omitempty"` - PathSyncFlush bool `toml:",omitempty"` + PathNodeBuffer pathdb.NodeBufferType `toml:",omitempty"` + ProposeBlockInterval uint64 `toml:",omitempty"` + JournalFileEnabled bool `toml:",omitempty"` RequiredBlocks map[uint64]common.Hash `toml:"-"` LightServ int `toml:",omitempty"` LightIngress int `toml:",omitempty"` @@ -46,6 +49,7 @@ func (c Config) MarshalTOML() (interface{}, error) { TrieCommitInterval uint64 SnapshotCache int Preimages bool + NoTries bool FilterLogCacheSize int Miner miner.Config TxPool legacypool.Config @@ -59,6 +63,8 @@ func (c Config) MarshalTOML() (interface{}, error) { OverrideCancun *uint64 `toml:",omitempty"` OverrideVerkle *uint64 `toml:",omitempty"` OverrideOptimismCanyon *uint64 `toml:",omitempty"` + OverrideOptimismEcotone *uint64 `toml:",omitempty"` + OverrideOptimismInterop *uint64 `toml:",omitempty"` ApplySuperchainUpgrades bool `toml:",omitempty"` RollupSequencerHTTP string RollupHistoricalRPC string @@ -66,6 +72,7 @@ func (c Config) MarshalTOML() (interface{}, error) { RollupDisableTxPoolGossip bool RollupDisableTxPoolAdmission bool RollupHaltOnIncompatibleProtocolVersion string + EnableOpcodeOptimizing bool } var enc Config enc.Genesis = c.Genesis @@ -79,7 +86,9 @@ func (c Config) MarshalTOML() (interface{}, error) { enc.TransactionHistory = c.TransactionHistory enc.StateHistory = c.StateHistory enc.StateScheme = c.StateScheme - enc.PathSyncFlush = c.PathSyncFlush + enc.PathNodeBuffer = c.PathNodeBuffer + enc.ProposeBlockInterval = c.ProposeBlockInterval + enc.JournalFileEnabled = c.JournalFileEnabled enc.RequiredBlocks = c.RequiredBlocks enc.LightServ = c.LightServ enc.LightIngress = c.LightIngress @@ -97,6 +106,7 @@ func (c Config) MarshalTOML() (interface{}, error) { enc.TrieCommitInterval = c.TrieCommitInterval enc.SnapshotCache = c.SnapshotCache enc.Preimages = c.Preimages + enc.NoTries = c.NoTries enc.FilterLogCacheSize = c.FilterLogCacheSize enc.Miner = c.Miner enc.TxPool = c.TxPool @@ -110,6 +120,8 @@ func (c Config) MarshalTOML() (interface{}, error) { enc.OverrideCancun = c.OverrideCancun enc.OverrideVerkle = c.OverrideVerkle enc.OverrideOptimismCanyon = c.OverrideOptimismCanyon + enc.OverrideOptimismEcotone = c.OverrideOptimismEcotone + enc.OverrideOptimismInterop = c.OverrideOptimismInterop enc.ApplySuperchainUpgrades = c.ApplySuperchainUpgrades enc.RollupSequencerHTTP = c.RollupSequencerHTTP enc.RollupHistoricalRPC = c.RollupHistoricalRPC @@ -117,6 +129,7 @@ func (c Config) MarshalTOML() (interface{}, error) { enc.RollupDisableTxPoolGossip = c.RollupDisableTxPoolGossip enc.RollupDisableTxPoolAdmission = c.RollupDisableTxPoolAdmission enc.RollupHaltOnIncompatibleProtocolVersion = c.RollupHaltOnIncompatibleProtocolVersion + enc.EnableOpcodeOptimizing = c.EnableOpcodeOptimizing return &enc, nil } @@ -134,7 +147,9 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { TransactionHistory *uint64 `toml:",omitempty"` StateHistory *uint64 `toml:",omitempty"` StateScheme *string `toml:",omitempty"` - PathSyncFlush *bool `toml:",omitempty"` + PathNodeBuffer *pathdb.NodeBufferType `toml:",omitempty"` + ProposeBlockInterval *uint64 `toml:",omitempty"` + JournalFileEnabled *bool `toml:",omitempty"` RequiredBlocks map[uint64]common.Hash `toml:"-"` LightServ *int `toml:",omitempty"` LightIngress *int `toml:",omitempty"` @@ -152,6 +167,7 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { TrieCommitInterval *uint64 SnapshotCache *int Preimages *bool + NoTries *bool FilterLogCacheSize *int Miner *miner.Config TxPool *legacypool.Config @@ -165,6 +181,8 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { OverrideCancun *uint64 `toml:",omitempty"` OverrideVerkle *uint64 `toml:",omitempty"` OverrideOptimismCanyon *uint64 `toml:",omitempty"` + OverrideOptimismEcotone *uint64 `toml:",omitempty"` + OverrideOptimismInterop *uint64 `toml:",omitempty"` ApplySuperchainUpgrades *bool `toml:",omitempty"` RollupSequencerHTTP *string RollupHistoricalRPC *string @@ -172,6 +190,7 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { RollupDisableTxPoolGossip *bool RollupDisableTxPoolAdmission *bool RollupHaltOnIncompatibleProtocolVersion *string + EnableOpcodeOptimizing *bool } var dec Config if err := unmarshal(&dec); err != nil { @@ -210,8 +229,14 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.StateScheme != nil { c.StateScheme = *dec.StateScheme } - if dec.PathSyncFlush != nil { - c.PathSyncFlush = *dec.PathSyncFlush + if dec.PathNodeBuffer != nil { + c.PathNodeBuffer = *dec.PathNodeBuffer + } + if dec.ProposeBlockInterval != nil { + c.ProposeBlockInterval = *dec.ProposeBlockInterval + } + if dec.JournalFileEnabled != nil { + c.JournalFileEnabled = *dec.JournalFileEnabled } if dec.RequiredBlocks != nil { c.RequiredBlocks = dec.RequiredBlocks @@ -264,6 +289,9 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.Preimages != nil { c.Preimages = *dec.Preimages } + if dec.NoTries != nil { + c.NoTries = *dec.NoTries + } if dec.FilterLogCacheSize != nil { c.FilterLogCacheSize = *dec.FilterLogCacheSize } @@ -303,6 +331,12 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.OverrideOptimismCanyon != nil { c.OverrideOptimismCanyon = dec.OverrideOptimismCanyon } + if dec.OverrideOptimismEcotone != nil { + c.OverrideOptimismEcotone = dec.OverrideOptimismEcotone + } + if dec.OverrideOptimismInterop != nil { + c.OverrideOptimismInterop = dec.OverrideOptimismInterop + } if dec.ApplySuperchainUpgrades != nil { c.ApplySuperchainUpgrades = *dec.ApplySuperchainUpgrades } @@ -324,5 +358,8 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.RollupHaltOnIncompatibleProtocolVersion != nil { c.RollupHaltOnIncompatibleProtocolVersion = *dec.RollupHaltOnIncompatibleProtocolVersion } + if dec.EnableOpcodeOptimizing != nil { + c.EnableOpcodeOptimizing = *dec.EnableOpcodeOptimizing + } return nil } diff --git a/eth/fetcher/block_fetcher.go b/eth/fetcher/block_fetcher.go index 8751c4e3ea..126eaaea7f 100644 --- a/eth/fetcher/block_fetcher.go +++ b/eth/fetcher/block_fetcher.go @@ -483,7 +483,7 @@ func (f *BlockFetcher) loop() { select { case res := <-resCh: res.Done <- nil - f.FilterHeaders(peer, *res.Res.(*eth.BlockHeadersRequest), time.Now().Add(res.Time)) + f.FilterHeaders(peer, *res.Res.(*eth.BlockHeadersRequest), time.Now()) case <-timeout.C: // The peer didn't respond in time. The request diff --git a/eth/fetcher/tx_fetcher.go b/eth/fetcher/tx_fetcher.go index 0bc01b793f..7dc4cd5f37 100644 --- a/eth/fetcher/tx_fetcher.go +++ b/eth/fetcher/tx_fetcher.go @@ -366,7 +366,7 @@ func (f *TxFetcher) Enqueue(peer string, txs []*types.Transaction, direct bool) // If 'other reject' is >25% of the deliveries in any batch, sleep a bit. if otherreject > 128/4 { time.Sleep(200 * time.Millisecond) - log.Warn("Peer delivering stale transactions", "peer", peer, "rejected", otherreject) + log.Debug("Peer delivering stale transactions", "peer", peer, "rejected", otherreject) } } select { diff --git a/eth/fetcher/tx_fetcher_test.go b/eth/fetcher/tx_fetcher_test.go index 77b89085d3..4a62e579b6 100644 --- a/eth/fetcher/tx_fetcher_test.go +++ b/eth/fetcher/tx_fetcher_test.go @@ -186,7 +186,7 @@ func TestTransactionFetcherWaiting(t *testing.T) { // waitlist, and none of them are scheduled for retrieval until the wait expires. // // This test is an extended version of TestTransactionFetcherWaiting. It's mostly -// to cover the metadata checkes without bloating up the basic behavioral tests +// to cover the metadata checks without bloating up the basic behavioral tests // with all the useless extra fields. func TestTransactionFetcherWaitingWithMeta(t *testing.T) { testTransactionFetcherParallel(t, txFetcherTest{ @@ -1030,7 +1030,7 @@ func TestTransactionFetcherRateLimiting(t *testing.T) { } // Tests that if huge transactions are announced, only a small number of them will -// be requested at a time, to keep the responses below a resonable level. +// be requested at a time, to keep the responses below a reasonable level. func TestTransactionFetcherBandwidthLimiting(t *testing.T) { testTransactionFetcherParallel(t, txFetcherTest{ init: func() *TxFetcher { diff --git a/eth/filters/api.go b/eth/filters/api.go index cc08b442e8..a4eaa9cec8 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -34,10 +34,15 @@ import ( ) var ( - errInvalidTopic = errors.New("invalid topic(s)") - errFilterNotFound = errors.New("filter not found") + errInvalidTopic = errors.New("invalid topic(s)") + errFilterNotFound = errors.New("filter not found") + errInvalidBlockRange = errors.New("invalid block range params") + errExceedMaxTopics = errors.New("exceed max topics") ) +// The maximum number of topic criteria allowed, vm.LOG4 - vm.LOG0 +const maxTopics = 4 + // filter is a helper struct that holds meta information over the filter type // and associated subscription in the event system. type filter struct { @@ -333,6 +338,9 @@ func (api *FilterAPI) NewFilter(crit FilterCriteria) (rpc.ID, error) { // GetLogs returns logs matching the given argument that are stored within the state. func (api *FilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([]*types.Log, error) { + if len(crit.Topics) > maxTopics { + return nil, errExceedMaxTopics + } var filter *Filter if crit.BlockHash != nil { // Block filter requested, construct a single-shot filter @@ -347,6 +355,9 @@ func (api *FilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([]*type if crit.ToBlock != nil { end = crit.ToBlock.Int64() } + if begin > 0 && end > 0 && begin > end { + return nil, errInvalidBlockRange + } // Construct the range filter filter = api.sys.NewRangeFilter(begin, end, crit.Addresses, crit.Topics) } diff --git a/eth/filters/filter.go b/eth/filters/filter.go index a5750c1934..83e3284a2b 100644 --- a/eth/filters/filter.go +++ b/eth/filters/filter.go @@ -114,7 +114,7 @@ func (f *Filter) Logs(ctx context.Context) ([]*types.Log, error) { // special case for pending logs if beginPending && !endPending { - return nil, errors.New("invalid block range") + return nil, errInvalidBlockRange } // Short-cut if all we care about is pending logs diff --git a/eth/filters/filter_system.go b/eth/filters/filter_system.go index 35e396c23e..f98a1f84ce 100644 --- a/eth/filters/filter_system.go +++ b/eth/filters/filter_system.go @@ -20,7 +20,6 @@ package filters import ( "context" - "errors" "fmt" "sync" "sync/atomic" @@ -300,6 +299,9 @@ func (es *EventSystem) subscribe(sub *subscription) *Subscription { // given criteria to the given logs channel. Default value for the from and to // block is "latest". If the fromBlock > toBlock an error is returned. func (es *EventSystem) SubscribeLogs(crit ethereum.FilterQuery, logs chan []*types.Log) (*Subscription, error) { + if len(crit.Topics) > maxTopics { + return nil, errExceedMaxTopics + } var from, to rpc.BlockNumber if crit.FromBlock == nil { from = rpc.LatestBlockNumber @@ -332,7 +334,7 @@ func (es *EventSystem) SubscribeLogs(crit ethereum.FilterQuery, logs chan []*typ if from >= 0 && to == rpc.LatestBlockNumber { return es.subscribeLogs(crit, logs), nil } - return nil, errors.New("invalid from and to block combination: from > to") + return nil, errInvalidBlockRange } // subscribeMinedPendingLogs creates a subscription that returned mined and diff --git a/eth/filters/filter_system_test.go b/eth/filters/filter_system_test.go index b5d716ae59..27cad8826a 100644 --- a/eth/filters/filter_system_test.go +++ b/eth/filters/filter_system_test.go @@ -386,6 +386,8 @@ func TestLogFilterCreation(t *testing.T) { {FilterCriteria{FromBlock: big.NewInt(rpc.PendingBlockNumber.Int64()), ToBlock: big.NewInt(100)}, false}, // from block "higher" than to block {FilterCriteria{FromBlock: big.NewInt(rpc.PendingBlockNumber.Int64()), ToBlock: big.NewInt(rpc.LatestBlockNumber.Int64())}, false}, + // topics more then 4 + {FilterCriteria{Topics: [][]common.Hash{{}, {}, {}, {}, {}}}, false}, } ) @@ -420,6 +422,7 @@ func TestInvalidLogFilterCreation(t *testing.T) { 0: {FromBlock: big.NewInt(rpc.PendingBlockNumber.Int64()), ToBlock: big.NewInt(rpc.LatestBlockNumber.Int64())}, 1: {FromBlock: big.NewInt(rpc.PendingBlockNumber.Int64()), ToBlock: big.NewInt(100)}, 2: {FromBlock: big.NewInt(rpc.LatestBlockNumber.Int64()), ToBlock: big.NewInt(100)}, + 3: {Topics: [][]common.Hash{{}, {}, {}, {}, {}}}, } for i, test := range testCases { @@ -429,7 +432,10 @@ func TestInvalidLogFilterCreation(t *testing.T) { } } +// TestLogFilterUninstall tests invalid getLogs requests func TestInvalidGetLogsRequest(t *testing.T) { + t.Parallel() + var ( db = rawdb.NewMemoryDatabase() _, sys = newTestFilterSystem(t, db, Config{}) @@ -442,6 +448,7 @@ func TestInvalidGetLogsRequest(t *testing.T) { 0: {BlockHash: &blockHash, FromBlock: big.NewInt(100)}, 1: {BlockHash: &blockHash, ToBlock: big.NewInt(500)}, 2: {BlockHash: &blockHash, FromBlock: big.NewInt(rpc.LatestBlockNumber.Int64())}, + 3: {BlockHash: &blockHash, Topics: [][]common.Hash{{}, {}, {}, {}, {}}}, } for i, test := range testCases { @@ -451,6 +458,21 @@ func TestInvalidGetLogsRequest(t *testing.T) { } } +// TestInvalidGetRangeLogsRequest tests getLogs with invalid block range +func TestInvalidGetRangeLogsRequest(t *testing.T) { + t.Parallel() + + var ( + db = rawdb.NewMemoryDatabase() + _, sys = newTestFilterSystem(t, db, Config{}) + api = NewFilterAPI(sys, false) + ) + + if _, err := api.GetLogs(context.Background(), FilterCriteria{FromBlock: big.NewInt(2), ToBlock: big.NewInt(1)}); err != errInvalidBlockRange { + t.Errorf("Expected Logs for invalid range return error, but got: %v", err) + } +} + // TestLogFilter tests whether log filters match the correct logs that are posted to the event feed. func TestLogFilter(t *testing.T) { t.Parallel() @@ -915,10 +937,14 @@ func TestPendingTxFilterDeadlock(t *testing.T) { // Create a bunch of filters that will // timeout either in 100ms or 200ms - fids := make([]rpc.ID, 20) - for i := 0; i < len(fids); i++ { + subs := make([]*Subscription, 20) + for i := 0; i < len(subs); i++ { fid := api.NewPendingTransactionFilter(nil) - fids[i] = fid + f, ok := api.filters[fid] + if !ok { + t.Fatalf("Filter %s should exist", fid) + } + subs[i] = f.s // Wait for at least one tx to arrive in filter for { hashes, err := api.GetFilterChanges(fid) @@ -932,21 +958,13 @@ func TestPendingTxFilterDeadlock(t *testing.T) { } } - // Wait until filters have timed out - time.Sleep(3 * timeout) - - // If tx loop doesn't consume `done` after a second - // it's hanging. - select { - case done <- struct{}{}: - // Check that all filters have been uninstalled - for _, fid := range fids { - if _, err := api.GetFilterChanges(fid); err == nil { - t.Errorf("Filter %s should have been uninstalled\n", fid) - } + // Wait until filters have timed out and have been uninstalled. + for _, sub := range subs { + select { + case <-sub.Err(): + case <-time.After(1 * time.Second): + t.Fatalf("Filter timeout is hanging") } - case <-time.After(1 * time.Second): - t.Error("Tx sending loop hangs") } } diff --git a/eth/filters/filter_test.go b/eth/filters/filter_test.go index 91d3c2a18e..87b0bee374 100644 --- a/eth/filters/filter_test.go +++ b/eth/filters/filter_test.go @@ -123,35 +123,35 @@ func TestFilters(t *testing.T) { pragma solidity >=0.7.0 <0.9.0; contract Logger { - function log0() external { - assembly { - log0(0, 0) - } - } + function log0() external { + assembly { + log0(0, 0) + } + } - function log1(uint t1) external { - assembly { - log1(0, 0, t1) - } - } + function log1(uint t1) external { + assembly { + log1(0, 0, t1) + } + } - function log2(uint t1, uint t2) external { - assembly { - log2(0, 0, t1, t2) - } - } + function log2(uint t1, uint t2) external { + assembly { + log2(0, 0, t1, t2) + } + } - function log3(uint t1, uint t2, uint t3) external { - assembly { - log3(0, 0, t1, t2, t3) - } - } + function log3(uint t1, uint t2, uint t3) external { + assembly { + log3(0, 0, t1, t2, t3) + } + } - function log4(uint t1, uint t2, uint t3, uint t4) external { - assembly { - log4(0, 0, t1, t2, t3, t4) - } - } + function log4(uint t1, uint t2, uint t3, uint t4) external { + assembly { + log4(0, 0, t1, t2, t3, t4) + } + } } */ bytecode = common.FromHex("608060405234801561001057600080fd5b50600436106100575760003560e01c80630aa731851461005c5780632a4c08961461006657806378b9a1f314610082578063c670f8641461009e578063c683d6a3146100ba575b600080fd5b6100646100d6565b005b610080600480360381019061007b9190610143565b6100dc565b005b61009c60048036038101906100979190610196565b6100e8565b005b6100b860048036038101906100b391906101d6565b6100f2565b005b6100d460048036038101906100cf9190610203565b6100fa565b005b600080a0565b808284600080a3505050565b8082600080a25050565b80600080a150565b80828486600080a450505050565b600080fd5b6000819050919050565b6101208161010d565b811461012b57600080fd5b50565b60008135905061013d81610117565b92915050565b60008060006060848603121561015c5761015b610108565b5b600061016a8682870161012e565b935050602061017b8682870161012e565b925050604061018c8682870161012e565b9150509250925092565b600080604083850312156101ad576101ac610108565b5b60006101bb8582860161012e565b92505060206101cc8582860161012e565b9150509250929050565b6000602082840312156101ec576101eb610108565b5b60006101fa8482850161012e565b91505092915050565b6000806000806080858703121561021d5761021c610108565b5b600061022b8782880161012e565b945050602061023c8782880161012e565b935050604061024d8782880161012e565b925050606061025e8782880161012e565b9150509295919450925056fea264697066735822122073a4b156f487e59970dc1ef449cc0d51467268f676033a17188edafcee861f9864736f6c63430008110033") @@ -287,55 +287,73 @@ func TestFilters(t *testing.T) { { f: sys.NewBlockFilter(chain[2].Hash(), []common.Address{contract}, nil), want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","logIndex":"0x0","removed":false}]`, - }, { + }, + { f: sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), []common.Address{contract}, [][]common.Hash{{hash1, hash2, hash3, hash4}}), want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0xa8028c655b6423204c8edfbc339f57b042d6bec2b6a61145d76b7c08b4cccd42","transactionIndex":"0x0","blockHash":"0x24417bb49ce44cfad65da68f33b510bf2a129c0d89ccf06acb6958b8585ccf34","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","logIndex":"0x0","removed":false}]`, - }, { + }, + { f: sys.NewRangeFilter(900, 999, []common.Address{contract}, [][]common.Hash{{hash3}}), - }, { + }, + { f: sys.NewRangeFilter(990, int64(rpc.LatestBlockNumber), []common.Address{contract2}, [][]common.Hash{{hash3}}), want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","logIndex":"0x0","removed":false}]`, - }, { + }, + { f: sys.NewRangeFilter(1, 10, []common.Address{contract}, [][]common.Hash{{hash2}, {hash1}}), want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","logIndex":"0x0","removed":false}]`, - }, { + }, + { f: sys.NewRangeFilter(1, 10, nil, [][]common.Hash{{hash1, hash2}}), want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0xa8028c655b6423204c8edfbc339f57b042d6bec2b6a61145d76b7c08b4cccd42","transactionIndex":"0x0","blockHash":"0x24417bb49ce44cfad65da68f33b510bf2a129c0d89ccf06acb6958b8585ccf34","logIndex":"0x0","removed":false},{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x2","transactionHash":"0xdba3e2ea9a7d690b722d70ee605fd67ba4c00d1d3aecd5cf187a7b92ad8eb3df","transactionIndex":"0x1","blockHash":"0x24417bb49ce44cfad65da68f33b510bf2a129c0d89ccf06acb6958b8585ccf34","logIndex":"0x1","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696332","0x0000000000000000000000000000000000000000000000000000746f70696331"],"data":"0x","blockNumber":"0x3","transactionHash":"0xdefe471992a07a02acdfbe33edaae22fbb86d7d3cec3f1b8e4e77702fb3acc1d","transactionIndex":"0x0","blockHash":"0x7a7556792ca7d37882882e2b001fe14833eaf81c2c7f865c9c771ec37a024f6b","logIndex":"0x0","removed":false}]`, - }, { + }, + { f: sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), nil, [][]common.Hash{{common.BytesToHash([]byte("fail"))}}), - }, { + }, + { f: sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), []common.Address{common.BytesToAddress([]byte("failmenow"))}, nil), - }, { + }, + { f: sys.NewRangeFilter(0, int64(rpc.LatestBlockNumber), nil, [][]common.Hash{{common.BytesToHash([]byte("fail"))}, {hash1}}), - }, { + }, + { f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.LatestBlockNumber), nil, nil), want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","logIndex":"0x0","removed":false}]`, - }, { + }, + { f: sys.NewRangeFilter(int64(rpc.FinalizedBlockNumber), int64(rpc.LatestBlockNumber), nil, nil), want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","logIndex":"0x0","removed":false}]`, - }, { + }, + { f: sys.NewRangeFilter(int64(rpc.FinalizedBlockNumber), int64(rpc.FinalizedBlockNumber), nil, nil), want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","logIndex":"0x0","removed":false}]`, - }, { + }, + { f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.FinalizedBlockNumber), nil, nil), - }, { + }, + { f: sys.NewRangeFilter(int64(rpc.SafeBlockNumber), int64(rpc.LatestBlockNumber), nil, nil), err: "safe header not found", - }, { + }, + { f: sys.NewRangeFilter(int64(rpc.SafeBlockNumber), int64(rpc.SafeBlockNumber), nil, nil), err: "safe header not found", - }, { + }, + { f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.SafeBlockNumber), nil, nil), err: "safe header not found", - }, { + }, + { f: sys.NewRangeFilter(int64(rpc.PendingBlockNumber), int64(rpc.PendingBlockNumber), nil, nil), - want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0x4110587c1b8d86edc85dce929a34127f1cb8809515a9f177c91c866de3eb0638","transactionIndex":"0x0","blockHash":"0xc7245899e5817f16fa99cf5ad2d9c1e4b98443a565a673ec9c764640443ef037","logIndex":"0x0","removed":false}]`, - }, { + want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0x4110587c1b8d86edc85dce929a34127f1cb8809515a9f177c91c866de3eb0638","transactionIndex":"0x0","blockHash":"0xd5e8d4e4eb51a2a2a6ec20ef68a4c2801240743c8deb77a6a1d118ac3eefb725","logIndex":"0x0","removed":false}]`, + }, + { f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.PendingBlockNumber), nil, nil), - want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0x4110587c1b8d86edc85dce929a34127f1cb8809515a9f177c91c866de3eb0638","transactionIndex":"0x0","blockHash":"0xc7245899e5817f16fa99cf5ad2d9c1e4b98443a565a673ec9c764640443ef037","logIndex":"0x0","removed":false}]`, - }, { + want: `[{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696334"],"data":"0x","blockNumber":"0x3e8","transactionHash":"0x9a87842100a638dfa5da8842b4beda691d2fd77b0c84b57f24ecfa9fb208f747","transactionIndex":"0x0","blockHash":"0xb360bad5265261c075ece02d3bf0e39498a6a76310482cdfd90588748e6c5ee0","logIndex":"0x0","removed":false},{"address":"0xfe00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696335"],"data":"0x","blockNumber":"0x3e9","transactionHash":"0x4110587c1b8d86edc85dce929a34127f1cb8809515a9f177c91c866de3eb0638","transactionIndex":"0x0","blockHash":"0xd5e8d4e4eb51a2a2a6ec20ef68a4c2801240743c8deb77a6a1d118ac3eefb725","logIndex":"0x0","removed":false}]`, + }, + { f: sys.NewRangeFilter(int64(rpc.PendingBlockNumber), int64(rpc.LatestBlockNumber), nil, nil), - err: "invalid block range", + err: errInvalidBlockRange.Error(), }, } { logs, err := tc.f.Logs(context.Background()) diff --git a/eth/gasestimator/gasestimator.go b/eth/gasestimator/gasestimator.go new file mode 100644 index 0000000000..734b47c73f --- /dev/null +++ b/eth/gasestimator/gasestimator.go @@ -0,0 +1,235 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package gasestimator + +import ( + "context" + "errors" + "fmt" + "math" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" +) + +// Options are the contextual parameters to execute the requested call. +// +// Whilst it would be possible to pass a blockchain object that aggregates all +// these together, it would be excessively hard to test. Splitting the parts out +// allows testing without needing a proper live chain. +type Options struct { + Config *params.ChainConfig // Chain configuration for hard fork selection + Chain core.ChainContext // Chain context to access past block hashes + Header *types.Header // Header defining the block context to execute in + State *state.StateDB // Pre-state on top of which to estimate the gas + + ErrorRatio float64 // Allowed overestimation ratio for faster estimation termination +} + +// Estimate returns the lowest possible gas limit that allows the transaction to +// run successfully with the provided context options. It returns an error if the +// transaction would always revert, or if there are unexpected failures. +func Estimate(ctx context.Context, call *core.Message, opts *Options, gasCap uint64) (uint64, []byte, error) { + // Binary search the gas limit, as it may need to be higher than the amount used + var ( + lo uint64 // lowest-known gas limit where tx execution fails + hi uint64 // lowest-known gas limit where tx execution succeeds + ) + // Determine the highest gas limit can be used during the estimation. + hi = opts.Header.GasLimit + if call.GasLimit >= params.TxGas { + hi = call.GasLimit + } + // Normalize the max fee per gas the call is willing to spend. + var feeCap *big.Int + if call.GasFeeCap != nil { + feeCap = call.GasFeeCap + } else if call.GasPrice != nil { + feeCap = call.GasPrice + } else { + feeCap = common.Big0 + } + // Recap the highest gas limit with account's available balance. + if feeCap.BitLen() != 0 { + balance := opts.State.GetBalance(call.From) + + available := new(big.Int).Set(balance) + if call.Value != nil { + if call.Value.Cmp(available) >= 0 { + return 0, nil, core.ErrInsufficientFundsForTransfer + } + available.Sub(available, call.Value) + } + allowance := new(big.Int).Div(available, feeCap) + + // If the allowance is larger than maximum uint64, skip checking + if allowance.IsUint64() && hi > allowance.Uint64() { + transfer := call.Value + if transfer == nil { + transfer = new(big.Int) + } + log.Debug("Gas estimation capped by limited funds", "original", hi, "balance", balance, + "sent", transfer, "maxFeePerGas", feeCap, "fundable", allowance) + hi = allowance.Uint64() + } + } + // Recap the highest gas allowance with specified gascap. + if gasCap != 0 && hi > gasCap { + log.Debug("Caller gas above allowance, capping", "requested", hi, "cap", gasCap) + hi = gasCap + } + // If the transaction is a plain value transfer, short circuit estimation and + // directly try 21000. Returning 21000 without any execution is dangerous as + // some tx field combos might bump the price up even for plain transfers (e.g. + // unused access list items). Ever so slightly wasteful, but safer overall. + if len(call.Data) == 0 { + if call.To != nil && opts.State.GetCodeSize(*call.To) == 0 { + failed, _, err := execute(ctx, call, opts, params.TxGas) + if !failed && err == nil { + return params.TxGas, nil, nil + } + } + } + // We first execute the transaction at the highest allowable gas limit, since if this fails we + // can return error immediately. + failed, result, err := execute(ctx, call, opts, hi) + if err != nil { + return 0, nil, err + } + if failed { + if result != nil && !errors.Is(result.Err, vm.ErrOutOfGas) { + return 0, result.Revert(), result.Err + } + return 0, nil, fmt.Errorf("gas required exceeds allowance (%d)", hi) + } + // For almost any transaction, the gas consumed by the unconstrained execution + // above lower-bounds the gas limit required for it to succeed. One exception + // is those that explicitly check gas remaining in order to execute within a + // given limit, but we probably don't want to return the lowest possible gas + // limit for these cases anyway. + lo = result.UsedGas - 1 + + // There's a fairly high chance for the transaction to execute successfully + // with gasLimit set to the first execution's usedGas + gasRefund. Explicitly + // check that gas amount and use as a limit for the binary search. + optimisticGasLimit := (result.UsedGas + result.RefundedGas + params.CallStipend) * 64 / 63 + if optimisticGasLimit < hi { + failed, _, err = execute(ctx, call, opts, optimisticGasLimit) + if err != nil { + // This should not happen under normal conditions since if we make it this far the + // transaction had run without error at least once before. + log.Error("Execution error in estimate gas", "err", err) + return 0, nil, err + } + if failed { + lo = optimisticGasLimit + } else { + hi = optimisticGasLimit + } + } + // Binary search for the smallest gas limit that allows the tx to execute successfully. + for lo+1 < hi { + if opts.ErrorRatio > 0 { + // It is a bit pointless to return a perfect estimation, as changing + // network conditions require the caller to bump it up anyway. Since + // wallets tend to use 20-25% bump, allowing a small approximation + // error is fine (as long as it's upwards). + if float64(hi-lo)/float64(hi) < opts.ErrorRatio { + break + } + } + mid := (hi + lo) / 2 + if mid > lo*2 { + // Most txs don't need much higher gas limit than their gas used, and most txs don't + // require near the full block limit of gas, so the selection of where to bisect the + // range here is skewed to favor the low side. + mid = lo * 2 + } + failed, _, err = execute(ctx, call, opts, mid) + if err != nil { + // This should not happen under normal conditions since if we make it this far the + // transaction had run without error at least once before. + log.Error("Execution error in estimate gas", "err", err) + return 0, nil, err + } + if failed { + lo = mid + } else { + hi = mid + } + } + return hi, nil, nil +} + +// execute is a helper that executes the transaction under a given gas limit and +// returns true if the transaction fails for a reason that might be related to +// not enough gas. A non-nil error means execution failed due to reasons unrelated +// to the gas limit. +func execute(ctx context.Context, call *core.Message, opts *Options, gasLimit uint64) (bool, *core.ExecutionResult, error) { + // Configure the call for this specific execution (and revert the change after) + defer func(gas uint64) { call.GasLimit = gas }(call.GasLimit) + call.GasLimit = gasLimit + + // Execute the call and separate execution faults caused by a lack of gas or + // other non-fixable conditions + result, err := run(ctx, call, opts) + if err != nil { + if errors.Is(err, core.ErrIntrinsicGas) { + return true, nil, nil // Special case, raise gas limit + } + return true, nil, err // Bail out + } + return result.Failed(), result, nil +} + +// run assembles the EVM as defined by the consensus rules and runs the requested +// call invocation. +func run(ctx context.Context, call *core.Message, opts *Options) (*core.ExecutionResult, error) { + // Assemble the call and the call context + var ( + msgContext = core.NewEVMTxContext(call) + evmContext = core.NewEVMBlockContext(opts.Header, opts.Chain, nil, opts.Config, opts.State) + + dirtyState = opts.State.Copy() + evm = vm.NewEVM(evmContext, msgContext, dirtyState, opts.Config, vm.Config{NoBaseFee: true}) + ) + // Monitor the outer context and interrupt the EVM upon cancellation. To avoid + // a dangling goroutine until the outer estimation finishes, create an internal + // context for the lifetime of this method call. + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + go func() { + <-ctx.Done() + evm.Cancel() + }() + // Execute the call, returning a wrapped error or the result + result, err := core.ApplyMessage(evm, call, new(core.GasPool).AddGas(math.MaxUint64)) + if vmerr := dirtyState.Error(); vmerr != nil { + return nil, vmerr + } + if err != nil { + return result, fmt.Errorf("failed with %d gas: %w", call.GasLimit, err) + } + return result, nil +} diff --git a/eth/handler.go b/eth/handler.go index d04f47ce92..2a5580e579 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -173,7 +173,7 @@ func newHandler(config *handlerConfig) (*handler, error) { if fullBlock.Number.Uint64() == 0 && snapBlock.Number.Uint64() > 0 { h.snapSync.Store(true) log.Warn("Switch sync mode from full sync to snap sync", "reason", "snap sync incomplete") - } else if !h.chain.HasState(fullBlock.Root) { + } else if !h.chain.NoTries() && !h.chain.HasState(fullBlock.Root) { h.snapSync.Store(true) log.Warn("Switch sync mode from full sync to snap sync", "reason", "head state missing") } @@ -189,8 +189,18 @@ func newHandler(config *handlerConfig) (*handler, error) { log.Info("Enabled snap sync", "head", head.Number, "hash", head.Hash()) } } + // If snap sync is requested but snapshots are disabled, fail loudly + if h.snapSync.Load() && config.Chain.Snapshots() == nil { + return nil, errors.New("snap sync not supported with snapshots disabled") + } + // if the chainID is set, pass it to the downloader for use in sync + // this might not be set in tests + var chainID uint64 + if cid := h.chain.Config().ChainID; cid != nil { + chainID = cid.Uint64() + } // Construct the downloader (long sync) - h.downloader = downloader.New(config.Database, h.eventMux, h.chain, nil, h.removePeer, h.enableSyncedFeatures) + h.downloader = downloader.New(config.Database, h.eventMux, h.chain, nil, h.removePeer, h.enableSyncedFeatures, chainID) if ttd := h.chain.Config().TerminalTotalDifficulty; ttd != nil { if h.chain.Config().TerminalTotalDifficultyPassed { log.Info("Chain post-merge, sync via beacon client") diff --git a/eth/protocols/eth/dispatcher.go b/eth/protocols/eth/dispatcher.go index 3f81e045ba..ae98820cd6 100644 --- a/eth/protocols/eth/dispatcher.go +++ b/eth/protocols/eth/dispatcher.go @@ -41,7 +41,7 @@ var ( // Request is a pending request to allow tracking it and delivering a response // back to the requester on their chosen channel. type Request struct { - peer *Peer // Peer to which this request belogs for untracking + peer *Peer // Peer to which this request belongs for untracking id uint64 // Request ID to match up replies to sink chan *Response // Channel to deliver the response on @@ -224,7 +224,7 @@ func (p *Peer) dispatcher() { switch { case res.Req == nil: // Response arrived with an untracked ID. Since even cancelled - // requests are tracked until fulfilment, a dangling response + // requests are tracked until fulfillment, a dangling response // means the remote peer implements the protocol badly. resOp.fail <- errDanglingResponse diff --git a/eth/protocols/eth/peer.go b/eth/protocols/eth/peer.go index 938af0cab0..98ad22a8cf 100644 --- a/eth/protocols/eth/peer.go +++ b/eth/protocols/eth/peer.go @@ -84,7 +84,7 @@ type Peer struct { txBroadcast chan []common.Hash // Channel used to queue transaction propagation requests txAnnounce chan []common.Hash // Channel used to queue transaction announcement requests - reqDispatch chan *request // Dispatch channel to send requests and track then until fulfilment + reqDispatch chan *request // Dispatch channel to send requests and track then until fulfillment reqCancel chan *cancel // Dispatch channel to cancel pending requests and untrack them resDispatch chan *response // Dispatch channel to fulfil pending requests and untrack them diff --git a/tests/fuzzers/snap/fuzz_handler.go b/eth/protocols/snap/handler_fuzzing_test.go similarity index 75% rename from tests/fuzzers/snap/fuzz_handler.go rename to eth/protocols/snap/handler_fuzzing_test.go index 784b526dc0..daed7ed44a 100644 --- a/tests/fuzzers/snap/fuzz_handler.go +++ b/eth/protocols/snap/handler_fuzzing_test.go @@ -21,6 +21,7 @@ import ( "encoding/binary" "fmt" "math/big" + "testing" "time" "github.com/ethereum/go-ethereum/common" @@ -28,7 +29,6 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/eth/protocols/snap" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/params" @@ -36,6 +36,56 @@ import ( fuzz "github.com/google/gofuzz" ) +func FuzzARange(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + doFuzz(data, &GetAccountRangePacket{}, GetAccountRangeMsg) + }) +} + +func FuzzSRange(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + doFuzz(data, &GetStorageRangesPacket{}, GetStorageRangesMsg) + }) +} + +func FuzzByteCodes(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + doFuzz(data, &GetByteCodesPacket{}, GetByteCodesMsg) + }) +} + +func FuzzTrieNodes(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + doFuzz(data, &GetTrieNodesPacket{}, GetTrieNodesMsg) + }) +} + +func doFuzz(input []byte, obj interface{}, code int) { + bc := getChain() + defer bc.Stop() + fuzz.NewFromGoFuzz(input).Fuzz(obj) + var data []byte + switch p := obj.(type) { + case *GetTrieNodesPacket: + p.Root = trieRoot + data, _ = rlp.EncodeToBytes(obj) + default: + data, _ = rlp.EncodeToBytes(obj) + } + cli := &dummyRW{ + code: uint64(code), + data: data, + } + peer := NewFakePeer(65, "gazonk01", cli) + err := HandleMessage(&dummyBackend{bc}, peer) + switch { + case err == nil && cli.writeCount != 1: + panic(fmt.Sprintf("Expected 1 response, got %d", cli.writeCount)) + case err != nil && cli.writeCount != 0: + panic(fmt.Sprintf("Expected 0 response, got %d", cli.writeCount)) + } +} + var trieRoot common.Hash func getChain() *core.BlockChain { @@ -86,10 +136,10 @@ type dummyBackend struct { chain *core.BlockChain } -func (d *dummyBackend) Chain() *core.BlockChain { return d.chain } -func (d *dummyBackend) RunPeer(*snap.Peer, snap.Handler) error { return nil } -func (d *dummyBackend) PeerInfo(enode.ID) interface{} { return "Foo" } -func (d *dummyBackend) Handle(*snap.Peer, snap.Packet) error { return nil } +func (d *dummyBackend) Chain() *core.BlockChain { return d.chain } +func (d *dummyBackend) RunPeer(*Peer, Handler) error { return nil } +func (d *dummyBackend) PeerInfo(enode.ID) interface{} { return "Foo" } +func (d *dummyBackend) Handle(*Peer, Packet) error { return nil } type dummyRW struct { code uint64 @@ -110,51 +160,3 @@ func (d *dummyRW) WriteMsg(msg p2p.Msg) error { d.writeCount++ return nil } - -func doFuzz(input []byte, obj interface{}, code int) int { - if len(input) > 1024*4 { - return -1 - } - bc := getChain() - defer bc.Stop() - backend := &dummyBackend{bc} - fuzz.NewFromGoFuzz(input).Fuzz(obj) - var data []byte - switch p := obj.(type) { - case *snap.GetTrieNodesPacket: - p.Root = trieRoot - data, _ = rlp.EncodeToBytes(obj) - default: - data, _ = rlp.EncodeToBytes(obj) - } - cli := &dummyRW{ - code: uint64(code), - data: data, - } - peer := snap.NewFakePeer(65, "gazonk01", cli) - err := snap.HandleMessage(backend, peer) - switch { - case err == nil && cli.writeCount != 1: - panic(fmt.Sprintf("Expected 1 response, got %d", cli.writeCount)) - case err != nil && cli.writeCount != 0: - panic(fmt.Sprintf("Expected 0 response, got %d", cli.writeCount)) - } - return 1 -} - -// To run a fuzzer, do -// $ CGO_ENABLED=0 go-fuzz-build -func FuzzTrieNodes -// $ go-fuzz - -func FuzzARange(input []byte) int { - return doFuzz(input, &snap.GetAccountRangePacket{}, snap.GetAccountRangeMsg) -} -func FuzzSRange(input []byte) int { - return doFuzz(input, &snap.GetStorageRangesPacket{}, snap.GetStorageRangesMsg) -} -func FuzzByteCodes(input []byte) int { - return doFuzz(input, &snap.GetByteCodesPacket{}, snap.GetByteCodesMsg) -} -func FuzzTrieNodes(input []byte) int { - return doFuzz(input, &snap.GetTrieNodesPacket{}, snap.GetTrieNodesMsg) -} diff --git a/eth/protocols/snap/metrics.go b/eth/protocols/snap/metrics.go index a9f35ca447..a7d071953f 100644 --- a/eth/protocols/snap/metrics.go +++ b/eth/protocols/snap/metrics.go @@ -26,4 +26,32 @@ var ( IngressRegistrationErrorMeter = metrics.NewRegisteredMeter(ingressRegistrationErrorName, nil) EgressRegistrationErrorMeter = metrics.NewRegisteredMeter(egressRegistrationErrorName, nil) + + // deletionGauge is the metric to track how many trie node deletions + // are performed in total during the sync process. + deletionGauge = metrics.NewRegisteredGauge("eth/protocols/snap/sync/delete", nil) + + // lookupGauge is the metric to track how many trie node lookups are + // performed to determine if node needs to be deleted. + lookupGauge = metrics.NewRegisteredGauge("eth/protocols/snap/sync/lookup", nil) + + // boundaryAccountNodesGauge is the metric to track how many boundary trie + // nodes in account trie are met. + boundaryAccountNodesGauge = metrics.NewRegisteredGauge("eth/protocols/snap/sync/boundary/account", nil) + + // boundaryAccountNodesGauge is the metric to track how many boundary trie + // nodes in storage tries are met. + boundaryStorageNodesGauge = metrics.NewRegisteredGauge("eth/protocols/snap/sync/boundary/storage", nil) + + // smallStorageGauge is the metric to track how many storages are small enough + // to retrieved in one or two request. + smallStorageGauge = metrics.NewRegisteredGauge("eth/protocols/snap/sync/storage/small", nil) + + // largeStorageGauge is the metric to track how many storages are large enough + // to retrieved concurrently. + largeStorageGauge = metrics.NewRegisteredGauge("eth/protocols/snap/sync/storage/large", nil) + + // skipStorageHealingGauge is the metric to track how many storages are retrieved + // in multiple requests but healing is not necessary. + skipStorageHealingGauge = metrics.NewRegisteredGauge("eth/protocols/snap/sync/storage/noheal", nil) ) diff --git a/eth/protocols/snap/sync.go b/eth/protocols/snap/sync.go index 22638d0473..887a50775d 100644 --- a/eth/protocols/snap/sync.go +++ b/eth/protocols/snap/sync.go @@ -716,6 +716,19 @@ func (s *Syncer) Sync(root common.Hash, cancel chan struct{}) error { } } +// cleanPath is used to remove the dangling nodes in the stackTrie. +func (s *Syncer) cleanPath(batch ethdb.Batch, owner common.Hash, path []byte) { + if owner == (common.Hash{}) && rawdb.ExistsAccountTrieNode(s.db, path) { + rawdb.DeleteAccountTrieNode(batch, path) + deletionGauge.Inc(1) + } + if owner != (common.Hash{}) && rawdb.ExistsStorageTrieNode(s.db, owner, path) { + rawdb.DeleteStorageTrieNode(batch, owner, path) + deletionGauge.Inc(1) + } + lookupGauge.Inc(1) +} + // loadSyncStatus retrieves a previously aborted sync status from the database, // or generates a fresh one if none is available. func (s *Syncer) loadSyncStatus() { @@ -738,9 +751,22 @@ func (s *Syncer) loadSyncStatus() { s.accountBytes += common.StorageSize(len(key) + len(value)) }, } - task.genTrie = trie.NewStackTrie(func(path []byte, hash common.Hash, val []byte) { - rawdb.WriteTrieNode(task.genBatch, common.Hash{}, path, hash, val, s.scheme) + options := trie.NewStackTrieOptions() + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { + rawdb.WriteTrieNode(task.genBatch, common.Hash{}, path, hash, blob, s.scheme) }) + if s.scheme == rawdb.PathScheme { + // Configure the dangling node cleaner and also filter out boundary nodes + // only in the context of the path scheme. Deletion is forbidden in the + // hash scheme, as it can disrupt state completeness. + options = options.WithCleaner(func(path []byte) { + s.cleanPath(task.genBatch, common.Hash{}, path) + }) + // Skip the left boundary if it's not the first range. + // Skip the right boundary if it's not the last range. + options = options.WithSkipBoundary(task.Next != (common.Hash{}), task.Last != common.MaxHash, boundaryAccountNodesGauge) + } + task.genTrie = trie.NewStackTrie(options) for accountHash, subtasks := range task.SubTasks { for _, subtask := range subtasks { subtask := subtask // closure for subtask.genBatch in the stacktrie writer callback @@ -752,9 +778,22 @@ func (s *Syncer) loadSyncStatus() { }, } owner := accountHash // local assignment for stacktrie writer closure - subtask.genTrie = trie.NewStackTrie(func(path []byte, hash common.Hash, val []byte) { - rawdb.WriteTrieNode(subtask.genBatch, owner, path, hash, val, s.scheme) + options := trie.NewStackTrieOptions() + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { + rawdb.WriteTrieNode(subtask.genBatch, owner, path, hash, blob, s.scheme) }) + if s.scheme == rawdb.PathScheme { + // Configure the dangling node cleaner and also filter out boundary nodes + // only in the context of the path scheme. Deletion is forbidden in the + // hash scheme, as it can disrupt state completeness. + options = options.WithCleaner(func(path []byte) { + s.cleanPath(subtask.genBatch, owner, path) + }) + // Skip the left boundary if it's not the first range. + // Skip the right boundary if it's not the last range. + options = options.WithSkipBoundary(subtask.Next != common.Hash{}, subtask.Last != common.MaxHash, boundaryStorageNodesGauge) + } + subtask.genTrie = trie.NewStackTrie(options) } } } @@ -806,14 +845,27 @@ func (s *Syncer) loadSyncStatus() { s.accountBytes += common.StorageSize(len(key) + len(value)) }, } + options := trie.NewStackTrieOptions() + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { + rawdb.WriteTrieNode(batch, common.Hash{}, path, hash, blob, s.scheme) + }) + if s.scheme == rawdb.PathScheme { + // Configure the dangling node cleaner and also filter out boundary nodes + // only in the context of the path scheme. Deletion is forbidden in the + // hash scheme, as it can disrupt state completeness. + options = options.WithCleaner(func(path []byte) { + s.cleanPath(batch, common.Hash{}, path) + }) + // Skip the left boundary if it's not the first range. + // Skip the right boundary if it's not the last range. + options = options.WithSkipBoundary(next != common.Hash{}, last != common.MaxHash, boundaryAccountNodesGauge) + } s.tasks = append(s.tasks, &accountTask{ Next: next, Last: last, SubTasks: make(map[common.Hash][]*storageTask), genBatch: batch, - genTrie: trie.NewStackTrie(func(path []byte, hash common.Hash, val []byte) { - rawdb.WriteTrieNode(batch, common.Hash{}, path, hash, val, s.scheme) - }), + genTrie: trie.NewStackTrie(options), }) log.Debug("Created account sync task", "from", next, "last", last) next = common.BigToHash(new(big.Int).Add(last.Big(), common.Big1)) @@ -1962,6 +2014,7 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { if res.subTask == nil && res.mainTask.needState[j] && (i < len(res.hashes)-1 || !res.cont) { res.mainTask.needState[j] = false res.mainTask.pend-- + smallStorageGauge.Inc(1) } // If the last contract was chunked, mark it as needing healing // to avoid writing it out to disk prematurely. @@ -1997,7 +2050,11 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { log.Debug("Chunked large contract", "initiators", len(keys), "tail", lastKey, "chunks", chunks) } r := newHashRange(lastKey, chunks) - + if chunks == 1 { + smallStorageGauge.Inc(1) + } else { + largeStorageGauge.Inc(1) + } // Our first task is the one that was just filled by this response. batch := ethdb.HookedBatch{ Batch: s.db.NewBatch(), @@ -2006,14 +2063,24 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { }, } owner := account // local assignment for stacktrie writer closure + options := trie.NewStackTrieOptions() + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { + rawdb.WriteTrieNode(batch, owner, path, hash, blob, s.scheme) + }) + if s.scheme == rawdb.PathScheme { + options = options.WithCleaner(func(path []byte) { + s.cleanPath(batch, owner, path) + }) + // Keep the left boundary as it's the first range. + // Skip the right boundary if it's not the last range. + options = options.WithSkipBoundary(false, r.End() != common.MaxHash, boundaryStorageNodesGauge) + } tasks = append(tasks, &storageTask{ Next: common.Hash{}, Last: r.End(), root: acc.Root, genBatch: batch, - genTrie: trie.NewStackTrie(func(path []byte, hash common.Hash, val []byte) { - rawdb.WriteTrieNode(batch, owner, path, hash, val, s.scheme) - }), + genTrie: trie.NewStackTrie(options), }) for r.Next() { batch := ethdb.HookedBatch{ @@ -2022,14 +2089,27 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { s.storageBytes += common.StorageSize(len(key) + len(value)) }, } + options := trie.NewStackTrieOptions() + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { + rawdb.WriteTrieNode(batch, owner, path, hash, blob, s.scheme) + }) + if s.scheme == rawdb.PathScheme { + // Configure the dangling node cleaner and also filter out boundary nodes + // only in the context of the path scheme. Deletion is forbidden in the + // hash scheme, as it can disrupt state completeness. + options = options.WithCleaner(func(path []byte) { + s.cleanPath(batch, owner, path) + }) + // Skip the left boundary as it's not the first range + // Skip the right boundary if it's not the last range. + options = options.WithSkipBoundary(true, r.End() != common.MaxHash, boundaryStorageNodesGauge) + } tasks = append(tasks, &storageTask{ Next: r.Start(), Last: r.End(), root: acc.Root, genBatch: batch, - genTrie: trie.NewStackTrie(func(path []byte, hash common.Hash, val []byte) { - rawdb.WriteTrieNode(batch, owner, path, hash, val, s.scheme) - }), + genTrie: trie.NewStackTrie(options), }) } for _, task := range tasks { @@ -2075,9 +2155,22 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { if i < len(res.hashes)-1 || res.subTask == nil { // no need to make local reassignment of account: this closure does not outlive the loop - tr := trie.NewStackTrie(func(path []byte, hash common.Hash, val []byte) { - rawdb.WriteTrieNode(batch, account, path, hash, val, s.scheme) + options := trie.NewStackTrieOptions() + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { + rawdb.WriteTrieNode(batch, account, path, hash, blob, s.scheme) }) + if s.scheme == rawdb.PathScheme { + // Configure the dangling node cleaner only in the context of the + // path scheme. Deletion is forbidden in the hash scheme, as it can + // disrupt state completeness. + // + // Notably, boundary nodes can be also kept because the whole storage + // trie is complete. + options = options.WithCleaner(func(path []byte) { + s.cleanPath(batch, account, path) + }) + } + tr := trie.NewStackTrie(options) for j := 0; j < len(res.hashes[i]); j++ { tr.Update(res.hashes[i][j][:], res.slots[i][j]) } @@ -2099,18 +2192,25 @@ func (s *Syncer) processStorageResponse(res *storageResponse) { // Large contracts could have generated new trie nodes, flush them to disk if res.subTask != nil { if res.subTask.done { - if root, err := res.subTask.genTrie.Commit(); err != nil { - log.Error("Failed to commit stack slots", "err", err) - } else if root == res.subTask.root { - // If the chunk's root is an overflown but full delivery, clear the heal request + root := res.subTask.genTrie.Commit() + if err := res.subTask.genBatch.Write(); err != nil { + log.Error("Failed to persist stack slots", "err", err) + } + res.subTask.genBatch.Reset() + + // If the chunk's root is an overflown but full delivery, + // clear the heal request. + accountHash := res.accounts[len(res.accounts)-1] + if root == res.subTask.root && rawdb.HasStorageTrieNode(s.db, accountHash, nil, root) { for i, account := range res.mainTask.res.hashes { - if account == res.accounts[len(res.accounts)-1] { + if account == accountHash { res.mainTask.needHeal[i] = false + skipStorageHealingGauge.Inc(1) } } } } - if res.subTask.genBatch.ValueSize() > ethdb.IdealBatchSize || res.subTask.done { + if res.subTask.genBatch.ValueSize() > ethdb.IdealBatchSize { if err := res.subTask.genBatch.Write(); err != nil { log.Error("Failed to persist stack slots", "err", err) } @@ -2317,9 +2417,7 @@ func (s *Syncer) forwardAccountTask(task *accountTask) { // flush after finalizing task.done. It's fine even if we crash and lose this // write as it will only cause more data to be downloaded during heal. if task.done { - if _, err := task.genTrie.Commit(); err != nil { - log.Error("Failed to commit stack account", "err", err) - } + task.genTrie.Commit() } if task.genBatch.ValueSize() > ethdb.IdealBatchSize || task.done { if err := task.genBatch.Write(); err != nil { diff --git a/eth/sync.go b/eth/sync.go index c7ba7c93d6..a9732147fa 100644 --- a/eth/sync.go +++ b/eth/sync.go @@ -209,7 +209,7 @@ func (cs *chainSyncer) modeAndLocalHead() (downloader.SyncMode, *big.Int) { // We are in a full sync, but the associated head state is missing. To complete // the head state, forcefully rerun the snap sync. Note it doesn't mean the // persistent state is corrupted, just mismatch with the head block. - if !cs.handler.chain.HasState(head.Root) { + if !cs.handler.chain.NoTries() && !cs.handler.chain.HasState(head.Root) { block := cs.handler.chain.CurrentSnapBlock() td := cs.handler.chain.GetTd(block.Hash(), block.Number.Uint64()) log.Info("Reenabled snap sync as chain is stateless") diff --git a/eth/tracers/api.go b/eth/tracers/api.go index 14d45fc831..f3a3890488 100644 --- a/eth/tracers/api.go +++ b/eth/tracers/api.go @@ -164,6 +164,7 @@ type TraceCallConfig struct { TraceConfig StateOverrides *ethapi.StateOverride BlockOverrides *ethapi.BlockOverrides + TxIndex *hexutil.Uint } // StdTraceConfig holds extra parameters to standard-json trace functions. @@ -905,11 +906,17 @@ func (api *API) TraceTransaction(ctx context.Context, hash common.Hash, config * // TraceCall lets you trace a given eth_call. It collects the structured logs // created during the execution of EVM if the given transaction was added on // top of the provided block and returns them as a JSON object. +// If no transaction index is specified, the trace will be conducted on the state +// after executing the specified block. However, if a transaction index is provided, +// the trace will be conducted on the state after executing the specified transaction +// within the specified block. func (api *API) TraceCall(ctx context.Context, args ethapi.TransactionArgs, blockNrOrHash rpc.BlockNumberOrHash, config *TraceCallConfig) (interface{}, error) { // Try to retrieve the specified block var ( - err error - block *types.Block + err error + block *types.Block + statedb *state.StateDB + release StateReleaseFunc ) if hash, ok := blockNrOrHash.Hash(); ok { block, err = api.blockByHash(ctx, hash) @@ -939,7 +946,12 @@ func (api *API) TraceCall(ctx context.Context, args ethapi.TransactionArgs, bloc if config != nil && config.Reexec != nil { reexec = *config.Reexec } - statedb, release, err := api.backend.StateAtBlock(ctx, block, reexec, nil, true, false) + + if config != nil && config.TxIndex != nil { + _, _, statedb, release, err = api.backend.StateAtTransaction(ctx, block, int(*config.TxIndex), reexec) + } else { + statedb, release, err = api.backend.StateAtBlock(ctx, block, reexec, nil, true, false) + } if err != nil { return nil, err } diff --git a/eth/tracers/api_test.go b/eth/tracers/api_test.go index 0ca515a776..21a54440a4 100644 --- a/eth/tracers/api_test.go +++ b/eth/tracers/api_test.go @@ -286,13 +286,51 @@ func TestTraceCall(t *testing.T) { } genBlocks := 10 signer := types.HomesteadSigner{} + nonce := uint64(0) backend := newTestBackend(t, genBlocks, genesis, func(i int, b *core.BlockGen) { // Transfer from account[0] to account[1] // value: 1000 wei // fee: 0 wei - tx, _ := types.SignTx(types.NewTransaction(uint64(i), accounts[1].addr, big.NewInt(1000), params.TxGas, b.BaseFee(), nil), signer, accounts[0].key) + tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: nonce, + To: &accounts[1].addr, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) b.AddTx(tx) + nonce++ + + if i == genBlocks-2 { + // Transfer from account[0] to account[2] + tx, _ = types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: nonce, + To: &accounts[2].addr, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) + b.AddTx(tx) + nonce++ + + // Transfer from account[0] to account[1] again + tx, _ = types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: nonce, + To: &accounts[1].addr, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) + b.AddTx(tx) + nonce++ + } }) + + uintPtr := func(i int) *hexutil.Uint { x := hexutil.Uint(i); return &x } + defer backend.teardown() api := NewAPI(backend) var testSuite = []struct { @@ -326,6 +364,51 @@ func TestTraceCall(t *testing.T) { expectErr: nil, expect: `{"gas":21000,"failed":false,"returnValue":"","structLogs":[]}`, }, + // Upon the last state, default to the post block's state + { + blockNumber: rpc.BlockNumber(genBlocks - 1), + call: ethapi.TransactionArgs{ + From: &accounts[2].addr, + To: &accounts[0].addr, + Value: (*hexutil.Big)(new(big.Int).Add(big.NewInt(params.Ether), big.NewInt(100))), + }, + config: nil, + expect: `{"gas":21000,"failed":false,"returnValue":"","structLogs":[]}`, + }, + // Before the first transaction, should be failed + { + blockNumber: rpc.BlockNumber(genBlocks - 1), + call: ethapi.TransactionArgs{ + From: &accounts[2].addr, + To: &accounts[0].addr, + Value: (*hexutil.Big)(new(big.Int).Add(big.NewInt(params.Ether), big.NewInt(100))), + }, + config: &TraceCallConfig{TxIndex: uintPtr(0)}, + expectErr: fmt.Errorf("tracing failed: insufficient funds for gas * price + value: address %s have 1000000000000000000 want 1000000000000000100", accounts[2].addr), + }, + // Before the target transaction, should be failed + { + blockNumber: rpc.BlockNumber(genBlocks - 1), + call: ethapi.TransactionArgs{ + From: &accounts[2].addr, + To: &accounts[0].addr, + Value: (*hexutil.Big)(new(big.Int).Add(big.NewInt(params.Ether), big.NewInt(100))), + }, + config: &TraceCallConfig{TxIndex: uintPtr(1)}, + expectErr: fmt.Errorf("tracing failed: insufficient funds for gas * price + value: address %s have 1000000000000000000 want 1000000000000000100", accounts[2].addr), + }, + // After the target transaction, should be succeed + { + blockNumber: rpc.BlockNumber(genBlocks - 1), + call: ethapi.TransactionArgs{ + From: &accounts[2].addr, + To: &accounts[0].addr, + Value: (*hexutil.Big)(new(big.Int).Add(big.NewInt(params.Ether), big.NewInt(100))), + }, + config: &TraceCallConfig{TxIndex: uintPtr(2)}, + expectErr: nil, + expect: `{"gas":21000,"failed":false,"returnValue":"","structLogs":[]}`, + }, // Standard JSON trace upon the non-existent block, error expects { blockNumber: rpc.BlockNumber(genBlocks + 1), @@ -383,8 +466,8 @@ func TestTraceCall(t *testing.T) { t.Errorf("test %d: expect error %v, got nothing", i, testspec.expectErr) continue } - if !reflect.DeepEqual(err, testspec.expectErr) { - t.Errorf("test %d: error mismatch, want %v, git %v", i, testspec.expectErr, err) + if !reflect.DeepEqual(err.Error(), testspec.expectErr.Error()) { + t.Errorf("test %d: error mismatch, want '%v', got '%v'", i, testspec.expectErr, err) } } else { if err != nil { @@ -424,7 +507,14 @@ func TestTraceTransaction(t *testing.T) { // Transfer from account[0] to account[1] // value: 1000 wei // fee: 0 wei - tx, _ := types.SignTx(types.NewTransaction(uint64(i), accounts[1].addr, big.NewInt(1000), params.TxGas, b.BaseFee(), nil), signer, accounts[0].key) + tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: uint64(i), + To: &accounts[1].addr, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) b.AddTx(tx) target = tx.Hash() }) @@ -521,7 +611,14 @@ func TestTraceBlock(t *testing.T) { // Transfer from account[0] to account[1] // value: 1000 wei // fee: 0 wei - tx, _ := types.SignTx(types.NewTransaction(uint64(i), accounts[1].addr, big.NewInt(1000), params.TxGas, b.BaseFee(), nil), signer, accounts[0].key) + tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: uint64(i), + To: &accounts[1].addr, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) b.AddTx(tx) txHash = tx.Hash() }) @@ -664,7 +761,14 @@ func TestTracingWithOverrides(t *testing.T) { // Transfer from account[0] to account[1] // value: 1000 wei // fee: 0 wei - tx, _ := types.SignTx(types.NewTransaction(uint64(i), accounts[1].addr, big.NewInt(1000), params.TxGas, b.BaseFee(), nil), signer, accounts[0].key) + tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: uint64(i), + To: &accounts[1].addr, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) b.AddTx(tx) }) defer backend.chain.Stop() diff --git a/eth/tracers/internal/tracetest/calltrace_test.go b/eth/tracers/internal/tracetest/calltrace_test.go index 6df49a90c1..5c74baacd1 100644 --- a/eth/tracers/internal/tracetest/calltrace_test.go +++ b/eth/tracers/internal/tracetest/calltrace_test.go @@ -47,9 +47,10 @@ type callContext struct { // callLog is the result of LOG opCode type callLog struct { - Address common.Address `json:"address"` - Topics []common.Hash `json:"topics"` - Data hexutil.Bytes `json:"data"` + Address common.Address `json:"address"` + Topics []common.Hash `json:"topics"` + Data hexutil.Bytes `json:"data"` + Position hexutil.Uint `json:"position"` } // callTrace is the result of a callTracer run. @@ -324,7 +325,7 @@ func TestInternals(t *testing.T) { byte(vm.LOG0), }, tracer: mkTracer("callTracer", json.RawMessage(`{ "withLog": true }`)), - want: `{"from":"0x000000000000000000000000000000000000feed","gas":"0x13880","gasUsed":"0x5b9e","to":"0x00000000000000000000000000000000deadbeef","input":"0x","logs":[{"address":"0x00000000000000000000000000000000deadbeef","topics":[],"data":"0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}],"value":"0x0","type":"CALL"}`, + want: `{"from":"0x000000000000000000000000000000000000feed","gas":"0x13880","gasUsed":"0x5b9e","to":"0x00000000000000000000000000000000deadbeef","input":"0x","logs":[{"address":"0x00000000000000000000000000000000deadbeef","topics":[],"data":"0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","position":"0x0"}],"value":"0x0","type":"CALL"}`, }, { // Leads to OOM on the prestate tracer diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/calldata.json b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/calldata.json index 9264f1e2fd..dbece7229d 100644 --- a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/calldata.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/calldata.json @@ -95,14 +95,16 @@ "topics": [ "0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda" ], - "data": "0x0000000000000000000000004f5777744b500616697cb655dcb02ee6cd51deb5be96016bb57376da7a6d296e0a405ee1501778227dfa604df0a81cb1ae018598" + "data": "0x0000000000000000000000004f5777744b500616697cb655dcb02ee6cd51deb5be96016bb57376da7a6d296e0a405ee1501778227dfa604df0a81cb1ae018598", + "position": "0x0" }, { "address": "0x200edd17f30485a8735878661960cd7a9a95733f", "topics": [ "0xacbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "position": "0x0" } ], "value": "0x8ac7230489e80000", diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/delegatecall.json b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/delegatecall.json index f63dbd47dc..2b03dbb8dd 100644 --- a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/delegatecall.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/delegatecall.json @@ -257,7 +257,8 @@ "0x0000000000000000000000003de712784baf97260455ae25fb74f574ec9c1add", "0x0000000000000000000000006ca7f214ab2ddbb9a8e1a1e2c8550e3164e9dba5" ], - "data": "0x00000000000000000000000000000000000000000000000080d29fa5cccfadac" + "data": "0x00000000000000000000000000000000000000000000000080d29fa5cccfadac", + "position": "0x0" } ], "value": "0x0", @@ -278,7 +279,8 @@ "0x0000000000000000000000006ca7f214ab2ddbb9a8e1a1e2c8550e3164e9dba5", "0x0000000000000000000000005aae5c59d642e5fd45b427df6ed478b49d55fefd" ], - "data": "0x00000000000000000000000000000000000000000000000080d29fa5cccfadac" + "data": "0x00000000000000000000000000000000000000000000000080d29fa5cccfadac", + "position": "0x0" } ], "value": "0x0", @@ -307,7 +309,8 @@ "0x0000000000000000000000006ca7f214ab2ddbb9a8e1a1e2c8550e3164e9dba5", "0x0000000000000000000000005aae5c59d642e5fd45b427df6ed478b49d55fefd" ], - "data": "0x00000000000000000000000000000000000000000000000080d29fa5cccfadac" + "data": "0x00000000000000000000000000000000000000000000000080d29fa5cccfadac", + "position": "0x0" } ], "value": "0x0", @@ -328,7 +331,8 @@ "0x0000000000000000000000005aae5c59d642e5fd45b427df6ed478b49d55fefd", "0x000000000000000000000000950ca4a06c78934a148b7a3ff3ea8fc366f77a06" ], - "data": "0x0000000000000000000000000000000000000000000000000041f50e27d56848" + "data": "0x0000000000000000000000000000000000000000000000000041f50e27d56848", + "position": "0x0" } ], "value": "0x0", @@ -391,7 +395,8 @@ "0x0000000000000000000000006ca7f214ab2ddbb9a8e1a1e2c8550e3164e9dba5", "0x0000000000000000000000003de712784baf97260455ae25fb74f574ec9c1add" ], - "data": "0x000000000000000000000000000000000000000000000000de0b6b3a76400000" + "data": "0x000000000000000000000000000000000000000000000000de0b6b3a76400000", + "position": "0x0" } ], "type": "DELEGATECALL", diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/multi_contracts.json b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/multi_contracts.json index 5e5d953867..263e88d6e1 100644 --- a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/multi_contracts.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/multi_contracts.json @@ -357,7 +357,8 @@ "0x000000000000000000000000c0ee9db1a9e07ca63e4ff0d5fb6f86bf68d47b89", "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd" ], - "data": "0x00000000000000000000000000000000000000000001819451f999d617dafa93" + "data": "0x00000000000000000000000000000000000000000001819451f999d617dafa93", + "position": "0x0" } ], "value": "0x0", @@ -370,7 +371,8 @@ "topics": [ "0x69ca02dd4edd7bf0a4abb9ed3b7af3f14778db5d61921c7dc7cd545266326de2" ], - "data": "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd00000000000000000000000000000000000000000001819451f999d617dafa93" + "data": "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd00000000000000000000000000000000000000000001819451f999d617dafa93", + "position": "0x1" } ], "value": "0x0", @@ -491,7 +493,8 @@ "0x000000000000000000000000f835a0247b0063c04ef22006ebe57c5f11977cc4", "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd" ], - "data": "0x00000000000000000000000000000000000000000001819451f999d617dafa76" + "data": "0x00000000000000000000000000000000000000000001819451f999d617dafa76", + "position": "0x0" } ], "value": "0x0", @@ -504,7 +507,8 @@ "topics": [ "0x69ca02dd4edd7bf0a4abb9ed3b7af3f14778db5d61921c7dc7cd545266326de2" ], - "data": "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd00000000000000000000000000000000000000000001819451f999d617dafa76" + "data": "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd00000000000000000000000000000000000000000001819451f999d617dafa76", + "position": "0x1" } ], "value": "0x0", @@ -692,7 +696,8 @@ "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd", "0x0000000000000000000000006e715ab4f598eacf0016b9b35ef33e4141844ccc" ], - "data": "0x0000000000000000000000000000000000000000000181a7ae53ea2f0bef8ccd" + "data": "0x0000000000000000000000000000000000000000000181a7ae53ea2f0bef8ccd", + "position": "0x0" } ], "value": "0x0", @@ -874,7 +879,8 @@ "0x0000000000000000000000006e715ab4f598eacf0016b9b35ef33e4141844ccc", "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd" ], - "data": "0x0000000000000000000000000000000000000000000181a7ae53ea2f0bef8ccc" + "data": "0x0000000000000000000000000000000000000000000181a7ae53ea2f0bef8ccc", + "position": "0x0" } ], "value": "0x0", @@ -892,7 +898,8 @@ "0x9735b0cb909f3d21d5c16bbcccd272d85fa11446f6d679f6ecb170d2dabfecfc", "0x0000000000000000000000006e715ab4f598eacf0016b9b35ef33e4141844ccc" ], - "data": "0x0000000000000000000000000000000000000000000000022b1c8c12279fffff" + "data": "0x0000000000000000000000000000000000000000000000022b1c8c12279fffff", + "position": "0x1" } ], "value": "0x0", @@ -914,7 +921,8 @@ "0x9735b0cb909f3d21d5c16bbcccd272d85fa11446f6d679f6ecb170d2dabfecfc", "0x0000000000000000000000006e715ab4f598eacf0016b9b35ef33e4141844ccc" ], - "data": "0x0000000000000000000000000000000000000000000000022b1c8c12279fffff" + "data": "0x0000000000000000000000000000000000000000000000022b1c8c12279fffff", + "position": "0x1" } ], "value": "0x0", @@ -939,7 +947,8 @@ "0x0000000000000000000000006e715ab4f598eacf0016b9b35ef33e4141844ccc", "0x0000000000000000000000006dbfc63479ffc031f23e94dc91befa38bec2c25f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001" + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "position": "0x0" } ], "value": "0x0", @@ -952,14 +961,16 @@ "topics": [ "0x07cf7e805770612a8b2ee8e0bcbba8aa908df5f85fbc4f9e2ef384cf75315038" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "position": "0x6" }, { "address": "0x6e715ab4f598eacf0016b9b35ef33e4141844ccc", "topics": [ "0x7027eecbd2a688fc1fa281702b311ed7168571514adfd17014a55d828cb43382" ], - "data": "0x000000000000000000000000000000000000000000000004563918244f400000" + "data": "0x000000000000000000000000000000000000000000000004563918244f400000", + "position": "0x8" } ], "value": "0x0", @@ -1035,7 +1046,8 @@ "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd", "0x0000000000000000000000006dbfc63479ffc031f23e94dc91befa38bec2c25f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000063" + "data": "0x0000000000000000000000000000000000000000000000000000000000000063", + "position": "0x0" } ], "value": "0x0", @@ -1162,7 +1174,8 @@ "0x0000000000000000000000006dbfc63479ffc031f23e94dc91befa38bec2c25f", "0x000000000000000000000000da4a4626d3e16e094de3225a751aab7128e96526" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000064" + "data": "0x0000000000000000000000000000000000000000000000000000000000000064", + "position": "0x0" } ], "value": "0x0", @@ -1175,14 +1188,16 @@ "topics": [ "0x4b0bc4f25f8d0b92d2e12b686ba96cd75e4e69325e6cf7b1f3119d14eaf2cbdf" ], - "data": "0x000000000000000000000000da4a4626d3e16e094de3225a751aab7128e96526" + "data": "0x000000000000000000000000da4a4626d3e16e094de3225a751aab7128e96526", + "position": "0x6" }, { "address": "0x6dbfc63479ffc031f23e94dc91befa38bec2c25f", "topics": [ "0xf340c079d598119636d42046c6a2d2faf7a68c04aecee516f0e0b8a9e79b8666" ], - "data": "0x000000000000000000000000da4a4626d3e16e094de3225a751aab7128e9652600000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000da4a4626d3e16e094de3225a751aab7128e9652600000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000", + "position": "0x9" } ], "value": "0x0", @@ -1231,7 +1246,8 @@ "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd", "0x0000000000000000000000007498bb5749c9801f1f7e490baf5f966dbfe4e97b" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001" + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "position": "0x0" } ], "value": "0x0", @@ -1324,7 +1340,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x0000000000000000000000000000000000000000000000000000000000000001" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -1417,7 +1434,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x0000000000000000000000000000000000000000000000000000000000000002" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -1510,7 +1528,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x0000000000000000000000000000000000000000000000000000000000000003" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -1603,7 +1622,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x0000000000000000000000000000000000000000000000000000000000000004" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -1696,7 +1716,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x0000000000000000000000000000000000000000000000000000000000000005" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -1789,7 +1810,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x0000000000000000000000000000000000000000000000000000000000000006" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -1882,7 +1904,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x0000000000000000000000000000000000000000000000000000000000000007" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -1975,7 +1998,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x0000000000000000000000000000000000000000000000000000000000000008" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -2068,7 +2092,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x0000000000000000000000000000000000000000000000000000000000000009" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -2161,7 +2186,8 @@ "0x5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f", "0x000000000000000000000000000000000000000000000000000000000000000a" ], - "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000" + "data": "0x000000000000000000000000be3ae5cb97c253dda67181c6e34e43f5c275e08b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", + "position": "0x2" } ], "value": "0x0", @@ -2213,7 +2239,8 @@ "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd", "0x0000000000000000000000007ccbc69292c7a6d7b538c91f3b283de97906cf30" ], - "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c" + "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c", + "position": "0x0" } ], "value": "0x0", @@ -2234,7 +2261,8 @@ "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd", "0x0000000000000000000000001b9ec8ba24630b75a7a958153ffff56dd6d4b6a2" ], - "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c" + "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c", + "position": "0x0" } ], "value": "0x0", @@ -2255,7 +2283,8 @@ "0x0000000000000000000000004fd27b205895e698fa350f7ea57cec8a21927fcd", "0x000000000000000000000000c3a2c744ad1f5253c736875b93bacce5b01b060b" ], - "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c" + "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c", + "position": "0x0" } ], "value": "0x0", @@ -2268,21 +2297,24 @@ "topics": [ "0xc6d8c0af6d21f291e7c359603aa97e0ed500f04db6e983b9fce75a91c6b8da6b" ], - "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c" + "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c", + "position": "0x2" }, { "address": "0x4fd27b205895e698fa350f7ea57cec8a21927fcd", "topics": [ "0xc6d8c0af6d21f291e7c359603aa97e0ed500f04db6e983b9fce75a91c6b8da6b" ], - "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c" + "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c", + "position": "0x3" }, { "address": "0x4fd27b205895e698fa350f7ea57cec8a21927fcd", "topics": [ "0xc6d8c0af6d21f291e7c359603aa97e0ed500f04db6e983b9fce75a91c6b8da6b" ], - "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c" + "data": "0x00000000000000000000000000000000000000000001010d8bfbbbe40fe7518c", + "position": "0x4" } ], "value": "0x0", diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/multilogs.json b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/multilogs.json index 1ffffd240e..66d4582008 100644 --- a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/multilogs.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/multilogs.json @@ -178,350 +178,400 @@ "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfd0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfd0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebebeb0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebebeb0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8888880000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8888880000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3b3b30000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3b3b30000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfc0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfc0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3e3e30000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3e3e30000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3e3e3e0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3e3e3e0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbdbdb0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbdbdb0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f4f40000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f4f40000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfb0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfb0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002ff000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000341000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0b0b00000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0b0b00000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0a0a00000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0a0a00000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b5b5b0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b5b5b0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbababa0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbababa0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeaea0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeaea0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa9a9a90000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa9a9a90000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9b9b90000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9b9b90000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfb0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfb0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbababa0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbababa0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6363630000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6363630000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f9f90000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f9f90000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeaea0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeaea0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c9c9c0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c9c9c0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f80000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f80000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfd0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfd0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfc0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfc0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfd0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fe000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfd0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x0000000000000000000000000000000000000000000000000000000000000342000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fd00000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4d4e530000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fd00000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4d4e530000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000034300000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x000000000000000000000000000000000000000000000000000000000000034300000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" }, { "address": "0x350e0ffc780a6a75b44cc52e1ff9092870668945", "topics": [ "0xcacb62d8acea4678658eb5dc4aaa889b34d893b967c96a5f8c066e6549fa3f42" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000002fd00000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f494b0000000000000000000000000000000000000000000000000011c37937e08000" + "data": "0x00000000000000000000000000000000000000000000000000000000000002fd00000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcb0342353c541e210013aaddc2e740b9a33d08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f494b0000000000000000000000000000000000000000000000000011c37937e08000", + "position": "0x0" } ], "value": "0x3782dace9d90000", diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/notopic.json b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/notopic.json index 116606b3c7..762ccbe58f 100644 --- a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/notopic.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/notopic.json @@ -266,7 +266,8 @@ "topics": [ "0xaf30e4d66b2f1f23e63ef4591058a897f67e6867233e33ca3508b982dcc4129b" ], - "data": "0x00000000000000000000000050739060a2c32dc076e507ae1a893aab28ecfe68d1b13c1538a940417bf0e73b2498634436753c854c7fb971224d971bd2ae3e8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000249f011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000355524c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000436a736f6e2868747470733a2f2f6170692e72616e646f6d2e6f72672f6a736f6e2d7270632f312f696e766f6b65292e726573756c742e72616e646f6d2e646174612e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012c4244584a68725670424a35336f3243786c4a526c51745a4a4b5a714c5974354951652b37335944533448744e6a5335486f64624942337476666f773755717579416b303835566b4c6e4c3945704b67777157517a375a4c64477673516c526432734b78496f6c4e673944626e6650737047714c684c62625953566e4e38437776736a7041586353536f33632b34634e774339307946346f4e69626b764433797461706f5a37676f5453796f5559546677536a6e773374692b484a5648374e332b633069774f43715a6a4464734751556358336d33532f494857624f4f5151356f734f344c626a33476730783155644e7466557a5943465937396e7a596757495145464375524249306e364e42764251573732372b4f73445259304a2f392f676a74387563696248576963303d0000000000000000000000000000000000000000" + "data": "0x00000000000000000000000050739060a2c32dc076e507ae1a893aab28ecfe68d1b13c1538a940417bf0e73b2498634436753c854c7fb971224d971bd2ae3e8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000249f011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000355524c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000436a736f6e2868747470733a2f2f6170692e72616e646f6d2e6f72672f6a736f6e2d7270632f312f696e766f6b65292e726573756c742e72616e646f6d2e646174612e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012c4244584a68725670424a35336f3243786c4a526c51745a4a4b5a714c5974354951652b37335944533448744e6a5335486f64624942337476666f773755717579416b303835566b4c6e4c3945704b67777157517a375a4c64477673516c526432734b78496f6c4e673944626e6650737047714c684c62625953566e4e38437776736a7041586353536f33632b34634e774339307946346f4e69626b764433797461706f5a37676f5453796f5559546677536a6e773374692b484a5648374e332b633069774f43715a6a4464734751556358336d33532f494857624f4f5151356f734f344c626a33476730783155644e7466557a5943465937396e7a596757495145464375524249306e364e42764251573732372b4f73445259304a2f392f676a74387563696248576963303d0000000000000000000000000000000000000000", + "position": "0x4" } ], "value": "0x179d63013c5654", @@ -277,7 +278,8 @@ { "address": "0x50739060a2c32dc076e507ae1a893aab28ecfe68", "topics": [], - "data": "0x62616e6b726f6c6c5f6d69736d61746368" + "data": "0x62616e6b726f6c6c5f6d69736d61746368", + "position": "0x2" } ], "value": "0x429d069189e0000", diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/simple.json b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/simple.json index 30f1777067..64941dd4db 100644 --- a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/simple.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/simple.json @@ -75,7 +75,8 @@ "0x000000000000000000000000d1220a0cf47c7b9be7a2e6ba89f429762e7b9adb", "0x000000000000000000000000dbf03b407c01e7cd3cbea99509d93f8dddc8c6fb" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000989680" + "data": "0x0000000000000000000000000000000000000000000000000000000000989680", + "position": "0x0" } ], "value": "0x0", diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/tx_partial_failed.json b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/tx_partial_failed.json index eb2514427c..6faf898a0f 100644 --- a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/tx_partial_failed.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/tx_partial_failed.json @@ -98,7 +98,8 @@ "topics": [ "0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004" ], - "data": "0x00000000000000000000000001115b41bd2731353dd3e6abf44818fdc035aaf10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb9bc244d798123fde783fcc1c72d3bb8c1894130000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008861393035396362623030303030303030303030303030303030303030303030303930643363313831326465323636396266383037626437373538636562316533343937616337653430303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303031633662663532363334303030" + "data": "0x00000000000000000000000001115b41bd2731353dd3e6abf44818fdc035aaf10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb9bc244d798123fde783fcc1c72d3bb8c1894130000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008861393035396362623030303030303030303030303030303030303030303030303930643363313831326465323636396266383037626437373538636562316533343937616337653430303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303031633662663532363334303030", + "position": "0x0" } ], "value": "0x0", diff --git a/eth/tracers/js/goja.go b/eth/tracers/js/goja.go index d22d140988..07c138bae4 100644 --- a/eth/tracers/js/goja.go +++ b/eth/tracers/js/goja.go @@ -142,19 +142,29 @@ func newJsTracer(code string, ctx *tracers.Context, cfg json.RawMessage) (tracer vm: vm, ctx: make(map[string]goja.Value), } + + t.setTypeConverters() + t.setBuiltinFunctions() + if ctx == nil { ctx = new(tracers.Context) } if ctx.BlockHash != (common.Hash{}) { - t.ctx["blockHash"] = vm.ToValue(ctx.BlockHash.Bytes()) + blockHash, err := t.toBuf(vm, ctx.BlockHash.Bytes()) + if err != nil { + return nil, err + } + t.ctx["blockHash"] = blockHash if ctx.TxHash != (common.Hash{}) { t.ctx["txIndex"] = vm.ToValue(ctx.TxIndex) - t.ctx["txHash"] = vm.ToValue(ctx.TxHash.Bytes()) + txHash, err := t.toBuf(vm, ctx.TxHash.Bytes()) + if err != nil { + return nil, err + } + t.ctx["txHash"] = txHash } } - t.setTypeConverters() - t.setBuiltinFunctions() ret, err := vm.RunString("(" + code + ")") if err != nil { return nil, err @@ -224,6 +234,10 @@ func (t *jsTracer) CaptureTxEnd(restGas uint64) { // CaptureStart implements the Tracer interface to initialize the tracing operation. func (t *jsTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { + cancel := func(err error) { + t.err = err + t.env.Cancel() + } t.env = env db := &dbObj{db: env.StateDB, vm: t.vm, toBig: t.toBig, toBuf: t.toBuf, fromBuf: t.fromBuf} t.dbValue = db.setupObject() @@ -232,19 +246,34 @@ func (t *jsTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Addr } else { t.ctx["type"] = t.vm.ToValue("CALL") } - t.ctx["from"] = t.vm.ToValue(from.Bytes()) - t.ctx["to"] = t.vm.ToValue(to.Bytes()) - t.ctx["input"] = t.vm.ToValue(input) + fromVal, err := t.toBuf(t.vm, from.Bytes()) + if err != nil { + cancel(err) + return + } + t.ctx["from"] = fromVal + toVal, err := t.toBuf(t.vm, to.Bytes()) + if err != nil { + cancel(err) + return + } + t.ctx["to"] = toVal + inputVal, err := t.toBuf(t.vm, input) + if err != nil { + cancel(err) + return + } + t.ctx["input"] = inputVal t.ctx["gas"] = t.vm.ToValue(t.gasLimit) gasPriceBig, err := t.toBig(t.vm, env.TxContext.GasPrice.String()) if err != nil { - t.err = err + cancel(err) return } t.ctx["gasPrice"] = gasPriceBig valueBig, err := t.toBig(t.vm, value.String()) if err != nil { - t.err = err + cancel(err) return } t.ctx["value"] = valueBig @@ -293,10 +322,15 @@ func (t *jsTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope // CaptureEnd is called after the call finishes to finalize the tracing. func (t *jsTracer) CaptureEnd(output []byte, gasUsed uint64, err error) { - t.ctx["output"] = t.vm.ToValue(output) if err != nil { t.ctx["error"] = t.vm.ToValue(err.Error()) } + outputVal, err := t.toBuf(t.vm, output) + if err != nil { + t.err = err + return + } + t.ctx["output"] = outputVal } // CaptureEnter is called when EVM enters a new scope (via call, create or selfdestruct). @@ -465,13 +499,13 @@ func (t *jsTracer) setBuiltinFunctions() { } return false }) - vm.Set("slice", func(slice goja.Value, start, end int) goja.Value { + vm.Set("slice", func(slice goja.Value, start, end int64) goja.Value { b, err := t.fromBuf(vm, slice, false) if err != nil { vm.Interrupt(err) return nil } - if start < 0 || start > end || end > len(b) { + if start < 0 || start > end || end > int64(len(b)) { vm.Interrupt(fmt.Sprintf("Tracer accessed out of bound memory: available %d, offset %d, size %d", len(b), start, end-start)) return nil } diff --git a/eth/tracers/js/tracer_test.go b/eth/tracers/js/tracer_test.go index bf6427faf6..20906e07f8 100644 --- a/eth/tracers/js/tracer_test.go +++ b/eth/tracers/js/tracer_test.go @@ -19,6 +19,7 @@ package js import ( "encoding/json" "errors" + "github.com/ethereum/go-ethereum/core/opcodeCompiler/compiler" "math/big" "strings" "testing" @@ -61,8 +62,16 @@ func testCtx() *vmContext { } func runTrace(tracer tracers.Tracer, vmctx *vmContext, chaincfg *params.ChainConfig, contractCode []byte) (json.RawMessage, error) { + return runTraceWithOption(tracer, vmctx, chaincfg, contractCode, false) +} + +func runTraceWithOptiEnabled(tracer tracers.Tracer, vmctx *vmContext, chaincfg *params.ChainConfig, contractCode []byte) (json.RawMessage, error) { + return runTraceWithOption(tracer, vmctx, chaincfg, contractCode, true) +} + +func runTraceWithOption(tracer tracers.Tracer, vmctx *vmContext, chaincfg *params.ChainConfig, contractCode []byte, enableOpti bool) (json.RawMessage, error) { var ( - env = vm.NewEVM(vmctx.blockCtx, vmctx.txCtx, &dummyStatedb{}, chaincfg, vm.Config{Tracer: tracer}) + env = vm.NewEVM(vmctx.blockCtx, vmctx.txCtx, &dummyStatedb{}, chaincfg, vm.Config{Tracer: tracer, EnableOpcodeOptimizations: enableOpti}) gasLimit uint64 = 31000 startGas uint64 = 10000 value = big.NewInt(0) @@ -73,6 +82,13 @@ func runTrace(tracer tracers.Tracer, vmctx *vmContext, chaincfg *params.ChainCon contract.Code = contractCode } + if enableOpti { + // reset the code also require flush code cache. + compiler.DeleteCodeCache(contract.CodeHash) + optimized, _ := compiler.GenOrRewriteOptimizedCode(contract.CodeHash, contract.Code) + contract.Code = optimized + } + tracer.CaptureTxStart(gasLimit) tracer.CaptureStart(env, contract.Caller(), contract.Address(), false, []byte{}, startGas, value) ret, err := env.Interpreter().Run(contract, []byte{}, false) @@ -160,6 +176,81 @@ func TestTracer(t *testing.T) { } } +func TestTracerWithOptimization(t *testing.T) { + execTracer := func(code string, contract []byte) ([]byte, string) { + t.Helper() + tracer, err := newJsTracer(code, nil, nil) + if err != nil { + t.Fatal(err) + } + ret, err := runTraceWithOptiEnabled(tracer, testCtx(), params.TestChainConfig, contract) + if err != nil { + return nil, err.Error() // Stringify to allow comparison without nil checks + } + return ret, "" + } + for i, tt := range []struct { + code string + want string + fail string + contract []byte + }{ + { // tests that we don't panic on bad arguments to memory access + code: "{depths: [], step: function(log) { this.depths.push(log.memory.slice(-1,-2)); }, fault: function() {}, result: function() { return this.depths; }}", + want: ``, + fail: "tracer accessed out of bound memory: offset -1, end -2 at step (:1:53(13)) in server-side tracer function 'step'", + }, { // tests that we don't panic on bad arguments to stack peeks + code: "{depths: [], step: function(log) { this.depths.push(log.stack.peek(-1)); }, fault: function() {}, result: function() { return this.depths; }}", + want: ``, + fail: "tracer accessed out of bound stack: size 0, index -1 at step (:1:53(11)) in server-side tracer function 'step'", + }, { // tests that we don't panic on bad arguments to memory getUint + code: "{ depths: [], step: function(log, db) { this.depths.push(log.memory.getUint(-64));}, fault: function() {}, result: function() { return this.depths; }}", + want: ``, + fail: "tracer accessed out of bound memory: available 0, offset -64, size 32 at step (:1:58(11)) in server-side tracer function 'step'", + }, { // tests some general counting + code: "{count: 0, step: function() { this.count += 1; }, fault: function() {}, result: function() { return this.count; }}", + want: `2`, + }, { // tests that depth is reported correctly + code: "{depths: [], step: function(log) { this.depths.push(log.stack.length()); }, fault: function() {}, result: function() { return this.depths; }}", + want: `[0,2]`, + }, { // tests memory length + code: "{lengths: [], step: function(log) { this.lengths.push(log.memory.length()); }, fault: function() {}, result: function() { return this.lengths; }}", + want: `[0,0]`, + }, { // tests to-string of opcodes + code: "{opcodes: [], step: function(log) { this.opcodes.push(log.op.toString()); }, fault: function() {}, result: function() { return this.opcodes; }}", + want: `["PUSH1PUSH1","STOP"]`, + }, { // tests gasUsed + code: "{depths: [], step: function() {}, fault: function() {}, result: function(ctx) { return ctx.gasPrice+'.'+ctx.gasUsed; }}", + want: `"100000.21006"`, + }, { + code: "{res: null, step: function(log) {}, fault: function() {}, result: function() { return toWord('0xffaa') }}", + want: `{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":255,"31":170}`, + }, { // test feeding a buffer back into go + code: "{res: null, step: function(log) { var address = log.contract.getAddress(); this.res = toAddress(address); }, fault: function() {}, result: function() { return this.res }}", + want: `{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0}`, + }, { + code: "{res: null, step: function(log) { var address = '0x0000000000000000000000000000000000000000'; this.res = toAddress(address); }, fault: function() {}, result: function() { return this.res }}", + want: `{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0}`, + }, { + code: "{res: null, step: function(log) { var address = Array.prototype.slice.call(log.contract.getAddress()); this.res = toAddress(address); }, fault: function() {}, result: function() { return this.res }}", + want: `{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0}`, + }, { + code: "{res: [], step: function(log) { var op = log.op.toString(); if (op === 'MSTORE8' || op === 'STOP') { this.res.push(log.memory.slice(0, 2)) } }, fault: function() {}, result: function() { return this.res }}", + want: `[{"0":0,"1":0},{"0":255,"1":0}]`, + contract: []byte{byte(vm.PUSH1), byte(0xff), byte(vm.PUSH1), byte(0x00), byte(vm.MSTORE8), byte(vm.STOP)}, + }, { + code: "{res: [], step: function(log) { if (log.op.toString() === 'STOP') { this.res.push(log.memory.slice(5, 1025 * 1024)) } }, fault: function() {}, result: function() { return this.res }}", + want: "", + fail: "reached limit for padding memory slice: 1049568 at step (:1:83(20)) in server-side tracer function 'step'", + contract: []byte{byte(vm.PUSH1), byte(0xff), byte(vm.PUSH1), byte(0x00), byte(vm.MSTORE8), byte(vm.STOP)}, + }, + } { + if have, err := execTracer(tt.code, tt.contract); tt.want != string(have) || tt.fail != err { + t.Errorf("testcase %d: expected return value to be '%s' got '%s', error to be '%s' got '%s'\n\tcode: %v", i, tt.want, string(have), tt.fail, err, tt.code) + } + } +} + func TestHalt(t *testing.T) { timeout := errors.New("stahp") tracer, err := newJsTracer("{step: function() { while(1); }, result: function() { return null; }, fault: function(){}}", nil, nil) diff --git a/eth/tracers/logger/gen_structlog.go b/eth/tracers/logger/gen_structlog.go index df06a9ee6b..b406cb3445 100644 --- a/eth/tracers/logger/gen_structlog.go +++ b/eth/tracers/logger/gen_structlog.go @@ -23,7 +23,7 @@ func (s StructLog) MarshalJSON() ([]byte, error) { GasCost math.HexOrDecimal64 `json:"gasCost"` Memory hexutil.Bytes `json:"memory,omitempty"` MemorySize int `json:"memSize"` - Stack []uint256.Int `json:"stack"` + Stack []hexutil.U256 `json:"stack"` ReturnData hexutil.Bytes `json:"returnData,omitempty"` Storage map[common.Hash]common.Hash `json:"-"` Depth int `json:"depth"` @@ -39,7 +39,12 @@ func (s StructLog) MarshalJSON() ([]byte, error) { enc.GasCost = math.HexOrDecimal64(s.GasCost) enc.Memory = s.Memory enc.MemorySize = s.MemorySize - enc.Stack = s.Stack + if s.Stack != nil { + enc.Stack = make([]hexutil.U256, len(s.Stack)) + for k, v := range s.Stack { + enc.Stack[k] = hexutil.U256(v) + } + } enc.ReturnData = s.ReturnData enc.Storage = s.Storage enc.Depth = s.Depth @@ -59,7 +64,7 @@ func (s *StructLog) UnmarshalJSON(input []byte) error { GasCost *math.HexOrDecimal64 `json:"gasCost"` Memory *hexutil.Bytes `json:"memory,omitempty"` MemorySize *int `json:"memSize"` - Stack []uint256.Int `json:"stack"` + Stack []hexutil.U256 `json:"stack"` ReturnData *hexutil.Bytes `json:"returnData,omitempty"` Storage map[common.Hash]common.Hash `json:"-"` Depth *int `json:"depth"` @@ -89,7 +94,10 @@ func (s *StructLog) UnmarshalJSON(input []byte) error { s.MemorySize = *dec.MemorySize } if dec.Stack != nil { - s.Stack = dec.Stack + s.Stack = make([]uint256.Int, len(dec.Stack)) + for k, v := range dec.Stack { + s.Stack[k] = uint256.Int(v) + } } if dec.ReturnData != nil { s.ReturnData = *dec.ReturnData diff --git a/eth/tracers/logger/logger.go b/eth/tracers/logger/logger.go index 4c9b910a27..2b36f9f492 100644 --- a/eth/tracers/logger/logger.go +++ b/eth/tracers/logger/logger.go @@ -83,6 +83,7 @@ type structLogMarshaling struct { GasCost math.HexOrDecimal64 Memory hexutil.Bytes ReturnData hexutil.Bytes + Stack []hexutil.U256 OpName string `json:"opName"` // adds call to OpName() in MarshalJSON ErrorString string `json:"error,omitempty"` // adds call to ErrorString() in MarshalJSON } diff --git a/eth/tracers/native/call.go b/eth/tracers/native/call.go index 34cf027aca..f85cf6206a 100644 --- a/eth/tracers/native/call.go +++ b/eth/tracers/native/call.go @@ -40,6 +40,9 @@ type callLog struct { Address common.Address `json:"address"` Topics []common.Hash `json:"topics"` Data hexutil.Bytes `json:"data"` + // Position of the log relative to subcalls within the same trace + // See https://github.com/ethereum/go-ethereum/pull/28389 for details + Position hexutil.Uint `json:"position"` } type callFrame struct { @@ -188,7 +191,12 @@ func (t *callTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, sco return } - log := callLog{Address: scope.Contract.Address(), Topics: topics, Data: hexutil.Bytes(data)} + log := callLog{ + Address: scope.Contract.Address(), + Topics: topics, + Data: hexutil.Bytes(data), + Position: hexutil.Uint(len(t.callstack[len(t.callstack)-1].Calls)), + } t.callstack[len(t.callstack)-1].Logs = append(t.callstack[len(t.callstack)-1].Logs, log) } } diff --git a/ethclient/ethclient.go b/ethclient/ethclient.go index af373b9938..e8a201f71b 100644 --- a/ethclient/ethclient.go +++ b/ethclient/ethclient.go @@ -370,6 +370,13 @@ func (ec *Client) BalanceAt(ctx context.Context, account common.Address, blockNu return (*big.Int)(&result), err } +// BalanceAtHash returns the wei balance of the given account. +func (ec *Client) BalanceAtHash(ctx context.Context, account common.Address, blockHash common.Hash) (*big.Int, error) { + var result hexutil.Big + err := ec.c.CallContext(ctx, &result, "eth_getBalance", account, rpc.BlockNumberOrHashWithHash(blockHash, false)) + return (*big.Int)(&result), err +} + // StorageAt returns the value of key in the contract storage of the given account. // The block number can be nil, in which case the value is taken from the latest known block. func (ec *Client) StorageAt(ctx context.Context, account common.Address, key common.Hash, blockNumber *big.Int) ([]byte, error) { @@ -378,6 +385,13 @@ func (ec *Client) StorageAt(ctx context.Context, account common.Address, key com return result, err } +// StorageAtHash returns the value of key in the contract storage of the given account. +func (ec *Client) StorageAtHash(ctx context.Context, account common.Address, key common.Hash, blockHash common.Hash) ([]byte, error) { + var result hexutil.Bytes + err := ec.c.CallContext(ctx, &result, "eth_getStorageAt", account, key, rpc.BlockNumberOrHashWithHash(blockHash, false)) + return result, err +} + // CodeAt returns the contract code of the given account. // The block number can be nil, in which case the code is taken from the latest known block. func (ec *Client) CodeAt(ctx context.Context, account common.Address, blockNumber *big.Int) ([]byte, error) { @@ -386,6 +400,13 @@ func (ec *Client) CodeAt(ctx context.Context, account common.Address, blockNumbe return result, err } +// CodeAtHash returns the contract code of the given account. +func (ec *Client) CodeAtHash(ctx context.Context, account common.Address, blockHash common.Hash) ([]byte, error) { + var result hexutil.Bytes + err := ec.c.CallContext(ctx, &result, "eth_getCode", account, rpc.BlockNumberOrHashWithHash(blockHash, false)) + return result, err +} + // NonceAt returns the account nonce of the given account. // The block number can be nil, in which case the nonce is taken from the latest known block. func (ec *Client) NonceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (uint64, error) { @@ -394,6 +415,13 @@ func (ec *Client) NonceAt(ctx context.Context, account common.Address, blockNumb return uint64(result), err } +// NonceAtHash returns the account nonce of the given account. +func (ec *Client) NonceAtHash(ctx context.Context, account common.Address, blockHash common.Hash) (uint64, error) { + var result hexutil.Uint64 + err := ec.c.CallContext(ctx, &result, "eth_getTransactionCount", account, rpc.BlockNumberOrHashWithHash(blockHash, false)) + return uint64(result), err +} + // Filters // FilterLogs executes a filter query. @@ -630,6 +658,12 @@ func toCallArg(msg ethereum.CallMsg) interface{} { if msg.GasPrice != nil { arg["gasPrice"] = (*hexutil.Big)(msg.GasPrice) } + if msg.GasFeeCap != nil { + arg["maxFeePerGas"] = (*hexutil.Big)(msg.GasFeeCap) + } + if msg.GasTipCap != nil { + arg["maxPriorityFeePerGas"] = (*hexutil.Big)(msg.GasTipCap) + } return arg } diff --git a/ethclient/ethclient_test.go b/ethclient/ethclient_test.go index 9cf595a1bc..2b6f19f447 100644 --- a/ethclient/ethclient_test.go +++ b/ethclient/ethclient_test.go @@ -29,6 +29,8 @@ import ( "time" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/beacon" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum" @@ -207,6 +209,13 @@ var genesisForHistorical = &core.Genesis{ BaseFee: big.NewInt(params.InitialBaseFee), } +var depositTx = types.NewTx(&types.DepositTx{ + Value: big.NewInt(12), + Gas: params.TxGas + 2000, + To: &common.Address{2}, + Data: make([]byte, 500), +}) + var testTx1 = types.MustSignNewTx(testKey, types.LatestSigner(genesis.Config), &types.LegacyTx{ Nonce: 0, Value: big.NewInt(12), @@ -279,8 +288,21 @@ func newMockHistoricalBackend(t *testing.T) string { func newTestBackend(t *testing.T, enableHistoricalState bool) (*node.Node, []*types.Block) { histAddr := newMockHistoricalBackend(t) - // Generate test chain. - blocks := generateTestChain(enableHistoricalState) + var consensusEngine consensus.Engine + var actualGenesis *core.Genesis + var chainLength int + if enableHistoricalState { + actualGenesis = genesisForHistorical + consensusEngine = beacon.New(ethash.NewFaker()) + chainLength = 10 + } else { + actualGenesis = genesis + consensusEngine = ethash.NewFaker() + chainLength = 2 + } + + // Generate test chain + blocks := generateTestChain(consensusEngine, actualGenesis, chainLength) // Create node n, err := node.New(&node.Config{}) @@ -288,12 +310,6 @@ func newTestBackend(t *testing.T, enableHistoricalState bool) (*node.Node, []*ty t.Fatalf("can't create new node: %v", err) } // Create Ethereum Service - var actualGenesis *core.Genesis - if enableHistoricalState { - actualGenesis = genesisForHistorical - } else { - actualGenesis = genesis - } config := ðconfig.Config{Genesis: actualGenesis} if enableHistoricalState { config.RollupHistoricalRPC = histAddr @@ -303,6 +319,9 @@ func newTestBackend(t *testing.T, enableHistoricalState bool) (*node.Node, []*ty if err != nil { t.Fatalf("can't create new ethereum service: %v", err) } + if enableHistoricalState { // swap to the pre-bedrock consensus-engine that we used to generate the historical blocks + ethservice.BlockChain().Engine().(*beacon.Beacon).SwapInner(ethash.NewFaker()) + } // Import the test chain. if err := n.Start(); err != nil { t.Fatalf("can't start test node: %v", err) @@ -310,27 +329,29 @@ func newTestBackend(t *testing.T, enableHistoricalState bool) (*node.Node, []*ty if _, err := ethservice.BlockChain().InsertChain(blocks[1:]); err != nil { t.Fatalf("can't import test blocks: %v", err) } + if enableHistoricalState { + // Now that we have a filled DB, swap the pre-Bedrock consensus to OpLegacy, + // which does not support re-processing of pre-bedrock data. + ethservice.Engine().(*beacon.Beacon).SwapInner(&beacon.OpLegacy{}) + } return n, blocks } -func generateTestChain(enableHistoricalState bool) []*types.Block { +func generateTestChain(consensusEngine consensus.Engine, genesis *core.Genesis, length int) []*types.Block { generate := func(i int, g *core.BlockGen) { g.OffsetTime(5) g.SetExtra([]byte("test")) if i == 1 { // Test transactions are included in block #2. + if genesis.Config.Optimism != nil && genesis.Config.IsBedrock(big.NewInt(1)) { + g.AddTx(depositTx) + } g.AddTx(testTx1) g.AddTx(testTx2) } } - var actualGenesis *core.Genesis - if enableHistoricalState { - actualGenesis = genesisForHistorical - } else { - actualGenesis = genesis - } - _, blocks, _ := core.GenerateChainWithGenesis(actualGenesis, ethash.NewFaker(), 2, generate) - return append([]*types.Block{actualGenesis.ToBlock()}, blocks...) + _, blocks, _ := core.GenerateChainWithGenesis(genesis, consensusEngine, length, generate) + return append([]*types.Block{genesis.ToBlock()}, blocks...) } func TestEthClientHistoricalBackend(t *testing.T) { @@ -490,6 +511,7 @@ func testTransactionInBlockInterrupted(t *testing.T, client *rpc.Client) { // Test tx in block interrupted. ctx, cancel := context.WithCancel(context.Background()) cancel() + <-ctx.Done() // Ensure the close of the Done channel tx, err := ec.TransactionInBlock(ctx, block.Hash(), 0) if tx != nil { t.Fatal("transaction should be nil") @@ -577,7 +599,7 @@ func testStatusFunctions(t *testing.T, client *rpc.Client) { if err != nil { t.Fatalf("unexpected error: %v", err) } - if networkID.Cmp(big.NewInt(0)) != 0 { + if networkID.Cmp(big.NewInt(1337)) != 0 { t.Fatalf("unexpected networkID: %v", networkID) } @@ -680,6 +702,11 @@ func testCallContract(t *testing.T, client *rpc.Client) { func testAtFunctions(t *testing.T, client *rpc.Client) { ec := NewClient(client) + block, err := ec.HeaderByNumber(context.Background(), big.NewInt(1)) + if err != nil { + t.Fatalf("BlockByNumber error: %v", err) + } + // send a transaction for some interesting pending status sendTransaction(ec) time.Sleep(100 * time.Millisecond) @@ -697,6 +724,13 @@ func testAtFunctions(t *testing.T, client *rpc.Client) { if err != nil { t.Fatalf("unexpected error: %v", err) } + hashBalance, err := ec.BalanceAtHash(context.Background(), testAddr, block.Hash()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if balance.Cmp(hashBalance) == 0 { + t.Fatalf("unexpected balance at hash: %v %v", balance, hashBalance) + } penBalance, err := ec.PendingBalanceAt(context.Background(), testAddr) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -709,6 +743,13 @@ func testAtFunctions(t *testing.T, client *rpc.Client) { if err != nil { t.Fatalf("unexpected error: %v", err) } + hashNonce, err := ec.NonceAtHash(context.Background(), testAddr, block.Hash()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if hashNonce == nonce { + t.Fatalf("unexpected nonce at hash: %v %v", nonce, hashNonce) + } penNonce, err := ec.PendingNonceAt(context.Background(), testAddr) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -721,6 +762,13 @@ func testAtFunctions(t *testing.T, client *rpc.Client) { if err != nil { t.Fatalf("unexpected error: %v", err) } + hashStorage, err := ec.StorageAtHash(context.Background(), testAddr, common.Hash{}, block.Hash()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if !bytes.Equal(storage, hashStorage) { + t.Fatalf("unexpected storage at hash: %v %v", storage, hashStorage) + } penStorage, err := ec.PendingStorageAt(context.Background(), testAddr, common.Hash{}) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -733,6 +781,13 @@ func testAtFunctions(t *testing.T, client *rpc.Client) { if err != nil { t.Fatalf("unexpected error: %v", err) } + hashCode, err := ec.CodeAtHash(context.Background(), common.Address{}, block.Hash()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if !bytes.Equal(code, hashCode) { + t.Fatalf("unexpected code at hash: %v %v", code, hashCode) + } penCode, err := ec.PendingCodeAt(context.Background(), testAddr) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -763,6 +818,7 @@ func testTransactionSender(t *testing.T, client *rpc.Client) { // TransactionSender. Ensure the server is not asked by canceling the context here. canceledCtx, cancel := context.WithCancel(context.Background()) cancel() + <-canceledCtx.Done() // Ensure the close of the Done channel sender1, err := ec.TransactionSender(canceledCtx, tx1, block2.Hash(), 0) if err != nil { t.Fatal(err) diff --git a/ethclient/gethclient/gethclient.go b/ethclient/gethclient/gethclient.go index e2c0ef3ed0..5cb703ea5b 100644 --- a/ethclient/gethclient/gethclient.go +++ b/ethclient/gethclient/gethclient.go @@ -60,27 +60,9 @@ func (ec *Client) CreateAccessList(ctx context.Context, msg ethereum.CallMsg) (* return result.Accesslist, uint64(result.GasUsed), result.Error, nil } -// AccountResult is the result of a GetProof operation. -type AccountResult struct { - Address common.Address `json:"address"` - AccountProof []string `json:"accountProof"` - Balance *big.Int `json:"balance"` - CodeHash common.Hash `json:"codeHash"` - Nonce uint64 `json:"nonce"` - StorageHash common.Hash `json:"storageHash"` - StorageProof []StorageResult `json:"storageProof"` -} - -// StorageResult provides a proof for a key-value pair. -type StorageResult struct { - Key string `json:"key"` - Value *big.Int `json:"value"` - Proof []string `json:"proof"` -} - // GetProof returns the account and storage values of the specified account including the Merkle-proof. // The block number can be nil, in which case the value is taken from the latest known block. -func (ec *Client) GetProof(ctx context.Context, account common.Address, keys []string, blockNumber *big.Int) (*AccountResult, error) { +func (ec *Client) GetProof(ctx context.Context, account common.Address, keys []string, blockNumber *big.Int) (*common.AccountResult, error) { type storageResult struct { Key string `json:"key"` Value *hexutil.Big `json:"value"` @@ -105,15 +87,15 @@ func (ec *Client) GetProof(ctx context.Context, account common.Address, keys []s var res accountResult err := ec.c.CallContext(ctx, &res, "eth_getProof", account, keys, toBlockNumArg(blockNumber)) // Turn hexutils back to normal datatypes - storageResults := make([]StorageResult, 0, len(res.StorageProof)) + storageResults := make([]common.StorageResult, 0, len(res.StorageProof)) for _, st := range res.StorageProof { - storageResults = append(storageResults, StorageResult{ + storageResults = append(storageResults, common.StorageResult{ Key: st.Key, Value: st.Value.ToInt(), Proof: st.Proof, }) } - result := AccountResult{ + result := common.AccountResult{ Address: res.Address, AccountProof: res.AccountProof, Balance: res.Balance.ToInt(), diff --git a/ethclient/gethclient/gethclient_test.go b/ethclient/gethclient/gethclient_test.go index de45b10695..fdd94a7d73 100644 --- a/ethclient/gethclient/gethclient_test.go +++ b/ethclient/gethclient/gethclient_test.go @@ -42,6 +42,7 @@ var ( testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") testAddr = crypto.PubkeyToAddress(testKey.PublicKey) testContract = common.HexToAddress("0xbeef") + testEmpty = common.HexToAddress("0xeeee") testSlot = common.HexToHash("0xdeadbeef") testValue = crypto.Keccak256Hash(testSlot[:]) testBalance = big.NewInt(2e15) @@ -80,8 +81,11 @@ func newTestBackend(t *testing.T) (*node.Node, []*types.Block) { func generateTestChain() (*core.Genesis, []*types.Block) { genesis := &core.Genesis{ Config: params.AllEthashProtocolChanges, - Alloc: core.GenesisAlloc{testAddr: {Balance: testBalance, Storage: map[common.Hash]common.Hash{testSlot: testValue}}, - testContract: {Nonce: 1, Code: []byte{0x13, 0x37}}}, + Alloc: core.GenesisAlloc{ + testAddr: {Balance: testBalance, Storage: map[common.Hash]common.Hash{testSlot: testValue}}, + testContract: {Nonce: 1, Code: []byte{0x13, 0x37}}, + testEmpty: {Balance: big.NewInt(1)}, + }, ExtraData: []byte("test genesis"), Timestamp: 9000, } @@ -110,6 +114,12 @@ func TestGethClient(t *testing.T) { }, { "TestGetProof2", func(t *testing.T) { testGetProof(t, client, testContract) }, + }, { + "TestGetProofEmpty", + func(t *testing.T) { testGetProof(t, client, testEmpty) }, + }, { + "TestGetProofNonExistent", + func(t *testing.T) { testGetProofNonExistent(t, client) }, }, { "TestGetProofCanonicalizeKeys", func(t *testing.T) { testGetProofCanonicalizeKeys(t, client) }, @@ -274,6 +284,38 @@ func testGetProofCanonicalizeKeys(t *testing.T, client *rpc.Client) { } } +func testGetProofNonExistent(t *testing.T, client *rpc.Client) { + addr := common.HexToAddress("0x0001") + ec := New(client) + result, err := ec.GetProof(context.Background(), addr, nil, nil) + if err != nil { + t.Fatal(err) + } + if result.Address != addr { + t.Fatalf("unexpected address, have: %v want: %v", result.Address, addr) + } + // test nonce + if result.Nonce != 0 { + t.Fatalf("invalid nonce, want: %v got: %v", 0, result.Nonce) + } + // test balance + if result.Balance.Cmp(big.NewInt(0)) != 0 { + t.Fatalf("invalid balance, want: %v got: %v", 0, result.Balance) + } + // test storage + if have := len(result.StorageProof); have != 0 { + t.Fatalf("invalid storage proof, want 0 proof, got %v proof(s)", have) + } + // test codeHash + if have, want := result.CodeHash, (common.Hash{}); have != want { + t.Fatalf("codehash wrong, have %v want %v ", have, want) + } + // test codeHash + if have, want := result.StorageHash, (common.Hash{}); have != want { + t.Fatalf("storagehash wrong, have %v want %v ", have, want) + } +} + func testGCStats(t *testing.T, client *rpc.Client) { ec := New(client) _, err := ec.GCStats(context.Background()) @@ -408,7 +450,7 @@ func testCallContract(t *testing.T, client *rpc.Client) { func TestOverrideAccountMarshal(t *testing.T) { om := map[common.Address]OverrideAccount{ {0x11}: { - // Zero-valued nonce is not overriddden, but simply dropped by the encoder. + // Zero-valued nonce is not overridden, but simply dropped by the encoder. Nonce: 0, }, {0xaa}: { diff --git a/ethdb/dbtest/testsuite.go b/ethdb/dbtest/testsuite.go index 0d3d5f5aa6..29bd24364e 100644 --- a/ethdb/dbtest/testsuite.go +++ b/ethdb/dbtest/testsuite.go @@ -273,9 +273,13 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { b.Put([]byte("5"), nil) b.Delete([]byte("1")) b.Put([]byte("6"), nil) - b.Delete([]byte("3")) + + b.Delete([]byte("3")) // delete then put b.Put([]byte("3"), nil) + b.Put([]byte("7"), nil) // put then delete + b.Delete([]byte("7")) + if err := b.Write(); err != nil { t.Fatal(err) } diff --git a/ethdb/memorydb/memorydb.go b/ethdb/memorydb/memorydb.go index f9f74322b5..2a939f9a18 100644 --- a/ethdb/memorydb/memorydb.go +++ b/ethdb/memorydb/memorydb.go @@ -207,7 +207,7 @@ func (db *Database) Len() int { // keyvalue is a key-value tuple tagged with a deletion field to allow creating // memory-database write batches. type keyvalue struct { - key []byte + key string value []byte delete bool } @@ -222,14 +222,14 @@ type batch struct { // Put inserts the given value into the batch for later committing. func (b *batch) Put(key, value []byte) error { - b.writes = append(b.writes, keyvalue{common.CopyBytes(key), common.CopyBytes(value), false}) + b.writes = append(b.writes, keyvalue{string(key), common.CopyBytes(value), false}) b.size += len(key) + len(value) return nil } // Delete inserts the a key removal into the batch for later committing. func (b *batch) Delete(key []byte) error { - b.writes = append(b.writes, keyvalue{common.CopyBytes(key), nil, true}) + b.writes = append(b.writes, keyvalue{string(key), nil, true}) b.size += len(key) return nil } @@ -249,10 +249,10 @@ func (b *batch) Write() error { } for _, keyvalue := range b.writes { if keyvalue.delete { - delete(b.db.db, string(keyvalue.key)) + delete(b.db.db, keyvalue.key) continue } - b.db.db[string(keyvalue.key)] = keyvalue.value + b.db.db[keyvalue.key] = keyvalue.value } return nil } @@ -267,12 +267,12 @@ func (b *batch) Reset() { func (b *batch) Replay(w ethdb.KeyValueWriter) error { for _, keyvalue := range b.writes { if keyvalue.delete { - if err := w.Delete(keyvalue.key); err != nil { + if err := w.Delete([]byte(keyvalue.key)); err != nil { return err } continue } - if err := w.Put(keyvalue.key, keyvalue.value); err != nil { + if err := w.Put([]byte(keyvalue.key), keyvalue.value); err != nil { return err } } diff --git a/ethdb/memorydb/memorydb_test.go b/ethdb/memorydb/memorydb_test.go index dba18ad306..51499c3b1f 100644 --- a/ethdb/memorydb/memorydb_test.go +++ b/ethdb/memorydb/memorydb_test.go @@ -17,6 +17,7 @@ package memorydb import ( + "encoding/binary" "testing" "github.com/ethereum/go-ethereum/ethdb" @@ -30,3 +31,20 @@ func TestMemoryDB(t *testing.T) { }) }) } + +// BenchmarkBatchAllocs measures the time/allocs for storing 120 kB of data +func BenchmarkBatchAllocs(b *testing.B) { + b.ReportAllocs() + var key = make([]byte, 20) + var val = make([]byte, 100) + // 120 * 1_000 -> 120_000 == 120kB + for i := 0; i < b.N; i++ { + batch := New().NewBatch() + for j := uint64(0); j < 1000; j++ { + binary.BigEndian.PutUint64(key, j) + binary.BigEndian.PutUint64(val, j) + batch.Put(key, val) + } + batch.Write() + } +} diff --git a/ethdb/metrics.go b/ethdb/metrics.go new file mode 100644 index 0000000000..39133a7243 --- /dev/null +++ b/ethdb/metrics.go @@ -0,0 +1,10 @@ +package ethdb + +import "github.com/ethereum/go-ethereum/metrics" + +var ( + EthdbGetTimer = metrics.NewRegisteredTimer("ethdb/get/time", nil) + EthdbPutTimer = metrics.NewRegisteredTimer("ethdb/put/time", nil) + EthdbDeleteTimer = metrics.NewRegisteredTimer("ethdb/delete/time", nil) + EthdbBatchWriteTimer = metrics.NewRegisteredTimer("ethdb/batch/write/time", nil) +) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index ae0039f41e..bce202614a 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -25,7 +25,6 @@ import ( "sync/atomic" "time" - "github.com/cockroachdb/errors" "github.com/cockroachdb/pebble" "github.com/cockroachdb/pebble/bloom" "github.com/ethereum/go-ethereum/common" @@ -130,8 +129,11 @@ type panicLogger struct{} func (l panicLogger) Infof(format string, args ...interface{}) { } +func (l panicLogger) Errorf(format string, args ...interface{}) { +} + func (l panicLogger) Fatalf(format string, args ...interface{}) { - panic(errors.Errorf("fatal: "+format, args...)) + panic(fmt.Errorf("fatal: "+format, args...)) } // New returns a wrapped pebble DB object. The namespace is the prefix that the @@ -299,6 +301,10 @@ func (d *Database) Has(key []byte) (bool, error) { // Get retrieves the given key if it's present in the key-value store. func (d *Database) Get(key []byte) ([]byte, error) { + if metrics.EnabledExpensive { + start := time.Now() + defer func() { ethdb.EthdbGetTimer.UpdateSince(start) }() + } d.quitLock.RLock() defer d.quitLock.RUnlock() if d.closed { @@ -316,6 +322,10 @@ func (d *Database) Get(key []byte) ([]byte, error) { // Put inserts the given value into the key-value store. func (d *Database) Put(key []byte, value []byte) error { + if metrics.EnabledExpensive { + start := time.Now() + defer func() { ethdb.EthdbPutTimer.UpdateSince(start) }() + } d.quitLock.RLock() defer d.quitLock.RUnlock() if d.closed { @@ -326,6 +336,10 @@ func (d *Database) Put(key []byte, value []byte) error { // Delete removes the key from the key-value store. func (d *Database) Delete(key []byte) error { + if metrics.EnabledExpensive { + start := time.Now() + defer func() { ethdb.EthdbDeleteTimer.UpdateSince(start) }() + } d.quitLock.RLock() defer d.quitLock.RUnlock() if d.closed { @@ -482,6 +496,7 @@ func (d *Database) meter(refresh time.Duration, namespace string) { nonLevel0CompCount = int64(d.nonLevel0Comp.Load()) level0CompCount = int64(d.level0Comp.Load()) ) + d.log.Info("loop print db stats", "comp_time", compTime, "write_delay_count", writeDelayCount, "write_delay_time", writeDelayTime, "non_level0_comp_count", nonLevel0CompCount, "level0_comp_count", level0CompCount) writeDelayTimes[i%2] = writeDelayTime writeDelayCounts[i%2] = writeDelayCount compTimes[i%2] = compTime @@ -580,6 +595,10 @@ func (b *batch) ValueSize() int { // Write flushes any accumulated data to disk. func (b *batch) Write() error { + if metrics.EnabledExpensive { + start := time.Now() + defer func() { ethdb.EthdbBatchWriteTimer.UpdateSince(start) }() + } b.db.quitLock.RLock() defer b.db.quitLock.RUnlock() if b.db.closed { @@ -617,9 +636,12 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error { // pebbleIterator is a wrapper of underlying iterator in storage engine. // The purpose of this structure is to implement the missing APIs. +// +// The pebble iterator is not thread-safe. type pebbleIterator struct { - iter *pebble.Iterator - moved bool + iter *pebble.Iterator + moved bool + released bool } // NewIterator creates a binary-alphabetical iterator over a subset @@ -631,7 +653,7 @@ func (d *Database) NewIterator(prefix []byte, start []byte) ethdb.Iterator { UpperBound: upperBound(prefix), }) iter.First() - return &pebbleIterator{iter: iter, moved: true} + return &pebbleIterator{iter: iter, moved: true, released: false} } // Next moves the iterator to the next key/value pair. It returns whether the @@ -666,4 +688,9 @@ func (iter *pebbleIterator) Value() []byte { // Release releases associated resources. Release should always succeed and can // be called multiple times without causing error. -func (iter *pebbleIterator) Release() { iter.iter.Close() } +func (iter *pebbleIterator) Release() { + if !iter.released { + iter.iter.Close() + iter.released = true + } +} diff --git a/ethstats/ethstats.go b/ethstats/ethstats.go index e059844a17..75d0faac54 100644 --- a/ethstats/ethstats.go +++ b/ethstats/ethstats.go @@ -38,7 +38,6 @@ import ( "github.com/ethereum/go-ethereum/core/types" ethproto "github.com/ethereum/go-ethereum/eth/protocols/eth" "github.com/ethereum/go-ethereum/event" - "github.com/ethereum/go-ethereum/les" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/node" @@ -76,12 +75,18 @@ type backend interface { // reporting to ethstats type fullNodeBackend interface { backend - Miner() *miner.Miner BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) - CurrentBlock() *types.Block + CurrentBlock() *types.Header SuggestGasTipCap(ctx context.Context) (*big.Int, error) } +// miningNodeBackend encompasses the functionality necessary for a mining node +// reporting to ethstats +type miningNodeBackend interface { + fullNodeBackend + Miner() *miner.Miner +} + // Service implements an Ethereum netstats reporting daemon that pushes local // chain statistics up to a monitoring server. type Service struct { @@ -480,7 +485,7 @@ func (s *Service) login(conn *connWrapper) error { if info := infos.Protocols["eth"]; info != nil { network = fmt.Sprintf("%d", info.(*ethproto.NodeInfo).Network) } else { - network = fmt.Sprintf("%d", infos.Protocols["les"].(*les.NodeInfo).Network) + return errors.New("no eth protocol available") } auth := &authMsg{ ID: s.node, @@ -634,7 +639,8 @@ func (s *Service) assembleBlockStats(block *types.Block) *blockStats { fullBackend, ok := s.backend.(fullNodeBackend) if ok { if block == nil { - block = fullBackend.CurrentBlock() + head := fullBackend.CurrentBlock() + block, _ = fullBackend.BlockByNumber(context.Background(), rpc.BlockNumber(head.Number.Uint64())) } header = block.Header() td = fullBackend.GetTd(context.Background(), header.Hash()) @@ -779,10 +785,11 @@ func (s *Service) reportStats(conn *connWrapper) error { gasprice int ) // check if backend is a full node - fullBackend, ok := s.backend.(fullNodeBackend) - if ok { - mining = fullBackend.Miner().Mining() - hashrate = int(fullBackend.Miner().Hashrate()) + if fullBackend, ok := s.backend.(fullNodeBackend); ok { + if miningBackend, ok := s.backend.(miningNodeBackend); ok { + mining = miningBackend.Miner().Mining() + hashrate = int(miningBackend.Miner().Hashrate()) + } sync := fullBackend.SyncProgress() syncing = fullBackend.CurrentHeader().Number.Uint64() >= sync.HighestBlock diff --git a/fork.yaml b/fork.yaml index 5b1555e2df..81b979e303 100644 --- a/fork.yaml +++ b/fork.yaml @@ -5,7 +5,7 @@ footer: | base: name: go-ethereum url: https://github.com/ethereum/go-ethereum - hash: 3f907d6a6f6de09cff1360ed529126765939851d # v1.13.4 + hash: b20b4a71598481443d60b261d3e5dcb37f8a0d82 # v1.13.8 fork: name: op-geth url: https://github.com/ethereum-optimism/op-geth @@ -80,8 +80,18 @@ def: description: | The Engine API is activated at the Merge transition, with a Total Terminal Difficulty (TTD). The rollup starts post-merge, and thus sets the TTD to 0. + The TTD is always "reached" starting at the bedrock block. globs: - "consensus/beacon/consensus.go" + - title: "Legacy OP-mainnet / OP-goerli header-verification support" + description: | + Pre-Bedrock OP-mainnet and OP-Goerli had differently formatted block-headers, loosely compatible with the geth types (since it was based on Clique). + However, due to differences like the extra-data length (97+ bytes), these legacy block-headers need special verification. + The pre-merge "consensus" fallback is set to this custom but basic verifier, to accept these headers when syncing a pre-bedrock part of the chain, + independent of any clique code or configuration (which may be removed from geth at a later point). + All the custom verifier has to do is accept the headers, as the headers are already verified by block-hash through the reverse-header-sync. + globs: + - "consensus/beacon/oplegacy.go" - title: "Engine API modifications" description: | The Engine API is extended to insert transactions into the block and optionally exclude the tx-pool, @@ -169,6 +179,12 @@ def: globs: - "core/blockchain_reader.go" - "eth/protocols/snap/handler.go" + - title: Historical data for Snap-sync + description: Snap-sync has access to trusted Deposit Transaction Nonce Data. + globs: + - "eth/handler.go" + - "eth/downloader/downloader.go" + - "eth/downloader/receiptreference.go" - title: Discv5 node discovery description: Fix discv5 option to allow discv5 to be an active source for node-discovery. globs: @@ -206,10 +222,6 @@ def: description: Forward pre-bedrock tracing calls to legacy node. globs: - "eth/tracers/api.go" - - title: "Light Ethereum Subprotocol (LES) RPC" - description: Match the RPC changes in the LES RPC - globs: - - "les/*" - title: "Daisy Chain tests" globs: - "internal/ethapi/transaction_args_test.go" @@ -236,6 +248,13 @@ def: - title: Simulated Backend globs: - "accounts/abi/bind/backends/simulated.go" + - title: "Hardware wallet support" + description: Extend Ledger wallet support for newer devices on Macos + sub: + - title: Fix Ledger discoverability + # upstream PR: https://github.com/ethereum/go-ethereum/pull/28863/ + globs: + - "accounts/usbwallet/hub.go" # ignored globally, does not count towards line count ignore: diff --git a/go.mod b/go.mod index 640982fff6..c8e5cb7cdc 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/ethereum/go-ethereum -go 1.20 +go 1.21 + +toolchain go1.21.6 require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 @@ -13,24 +15,22 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.2 github.com/cespare/cp v1.1.1 github.com/cloudflare/cloudflare-go v0.79.0 - github.com/cockroachdb/errors v1.9.1 github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 github.com/cometbft/cometbft v0.37.2 github.com/consensys/gnark-crypto v0.12.1 + github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 github.com/crate-crypto/go-kzg-4844 v0.7.0 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/deckarep/golang-set/v2 v2.1.0 - github.com/docker/docker v24.0.5+incompatible github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 - github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20231030223232-e16eae11e492 + github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240306093353-c557df8e6f41 github.com/ethereum/c-kzg-4844 v0.4.0 github.com/fatih/color v1.15.0 github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 github.com/fsnotify/fsnotify v1.7.0 github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 - github.com/gballet/go-verkle v0.0.0-20230607174250-df487255f46b - github.com/go-stack/stack v1.8.1 + github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 github.com/gofrs/flock v0.8.1 github.com/golang-jwt/jwt/v4 v4.5.0 github.com/golang/protobuf v1.5.3 @@ -42,7 +42,7 @@ require ( github.com/hashicorp/go-bexpr v0.1.10 github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 github.com/holiman/bloomfilter/v2 v2.0.3 - github.com/holiman/uint256 v1.2.3 + github.com/holiman/uint256 v1.2.4 github.com/huin/goupnp v1.3.0 github.com/influxdata/influxdb-client-go/v2 v2.4.0 github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c @@ -55,6 +55,7 @@ require ( github.com/mattn/go-isatty v0.0.20 github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 github.com/olekukonko/tablewriter v0.0.5 + github.com/panjf2000/ants/v2 v2.4.5 github.com/peterh/liner v1.2.0 github.com/prometheus/client_golang v1.14.0 github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7 @@ -94,32 +95,31 @@ require ( github.com/aws/smithy-go v1.15.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.7.0 // indirect + github.com/btcsuite/btcd v0.22.0-beta // indirect + github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cockroachdb/errors v1.9.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.3 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/consensys/bavard v0.1.13 // indirect - github.com/cosmos/gogoproto v1.4.11 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20230601170251-1830d0757c80 // indirect + github.com/cosmos/gogoproto v1.4.1 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/deepmap/oapi-codegen v1.8.2 // indirect - github.com/dgraph-io/ristretto v0.1.1 // indirect - github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/dgraph-io/ristretto v0.0.4-0.20210318174700-74754f61e018 // indirect github.com/dlclark/regexp2 v1.7.0 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dustin/go-humanize v1.0.0 // indirect github.com/ferranbt/fastssz v0.0.0-20210905181407-59cf6761a7d5 // indirect github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 // indirect - github.com/getsentry/sentry-go v0.18.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.1.2 // indirect - github.com/google/go-cmp v0.6.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b // indirect github.com/gtank/merlin v0.1.1 // indirect @@ -147,17 +147,17 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect github.com/prysmaticlabs/eth2-types v0.0.0-20210303084904-c9735a06829d // indirect github.com/prysmaticlabs/fastssz v0.0.0-20221107182844-78142813af44 // indirect github.com/prysmaticlabs/gohashtree v0.0.3-alpha // indirect github.com/prysmaticlabs/prysm v0.0.0-20220124113610-e26cde5e091b // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rivo/uniseg v0.4.4 // indirect - github.com/rogpeppe/go-internal v1.9.0 // indirect + github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sirupsen/logrus v1.9.0 // indirect @@ -169,15 +169,17 @@ require ( github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.20.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect - google.golang.org/grpc v1.60.0 // indirect - google.golang.org/protobuf v1.31.0 // indirect + golang.org/x/net v0.19.0 // indirect + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + google.golang.org/grpc v1.56.3 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gotest.tools/v3 v3.5.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) -replace github.com/cometbft/cometbft => github.com/bnb-chain/greenfield-cometbft v1.0.0 +replace ( + github.com/cometbft/cometbft => github.com/bnb-chain/greenfield-cometbft v1.0.0 + github.com/wercker/journalhook => github.com/wercker/journalhook v0.0.0-20230927020745-64542ffa4117 +) //replace github.com/ethereum-optimism/superchain-registry/superchain => ../superchain-registry/superchain diff --git a/go.sum b/go.sum index 413bdc1848..d7ed4975c9 100644 --- a/go.sum +++ b/go.sum @@ -51,9 +51,11 @@ github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuI github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0/go.mod h1:c+Lifp3EDEamAkPVzMooRNOK6CZjNSdEnf1A7jsI9u4= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= @@ -68,10 +70,13 @@ github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= +github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= @@ -82,6 +87,7 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= @@ -189,7 +195,7 @@ github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@ -233,6 +239,7 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= @@ -247,6 +254,7 @@ github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1: github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= @@ -262,17 +270,19 @@ github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU= -github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g= -github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y= +github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cosmos/gogoproto v1.4.1 h1:WoyH+0/jbCTzpKNvyav5FL1ZTWsp1im1MxEpJEzKUB8= +github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-ipa v0.0.0-20230601170251-1830d0757c80 h1:DuBDHVjgGMPki7bAyh91+3cF1Vh34sAEdH8JQgbc2R0= -github.com/crate-crypto/go-ipa v0.0.0-20230601170251-1830d0757c80/go.mod h1:gzbVz57IDJgQ9rLQwfSk696JGWof8ftznEL9GoAv3NI= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= +github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= @@ -291,6 +301,7 @@ github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14y github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= @@ -302,23 +313,21 @@ github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlN github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= +github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.0.4-0.20210318174700-74754f61e018 h1:cNcG4c2n5xanQzp2hMyxDxPYVQmZ91y4WN6fJFlndLo= github.com/dgraph-io/ristretto v0.0.4-0.20210318174700-74754f61e018/go.mod h1:MIonLggsKgZLUSt414ExgwNtlOL5MuEoAJP514mwGe8= -github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= -github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v24.0.5+incompatible h1:WmgcE4fxyI6EEXxBRxsHnZXrO1pQ3smi0k/jho4HLeY= -github.com/docker/docker v24.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= @@ -327,9 +336,8 @@ github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127/go.mod h1:QMWlm50DNe14 github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= @@ -349,8 +357,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20231030223232-e16eae11e492 h1:FyzLzMLKMc9zcDYcSxbrLDglIRrGQJE9juFzIO35RmE= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20231030223232-e16eae11e492/go.mod h1:/70H/KqrtKcvWvNGVj6S3rAcLC+kUPr3t2aDmYIS+Xk= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240306093353-c557df8e6f41 h1:WKJvsRyW/YNgyT0P2x5U530ITOY8Dv9TrZnbliqSXd8= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240306093353-c557df8e6f41/go.mod h1:7xh2awFQqsiZxFrHKTgEd+InVfDRrkKVUIuK8SAFHp0= github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= github.com/ethereum/go-ethereum v1.10.13/go.mod h1:W3yfrFyL9C1pHcwY5hmRHVDaorTiQxhYBkKyu5mEDHw= @@ -391,13 +399,13 @@ github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/gballet/go-verkle v0.0.0-20230607174250-df487255f46b h1:vMT47RYsrftsHSTQhqXwC3BYflo38OLC3Y4LtXtLyU0= -github.com/gballet/go-verkle v0.0.0-20230607174250-df487255f46b/go.mod h1:CDncRYVRSDqwakm282WEkjfaAj1hxU/v5RXxk5nXOiI= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= -github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= @@ -409,6 +417,7 @@ github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclK github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -423,8 +432,8 @@ github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBj github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= -github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.2.1/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= @@ -445,8 +454,6 @@ github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.6.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= @@ -474,8 +481,6 @@ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGw github.com/golang/gddo v0.0.0-20200528160355-8d077c1d8f4c/go.mod h1:sam69Hju0uq+5uvLJUMDlsKlQ21Vrs1Kd/1YFPNYdOU= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -521,6 +526,7 @@ github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85q github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.1.1-0.20171103154506-982329095285/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -535,8 +541,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -551,6 +557,7 @@ github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= +github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -606,6 +613,7 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.0.1/go.mod h1:oVMjMN64nzEcepv1kdZKg github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= +github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= @@ -618,6 +626,7 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= @@ -650,8 +659,8 @@ github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7/go.mod h1:5GuXa7vkL8 github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= -github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= @@ -739,6 +748,7 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/joonix/log v0.0.0-20200409080653-9c1d2ceb5f1d/go.mod h1:fS54ONkjDV71zS9CDx3V9K21gJg7byKSvI4ajuWFNJw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -822,6 +832,7 @@ github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7 github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= @@ -1004,6 +1015,7 @@ github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjK github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= @@ -1131,6 +1143,7 @@ github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je4 github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw= @@ -1147,6 +1160,8 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/panjf2000/ants/v2 v2.4.5 h1:kcGvjXB7ea0MrzzszpnlVFthhYKoFxLi75nRbsq01HY= +github.com/panjf2000/ants/v2 v2.4.5/go.mod h1:f6F0NZVFsGCp5A7QW/Zj/m92atWwOkY0OIhFxRNFr4A= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= @@ -1169,6 +1184,7 @@ github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1176,11 +1192,11 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= @@ -1225,8 +1241,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/prom2json v1.3.0/go.mod h1:rMN7m0ApCowcoDlypBHlkNbp5eJQf/+1isKykIP5ZnM= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= @@ -1262,8 +1278,9 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -1324,6 +1341,7 @@ github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v0.0.0-20170901052352-ee1bd8ee15a1/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= @@ -1416,7 +1434,7 @@ github.com/wealdtech/go-eth2-types/v2 v2.5.2/go.mod h1:8lkNUbgklSQ4LZ2oMSuxSdR7W github.com/wealdtech/go-eth2-util v1.6.3/go.mod h1:0hFMj/qtio288oZFHmAbCnPQ9OB3c4WFzs5NVPKTY4k= github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4 v1.1.3/go.mod h1:qiIimacW5NhVRy8o+YxWo9YrecXqDAKKbL0+sOa0SJ4= github.com/wealdtech/go-eth2-wallet-types/v2 v2.8.2/go.mod h1:k6kmiKWSWBTd4OxFifTEkPaBLhZspnO2KFD5XJY9nqg= -github.com/wercker/journalhook v0.0.0-20180428041537-5d0a5ae867b3/go.mod h1:XCsSkdKK4gwBMNrOCZWww0pX6AOt+2gYc5Z6jBRrNVg= +github.com/wercker/journalhook v0.0.0-20230927020745-64542ffa4117/go.mod h1:XCsSkdKK4gwBMNrOCZWww0pX6AOt+2gYc5Z6jBRrNVg= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= @@ -1452,6 +1470,7 @@ github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQ go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1638,8 +1657,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1664,7 +1683,6 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1761,7 +1779,6 @@ golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1771,7 +1788,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1959,10 +1975,8 @@ google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/grpc v1.2.1-0.20170921194603-d4b75ebd4f9f/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -1992,8 +2006,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.60.0 h1:6FQAR0kM31P6MRdeluor2w2gPaS4SVNrD/DNTxrQ15k= -google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= +google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -2008,8 +2022,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a/go.mod h1:KF9sEfUPAXdG8Oev9e99iLGnl2uJMjc5B+4y3O7x610= gopkg.in/cenkalti/backoff.v1 v1.1.0/go.mod h1:J6Vskwqd+OMVJl8C33mmtxTBs2gyzfv7UDAkHu8BrjI= @@ -2051,6 +2065,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -2061,8 +2076,6 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/graphql/graphql.go b/graphql/graphql.go index 51e1c1797d..d8330dffc6 100644 --- a/graphql/graphql.go +++ b/graphql/graphql.go @@ -41,7 +41,8 @@ import ( ) var ( - errBlockInvariant = errors.New("block objects must be instantiated with at least one of num or hash") + errBlockInvariant = errors.New("block objects must be instantiated with at least one of num or hash") + errInvalidBlockRange = errors.New("invalid from and to block combination: from > to") ) type Long int64 @@ -614,13 +615,13 @@ func (t *Transaction) V(ctx context.Context) hexutil.Big { return hexutil.Big(*v) } -func (t *Transaction) YParity(ctx context.Context) (*hexutil.Uint64, error) { +func (t *Transaction) YParity(ctx context.Context) (*hexutil.Big, error) { tx, _ := t.resolve(ctx) if tx == nil || tx.Type() == types.LegacyTxType { return nil, nil } v, _, _ := tx.RawSignatureValues() - ret := hexutil.Uint64(v.Int64()) + ret := hexutil.Big(*v) return &ret, nil } @@ -1324,6 +1325,9 @@ func (r *Resolver) Blocks(ctx context.Context, args struct { From *Long To *Long }) ([]*Block, error) { + if args.From == nil { + return nil, errors.New("from block number must be specified") + } from := rpc.BlockNumber(*args.From) var to rpc.BlockNumber @@ -1333,7 +1337,7 @@ func (r *Resolver) Blocks(ctx context.Context, args struct { to = rpc.BlockNumber(r.backend.CurrentBlock().Number.Int64()) } if to < from { - return []*Block{}, nil + return nil, errInvalidBlockRange } var ret []*Block for i := from; i <= to; i++ { @@ -1416,6 +1420,9 @@ func (r *Resolver) Logs(ctx context.Context, args struct{ Filter FilterCriteria if args.Filter.ToBlock != nil { end = int64(*args.Filter.ToBlock) } + if begin > 0 && end > 0 && begin > end { + return nil, errInvalidBlockRange + } var addresses []common.Address if args.Filter.Addresses != nil { addresses = *args.Filter.Addresses diff --git a/graphql/graphql_test.go b/graphql/graphql_test.go index 4bbfb7251d..f91229d015 100644 --- a/graphql/graphql_test.go +++ b/graphql/graphql_test.go @@ -139,7 +139,7 @@ func TestGraphQLBlockSerialization(t *testing.T) { // should return `estimateGas` as decimal { body: `{"query": "{block{ estimateGas(data:{}) }}"}`, - want: `{"data":{"block":{"estimateGas":"0xcf08"}}}`, + want: `{"data":{"block":{"estimateGas":"0xd221"}}}`, code: 200, }, // should return `status` as decimal @@ -148,6 +148,11 @@ func TestGraphQLBlockSerialization(t *testing.T) { want: `{"data":{"block":{"number":"0xa","call":{"data":"0x","status":"0x1"}}}}`, code: 200, }, + { + body: `{"query": "{blocks {number}}"}`, + want: `{"errors":[{"message":"from block number must be specified","path":["blocks"]}],"data":null}`, + code: 400, + }, } { resp, err := http.Post(fmt.Sprintf("%s/graphql", stack.HTTPEndpoint()), "application/json", strings.NewReader(tt.body)) if err != nil { @@ -164,6 +169,9 @@ func TestGraphQLBlockSerialization(t *testing.T) { if tt.code != resp.StatusCode { t.Errorf("testcase %d %s,\nwrong statuscode, have: %v, want: %v", i, tt.body, resp.StatusCode, tt.code) } + if ctype := resp.Header.Get("Content-Type"); ctype != "application/json" { + t.Errorf("testcase %d \nwrong Content-Type, have: %v, want: %v", i, ctype, "application/json") + } } } diff --git a/graphql/schema.go b/graphql/schema.go index 5738923fc1..8264f1c286 100644 --- a/graphql/schema.go +++ b/graphql/schema.go @@ -157,7 +157,7 @@ const schema string = ` r: BigInt! s: BigInt! v: BigInt! - yParity: Long + yParity: BigInt # Envelope transaction support type: Long accessList: [AccessTuple!] diff --git a/graphql/service.go b/graphql/service.go index f33e763058..584165bdb8 100644 --- a/graphql/service.go +++ b/graphql/service.go @@ -73,12 +73,12 @@ func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } // Setting this disables gzip compression in package node. - w.Header().Set("transfer-encoding", "identity") + w.Header().Set("Transfer-Encoding", "identity") // Flush the response. Since we are writing close to the response timeout, // chunked transfer encoding must be disabled by setting content-length. - w.Header().Set("content-type", "application/json") - w.Header().Set("content-length", strconv.Itoa(len(responseJSON))) + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Content-Length", strconv.Itoa(len(responseJSON))) w.Write(responseJSON) if flush, ok := w.(http.Flusher); ok { flush.Flush() @@ -97,10 +97,10 @@ func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusInternalServerError) return } + w.Header().Set("Content-Type", "application/json") if len(response.Errors) > 0 { w.WriteHeader(http.StatusBadRequest) } - w.Header().Set("Content-Type", "application/json") w.Write(responseJSON) }) } diff --git a/interfaces.go b/interfaces.go index eb9af60076..c4948191d1 100644 --- a/interfaces.go +++ b/interfaces.go @@ -29,8 +29,6 @@ import ( // NotFound is returned by API methods if the requested item does not exist. var NotFound = errors.New("not found") -// TODO: move subscription to package event - // Subscription represents an event subscription where events are // delivered on a data channel. type Subscription interface { diff --git a/internal/build/gotool.go b/internal/build/gotool.go index 32ca20e869..2a47460418 100644 --- a/internal/build/gotool.go +++ b/internal/build/gotool.go @@ -144,7 +144,6 @@ func Version(csdb *ChecksumDB, version string) (string, error) { continue } if parts[0] == version { - log.Printf("Found version %q", parts[1]) return parts[1], nil } } diff --git a/internal/build/util.go b/internal/build/util.go index 5c77b236dc..b41014a16f 100644 --- a/internal/build/util.go +++ b/internal/build/util.go @@ -68,6 +68,27 @@ func MustRunCommand(cmd string, args ...string) { MustRun(exec.Command(cmd, args...)) } +// MustRunCommandWithOutput runs the given command, and ensures that some output will be +// printed while it runs. This is useful for CI builds where the process will be stopped +// when there is no output. +func MustRunCommandWithOutput(cmd string, args ...string) { + interval := time.NewTicker(time.Minute) + done := make(chan struct{}) + defer interval.Stop() + defer close(done) + go func() { + for { + select { + case <-interval.C: + fmt.Printf("Waiting for command %q\n", cmd) + case <-done: + return + } + } + }() + MustRun(exec.Command(cmd, args...)) +} + var warnedAboutGit bool // RunGit runs a git subcommand and returns its output. diff --git a/internal/cmdtest/test_cmd.go b/internal/cmdtest/test_cmd.go index 43137053c1..4890d0b7c6 100644 --- a/internal/cmdtest/test_cmd.go +++ b/internal/cmdtest/test_cmd.go @@ -32,7 +32,7 @@ import ( "text/template" "time" - "github.com/docker/docker/pkg/reexec" + "github.com/ethereum/go-ethereum/internal/reexec" ) func NewTestCmd(t *testing.T, data interface{}) *TestCmd { diff --git a/internal/debug/api.go b/internal/debug/api.go index 42d0fa15ed..482989e0d0 100644 --- a/internal/debug/api.go +++ b/internal/debug/api.go @@ -37,6 +37,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/hashicorp/go-bexpr" + "golang.org/x/exp/slog" ) // Handler is the global debugging handler. @@ -56,7 +57,7 @@ type HandlerT struct { // Verbosity sets the log verbosity ceiling. The verbosity of individual packages // and source files can be raised using Vmodule. func (*HandlerT) Verbosity(level int) { - glogger.Verbosity(log.Lvl(level)) + glogger.Verbosity(slog.Level(level)) } // Vmodule sets the log verbosity pattern. See package log for details on the @@ -65,12 +66,6 @@ func (*HandlerT) Vmodule(pattern string) error { return glogger.Vmodule(pattern) } -// BacktraceAt sets the log backtrace location. See package log for details on -// the pattern syntax. -func (*HandlerT) BacktraceAt(location string) error { - return glogger.BacktraceAt(location) -} - // MemStats returns detailed runtime memory statistics. func (*HandlerT) MemStats() *runtime.MemStats { s := new(runtime.MemStats) diff --git a/internal/debug/flags.go b/internal/debug/flags.go index 736fede943..23e4745e8c 100644 --- a/internal/debug/flags.go +++ b/internal/debug/flags.go @@ -34,6 +34,7 @@ import ( "github.com/mattn/go-colorable" "github.com/mattn/go-isatty" "github.com/urfave/cli/v2" + "golang.org/x/exp/slog" "gopkg.in/natefinch/lumberjack.v2" ) @@ -75,17 +76,6 @@ var ( Usage: "Write logs to a file", Category: flags.LoggingCategory, } - backtraceAtFlag = &cli.StringFlag{ - Name: "log.backtrace", - Usage: "Request a stack trace at a specific logging statement (e.g. \"block.go:271\")", - Value: "", - Category: flags.LoggingCategory, - } - debugFlag = &cli.BoolFlag{ - Name: "log.debug", - Usage: "Prepends log messages with call-site location (file and line number)", - Category: flags.LoggingCategory, - } logRotateFlag = &cli.BoolFlag{ Name: "log.rotate", Usage: "Enables log file rotation", @@ -160,8 +150,6 @@ var Flags = []cli.Flag{ verbosityFlag, logVmoduleFlag, vmoduleFlag, - backtraceAtFlag, - debugFlag, logjsonFlag, logFormatFlag, logFileFlag, @@ -180,48 +168,36 @@ var Flags = []cli.Flag{ } var ( - glogger *log.GlogHandler - logOutputStream log.Handler + glogger *log.GlogHandler + logOutputFile io.WriteCloser + defaultTerminalHandler *log.TerminalHandler ) func init() { - glogger = log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) + defaultTerminalHandler = log.NewTerminalHandler(os.Stderr, false) + glogger = log.NewGlogHandler(defaultTerminalHandler) glogger.Verbosity(log.LvlInfo) - log.Root().SetHandler(glogger) + log.SetDefault(log.NewLogger(glogger)) +} + +func ResetLogging() { + if defaultTerminalHandler != nil { + defaultTerminalHandler.ResetFieldPadding() + } } // Setup initializes profiling and logging based on the CLI flags. // It should be called as early as possible in the program. func Setup(ctx *cli.Context) error { var ( - logfmt log.Format - output = io.Writer(os.Stderr) - logFmtFlag = ctx.String(logFormatFlag.Name) + handler slog.Handler + terminalOutput = io.Writer(os.Stderr) + output io.Writer + logFmtFlag = ctx.String(logFormatFlag.Name) ) - switch { - case ctx.Bool(logjsonFlag.Name): - // Retain backwards compatibility with `--log.json` flag if `--log.format` not set - defer log.Warn("The flag '--log.json' is deprecated, please use '--log.format=json' instead") - logfmt = log.JSONFormat() - case logFmtFlag == "json": - logfmt = log.JSONFormat() - case logFmtFlag == "logfmt": - logfmt = log.LogfmtFormat() - case logFmtFlag == "", logFmtFlag == "terminal": - useColor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb" - if useColor { - output = colorable.NewColorableStderr() - } - logfmt = log.TerminalFormat(useColor) - default: - // Unknown log format specified - return fmt.Errorf("unknown log format: %v", ctx.String(logFormatFlag.Name)) - } var ( - stdHandler = log.StreamHandler(output, logfmt) - ostream = stdHandler - logFile = ctx.String(logFileFlag.Name) - rotation = ctx.Bool(logRotateFlag.Name) + logFile = ctx.String(logFileFlag.Name) + rotation = ctx.Bool(logRotateFlag.Name) ) if len(logFile) > 0 { if err := validateLogLocation(filepath.Dir(logFile)); err != nil { @@ -242,26 +218,55 @@ func Setup(ctx *cli.Context) error { } else { context = append(context, "location", filepath.Join(os.TempDir(), "geth-lumberjack.log")) } - ostream = log.MultiHandler(log.StreamHandler(&lumberjack.Logger{ + logOutputFile = &lumberjack.Logger{ Filename: logFile, MaxSize: ctx.Int(logMaxSizeMBsFlag.Name), MaxBackups: ctx.Int(logMaxBackupsFlag.Name), MaxAge: ctx.Int(logMaxAgeFlag.Name), Compress: ctx.Bool(logCompressFlag.Name), - }, logfmt), stdHandler) + } + output = io.MultiWriter(terminalOutput, logOutputFile) } else if logFile != "" { - if logOutputStream, err := log.FileHandler(logFile, logfmt); err != nil { + var err error + if logOutputFile, err = os.OpenFile(logFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644); err != nil { return err - } else { - ostream = log.MultiHandler(logOutputStream, stdHandler) - context = append(context, "location", logFile) } + output = io.MultiWriter(logOutputFile, terminalOutput) + context = append(context, "location", logFile) + } else { + output = terminalOutput + } + + switch { + case ctx.Bool(logjsonFlag.Name): + // Retain backwards compatibility with `--log.json` flag if `--log.format` not set + defer log.Warn("The flag '--log.json' is deprecated, please use '--log.format=json' instead") + handler = log.JSONHandler(output) + case logFmtFlag == "json": + handler = log.JSONHandler(output) + case logFmtFlag == "logfmt": + handler = log.LogfmtHandler(output) + case logFmtFlag == "", logFmtFlag == "terminal": + useColor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb" + if useColor { + terminalOutput = colorable.NewColorableStderr() + if logOutputFile != nil { + output = io.MultiWriter(logOutputFile, terminalOutput) + } else { + output = terminalOutput + } + } + handler = log.NewTerminalHandler(output, useColor) + default: + // Unknown log format specified + return fmt.Errorf("unknown log format: %v", ctx.String(logFormatFlag.Name)) } - glogger.SetHandler(ostream) + + glogger = log.NewGlogHandler(handler) // logging - verbosity := ctx.Int(verbosityFlag.Name) - glogger.Verbosity(log.Lvl(verbosity)) + verbosity := log.FromLegacyLevel(ctx.Int(verbosityFlag.Name)) + glogger.Verbosity(verbosity) vmodule := ctx.String(logVmoduleFlag.Name) if vmodule == "" { // Retain backwards compatibility with `--vmodule` flag if `--log.vmodule` not set @@ -272,16 +277,7 @@ func Setup(ctx *cli.Context) error { } glogger.Vmodule(vmodule) - debug := ctx.Bool(debugFlag.Name) - if ctx.IsSet(debugFlag.Name) { - debug = ctx.Bool(debugFlag.Name) - } - log.PrintOrigins(debug) - - backtrace := ctx.String(backtraceAtFlag.Name) - glogger.BacktraceAt(backtrace) - - log.Root().SetHandler(glogger) + log.SetDefault(log.NewLogger(glogger)) // profiling, tracing runtime.MemProfileRate = memprofilerateFlag.Value @@ -341,8 +337,8 @@ func StartPProf(address string, withMetrics bool) { func Exit() { Handler.StopCPUProfile() Handler.StopGoTrace() - if closer, ok := logOutputStream.(io.Closer); ok { - closer.Close() + if logOutputFile != nil { + logOutputFile.Close() } } diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 9a88d71fd9..9dffba0323 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -43,6 +43,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/gasestimator" "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p" @@ -52,6 +53,10 @@ import ( "github.com/ethereum/go-ethereum/trie" ) +// estimateGasErrorRatio is the amount of overestimation eth_estimateGas is +// allowed to produce in order to speed up calculations. +const estimateGasErrorRatio = 0.015 + // EthereumAPI provides an API to access Ethereum related information. type EthereumAPI struct { b Backend @@ -676,21 +681,8 @@ type StorageResult struct { Proof []string `json:"proof"` } -// proofList implements ethdb.KeyValueWriter and collects the proofs as -// hex-strings for delivery to rpc-caller. -type proofList []string - -func (n *proofList) Put(key []byte, value []byte) error { - *n = append(*n, hexutil.Encode(value)) - return nil -} - -func (n *proofList) Delete(key []byte) error { - panic("not supported") -} - // GetProof returns the Merkle-proof for a given account and optionally some storage keys. -func (s *BlockChainAPI) GetProof(ctx context.Context, address common.Address, storageKeys []string, blockNrOrHash rpc.BlockNumberOrHash) (*AccountResult, error) { +func (s *BlockChainAPI) GetProof(ctx context.Context, address common.Address, storageKeys []string, blockNrOrHash rpc.BlockNumberOrHash) (result *AccountResult, err error) { header, err := headerByNumberOrHash(ctx, s.b, blockNrOrHash) if err != nil { return nil, err @@ -698,7 +690,7 @@ func (s *BlockChainAPI) GetProof(ctx context.Context, address common.Address, st if s.b.ChainConfig().IsOptimismPreBedrock(header.Number) { if s.b.HistoricalRPCService() != nil { var res AccountResult - err := s.b.HistoricalRPCService().CallContext(ctx, &res, "eth_getProof", address, storageKeys, blockNrOrHash) + err = s.b.HistoricalRPCService().CallContext(ctx, &res, "eth_getProof", address, storageKeys, blockNrOrHash) if err != nil { return nil, fmt.Errorf("historical backend error: %w", err) } @@ -707,6 +699,26 @@ func (s *BlockChainAPI) GetProof(ctx context.Context, address common.Address, st return nil, rpc.ErrNoHistoricalFallback } } + + defer func() { + if proofKeeper := s.b.ProofKeeper(); err != nil && proofKeeper != nil && header.Number != nil { + if proofKeeper.IsProposeProofQuery(address, storageKeys, header.Number.Uint64()) { + if innerResult, innerError := proofKeeper.QueryProposeProof(header.Number.Uint64(), header.Root); innerError == nil { + result = &AccountResult{ + Address: innerResult.Address, + AccountProof: innerResult.AccountProof, + Balance: (*hexutil.Big)(innerResult.Balance), + CodeHash: innerResult.CodeHash, + Nonce: hexutil.Uint64(innerResult.Nonce), + StorageHash: innerResult.StorageHash, + StorageProof: make([]StorageResult, 0), + } + err = nil + } + } + } + }() + var ( keys = make([]common.Hash, len(storageKeys)) keyLengths = make([]int, len(storageKeys)) @@ -714,7 +726,6 @@ func (s *BlockChainAPI) GetProof(ctx context.Context, address common.Address, st ) // Deserialize all keys. This prevents state access on invalid input. for i, hexKey := range storageKeys { - var err error keys[i], keyLengths[i], err = decodeHash(hexKey) if err != nil { return nil, err @@ -731,7 +742,8 @@ func (s *BlockChainAPI) GetProof(ctx context.Context, address common.Address, st var storageTrie state.Trie if storageRoot != types.EmptyRootHash && storageRoot != (common.Hash{}) { id := trie.StorageTrieID(header.Root, crypto.Keccak256Hash(address.Bytes()), storageRoot) - st, err := trie.NewStateTrie(id, statedb.Database().TrieDB()) + var st *trie.StateTrie + st, err = trie.NewStateTrie(id, statedb.Database().TrieDB()) if err != nil { return nil, err } @@ -753,8 +765,8 @@ func (s *BlockChainAPI) GetProof(ctx context.Context, address common.Address, st storageProof[i] = StorageResult{outputKey, &hexutil.Big{}, []string{}} continue } - var proof proofList - if err := storageTrie.Prove(crypto.Keccak256(key.Bytes()), &proof); err != nil { + var proof common.ProofList + if err = storageTrie.Prove(crypto.Keccak256(key.Bytes()), &proof); err != nil { return nil, err } value := (*hexutil.Big)(statedb.GetState(address, key).Big()) @@ -766,10 +778,11 @@ func (s *BlockChainAPI) GetProof(ctx context.Context, address common.Address, st if err != nil { return nil, err } - var accountProof proofList - if err := tr.Prove(crypto.Keccak256(address.Bytes()), &accountProof); err != nil { + var accountProof common.ProofList + if err = tr.Prove(crypto.Keccak256(address.Bytes()), &accountProof); err != nil { return nil, err } + err = statedb.Error() return &AccountResult{ Address: address, AccountProof: accountProof, @@ -778,7 +791,7 @@ func (s *BlockChainAPI) GetProof(ctx context.Context, address common.Address, st Nonce: hexutil.Uint64(statedb.GetNonce(address)), StorageHash: storageRoot, StorageProof: storageProof, - }, statedb.Error() + }, err } // decodeHash parses a hex-encoded 32-byte hash. The input may optionally @@ -1169,7 +1182,7 @@ func doCall(ctx context.Context, b Backend, args TransactionArgs, state *state.S if blockOverrides != nil { blockOverrides.Apply(&blockCtx) } - evm, vmError := b.GetEVM(ctx, msg, state, header, &vm.Config{NoBaseFee: true}, &blockCtx) + evm := b.GetEVM(ctx, msg, state, header, &vm.Config{NoBaseFee: true}, &blockCtx) // Wait for the context to be done and cancel the evm. Even if the // EVM has finished, cancelling may be done (repeatedly) @@ -1181,7 +1194,7 @@ func doCall(ctx context.Context, b Backend, args TransactionArgs, state *state.S // Execute the message. gp := new(core.GasPool).AddGas(math.MaxUint64) result, err := core.ApplyMessage(evm, msg, gp) - if err := vmError(); err != nil { + if err := state.Error(); err != nil { return nil, err } @@ -1206,15 +1219,16 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash return doCall(ctx, b, args, state, header, overrides, blockOverrides, timeout, globalGasCap) } -func newRevertError(result *core.ExecutionResult) *revertError { - reason, errUnpack := abi.UnpackRevert(result.Revert()) - err := errors.New("execution reverted") +func newRevertError(revert []byte) *revertError { + err := vm.ErrExecutionReverted + + reason, errUnpack := abi.UnpackRevert(revert) if errUnpack == nil { - err = fmt.Errorf("execution reverted: %v", reason) + err = fmt.Errorf("%w: %v", vm.ErrExecutionReverted, reason) } return &revertError{ error: err, - reason: hexutil.Encode(result.Revert()), + reason: hexutil.Encode(revert), } } @@ -1272,147 +1286,45 @@ func (s *BlockChainAPI) Call(ctx context.Context, args TransactionArgs, blockNrO } // If the result contains a revert reason, try to unpack and return it. if len(result.Revert()) > 0 { - return nil, newRevertError(result) + return nil, newRevertError(result.Revert()) } return result.Return(), result.Err } -// executeEstimate is a helper that executes the transaction under a given gas limit and returns -// true if the transaction fails for a reason that might be related to not enough gas. A non-nil -// error means execution failed due to reasons unrelated to the gas limit. -func executeEstimate(ctx context.Context, b Backend, args TransactionArgs, state *state.StateDB, header *types.Header, gasCap uint64, gasLimit uint64) (bool, *core.ExecutionResult, error) { - args.Gas = (*hexutil.Uint64)(&gasLimit) - result, err := doCall(ctx, b, args, state, header, nil, nil, 0, gasCap) - if err != nil { - if errors.Is(err, core.ErrIntrinsicGas) { - return true, nil, nil // Special case, raise gas limit - } - return true, nil, err // Bail out - } - return result.Failed(), result, nil -} - // DoEstimateGas returns the lowest possible gas limit that allows the transaction to run // successfully at block `blockNrOrHash`. It returns error if the transaction would revert, or if // there are unexpected failures. The gas limit is capped by both `args.Gas` (if non-nil & // non-zero) and `gasCap` (if non-zero). func DoEstimateGas(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash rpc.BlockNumberOrHash, overrides *StateOverride, gasCap uint64) (hexutil.Uint64, error) { - // Binary search the gas limit, as it may need to be higher than the amount used - var ( - lo uint64 // lowest-known gas limit where tx execution fails - hi uint64 // lowest-known gas limit where tx execution succeeds - ) - // Use zero address if sender unspecified. - if args.From == nil { - args.From = new(common.Address) - } - // Determine the highest gas limit can be used during the estimation. - if args.Gas != nil && uint64(*args.Gas) >= params.TxGas { - hi = uint64(*args.Gas) - } else { - // Retrieve the block to act as the gas ceiling - block, err := b.BlockByNumberOrHash(ctx, blockNrOrHash) - if err != nil { - return 0, err - } - if block == nil { - return 0, errors.New("block not found") - } - hi = block.GasLimit() - } - // Normalize the max fee per gas the call is willing to spend. - var feeCap *big.Int - if args.GasPrice != nil && (args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil) { - return 0, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") - } else if args.GasPrice != nil { - feeCap = args.GasPrice.ToInt() - } else if args.MaxFeePerGas != nil { - feeCap = args.MaxFeePerGas.ToInt() - } else { - feeCap = common.Big0 - } - + // Retrieve the base state and mutate it with any overrides state, header, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) if state == nil || err != nil { return 0, err } - if err := overrides.Apply(state); err != nil { + if err = overrides.Apply(state); err != nil { return 0, err } - - // Recap the highest gas limit with account's available balance. - if feeCap.BitLen() != 0 { - balance := state.GetBalance(*args.From) // from can't be nil - available := new(big.Int).Set(balance) - if args.Value != nil { - if args.Value.ToInt().Cmp(available) >= 0 { - return 0, core.ErrInsufficientFundsForTransfer - } - available.Sub(available, args.Value.ToInt()) - } - allowance := new(big.Int).Div(available, feeCap) - - // If the allowance is larger than maximum uint64, skip checking - if allowance.IsUint64() && hi > allowance.Uint64() { - transfer := args.Value - if transfer == nil { - transfer = new(hexutil.Big) - } - log.Warn("Gas estimation capped by limited funds", "original", hi, "balance", balance, - "sent", transfer.ToInt(), "maxFeePerGas", feeCap, "fundable", allowance) - hi = allowance.Uint64() - } + // Construct the gas estimator option from the user input + opts := &gasestimator.Options{ + Config: b.ChainConfig(), + Chain: NewChainContext(ctx, b), + Header: header, + State: state, + ErrorRatio: estimateGasErrorRatio, } - // Recap the highest gas allowance with specified gascap. - if gasCap != 0 && hi > gasCap { - log.Warn("Caller gas above allowance, capping", "requested", hi, "cap", gasCap) - hi = gasCap - } - - // We first execute the transaction at the highest allowable gas limit, since if this fails we - // can return error immediately. - failed, result, err := executeEstimate(ctx, b, args, state.Copy(), header, gasCap, hi) + // Run the gas estimation andwrap any revertals into a custom return + call, err := args.ToMessage(gasCap, header.BaseFee) if err != nil { return 0, err } - if failed { - if result != nil && result.Err != vm.ErrOutOfGas { - if len(result.Revert()) > 0 { - return 0, newRevertError(result) - } - return 0, result.Err - } - return 0, fmt.Errorf("gas required exceeds allowance (%d)", hi) - } - // For almost any transaction, the gas consumed by the unconstrained execution above - // lower-bounds the gas limit required for it to succeed. One exception is those txs that - // explicitly check gas remaining in order to successfully execute within a given limit, but we - // probably don't want to return a lowest possible gas limit for these cases anyway. - lo = result.UsedGas - 1 - - // Binary search for the smallest gas limit that allows the tx to execute successfully. - for lo+1 < hi { - mid := (hi + lo) / 2 - if mid > lo*2 { - // Most txs don't need much higher gas limit than their gas used, and most txs don't - // require near the full block limit of gas, so the selection of where to bisect the - // range here is skewed to favor the low side. - mid = lo * 2 - } - failed, _, err = executeEstimate(ctx, b, args, state.Copy(), header, gasCap, mid) - if err != nil { - // This should not happen under normal conditions since if we make it this far the - // transaction had run without error at least once before. - log.Error("execution error in estimate gas", "err", err) - return 0, err - } - if failed { - lo = mid - } else { - hi = mid + estimate, revert, err := gasestimator.Estimate(ctx, call, opts, gasCap) + if err != nil { + if len(revert) > 0 { + return 0, newRevertError(revert) } + return 0, err } - return hexutil.Uint64(hi), nil + return hexutil.Uint64(estimate), nil } // EstimateGas returns the lowest possible gas limit that allows the transaction to run @@ -1825,7 +1737,7 @@ func AccessList(ctx context.Context, b Backend, blockNrOrHash rpc.BlockNumberOrH // Apply the transaction with the access list tracer tracer := logger.NewAccessListTracer(accessList, args.from(), to, precompiles) config := vm.Config{Tracer: tracer, NoBaseFee: true} - vmenv, _ := b.GetEVM(ctx, msg, statedb, header, &config, nil) + vmenv := b.GetEVM(ctx, msg, statedb, header, &config, nil) res, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(msg.GasLimit)) if err != nil { return nil, 0, nil, fmt.Errorf("failed to apply transaction: %v err: %v", args.toTransaction().Hash(), err) @@ -2031,7 +1943,9 @@ func marshalReceipt(receipt *types.Receipt, blockHash common.Hash, blockNumber u fields["l1GasPrice"] = (*hexutil.Big)(receipt.L1GasPrice) fields["l1GasUsed"] = (*hexutil.Big)(receipt.L1GasUsed) fields["l1Fee"] = (*hexutil.Big)(receipt.L1Fee) - fields["l1FeeScalar"] = receipt.FeeScalar.String() + if receipt.FeeScalar != nil { // removed in Ecotone + fields["l1FeeScalar"] = receipt.FeeScalar.String() + } } if chainConfig.Optimism != nil && tx.IsDepositTx() && receipt.DepositNonce != nil { fields["depositNonce"] = hexutil.Uint64(*receipt.DepositNonce) diff --git a/internal/ethapi/api_test.go b/internal/ethapi/api_test.go index 239d5a3d72..75dc1e5334 100644 --- a/internal/ethapi/api_test.go +++ b/internal/ethapi/api_test.go @@ -593,6 +593,10 @@ func newTestBackend(t *testing.T, n int, gspec *core.Genesis, engine consensus.E return backend } +func (b testBackend) ProofKeeper() *core.ProofKeeper { + return nil +} + func (b *testBackend) setPendingBlock(block *types.Block) { b.pending = block } @@ -695,8 +699,7 @@ func (b testBackend) GetTd(ctx context.Context, hash common.Hash) *big.Int { } return big.NewInt(1) } -func (b testBackend) GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockContext *vm.BlockContext) (*vm.EVM, func() error) { - vmError := func() error { return nil } +func (b testBackend) GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockContext *vm.BlockContext) *vm.EVM { if vmConfig == nil { vmConfig = b.chain.GetVMConfig() } @@ -705,7 +708,7 @@ func (b testBackend) GetEVM(ctx context.Context, msg *core.Message, state *state if blockContext != nil { context = *blockContext } - return vm.NewEVM(context, txContext, state, b.chain.Config(), *vmConfig), vmError + return vm.NewEVM(context, txContext, state, b.chain.Config(), *vmConfig) } func (b testBackend) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { panic("implement me") @@ -843,6 +846,47 @@ func TestEstimateGas(t *testing.T) { }, expectErr: core.ErrInsufficientFunds, }, + // Test for a bug where the gas price was set to zero but the basefee non-zero + // + // contract BasefeeChecker { + // constructor() { + // require(tx.gasprice >= block.basefee); + // if (tx.gasprice > 0) { + // require(block.basefee > 0); + // } + // } + //} + { + blockNumber: rpc.LatestBlockNumber, + call: TransactionArgs{ + From: &accounts[0].addr, + Input: hex2Bytes("6080604052348015600f57600080fd5b50483a1015601c57600080fd5b60003a111560315760004811603057600080fd5b5b603f80603e6000396000f3fe6080604052600080fdfea264697066735822122060729c2cee02b10748fae5200f1c9da4661963354973d9154c13a8e9ce9dee1564736f6c63430008130033"), + GasPrice: (*hexutil.Big)(big.NewInt(1_000_000_000)), // Legacy as pricing + }, + expectErr: nil, + want: 67617, + }, + { + blockNumber: rpc.LatestBlockNumber, + call: TransactionArgs{ + From: &accounts[0].addr, + Input: hex2Bytes("6080604052348015600f57600080fd5b50483a1015601c57600080fd5b60003a111560315760004811603057600080fd5b5b603f80603e6000396000f3fe6080604052600080fdfea264697066735822122060729c2cee02b10748fae5200f1c9da4661963354973d9154c13a8e9ce9dee1564736f6c63430008130033"), + MaxFeePerGas: (*hexutil.Big)(big.NewInt(1_000_000_000)), // 1559 gas pricing + }, + expectErr: nil, + want: 67617, + }, + { + blockNumber: rpc.LatestBlockNumber, + call: TransactionArgs{ + From: &accounts[0].addr, + Input: hex2Bytes("6080604052348015600f57600080fd5b50483a1015601c57600080fd5b60003a111560315760004811603057600080fd5b5b603f80603e6000396000f3fe6080604052600080fdfea264697066735822122060729c2cee02b10748fae5200f1c9da4661963354973d9154c13a8e9ce9dee1564736f6c63430008130033"), + GasPrice: nil, // No legacy gas pricing + MaxFeePerGas: nil, // No 1559 gas pricing + }, + expectErr: nil, + want: 67595, + }, } for i, tc := range testSuite { result, err := api.EstimateGas(context.Background(), tc.call, &rpc.BlockNumberOrHash{BlockNumber: &tc.blockNumber}, &tc.overrides) @@ -860,7 +904,7 @@ func TestEstimateGas(t *testing.T) { t.Errorf("test %d: want no error, have %v", i, err) continue } - if uint64(result) != tc.want { + if float64(result) > float64(tc.want)*(1+estimateGasErrorRatio) { t.Errorf("test %d, result mismatch, have\n%v\n, want\n%v\n", i, uint64(result), tc.want) } } @@ -1035,18 +1079,18 @@ func TestCall(t *testing.T) { } } -type Account struct { +type account struct { key *ecdsa.PrivateKey addr common.Address } -func newAccounts(n int) (accounts []Account) { +func newAccounts(n int) (accounts []account) { for i := 0; i < n; i++ { key, _ := crypto.GenerateKey() addr := crypto.PubkeyToAddress(key.PublicKey) - accounts = append(accounts, Account{key: key, addr: addr}) + accounts = append(accounts, account{key: key, addr: addr}) } - slices.SortFunc(accounts, func(a, b Account) int { return a.addr.Cmp(b.addr) }) + slices.SortFunc(accounts, func(a, b account) int { return a.addr.Cmp(b.addr) }) return accounts } diff --git a/internal/ethapi/backend.go b/internal/ethapi/backend.go index a3ce3c9c1d..7da74f1fc9 100644 --- a/internal/ethapi/backend.go +++ b/internal/ethapi/backend.go @@ -68,11 +68,13 @@ type Backend interface { PendingBlockAndReceipts() (*types.Block, types.Receipts) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) GetTd(ctx context.Context, hash common.Hash) *big.Int - GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockCtx *vm.BlockContext) (*vm.EVM, func() error) + GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockCtx *vm.BlockContext) *vm.EVM SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription + ProofKeeper() *core.ProofKeeper + // Transaction pool API SendTx(ctx context.Context, signedTx *types.Transaction) error GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) diff --git a/internal/ethapi/transaction_args.go b/internal/ethapi/transaction_args.go index e4cf81a3f4..75dbe38a59 100644 --- a/internal/ethapi/transaction_args.go +++ b/internal/ethapi/transaction_args.go @@ -26,10 +26,12 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus/misc/eip4844" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" + "github.com/holiman/uint256" ) // TransactionArgs represents the arguments to construct a new transaction @@ -53,6 +55,10 @@ type TransactionArgs struct { // Introduced by AccessListTxType transaction. AccessList *types.AccessList `json:"accessList,omitempty"` ChainID *hexutil.Big `json:"chainId,omitempty"` + + // Introduced by EIP-4844. + BlobFeeCap *hexutil.Big `json:"maxFeePerBlobGas"` + BlobHashes []common.Hash `json:"blobVersionedHashes,omitempty"` } // from retrieves the transaction sender address. @@ -92,6 +98,12 @@ func (args *TransactionArgs) setDefaults(ctx context.Context, b Backend) error { if args.Data != nil && args.Input != nil && !bytes.Equal(*args.Data, *args.Input) { return errors.New(`both "data" and "input" are set and not equal. Please use "input" to pass transaction call data`) } + if args.BlobHashes != nil && args.To == nil { + return errors.New(`blob transactions cannot have the form of a create transaction`) + } + if args.BlobHashes != nil && len(args.BlobHashes) == 0 { + return errors.New(`need at least 1 blob for a blob transaction`) + } if args.To == nil && len(args.data()) == 0 { return errors.New(`contract creation without any data provided`) } @@ -110,8 +122,8 @@ func (args *TransactionArgs) setDefaults(ctx context.Context, b Backend) error { Data: (*hexutil.Bytes)(&data), AccessList: args.AccessList, } - pendingBlockNr := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) - estimated, err := DoEstimateGas(ctx, b, callArgs, pendingBlockNr, nil, b.RPCGasCap()) + latestBlockNr := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) + estimated, err := DoEstimateGas(ctx, b, callArgs, latestBlockNr, nil, b.RPCGasCap()) if err != nil { return err } @@ -137,27 +149,53 @@ func (args *TransactionArgs) setFeeDefaults(ctx context.Context, b Backend) erro if args.GasPrice != nil && (args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil) { return errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") } - // If the tx has completely specified a fee mechanism, no default is needed. This allows users - // who are not yet synced past London to get defaults for other tx values. See - // https://github.com/ethereum/go-ethereum/pull/23274 for more information. + // If the tx has completely specified a fee mechanism, no default is needed. + // This allows users who are not yet synced past London to get defaults for + // other tx values. See https://github.com/ethereum/go-ethereum/pull/23274 + // for more information. eip1559ParamsSet := args.MaxFeePerGas != nil && args.MaxPriorityFeePerGas != nil - if (args.GasPrice != nil && !eip1559ParamsSet) || (args.GasPrice == nil && eip1559ParamsSet) { - // Sanity check the EIP-1559 fee parameters if present. - if args.GasPrice == nil && args.MaxFeePerGas.ToInt().Cmp(args.MaxPriorityFeePerGas.ToInt()) < 0 { + + // Sanity check the EIP-1559 fee parameters if present. + if args.GasPrice == nil && eip1559ParamsSet { + if args.MaxFeePerGas.ToInt().Sign() == 0 { + return errors.New("maxFeePerGas must be non-zero") + } + if args.MaxFeePerGas.ToInt().Cmp(args.MaxPriorityFeePerGas.ToInt()) < 0 { return fmt.Errorf("maxFeePerGas (%v) < maxPriorityFeePerGas (%v)", args.MaxFeePerGas, args.MaxPriorityFeePerGas) } - return nil + return nil // No need to set anything, user already set MaxFeePerGas and MaxPriorityFeePerGas } - // Now attempt to fill in default value depending on whether London is active or not. + // Sanity check the EIP-4844 fee parameters. + if args.BlobFeeCap != nil && args.BlobFeeCap.ToInt().Sign() == 0 { + return errors.New("maxFeePerBlobGas must be non-zero") + } + // Sanity check the non-EIP-1559 fee parameters. head := b.CurrentHeader() - if b.ChainConfig().IsLondon(head.Number) { + isLondon := b.ChainConfig().IsLondon(head.Number) + if args.GasPrice != nil && !eip1559ParamsSet { + // Zero gas-price is not allowed after London fork + if args.GasPrice.ToInt().Sign() == 0 && isLondon { + return errors.New("gasPrice must be non-zero after london fork") + } + return nil // No need to set anything, user already set GasPrice + } + + // Now attempt to fill in default value depending on whether London is active or not. + if b.ChainConfig().IsCancun(head.Number, head.Time) { + if err := args.setCancunFeeDefaults(ctx, head, b); err != nil { + return err + } + } else if isLondon { + if args.BlobFeeCap != nil { + return errors.New("maxFeePerBlobGas is not valid before Cancun is active") + } // London is active, set maxPriorityFeePerGas and maxFeePerGas. if err := args.setLondonFeeDefaults(ctx, head, b); err != nil { return err } } else { - if args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil { - return errors.New("maxFeePerGas and maxPriorityFeePerGas are not valid before London is active") + if args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil || args.BlobFeeCap != nil { + return errors.New("maxFeePerGas and maxPriorityFeePerGas and maxFeePerBlobGas are not valid before London is active") } // London not active, set gas price. price, err := b.SuggestGasTipCap(ctx) @@ -169,6 +207,21 @@ func (args *TransactionArgs) setFeeDefaults(ctx context.Context, b Backend) erro return nil } +// setCancunFeeDefaults fills in reasonable default fee values for unspecified fields. +func (args *TransactionArgs) setCancunFeeDefaults(ctx context.Context, head *types.Header, b Backend) error { + // Set maxFeePerBlobGas if it is missing. + if args.BlobHashes != nil && args.BlobFeeCap == nil { + // ExcessBlobGas must be set for a Cancun block. + blobBaseFee := eip4844.CalcBlobFee(*head.ExcessBlobGas) + // Set the max fee to be 2 times larger than the previous block's blob base fee. + // The additional slack allows the tx to not become invalidated if the base + // fee is rising. + val := new(big.Int).Mul(blobBaseFee, big.NewInt(2)) + args.BlobFeeCap = (*hexutil.Big)(val) + } + return args.setLondonFeeDefaults(ctx, head, b) +} + // setLondonFeeDefaults fills in reasonable default fee values for unspecified fields. func (args *TransactionArgs) setLondonFeeDefaults(ctx context.Context, head *types.Header, b Backend) error { // Set maxPriorityFeePerGas if it is missing. @@ -221,9 +274,10 @@ func (args *TransactionArgs) ToMessage(globalGasCap uint64, baseFee *big.Int) (* gas = globalGasCap } var ( - gasPrice *big.Int - gasFeeCap *big.Int - gasTipCap *big.Int + gasPrice *big.Int + gasFeeCap *big.Int + gasTipCap *big.Int + blobFeeCap *big.Int ) if baseFee == nil { // If there's no basefee, then it must be a non-1559 execution @@ -255,6 +309,11 @@ func (args *TransactionArgs) ToMessage(globalGasCap uint64, baseFee *big.Int) (* } } } + if args.BlobFeeCap != nil { + blobFeeCap = args.BlobFeeCap.ToInt() + } else if args.BlobHashes != nil { + blobFeeCap = new(big.Int) + } value := new(big.Int) if args.Value != nil { value = args.Value.ToInt() @@ -274,6 +333,8 @@ func (args *TransactionArgs) ToMessage(globalGasCap uint64, baseFee *big.Int) (* GasTipCap: gasTipCap, Data: data, AccessList: accessList, + BlobGasFeeCap: blobFeeCap, + BlobHashes: args.BlobHashes, SkipAccountChecks: true, } return msg, nil @@ -284,6 +345,24 @@ func (args *TransactionArgs) ToMessage(globalGasCap uint64, baseFee *big.Int) (* func (args *TransactionArgs) toTransaction() *types.Transaction { var data types.TxData switch { + case args.BlobHashes != nil: + al := types.AccessList{} + if args.AccessList != nil { + al = *args.AccessList + } + data = &types.BlobTx{ + To: *args.To, + ChainID: uint256.MustFromBig((*big.Int)(args.ChainID)), + Nonce: uint64(*args.Nonce), + Gas: uint64(*args.Gas), + GasFeeCap: uint256.MustFromBig((*big.Int)(args.MaxFeePerGas)), + GasTipCap: uint256.MustFromBig((*big.Int)(args.MaxPriorityFeePerGas)), + Value: uint256.MustFromBig((*big.Int)(args.Value)), + Data: args.data(), + AccessList: al, + BlobHashes: args.BlobHashes, + BlobFeeCap: uint256.MustFromBig((*big.Int)(args.BlobFeeCap)), + } case args.MaxFeePerGas != nil: al := types.AccessList{} if args.AccessList != nil { @@ -329,3 +408,8 @@ func (args *TransactionArgs) toTransaction() *types.Transaction { func (args *TransactionArgs) ToTransaction() *types.Transaction { return args.toTransaction() } + +// IsEIP4844 returns an indicator if the args contains EIP4844 fields. +func (args *TransactionArgs) IsEIP4844() bool { + return args.BlobHashes != nil || args.BlobFeeCap != nil +} diff --git a/internal/ethapi/transaction_args_test.go b/internal/ethapi/transaction_args_test.go index b743064625..85006a073d 100644 --- a/internal/ethapi/transaction_args_test.go +++ b/internal/ethapi/transaction_args_test.go @@ -43,15 +43,16 @@ import ( // TestSetFeeDefaults tests the logic for filling in default fee values works as expected. func TestSetFeeDefaults(t *testing.T) { type test struct { - name string - isLondon bool - in *TransactionArgs - want *TransactionArgs - err error + name string + fork string // options: legacy, london, cancun + in *TransactionArgs + want *TransactionArgs + err error } var ( b = newBackendMock() + zero = (*hexutil.Big)(big.NewInt(0)) fortytwo = (*hexutil.Big)(big.NewInt(42)) maxFee = (*hexutil.Big)(new(big.Int).Add(new(big.Int).Mul(b.current.BaseFee, big.NewInt(2)), fortytwo.ToInt())) al = &types.AccessList{types.AccessTuple{Address: common.Address{0xaa}, StorageKeys: []common.Hash{{0x01}}}} @@ -61,51 +62,65 @@ func TestSetFeeDefaults(t *testing.T) { // Legacy txs { "legacy tx pre-London", - false, + "legacy", &TransactionArgs{}, &TransactionArgs{GasPrice: fortytwo}, nil, }, + { + "legacy tx pre-London with zero price", + "legacy", + &TransactionArgs{GasPrice: zero}, + &TransactionArgs{GasPrice: zero}, + nil, + }, { "legacy tx post-London, explicit gas price", - true, + "london", &TransactionArgs{GasPrice: fortytwo}, &TransactionArgs{GasPrice: fortytwo}, nil, }, + { + "legacy tx post-London with zero price", + "london", + &TransactionArgs{GasPrice: zero}, + nil, + errors.New("gasPrice must be non-zero after london fork"), + }, // Access list txs { "access list tx pre-London", - false, + "legacy", &TransactionArgs{AccessList: al}, &TransactionArgs{AccessList: al, GasPrice: fortytwo}, nil, }, { "access list tx post-London, explicit gas price", - false, + "legacy", &TransactionArgs{AccessList: al, GasPrice: fortytwo}, &TransactionArgs{AccessList: al, GasPrice: fortytwo}, nil, }, { "access list tx post-London", - true, + "london", &TransactionArgs{AccessList: al}, &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, nil, }, { "access list tx post-London, only max fee", - true, + "london", &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee}, &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, nil, }, { "access list tx post-London, only priority fee", - true, + "london", &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee}, &TransactionArgs{AccessList: al, MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, nil, @@ -114,84 +129,118 @@ func TestSetFeeDefaults(t *testing.T) { // Dynamic fee txs { "dynamic tx post-London", - true, + "london", &TransactionArgs{}, &TransactionArgs{MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, nil, }, { "dynamic tx post-London, only max fee", - true, + "london", &TransactionArgs{MaxFeePerGas: maxFee}, &TransactionArgs{MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, nil, }, { "dynamic tx post-London, only priority fee", - true, + "london", &TransactionArgs{MaxFeePerGas: maxFee}, &TransactionArgs{MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, nil, }, { "dynamic fee tx pre-London, maxFee set", - false, + "legacy", &TransactionArgs{MaxFeePerGas: maxFee}, nil, - errors.New("maxFeePerGas and maxPriorityFeePerGas are not valid before London is active"), + errors.New("maxFeePerGas and maxPriorityFeePerGas and maxFeePerBlobGas are not valid before London is active"), }, { "dynamic fee tx pre-London, priorityFee set", - false, + "legacy", &TransactionArgs{MaxPriorityFeePerGas: fortytwo}, nil, - errors.New("maxFeePerGas and maxPriorityFeePerGas are not valid before London is active"), + errors.New("maxFeePerGas and maxPriorityFeePerGas and maxFeePerBlobGas are not valid before London is active"), }, { "dynamic fee tx, maxFee < priorityFee", - true, + "london", &TransactionArgs{MaxFeePerGas: maxFee, MaxPriorityFeePerGas: (*hexutil.Big)(big.NewInt(1000))}, nil, errors.New("maxFeePerGas (0x3e) < maxPriorityFeePerGas (0x3e8)"), }, { "dynamic fee tx, maxFee < priorityFee while setting default", - true, + "london", &TransactionArgs{MaxFeePerGas: (*hexutil.Big)(big.NewInt(7))}, nil, errors.New("maxFeePerGas (0x7) < maxPriorityFeePerGas (0x2a)"), }, + { + "dynamic fee tx post-London, explicit gas price", + "london", + &TransactionArgs{MaxFeePerGas: zero, MaxPriorityFeePerGas: zero}, + nil, + errors.New("maxFeePerGas must be non-zero"), + }, // Misc { "set all fee parameters", - false, + "legacy", &TransactionArgs{GasPrice: fortytwo, MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, nil, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified"), }, { "set gas price and maxPriorityFee", - false, + "legacy", &TransactionArgs{GasPrice: fortytwo, MaxPriorityFeePerGas: fortytwo}, nil, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified"), }, { "set gas price and maxFee", - true, + "london", &TransactionArgs{GasPrice: fortytwo, MaxFeePerGas: maxFee}, nil, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified"), }, + // EIP-4844 + { + "set maxFeePerBlobGas pre cancun", + "london", + &TransactionArgs{BlobFeeCap: fortytwo}, + nil, + errors.New("maxFeePerBlobGas is not valid before Cancun is active"), + }, + { + "set maxFeePerBlobGas pre london", + "legacy", + &TransactionArgs{BlobFeeCap: fortytwo}, + nil, + errors.New("maxFeePerGas and maxPriorityFeePerGas and maxFeePerBlobGas are not valid before London is active"), + }, + { + "set gas price and maxFee for blob transaction", + "cancun", + &TransactionArgs{GasPrice: fortytwo, MaxFeePerGas: maxFee, BlobHashes: []common.Hash{}}, + nil, + errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified"), + }, + { + "fill maxFeePerBlobGas", + "cancun", + &TransactionArgs{BlobHashes: []common.Hash{}}, + &TransactionArgs{BlobHashes: []common.Hash{}, BlobFeeCap: (*hexutil.Big)(big.NewInt(4)), MaxFeePerGas: maxFee, MaxPriorityFeePerGas: fortytwo}, + nil, + }, } ctx := context.Background() for i, test := range tests { - if test.isLondon { - b.activateLondon() - } else { - b.deactivateLondon() + if err := b.setFork(test.fork); err != nil { + t.Fatalf("failed to set fork: %v", err) } got := test.in err := got.setFeeDefaults(ctx, b) @@ -213,6 +262,7 @@ type backendMock struct { } func newBackendMock() *backendMock { + var cancunTime uint64 = 600 config := ¶ms.ChainConfig{ ChainID: big.NewInt(42), HomesteadBlock: big.NewInt(0), @@ -228,6 +278,7 @@ func newBackendMock() *backendMock { MuirGlacierBlock: big.NewInt(0), BerlinBlock: big.NewInt(0), LondonBlock: big.NewInt(1000), + CancunTime: &cancunTime, } return &backendMock{ current: &types.Header{ @@ -243,13 +294,29 @@ func newBackendMock() *backendMock { } } -func (b *backendMock) activateLondon() { - b.current.Number = big.NewInt(1100) +func (b *backendMock) ProofKeeper() *core.ProofKeeper { + return nil } -func (b *backendMock) deactivateLondon() { - b.current.Number = big.NewInt(900) +func (b *backendMock) setFork(fork string) error { + if fork == "legacy" { + b.current.Number = big.NewInt(900) + b.current.Time = 555 + } else if fork == "london" { + b.current.Number = big.NewInt(1100) + b.current.Time = 555 + } else if fork == "cancun" { + b.current.Number = big.NewInt(1100) + b.current.Time = 700 + // Blob base fee will be 2 + excess := uint64(2314058) + b.current.ExcessBlobGas = &excess + } else { + return errors.New("invalid fork") + } + return nil } + func (b *backendMock) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { return big.NewInt(42), nil } @@ -305,8 +372,8 @@ func (b *backendMock) GetLogs(ctx context.Context, blockHash common.Hash, number return nil, nil } func (b *backendMock) GetTd(ctx context.Context, hash common.Hash) *big.Int { return nil } -func (b *backendMock) GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockCtx *vm.BlockContext) (*vm.EVM, func() error) { - return nil, nil +func (b *backendMock) GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockCtx *vm.BlockContext) *vm.EVM { + return nil } func (b *backendMock) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { return nil } func (b *backendMock) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { diff --git a/internal/flags/categories.go b/internal/flags/categories.go index de5ef2714a..fe2e6d29d4 100644 --- a/internal/flags/categories.go +++ b/internal/flags/categories.go @@ -36,6 +36,7 @@ const ( LoggingCategory = "LOGGING AND DEBUGGING" MetricsCategory = "METRICS AND STATS" MiscCategory = "MISC" + TestingCategory = "TESTING" DeprecatedCategory = "ALIASED (deprecated)" ) diff --git a/internal/flags/helpers.go b/internal/flags/helpers.go index d4b8e373cc..d9d1f79036 100644 --- a/internal/flags/helpers.go +++ b/internal/flags/helpers.go @@ -105,7 +105,7 @@ func MigrateGlobalFlags(ctx *cli.Context) { func doMigrateFlags(ctx *cli.Context) { // Figure out if there are any aliases of commands. If there are, we want // to ignore them when iterating over the flags. - var aliases = make(map[string]bool) + aliases := make(map[string]bool) for _, fl := range ctx.Command.Flags { for _, alias := range fl.Names()[1:] { aliases[alias] = true @@ -239,15 +239,24 @@ func AutoEnvVars(flags []cli.Flag, prefix string) { case *cli.StringFlag: flag.EnvVars = append(flag.EnvVars, envvar) + case *cli.StringSliceFlag: + flag.EnvVars = append(flag.EnvVars, envvar) + case *cli.BoolFlag: flag.EnvVars = append(flag.EnvVars, envvar) case *cli.IntFlag: flag.EnvVars = append(flag.EnvVars, envvar) + case *cli.Int64Flag: + flag.EnvVars = append(flag.EnvVars, envvar) + case *cli.Uint64Flag: flag.EnvVars = append(flag.EnvVars, envvar) + case *cli.Float64Flag: + flag.EnvVars = append(flag.EnvVars, envvar) + case *cli.DurationFlag: flag.EnvVars = append(flag.EnvVars, envvar) diff --git a/internal/jsre/deps/web3.js b/internal/jsre/deps/web3.js index 7a09fddab0..f23c65584c 100644 --- a/internal/jsre/deps/web3.js +++ b/internal/jsre/deps/web3.js @@ -1033,7 +1033,7 @@ var formatOutputInt = function (param) { * * @method formatOutputUInt * @param {SolidityParam} - * @returns {BigNumeber} right-aligned output bytes formatted to uint + * @returns {BigNumber} right-aligned output bytes formatted to uint */ var formatOutputUInt = function (param) { var value = param.staticPart() || "0"; diff --git a/internal/reexec/reexec.go b/internal/reexec/reexec.go new file mode 100644 index 0000000000..af8d347986 --- /dev/null +++ b/internal/reexec/reexec.go @@ -0,0 +1,35 @@ +// This file originates from Docker/Moby, +// https://github.com/moby/moby/blob/master/pkg/reexec/reexec.go +// Licensed under Apache License 2.0: https://github.com/moby/moby/blob/master/LICENSE +// Copyright 2013-2018 Docker, Inc. +// +// Package reexec facilitates the busybox style reexec of the docker binary that +// we require because of the forking limitations of using Go. Handlers can be +// registered with a name and the argv 0 of the exec of the binary will be used +// to find and execute custom init paths. +package reexec + +import ( + "fmt" + "os" +) + +var registeredInitializers = make(map[string]func()) + +// Register adds an initialization func under the specified name +func Register(name string, initializer func()) { + if _, exists := registeredInitializers[name]; exists { + panic(fmt.Sprintf("reexec func already registered under name %q", name)) + } + registeredInitializers[name] = initializer +} + +// Init is called as the first part of the exec process and returns true if an +// initialization function was called. +func Init() bool { + if initializer, ok := registeredInitializers[os.Args[0]]; ok { + initializer() + return true + } + return false +} diff --git a/internal/reexec/self_linux.go b/internal/reexec/self_linux.go new file mode 100644 index 0000000000..956d09326a --- /dev/null +++ b/internal/reexec/self_linux.go @@ -0,0 +1,14 @@ +// This file originates from Docker/Moby, +// https://github.com/moby/moby/blob/master/pkg/reexec/ +// Licensed under Apache License 2.0: https://github.com/moby/moby/blob/master/LICENSE +// Copyright 2013-2018 Docker, Inc. + +//go:build linux + +package reexec + +// Self returns the path to the current process's binary. +// Returns "/proc/self/exe". +func Self() string { + return "/proc/self/exe" +} diff --git a/internal/reexec/self_others.go b/internal/reexec/self_others.go new file mode 100644 index 0000000000..a9f502ca87 --- /dev/null +++ b/internal/reexec/self_others.go @@ -0,0 +1,32 @@ +// This file originates from Docker/Moby, +// https://github.com/moby/moby/blob/master/pkg/reexec/ +// Licensed under Apache License 2.0: https://github.com/moby/moby/blob/master/LICENSE +// Copyright 2013-2018 Docker, Inc. + +//go:build !linux + +package reexec + +import ( + "os" + "os/exec" + "path/filepath" +) + +// Self returns the path to the current process's binary. +// Uses os.Args[0]. +func Self() string { + name := os.Args[0] + if filepath.Base(name) == name { + if lp, err := exec.LookPath(name); err == nil { + return lp + } + } + // handle conversion of relative paths to absolute + if absName, err := filepath.Abs(name); err == nil { + return absName + } + // if we couldn't get absolute name, return original + // (NOTE: Go only errors on Abs() if os.Getwd fails) + return name +} diff --git a/internal/testlog/testlog.go b/internal/testlog/testlog.go index 684339f16d..3cdbea6e05 100644 --- a/internal/testlog/testlog.go +++ b/internal/testlog/testlog.go @@ -18,26 +18,19 @@ package testlog import ( + "bytes" + "context" + "fmt" "sync" "testing" "github.com/ethereum/go-ethereum/log" + "golang.org/x/exp/slog" ) -// Handler returns a log handler which logs to the unit test log of t. -func Handler(t *testing.T, level log.Lvl) log.Handler { - return log.LvlFilterHandler(level, &handler{t, log.TerminalFormat(false)}) -} - -type handler struct { - t *testing.T - fmt log.Format -} - -func (h *handler) Log(r *log.Record) error { - h.t.Logf("%s", h.fmt.Format(r)) - return nil -} +const ( + termTimeFormat = "01-02|15:04:05.000" +) // logger implements log.Logger such that all output goes to the unit test log via // t.Logf(). All methods in between logger.Trace, logger.Debug, etc. are marked as test @@ -51,25 +44,68 @@ type logger struct { } type bufHandler struct { - buf []*log.Record - fmt log.Format + buf []slog.Record + attrs []slog.Attr + level slog.Level } -func (h *bufHandler) Log(r *log.Record) error { +func (h *bufHandler) Handle(_ context.Context, r slog.Record) error { h.buf = append(h.buf, r) return nil } +func (h *bufHandler) Enabled(_ context.Context, lvl slog.Level) bool { + return lvl <= h.level +} + +func (h *bufHandler) WithAttrs(attrs []slog.Attr) slog.Handler { + records := make([]slog.Record, len(h.buf)) + copy(records[:], h.buf[:]) + return &bufHandler{ + records, + append(h.attrs, attrs...), + h.level, + } +} + +func (h *bufHandler) WithGroup(_ string) slog.Handler { + panic("not implemented") +} + // Logger returns a logger which logs to the unit test log of t. -func Logger(t *testing.T, level log.Lvl) log.Logger { - l := &logger{ +func Logger(t *testing.T, level slog.Level) log.Logger { + handler := bufHandler{ + []slog.Record{}, + []slog.Attr{}, + level, + } + return &logger{ + t: t, + l: log.NewLogger(&handler), + mu: new(sync.Mutex), + h: &handler, + } +} + +// LoggerWithHandler returns +func LoggerWithHandler(t *testing.T, handler slog.Handler) log.Logger { + var bh bufHandler + return &logger{ t: t, - l: log.New(), + l: log.NewLogger(handler), mu: new(sync.Mutex), - h: &bufHandler{fmt: log.TerminalFormat(false)}, + h: &bh, } - l.l.SetHandler(log.LvlFilterHandler(level, l.h)) - return l +} + +func (l *logger) Handler() slog.Handler { + return l.l.Handler() +} + +func (l *logger) Write(level slog.Level, msg string, ctx ...interface{}) {} + +func (l *logger) Enabled(ctx context.Context, level slog.Level) bool { + return l.l.Enabled(ctx, level) } func (l *logger) Trace(msg string, ctx ...interface{}) { @@ -80,6 +116,14 @@ func (l *logger) Trace(msg string, ctx ...interface{}) { l.flush() } +func (l *logger) Log(level slog.Level, msg string, ctx ...interface{}) { + l.t.Helper() + l.mu.Lock() + defer l.mu.Unlock() + l.l.Log(level, msg, ctx...) + l.flush() +} + func (l *logger) Debug(msg string, ctx ...interface{}) { l.t.Helper() l.mu.Lock() @@ -120,23 +164,44 @@ func (l *logger) Crit(msg string, ctx ...interface{}) { l.flush() } -func (l *logger) New(ctx ...interface{}) log.Logger { - return &logger{l.t, l.l.New(ctx...), l.mu, l.h} +func (l *logger) With(ctx ...interface{}) log.Logger { + return &logger{l.t, l.l.With(ctx...), l.mu, l.h} } -func (l *logger) GetHandler() log.Handler { - return l.l.GetHandler() +func (l *logger) New(ctx ...interface{}) log.Logger { + return l.With(ctx...) } -func (l *logger) SetHandler(h log.Handler) { - l.l.SetHandler(h) +// terminalFormat formats a message similarly to the NewTerminalHandler in the log package. +// The difference is that terminalFormat does not escape messages/attributes and does not pad attributes. +func (h *bufHandler) terminalFormat(r slog.Record) string { + buf := &bytes.Buffer{} + lvl := log.LevelAlignedString(r.Level) + attrs := []slog.Attr{} + r.Attrs(func(attr slog.Attr) bool { + attrs = append(attrs, attr) + return true + }) + + attrs = append(h.attrs, attrs...) + + fmt.Fprintf(buf, "%s[%s] %s ", lvl, r.Time.Format(termTimeFormat), r.Message) + if length := len(r.Message); length < 40 { + buf.Write(bytes.Repeat([]byte{' '}, 40-length)) + } + + for _, attr := range attrs { + fmt.Fprintf(buf, " %s=%s", attr.Key, string(log.FormatSlogValue(attr.Value, nil))) + } + buf.WriteByte('\n') + return buf.String() } // flush writes all buffered messages and clears the buffer. func (l *logger) flush() { l.t.Helper() for _, r := range l.h.buf { - l.t.Logf("%s", l.h.fmt.Format(r)) + l.t.Logf("%s", l.h.terminalFormat(r)) } l.h.buf = nil } diff --git a/les/api.go b/les/api.go deleted file mode 100644 index e8490f7b0f..0000000000 --- a/les/api.go +++ /dev/null @@ -1,349 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "errors" - "fmt" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - vfs "github.com/ethereum/go-ethereum/les/vflux/server" - "github.com/ethereum/go-ethereum/p2p/enode" -) - -var errUnknownBenchmarkType = errors.New("unknown benchmark type") - -// LightServerAPI provides an API to access the LES light server. -type LightServerAPI struct { - server *LesServer - defaultPosFactors, defaultNegFactors vfs.PriceFactors -} - -// NewLightServerAPI creates a new LES light server API. -func NewLightServerAPI(server *LesServer) *LightServerAPI { - return &LightServerAPI{ - server: server, - defaultPosFactors: defaultPosFactors, - defaultNegFactors: defaultNegFactors, - } -} - -// parseNode parses either an enode address a raw hex node id -func parseNode(node string) (enode.ID, error) { - if id, err := enode.ParseID(node); err == nil { - return id, nil - } - if node, err := enode.Parse(enode.ValidSchemes, node); err == nil { - return node.ID(), nil - } else { - return enode.ID{}, err - } -} - -// ServerInfo returns global server parameters -func (api *LightServerAPI) ServerInfo() map[string]interface{} { - res := make(map[string]interface{}) - res["minimumCapacity"] = api.server.minCapacity - res["maximumCapacity"] = api.server.maxCapacity - _, res["totalCapacity"] = api.server.clientPool.Limits() - _, res["totalConnectedCapacity"] = api.server.clientPool.Active() - res["priorityConnectedCapacity"] = 0 //TODO connect when token sale module is added - return res -} - -// ClientInfo returns information about clients listed in the ids list or matching the given tags -func (api *LightServerAPI) ClientInfo(nodes []string) map[enode.ID]map[string]interface{} { - var ids []enode.ID - for _, node := range nodes { - if id, err := parseNode(node); err == nil { - ids = append(ids, id) - } - } - - res := make(map[enode.ID]map[string]interface{}) - if len(ids) == 0 { - ids = api.server.peers.ids() - } - for _, id := range ids { - if peer := api.server.peers.peer(id); peer != nil { - res[id] = api.clientInfo(peer, peer.balance) - } else { - api.server.clientPool.BalanceOperation(id, "", func(balance vfs.AtomicBalanceOperator) { - res[id] = api.clientInfo(nil, balance) - }) - } - } - return res -} - -// PriorityClientInfo returns information about clients with a positive balance -// in the given ID range (stop excluded). If stop is null then the iterator stops -// only at the end of the ID space. MaxCount limits the number of results returned. -// If maxCount limit is applied but there are more potential results then the ID -// of the next potential result is included in the map with an empty structure -// assigned to it. -func (api *LightServerAPI) PriorityClientInfo(start, stop enode.ID, maxCount int) map[enode.ID]map[string]interface{} { - res := make(map[enode.ID]map[string]interface{}) - ids := api.server.clientPool.GetPosBalanceIDs(start, stop, maxCount+1) - if len(ids) > maxCount { - res[ids[maxCount]] = make(map[string]interface{}) - ids = ids[:maxCount] - } - for _, id := range ids { - if peer := api.server.peers.peer(id); peer != nil { - res[id] = api.clientInfo(peer, peer.balance) - } else { - api.server.clientPool.BalanceOperation(id, "", func(balance vfs.AtomicBalanceOperator) { - res[id] = api.clientInfo(nil, balance) - }) - } - } - return res -} - -// clientInfo creates a client info data structure -func (api *LightServerAPI) clientInfo(peer *clientPeer, balance vfs.ReadOnlyBalance) map[string]interface{} { - info := make(map[string]interface{}) - pb, nb := balance.GetBalance() - info["isConnected"] = peer != nil - info["pricing/balance"] = pb - info["priority"] = pb != 0 - // cb := api.server.clientPool.ndb.getCurrencyBalance(id) - // info["pricing/currency"] = cb.amount - if peer != nil { - info["connectionTime"] = float64(mclock.Now()-peer.connectedAt) / float64(time.Second) - info["capacity"] = peer.getCapacity() - info["pricing/negBalance"] = nb - } - return info -} - -// setParams either sets the given parameters for a single connected client (if specified) -// or the default parameters applicable to clients connected in the future -func (api *LightServerAPI) setParams(params map[string]interface{}, client *clientPeer, posFactors, negFactors *vfs.PriceFactors) (updateFactors bool, err error) { - defParams := client == nil - for name, value := range params { - errValue := func() error { - return fmt.Errorf("invalid value for parameter '%s'", name) - } - setFactor := func(v *float64) { - if val, ok := value.(float64); ok && val >= 0 { - *v = val / float64(time.Second) - updateFactors = true - } else { - err = errValue() - } - } - - switch { - case name == "pricing/timeFactor": - setFactor(&posFactors.TimeFactor) - case name == "pricing/capacityFactor": - setFactor(&posFactors.CapacityFactor) - case name == "pricing/requestCostFactor": - setFactor(&posFactors.RequestFactor) - case name == "pricing/negative/timeFactor": - setFactor(&negFactors.TimeFactor) - case name == "pricing/negative/capacityFactor": - setFactor(&negFactors.CapacityFactor) - case name == "pricing/negative/requestCostFactor": - setFactor(&negFactors.RequestFactor) - case !defParams && name == "capacity": - if capacity, ok := value.(float64); ok && uint64(capacity) >= api.server.minCapacity { - _, err = api.server.clientPool.SetCapacity(client.Node(), uint64(capacity), 0, false) - // time factor recalculation is performed automatically by the balance tracker - } else { - err = errValue() - } - default: - if defParams { - err = fmt.Errorf("invalid default parameter '%s'", name) - } else { - err = fmt.Errorf("invalid client parameter '%s'", name) - } - } - if err != nil { - return - } - } - return -} - -// SetClientParams sets client parameters for all clients listed in the ids list -// or all connected clients if the list is empty -func (api *LightServerAPI) SetClientParams(nodes []string, params map[string]interface{}) error { - var err error - for _, node := range nodes { - var id enode.ID - if id, err = parseNode(node); err != nil { - return err - } - if peer := api.server.peers.peer(id); peer != nil { - posFactors, negFactors := peer.balance.GetPriceFactors() - update, e := api.setParams(params, peer, &posFactors, &negFactors) - if update { - peer.balance.SetPriceFactors(posFactors, negFactors) - } - if e != nil { - err = e - } - } else { - err = fmt.Errorf("client %064x is not connected", id) - } - } - return err -} - -// SetDefaultParams sets the default parameters applicable to clients connected in the future -func (api *LightServerAPI) SetDefaultParams(params map[string]interface{}) error { - update, err := api.setParams(params, nil, &api.defaultPosFactors, &api.defaultNegFactors) - if update { - api.server.clientPool.SetDefaultFactors(api.defaultPosFactors, api.defaultNegFactors) - } - return err -} - -// SetConnectedBias set the connection bias, which is applied to already connected clients -// So that already connected client won't be kicked out very soon and we can ensure all -// connected clients can have enough time to request or sync some data. -// When the input parameter `bias` < 0 (illegal), return error. -func (api *LightServerAPI) SetConnectedBias(bias time.Duration) error { - if bias < time.Duration(0) { - return fmt.Errorf("bias illegal: %v less than 0", bias) - } - api.server.clientPool.SetConnectedBias(bias) - return nil -} - -// AddBalance adds the given amount to the balance of a client if possible and returns -// the balance before and after the operation -func (api *LightServerAPI) AddBalance(node string, amount int64) (balance [2]uint64, err error) { - var id enode.ID - if id, err = parseNode(node); err != nil { - return - } - api.server.clientPool.BalanceOperation(id, "", func(nb vfs.AtomicBalanceOperator) { - balance[0], balance[1], err = nb.AddBalance(amount) - }) - return -} - -// Benchmark runs a request performance benchmark with a given set of measurement setups -// in multiple passes specified by passCount. The measurement time for each setup in each -// pass is specified in milliseconds by length. -// -// Note: measurement time is adjusted for each pass depending on the previous ones. -// Therefore a controlled total measurement time is achievable in multiple passes. -func (api *LightServerAPI) Benchmark(setups []map[string]interface{}, passCount, length int) ([]map[string]interface{}, error) { - benchmarks := make([]requestBenchmark, len(setups)) - for i, setup := range setups { - if t, ok := setup["type"].(string); ok { - getInt := func(field string, def int) int { - if value, ok := setup[field].(float64); ok { - return int(value) - } - return def - } - getBool := func(field string, def bool) bool { - if value, ok := setup[field].(bool); ok { - return value - } - return def - } - switch t { - case "header": - benchmarks[i] = &benchmarkBlockHeaders{ - amount: getInt("amount", 1), - skip: getInt("skip", 1), - byHash: getBool("byHash", false), - reverse: getBool("reverse", false), - } - case "body": - benchmarks[i] = &benchmarkBodiesOrReceipts{receipts: false} - case "receipts": - benchmarks[i] = &benchmarkBodiesOrReceipts{receipts: true} - case "proof": - benchmarks[i] = &benchmarkProofsOrCode{code: false} - case "code": - benchmarks[i] = &benchmarkProofsOrCode{code: true} - case "cht": - benchmarks[i] = &benchmarkHelperTrie{ - bloom: false, - reqCount: getInt("amount", 1), - } - case "bloom": - benchmarks[i] = &benchmarkHelperTrie{ - bloom: true, - reqCount: getInt("amount", 1), - } - case "txSend": - benchmarks[i] = &benchmarkTxSend{} - case "txStatus": - benchmarks[i] = &benchmarkTxStatus{} - default: - return nil, errUnknownBenchmarkType - } - } else { - return nil, errUnknownBenchmarkType - } - } - rs := api.server.handler.runBenchmark(benchmarks, passCount, time.Millisecond*time.Duration(length)) - result := make([]map[string]interface{}, len(setups)) - for i, r := range rs { - res := make(map[string]interface{}) - if r.err == nil { - res["totalCount"] = r.totalCount - res["avgTime"] = r.avgTime - res["maxInSize"] = r.maxInSize - res["maxOutSize"] = r.maxOutSize - } else { - res["error"] = r.err.Error() - } - result[i] = res - } - return result, nil -} - -// DebugAPI provides an API to debug LES light server functionality. -type DebugAPI struct { - server *LesServer -} - -// NewDebugAPI creates a new LES light server debug API. -func NewDebugAPI(server *LesServer) *DebugAPI { - return &DebugAPI{ - server: server, - } -} - -// FreezeClient forces a temporary client freeze which normally happens when the server is overloaded -func (api *DebugAPI) FreezeClient(node string) error { - var ( - id enode.ID - err error - ) - if id, err = parseNode(node); err != nil { - return err - } - if peer := api.server.peers.peer(id); peer != nil { - peer.freeze() - return nil - } else { - return fmt.Errorf("client %064x is not connected", id[:]) - } -} diff --git a/les/api_backend.go b/les/api_backend.go deleted file mode 100644 index fce7f01758..0000000000 --- a/les/api_backend.go +++ /dev/null @@ -1,345 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "context" - "errors" - "math/big" - "time" - - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/bloombits" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/eth/gasprice" - "github.com/ethereum/go-ethereum/eth/tracers" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/event" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rpc" -) - -type LesApiBackend struct { - extRPCEnabled bool - allowUnprotectedTxs bool - eth *LightEthereum - gpo *gasprice.Oracle -} - -func (b *LesApiBackend) ChainConfig() *params.ChainConfig { - return b.eth.chainConfig -} - -func (b *LesApiBackend) CurrentBlock() *types.Header { - return b.eth.BlockChain().CurrentHeader() -} - -func (b *LesApiBackend) SetHead(number uint64) { - b.eth.blockchain.SetHead(number) -} - -func (b *LesApiBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { - // Return the latest current as the pending one since there - // is no pending notion in the light client. TODO(rjl493456442) - // unify the behavior of `HeaderByNumber` and `PendingBlockAndReceipts`. - if number == rpc.PendingBlockNumber { - return b.eth.blockchain.CurrentHeader(), nil - } - if number == rpc.LatestBlockNumber { - return b.eth.blockchain.CurrentHeader(), nil - } - return b.eth.blockchain.GetHeaderByNumberOdr(ctx, uint64(number)) -} - -func (b *LesApiBackend) HeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Header, error) { - if blockNr, ok := blockNrOrHash.Number(); ok { - return b.HeaderByNumber(ctx, blockNr) - } - if hash, ok := blockNrOrHash.Hash(); ok { - header, err := b.HeaderByHash(ctx, hash) - if err != nil { - return nil, err - } - if header == nil { - return nil, errors.New("header for hash not found") - } - if blockNrOrHash.RequireCanonical && b.eth.blockchain.GetCanonicalHash(header.Number.Uint64()) != hash { - return nil, errors.New("hash is not currently canonical") - } - return header, nil - } - return nil, errors.New("invalid arguments; neither block nor hash specified") -} - -func (b *LesApiBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { - return b.eth.blockchain.GetHeaderByHash(hash), nil -} - -func (b *LesApiBackend) BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) { - header, err := b.HeaderByNumber(ctx, number) - if header == nil || err != nil { - return nil, err - } - return b.BlockByHash(ctx, header.Hash()) -} - -func (b *LesApiBackend) BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { - return b.eth.blockchain.GetBlockByHash(ctx, hash) -} - -func (b *LesApiBackend) BlockByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Block, error) { - if blockNr, ok := blockNrOrHash.Number(); ok { - return b.BlockByNumber(ctx, blockNr) - } - if hash, ok := blockNrOrHash.Hash(); ok { - block, err := b.BlockByHash(ctx, hash) - if err != nil { - return nil, err - } - if block == nil { - return nil, errors.New("header found, but block body is missing") - } - if blockNrOrHash.RequireCanonical && b.eth.blockchain.GetCanonicalHash(block.NumberU64()) != hash { - return nil, errors.New("hash is not currently canonical") - } - return block, nil - } - return nil, errors.New("invalid arguments; neither block nor hash specified") -} - -func (b *LesApiBackend) GetBody(ctx context.Context, hash common.Hash, number rpc.BlockNumber) (*types.Body, error) { - return light.GetBody(ctx, b.eth.odr, hash, uint64(number)) -} - -func (b *LesApiBackend) PendingBlockAndReceipts() (*types.Block, types.Receipts) { - return nil, nil -} - -func (b *LesApiBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error) { - header, err := b.HeaderByNumber(ctx, number) - if err != nil { - return nil, nil, err - } - if header == nil { - return nil, nil, errors.New("header not found") - } - return light.NewState(ctx, header, b.eth.odr), header, nil -} - -func (b *LesApiBackend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error) { - if blockNr, ok := blockNrOrHash.Number(); ok { - return b.StateAndHeaderByNumber(ctx, blockNr) - } - if hash, ok := blockNrOrHash.Hash(); ok { - header := b.eth.blockchain.GetHeaderByHash(hash) - if header == nil { - return nil, nil, errors.New("header for hash not found") - } - if blockNrOrHash.RequireCanonical && b.eth.blockchain.GetCanonicalHash(header.Number.Uint64()) != hash { - return nil, nil, errors.New("hash is not currently canonical") - } - return light.NewState(ctx, header, b.eth.odr), header, nil - } - return nil, nil, errors.New("invalid arguments; neither block nor hash specified") -} - -func (b *LesApiBackend) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) { - if number := rawdb.ReadHeaderNumber(b.eth.chainDb, hash); number != nil { - return light.GetBlockReceipts(ctx, b.eth.odr, hash, *number) - } - return nil, nil -} - -func (b *LesApiBackend) GetLogs(ctx context.Context, hash common.Hash, number uint64) ([][]*types.Log, error) { - return light.GetBlockLogs(ctx, b.eth.odr, hash, number) -} - -func (b *LesApiBackend) GetTd(ctx context.Context, hash common.Hash) *big.Int { - if number := rawdb.ReadHeaderNumber(b.eth.chainDb, hash); number != nil { - return b.eth.blockchain.GetTdOdr(ctx, hash, *number) - } - return nil -} - -func (b *LesApiBackend) GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockCtx *vm.BlockContext) (*vm.EVM, func() error) { - if vmConfig == nil { - vmConfig = new(vm.Config) - } - txContext := core.NewEVMTxContext(msg) - context := core.NewEVMBlockContext(header, b.eth.blockchain, nil, b.eth.chainConfig, state) - if blockCtx != nil { - context = *blockCtx - } - return vm.NewEVM(context, txContext, state, b.eth.chainConfig, *vmConfig), state.Error -} - -func (b *LesApiBackend) SendTx(ctx context.Context, signedTx *types.Transaction) error { - return b.eth.txPool.Add(ctx, signedTx) -} - -func (b *LesApiBackend) RemoveTx(txHash common.Hash) { - b.eth.txPool.RemoveTx(txHash) -} - -func (b *LesApiBackend) GetPoolTransactions() (types.Transactions, error) { - return b.eth.txPool.GetTransactions() -} - -func (b *LesApiBackend) GetPoolTransaction(txHash common.Hash) *types.Transaction { - return b.eth.txPool.GetTransaction(txHash) -} - -func (b *LesApiBackend) GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) { - return light.GetTransaction(ctx, b.eth.odr, txHash) -} - -func (b *LesApiBackend) GetPoolNonce(ctx context.Context, addr common.Address) (uint64, error) { - return b.eth.txPool.GetNonce(ctx, addr) -} - -func (b *LesApiBackend) Stats() (pending int, queued int) { - return b.eth.txPool.Stats(), 0 -} - -func (b *LesApiBackend) TxPoolContent() (map[common.Address][]*types.Transaction, map[common.Address][]*types.Transaction) { - return b.eth.txPool.Content() -} - -func (b *LesApiBackend) TxPoolContentFrom(addr common.Address) ([]*types.Transaction, []*types.Transaction) { - return b.eth.txPool.ContentFrom(addr) -} - -func (b *LesApiBackend) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription { - return b.eth.txPool.SubscribeNewTxsEvent(ch) -} - -func (b *LesApiBackend) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { - return b.eth.blockchain.SubscribeChainEvent(ch) -} - -func (b *LesApiBackend) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { - return b.eth.blockchain.SubscribeChainHeadEvent(ch) -} - -func (b *LesApiBackend) SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription { - return b.eth.blockchain.SubscribeChainSideEvent(ch) -} - -func (b *LesApiBackend) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { - return b.eth.blockchain.SubscribeLogsEvent(ch) -} - -func (b *LesApiBackend) SubscribePendingLogsEvent(ch chan<- []*types.Log) event.Subscription { - return event.NewSubscription(func(quit <-chan struct{}) error { - <-quit - return nil - }) -} - -func (b *LesApiBackend) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { - return b.eth.blockchain.SubscribeRemovedLogsEvent(ch) -} - -func (b *LesApiBackend) SyncProgress() ethereum.SyncProgress { - return ethereum.SyncProgress{} -} - -func (b *LesApiBackend) ProtocolVersion() int { - return b.eth.LesVersion() + 10000 -} - -func (b *LesApiBackend) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { - return b.gpo.SuggestTipCap(ctx) -} - -func (b *LesApiBackend) FeeHistory(ctx context.Context, blockCount uint64, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (firstBlock *big.Int, reward [][]*big.Int, baseFee []*big.Int, gasUsedRatio []float64, err error) { - return b.gpo.FeeHistory(ctx, blockCount, lastBlock, rewardPercentiles) -} - -func (b *LesApiBackend) ChainDb() ethdb.Database { - return b.eth.chainDb -} - -func (b *LesApiBackend) AccountManager() *accounts.Manager { - return b.eth.accountManager -} - -func (b *LesApiBackend) ExtRPCEnabled() bool { - return b.extRPCEnabled -} - -func (b *LesApiBackend) UnprotectedAllowed() bool { - return b.allowUnprotectedTxs -} - -func (b *LesApiBackend) RPCGasCap() uint64 { - return b.eth.config.RPCGasCap -} - -func (b *LesApiBackend) RPCEVMTimeout() time.Duration { - return b.eth.config.RPCEVMTimeout -} - -func (b *LesApiBackend) RPCTxFeeCap() float64 { - return b.eth.config.RPCTxFeeCap -} - -func (b *LesApiBackend) BloomStatus() (uint64, uint64) { - if b.eth.bloomIndexer == nil { - return 0, 0 - } - sections, _, _ := b.eth.bloomIndexer.Sections() - return params.BloomBitsBlocksClient, sections -} - -func (b *LesApiBackend) ServiceFilter(ctx context.Context, session *bloombits.MatcherSession) { - for i := 0; i < bloomFilterThreads; i++ { - go session.Multiplex(bloomRetrievalBatch, bloomRetrievalWait, b.eth.bloomRequests) - } -} - -func (b *LesApiBackend) Engine() consensus.Engine { - return b.eth.engine -} - -func (b *LesApiBackend) CurrentHeader() *types.Header { - return b.eth.blockchain.CurrentHeader() -} - -func (b *LesApiBackend) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, readOnly bool, preferDisk bool) (*state.StateDB, tracers.StateReleaseFunc, error) { - return b.eth.stateAtBlock(ctx, block, reexec) -} - -func (b *LesApiBackend) StateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (*core.Message, vm.BlockContext, *state.StateDB, tracers.StateReleaseFunc, error) { - return b.eth.stateAtTransaction(ctx, block, txIndex, reexec) -} - -func (b *LesApiBackend) HistoricalRPCService() *rpc.Client { - return b.eth.historicalRPCService -} - -func (b *LesApiBackend) Genesis() *types.Block { - return b.eth.blockchain.Genesis() -} diff --git a/les/api_test.go b/les/api_test.go deleted file mode 100644 index 484c95504c..0000000000 --- a/les/api_test.go +++ /dev/null @@ -1,512 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "context" - crand "crypto/rand" - "errors" - "flag" - "math/rand" - "os" - "sync" - "sync/atomic" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/eth" - "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/les/flowcontrol" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/rpc" - "github.com/mattn/go-colorable" -) - -// Additional command line flags for the test binary. -var ( - loglevel = flag.Int("loglevel", 0, "verbosity of logs") - simAdapter = flag.String("adapter", "exec", "type of simulation: sim|socket|exec|docker") -) - -func TestMain(m *testing.M) { - flag.Parse() - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) - // register the Delivery service which will run as a devp2p - // protocol when using the exec adapter - adapters.RegisterLifecycles(services) - os.Exit(m.Run()) -} - -// This test is not meant to be a part of the automatic testing process because it -// runs for a long time and also requires a large database in order to do a meaningful -// request performance test. When testServerDataDir is empty, the test is skipped. - -const ( - testServerDataDir = "" // should always be empty on the master branch - testServerCapacity = 200 - testMaxClients = 10 - testTolerance = 0.1 - minRelCap = 0.2 -) - -func TestCapacityAPI3(t *testing.T) { - testCapacityAPI(t, 3) -} - -func TestCapacityAPI6(t *testing.T) { - testCapacityAPI(t, 6) -} - -func TestCapacityAPI10(t *testing.T) { - testCapacityAPI(t, 10) -} - -// testCapacityAPI runs an end-to-end simulation test connecting one server with -// a given number of clients. It sets different priority capacities to all clients -// except a randomly selected one which runs in free client mode. All clients send -// similar requests at the maximum allowed rate and the test verifies whether the -// ratio of processed requests is close enough to the ratio of assigned capacities. -// Running multiple rounds with different settings ensures that changing capacity -// while connected and going back and forth between free and priority mode with -// the supplied API calls is also thoroughly tested. -func testCapacityAPI(t *testing.T, clientCount int) { - // Skip test if no data dir specified - if testServerDataDir == "" { - return - } - for !testSim(t, 1, clientCount, []string{testServerDataDir}, nil, func(ctx context.Context, net *simulations.Network, servers []*simulations.Node, clients []*simulations.Node) bool { - if len(servers) != 1 { - t.Fatalf("Invalid number of servers: %d", len(servers)) - } - server := servers[0] - - serverRpcClient, err := server.Client() - if err != nil { - t.Fatalf("Failed to obtain rpc client: %v", err) - } - headNum, headHash := getHead(ctx, t, serverRpcClient) - minCap, totalCap := getCapacityInfo(ctx, t, serverRpcClient) - testCap := totalCap * 3 / 4 - t.Logf("Server testCap: %d minCap: %d head number: %d head hash: %064x\n", testCap, minCap, headNum, headHash) - reqMinCap := uint64(float64(testCap) * minRelCap / (minRelCap + float64(len(clients)-1))) - if minCap > reqMinCap { - t.Fatalf("Minimum client capacity (%d) bigger than required minimum for this test (%d)", minCap, reqMinCap) - } - freeIdx := rand.Intn(len(clients)) - - clientRpcClients := make([]*rpc.Client, len(clients)) - for i, client := range clients { - var err error - clientRpcClients[i], err = client.Client() - if err != nil { - t.Fatalf("Failed to obtain rpc client: %v", err) - } - t.Log("connecting client", i) - if i != freeIdx { - setCapacity(ctx, t, serverRpcClient, client.ID(), testCap/uint64(len(clients))) - } - net.Connect(client.ID(), server.ID()) - - for { - select { - case <-ctx.Done(): - t.Fatalf("Timeout") - default: - } - num, hash := getHead(ctx, t, clientRpcClients[i]) - if num == headNum && hash == headHash { - t.Log("client", i, "synced") - break - } - time.Sleep(time.Millisecond * 200) - } - } - - var wg sync.WaitGroup - stop := make(chan struct{}) - - reqCount := make([]atomic.Uint64, len(clientRpcClients)) - - // Send light request like crazy. - for i, c := range clientRpcClients { - wg.Add(1) - i, c := i, c - go func() { - defer wg.Done() - - queue := make(chan struct{}, 100) - reqCount[i].Store(0) - for { - select { - case queue <- struct{}{}: - select { - case <-stop: - return - case <-ctx.Done(): - return - default: - wg.Add(1) - go func() { - ok := testRequest(ctx, t, c) - wg.Done() - <-queue - if ok { - if reqCount[i].Add(1)%10000 == 0 { - freezeClient(ctx, t, serverRpcClient, clients[i].ID()) - } - } - }() - } - case <-stop: - return - case <-ctx.Done(): - return - } - } - }() - } - - processedSince := func(start []uint64) []uint64 { - res := make([]uint64, len(reqCount)) - for i := range reqCount { - res[i] = reqCount[i].Load() - if start != nil { - res[i] -= start[i] - } - } - return res - } - - weights := make([]float64, len(clients)) - for c := 0; c < 5; c++ { - setCapacity(ctx, t, serverRpcClient, clients[freeIdx].ID(), minCap) - freeIdx = rand.Intn(len(clients)) - var sum float64 - for i := range clients { - if i == freeIdx { - weights[i] = 0 - } else { - weights[i] = rand.Float64()*(1-minRelCap) + minRelCap - } - sum += weights[i] - } - for i, client := range clients { - weights[i] *= float64(testCap-minCap-100) / sum - capacity := uint64(weights[i]) - if i != freeIdx && capacity < getCapacity(ctx, t, serverRpcClient, client.ID()) { - setCapacity(ctx, t, serverRpcClient, client.ID(), capacity) - } - } - setCapacity(ctx, t, serverRpcClient, clients[freeIdx].ID(), 0) - for i, client := range clients { - capacity := uint64(weights[i]) - if i != freeIdx && capacity > getCapacity(ctx, t, serverRpcClient, client.ID()) { - setCapacity(ctx, t, serverRpcClient, client.ID(), capacity) - } - } - weights[freeIdx] = float64(minCap) - for i := range clients { - weights[i] /= float64(testCap) - } - - time.Sleep(flowcontrol.DecParamDelay) - t.Log("Starting measurement") - t.Logf("Relative weights:") - for i := range clients { - t.Logf(" %f", weights[i]) - } - t.Log() - start := processedSince(nil) - for { - select { - case <-ctx.Done(): - t.Fatalf("Timeout") - default: - } - - _, totalCap = getCapacityInfo(ctx, t, serverRpcClient) - if totalCap < testCap { - t.Log("Total capacity underrun") - close(stop) - wg.Wait() - return false - } - - processed := processedSince(start) - var avg uint64 - t.Logf("Processed") - for i, p := range processed { - t.Logf(" %d", p) - processed[i] = uint64(float64(p) / weights[i]) - avg += processed[i] - } - avg /= uint64(len(processed)) - - if avg >= 10000 { - var maxDev float64 - for _, p := range processed { - dev := float64(int64(p-avg)) / float64(avg) - t.Logf(" %7.4f", dev) - if dev < 0 { - dev = -dev - } - if dev > maxDev { - maxDev = dev - } - } - t.Logf(" max deviation: %f totalCap: %d\n", maxDev, totalCap) - if maxDev <= testTolerance { - t.Log("success") - break - } - } else { - t.Log() - } - time.Sleep(time.Millisecond * 200) - } - } - - close(stop) - wg.Wait() - - for i := range reqCount { - t.Log("client", i, "processed", reqCount[i].Load()) - } - return true - }) { - t.Log("restarting test") - } -} - -func getHead(ctx context.Context, t *testing.T, client *rpc.Client) (uint64, common.Hash) { - res := make(map[string]interface{}) - if err := client.CallContext(ctx, &res, "eth_getBlockByNumber", "latest", false); err != nil { - t.Fatalf("Failed to obtain head block: %v", err) - } - numStr, ok := res["number"].(string) - if !ok { - t.Fatalf("RPC block number field invalid") - } - num, err := hexutil.DecodeUint64(numStr) - if err != nil { - t.Fatalf("Failed to decode RPC block number: %v", err) - } - hashStr, ok := res["hash"].(string) - if !ok { - t.Fatalf("RPC block number field invalid") - } - hash := common.HexToHash(hashStr) - return num, hash -} - -func testRequest(ctx context.Context, t *testing.T, client *rpc.Client) bool { - var res string - var addr common.Address - crand.Read(addr[:]) - c, cancel := context.WithTimeout(ctx, time.Second*12) - defer cancel() - err := client.CallContext(c, &res, "eth_getBalance", addr, "latest") - if err != nil { - t.Log("request error:", err) - } - return err == nil -} - -func freezeClient(ctx context.Context, t *testing.T, server *rpc.Client, clientID enode.ID) { - if err := server.CallContext(ctx, nil, "debug_freezeClient", clientID); err != nil { - t.Fatalf("Failed to freeze client: %v", err) - } -} - -func setCapacity(ctx context.Context, t *testing.T, server *rpc.Client, clientID enode.ID, cap uint64) { - params := make(map[string]interface{}) - params["capacity"] = cap - if err := server.CallContext(ctx, nil, "les_setClientParams", []enode.ID{clientID}, []string{}, params); err != nil { - t.Fatalf("Failed to set client capacity: %v", err) - } -} - -func getCapacity(ctx context.Context, t *testing.T, server *rpc.Client, clientID enode.ID) uint64 { - var res map[enode.ID]map[string]interface{} - if err := server.CallContext(ctx, &res, "les_clientInfo", []enode.ID{clientID}, []string{}); err != nil { - t.Fatalf("Failed to get client info: %v", err) - } - info, ok := res[clientID] - if !ok { - t.Fatalf("Missing client info") - } - v, ok := info["capacity"] - if !ok { - t.Fatalf("Missing field in client info: capacity") - } - vv, ok := v.(float64) - if !ok { - t.Fatalf("Failed to decode capacity field") - } - return uint64(vv) -} - -func getCapacityInfo(ctx context.Context, t *testing.T, server *rpc.Client) (minCap, totalCap uint64) { - var res map[string]interface{} - if err := server.CallContext(ctx, &res, "les_serverInfo"); err != nil { - t.Fatalf("Failed to query server info: %v", err) - } - decode := func(s string) uint64 { - v, ok := res[s] - if !ok { - t.Fatalf("Missing field in server info: %s", s) - } - vv, ok := v.(float64) - if !ok { - t.Fatalf("Failed to decode server info field: %s", s) - } - return uint64(vv) - } - minCap = decode("minimumCapacity") - totalCap = decode("totalCapacity") - return -} - -var services = adapters.LifecycleConstructors{ - "lesclient": newLesClientService, - "lesserver": newLesServerService, -} - -func NewNetwork() (*simulations.Network, func(), error) { - adapter, adapterTeardown, err := NewAdapter(*simAdapter, services) - if err != nil { - return nil, adapterTeardown, err - } - defaultService := "streamer" - net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{ - ID: "0", - DefaultService: defaultService, - }) - teardown := func() { - adapterTeardown() - net.Shutdown() - } - return net, teardown, nil -} - -func NewAdapter(adapterType string, services adapters.LifecycleConstructors) (adapter adapters.NodeAdapter, teardown func(), err error) { - teardown = func() {} - switch adapterType { - case "sim": - adapter = adapters.NewSimAdapter(services) - // case "socket": - // adapter = adapters.NewSocketAdapter(services) - case "exec": - baseDir, err0 := os.MkdirTemp("", "les-test") - if err0 != nil { - return nil, teardown, err0 - } - teardown = func() { os.RemoveAll(baseDir) } - adapter = adapters.NewExecAdapter(baseDir) - /*case "docker": - adapter, err = adapters.NewDockerAdapter() - if err != nil { - return nil, teardown, err - }*/ - default: - return nil, teardown, errors.New("adapter needs to be one of sim, socket, exec, docker") - } - return adapter, teardown, nil -} - -func testSim(t *testing.T, serverCount, clientCount int, serverDir, clientDir []string, test func(ctx context.Context, net *simulations.Network, servers []*simulations.Node, clients []*simulations.Node) bool) bool { - net, teardown, err := NewNetwork() - defer teardown() - if err != nil { - t.Fatalf("Failed to create network: %v", err) - } - timeout := 1800 * time.Second - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - - servers := make([]*simulations.Node, serverCount) - clients := make([]*simulations.Node, clientCount) - - for i := range clients { - clientconf := adapters.RandomNodeConfig() - clientconf.Lifecycles = []string{"lesclient"} - if len(clientDir) == clientCount { - clientconf.DataDir = clientDir[i] - } - client, err := net.NewNodeWithConfig(clientconf) - if err != nil { - t.Fatalf("Failed to create client: %v", err) - } - clients[i] = client - } - - for i := range servers { - serverconf := adapters.RandomNodeConfig() - serverconf.Lifecycles = []string{"lesserver"} - if len(serverDir) == serverCount { - serverconf.DataDir = serverDir[i] - } - server, err := net.NewNodeWithConfig(serverconf) - if err != nil { - t.Fatalf("Failed to create server: %v", err) - } - servers[i] = server - } - - for _, client := range clients { - if err := net.Start(client.ID()); err != nil { - t.Fatalf("Failed to start client node: %v", err) - } - } - for _, server := range servers { - if err := net.Start(server.ID()); err != nil { - t.Fatalf("Failed to start server node: %v", err) - } - } - - return test(ctx, net, servers, clients) -} - -func newLesClientService(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { - config := ethconfig.Defaults - config.SyncMode = downloader.LightSync - return New(stack, &config) -} - -func newLesServerService(ctx *adapters.ServiceContext, stack *node.Node) (node.Lifecycle, error) { - config := ethconfig.Defaults - config.SyncMode = downloader.FullSync - config.LightServ = testServerCapacity - config.LightPeers = testMaxClients - ethereum, err := eth.New(stack, &config) - if err != nil { - return nil, err - } - _, err = NewLesServer(stack, ethereum, &config) - if err != nil { - return nil, err - } - return ethereum, nil -} diff --git a/les/benchmark.go b/les/benchmark.go deleted file mode 100644 index ab93518349..0000000000 --- a/les/benchmark.go +++ /dev/null @@ -1,351 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - crand "crypto/rand" - "encoding/binary" - "errors" - "math/big" - "math/rand" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/les/flowcontrol" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" -) - -// requestBenchmark is an interface for different randomized request generators -type requestBenchmark interface { - // init initializes the generator for generating the given number of randomized requests - init(h *serverHandler, count int) error - // request initiates sending a single request to the given peer - request(peer *serverPeer, index int) error -} - -// benchmarkBlockHeaders implements requestBenchmark -type benchmarkBlockHeaders struct { - amount, skip int - reverse, byHash bool - offset, randMax int64 - hashes []common.Hash -} - -func (b *benchmarkBlockHeaders) init(h *serverHandler, count int) error { - d := int64(b.amount-1) * int64(b.skip+1) - b.offset = 0 - b.randMax = h.blockchain.CurrentHeader().Number.Int64() + 1 - d - if b.randMax < 0 { - return errors.New("chain is too short") - } - if b.reverse { - b.offset = d - } - if b.byHash { - b.hashes = make([]common.Hash, count) - for i := range b.hashes { - b.hashes[i] = rawdb.ReadCanonicalHash(h.chainDb, uint64(b.offset+rand.Int63n(b.randMax))) - } - } - return nil -} - -func (b *benchmarkBlockHeaders) request(peer *serverPeer, index int) error { - if b.byHash { - return peer.requestHeadersByHash(0, b.hashes[index], b.amount, b.skip, b.reverse) - } - return peer.requestHeadersByNumber(0, uint64(b.offset+rand.Int63n(b.randMax)), b.amount, b.skip, b.reverse) -} - -// benchmarkBodiesOrReceipts implements requestBenchmark -type benchmarkBodiesOrReceipts struct { - receipts bool - hashes []common.Hash -} - -func (b *benchmarkBodiesOrReceipts) init(h *serverHandler, count int) error { - randMax := h.blockchain.CurrentHeader().Number.Int64() + 1 - b.hashes = make([]common.Hash, count) - for i := range b.hashes { - b.hashes[i] = rawdb.ReadCanonicalHash(h.chainDb, uint64(rand.Int63n(randMax))) - } - return nil -} - -func (b *benchmarkBodiesOrReceipts) request(peer *serverPeer, index int) error { - if b.receipts { - return peer.requestReceipts(0, []common.Hash{b.hashes[index]}) - } - return peer.requestBodies(0, []common.Hash{b.hashes[index]}) -} - -// benchmarkProofsOrCode implements requestBenchmark -type benchmarkProofsOrCode struct { - code bool - headHash common.Hash -} - -func (b *benchmarkProofsOrCode) init(h *serverHandler, count int) error { - b.headHash = h.blockchain.CurrentHeader().Hash() - return nil -} - -func (b *benchmarkProofsOrCode) request(peer *serverPeer, index int) error { - key := make([]byte, 32) - crand.Read(key) - if b.code { - return peer.requestCode(0, []CodeReq{{BHash: b.headHash, AccountAddress: key}}) - } - return peer.requestProofs(0, []ProofReq{{BHash: b.headHash, Key: key}}) -} - -// benchmarkHelperTrie implements requestBenchmark -type benchmarkHelperTrie struct { - bloom bool - reqCount int - sectionCount, headNum uint64 -} - -func (b *benchmarkHelperTrie) init(h *serverHandler, count int) error { - if b.bloom { - b.sectionCount, b.headNum, _ = h.server.bloomTrieIndexer.Sections() - } else { - b.sectionCount, _, _ = h.server.chtIndexer.Sections() - b.headNum = b.sectionCount*params.CHTFrequency - 1 - } - if b.sectionCount == 0 { - return errors.New("no processed sections available") - } - return nil -} - -func (b *benchmarkHelperTrie) request(peer *serverPeer, index int) error { - reqs := make([]HelperTrieReq, b.reqCount) - - if b.bloom { - bitIdx := uint16(rand.Intn(2048)) - for i := range reqs { - key := make([]byte, 10) - binary.BigEndian.PutUint16(key[:2], bitIdx) - binary.BigEndian.PutUint64(key[2:], uint64(rand.Int63n(int64(b.sectionCount)))) - reqs[i] = HelperTrieReq{Type: htBloomBits, TrieIdx: b.sectionCount - 1, Key: key} - } - } else { - for i := range reqs { - key := make([]byte, 8) - binary.BigEndian.PutUint64(key[:], uint64(rand.Int63n(int64(b.headNum)))) - reqs[i] = HelperTrieReq{Type: htCanonical, TrieIdx: b.sectionCount - 1, Key: key, AuxReq: htAuxHeader} - } - } - - return peer.requestHelperTrieProofs(0, reqs) -} - -// benchmarkTxSend implements requestBenchmark -type benchmarkTxSend struct { - txs types.Transactions -} - -func (b *benchmarkTxSend) init(h *serverHandler, count int) error { - key, _ := crypto.GenerateKey() - addr := crypto.PubkeyToAddress(key.PublicKey) - signer := types.LatestSigner(h.server.chainConfig) - b.txs = make(types.Transactions, count) - - for i := range b.txs { - data := make([]byte, txSizeCostLimit) - crand.Read(data) - tx, err := types.SignTx(types.NewTransaction(0, addr, new(big.Int), 0, new(big.Int), data), signer, key) - if err != nil { - panic(err) - } - b.txs[i] = tx - } - return nil -} - -func (b *benchmarkTxSend) request(peer *serverPeer, index int) error { - enc, _ := rlp.EncodeToBytes(types.Transactions{b.txs[index]}) - return peer.sendTxs(0, 1, enc) -} - -// benchmarkTxStatus implements requestBenchmark -type benchmarkTxStatus struct{} - -func (b *benchmarkTxStatus) init(h *serverHandler, count int) error { - return nil -} - -func (b *benchmarkTxStatus) request(peer *serverPeer, index int) error { - var hash common.Hash - crand.Read(hash[:]) - return peer.requestTxStatus(0, []common.Hash{hash}) -} - -// benchmarkSetup stores measurement data for a single benchmark type -type benchmarkSetup struct { - req requestBenchmark - totalCount int - totalTime, avgTime time.Duration - maxInSize, maxOutSize uint32 - err error -} - -// runBenchmark runs a benchmark cycle for all benchmark types in the specified -// number of passes -func (h *serverHandler) runBenchmark(benchmarks []requestBenchmark, passCount int, targetTime time.Duration) []*benchmarkSetup { - setup := make([]*benchmarkSetup, len(benchmarks)) - for i, b := range benchmarks { - setup[i] = &benchmarkSetup{req: b} - } - for i := 0; i < passCount; i++ { - log.Info("Running benchmark", "pass", i+1, "total", passCount) - todo := make([]*benchmarkSetup, len(benchmarks)) - copy(todo, setup) - for len(todo) > 0 { - // select a random element - index := rand.Intn(len(todo)) - next := todo[index] - todo[index] = todo[len(todo)-1] - todo = todo[:len(todo)-1] - - if next.err == nil { - // calculate request count - count := 50 - if next.totalTime > 0 { - count = int(uint64(next.totalCount) * uint64(targetTime) / uint64(next.totalTime)) - } - if err := h.measure(next, count); err != nil { - next.err = err - } - } - } - } - log.Info("Benchmark completed") - - for _, s := range setup { - if s.err == nil { - s.avgTime = s.totalTime / time.Duration(s.totalCount) - } - } - return setup -} - -// meteredPipe implements p2p.MsgReadWriter and remembers the largest single -// message size sent through the pipe -type meteredPipe struct { - rw p2p.MsgReadWriter - maxSize uint32 -} - -func (m *meteredPipe) ReadMsg() (p2p.Msg, error) { - return m.rw.ReadMsg() -} - -func (m *meteredPipe) WriteMsg(msg p2p.Msg) error { - if msg.Size > m.maxSize { - m.maxSize = msg.Size - } - return m.rw.WriteMsg(msg) -} - -// measure runs a benchmark for a single type in a single pass, with the given -// number of requests -func (h *serverHandler) measure(setup *benchmarkSetup, count int) error { - clientPipe, serverPipe := p2p.MsgPipe() - clientMeteredPipe := &meteredPipe{rw: clientPipe} - serverMeteredPipe := &meteredPipe{rw: serverPipe} - var id enode.ID - crand.Read(id[:]) - - peer1 := newServerPeer(lpv2, NetworkId, false, p2p.NewPeer(id, "client", nil), clientMeteredPipe) - peer2 := newClientPeer(lpv2, NetworkId, p2p.NewPeer(id, "server", nil), serverMeteredPipe) - peer2.announceType = announceTypeNone - peer2.fcCosts = make(requestCostTable) - c := &requestCosts{} - for code := range requests { - peer2.fcCosts[code] = c - } - peer2.fcParams = flowcontrol.ServerParams{BufLimit: 1, MinRecharge: 1} - peer2.fcClient = flowcontrol.NewClientNode(h.server.fcManager, peer2.fcParams) - defer peer2.fcClient.Disconnect() - - if err := setup.req.init(h, count); err != nil { - return err - } - - errCh := make(chan error, 10) - start := mclock.Now() - - go func() { - for i := 0; i < count; i++ { - if err := setup.req.request(peer1, i); err != nil { - errCh <- err - return - } - } - }() - go func() { - for i := 0; i < count; i++ { - if err := h.handleMsg(peer2, &sync.WaitGroup{}); err != nil { - errCh <- err - return - } - } - }() - go func() { - for i := 0; i < count; i++ { - msg, err := clientPipe.ReadMsg() - if err != nil { - errCh <- err - return - } - var i interface{} - msg.Decode(&i) - } - // at this point we can be sure that the other two - // goroutines finished successfully too - close(errCh) - }() - select { - case err := <-errCh: - if err != nil { - return err - } - case <-h.closeCh: - clientPipe.Close() - serverPipe.Close() - return errors.New("Benchmark cancelled") - } - - setup.totalTime += time.Duration(mclock.Now() - start) - setup.totalCount += count - setup.maxInSize = clientMeteredPipe.maxSize - setup.maxOutSize = serverMeteredPipe.maxSize - clientPipe.Close() - serverPipe.Close() - return nil -} diff --git a/les/bloombits.go b/les/bloombits.go deleted file mode 100644 index a98524ce2e..0000000000 --- a/les/bloombits.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "time" - - "github.com/ethereum/go-ethereum/common/bitutil" - "github.com/ethereum/go-ethereum/light" -) - -const ( - // bloomServiceThreads is the number of goroutines used globally by an Ethereum - // instance to service bloombits lookups for all running filters. - bloomServiceThreads = 16 - - // bloomFilterThreads is the number of goroutines used locally per filter to - // multiplex requests onto the global servicing goroutines. - bloomFilterThreads = 3 - - // bloomRetrievalBatch is the maximum number of bloom bit retrievals to service - // in a single batch. - bloomRetrievalBatch = 16 - - // bloomRetrievalWait is the maximum time to wait for enough bloom bit requests - // to accumulate request an entire batch (avoiding hysteresis). - bloomRetrievalWait = time.Microsecond * 100 -) - -// startBloomHandlers starts a batch of goroutines to accept bloom bit database -// retrievals from possibly a range of filters and serving the data to satisfy. -func (eth *LightEthereum) startBloomHandlers(sectionSize uint64) { - for i := 0; i < bloomServiceThreads; i++ { - go func() { - defer eth.wg.Done() - for { - select { - case <-eth.closeCh: - return - - case request := <-eth.bloomRequests: - task := <-request - task.Bitsets = make([][]byte, len(task.Sections)) - compVectors, err := light.GetBloomBits(task.Context, eth.odr, task.Bit, task.Sections) - if err == nil { - for i := range task.Sections { - if blob, err := bitutil.DecompressBytes(compVectors[i], int(sectionSize/8)); err == nil { - task.Bitsets[i] = blob - } else { - task.Error = err - } - } - } else { - task.Error = err - } - request <- task - } - } - }() - } -} diff --git a/les/client.go b/les/client.go deleted file mode 100644 index 2c1d348e67..0000000000 --- a/les/client.go +++ /dev/null @@ -1,402 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package les implements the Light Ethereum Subprotocol. -package les - -import ( - "context" - "errors" - "strings" - "time" - - "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/bloombits" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/eth/gasprice" - "github.com/ethereum/go-ethereum/event" - "github.com/ethereum/go-ethereum/internal/ethapi" - "github.com/ethereum/go-ethereum/internal/shutdowncheck" - "github.com/ethereum/go-ethereum/les/vflux" - vfc "github.com/ethereum/go-ethereum/les/vflux/client" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/trie" -) - -type LightEthereum struct { - lesCommons - - peers *serverPeerSet - reqDist *requestDistributor - retriever *retrieveManager - odr *LesOdr - relay *lesTxRelay - handler *clientHandler - txPool *light.TxPool - blockchain *light.LightChain - serverPool *vfc.ServerPool - serverPoolIterator enode.Iterator - merger *consensus.Merger - - seqRPCService *rpc.Client - historicalRPCService *rpc.Client - - bloomRequests chan chan *bloombits.Retrieval // Channel receiving bloom data retrieval requests - bloomIndexer *core.ChainIndexer // Bloom indexer operating during block imports - - ApiBackend *LesApiBackend - eventMux *event.TypeMux - engine consensus.Engine - accountManager *accounts.Manager - netRPCService *ethapi.NetAPI - - p2pServer *p2p.Server - p2pConfig *p2p.Config - udpEnabled bool - - shutdownTracker *shutdowncheck.ShutdownTracker // Tracks if and when the node has shutdown ungracefully -} - -// New creates an instance of the light client. -func New(stack *node.Node, config *ethconfig.Config) (*LightEthereum, error) { - chainDb, err := stack.OpenDatabase("lightchaindata", config.DatabaseCache, config.DatabaseHandles, "eth/db/chaindata/", false) - if err != nil { - return nil, err - } - lesDb, err := stack.OpenDatabase("les.client", 0, 0, "eth/db/lesclient/", false) - if err != nil { - return nil, err - } - var overrides core.ChainOverrides - if config.OverrideCancun != nil { - overrides.OverrideCancun = config.OverrideCancun - } - if config.OverrideVerkle != nil { - overrides.OverrideVerkle = config.OverrideVerkle - } - triedb := trie.NewDatabase(chainDb, trie.HashDefaults) - chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, triedb, config.Genesis, &overrides) - if _, isCompat := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !isCompat { - return nil, genesisErr - } - engine, err := ethconfig.CreateConsensusEngine(chainConfig, chainDb) - if err != nil { - return nil, err - } - log.Info("") - log.Info(strings.Repeat("-", 153)) - for _, line := range strings.Split(chainConfig.Description(), "\n") { - log.Info(line) - } - log.Info(strings.Repeat("-", 153)) - log.Info("") - - peers := newServerPeerSet() - merger := consensus.NewMerger(chainDb) - leth := &LightEthereum{ - lesCommons: lesCommons{ - genesis: genesisHash, - config: config, - chainConfig: chainConfig, - iConfig: light.DefaultClientIndexerConfig, - chainDb: chainDb, - lesDb: lesDb, - closeCh: make(chan struct{}), - }, - peers: peers, - eventMux: stack.EventMux(), - reqDist: newRequestDistributor(peers, &mclock.System{}), - accountManager: stack.AccountManager(), - merger: merger, - engine: engine, - bloomRequests: make(chan chan *bloombits.Retrieval), - bloomIndexer: core.NewBloomIndexer(chainDb, params.BloomBitsBlocksClient, params.HelperTrieConfirmations), - p2pServer: stack.Server(), - p2pConfig: &stack.Config().P2P, - udpEnabled: stack.Config().P2P.DiscoveryV5, - shutdownTracker: shutdowncheck.NewShutdownTracker(chainDb), - } - - var prenegQuery vfc.QueryFunc - if leth.udpEnabled { - prenegQuery = leth.prenegQuery - } - leth.serverPool, leth.serverPoolIterator = vfc.NewServerPool(lesDb, []byte("serverpool:"), time.Second, prenegQuery, &mclock.System{}, nil, requestList) - leth.serverPool.AddMetrics(suggestedTimeoutGauge, totalValueGauge, serverSelectableGauge, serverConnectedGauge, sessionValueMeter, serverDialedMeter) - - leth.retriever = newRetrieveManager(peers, leth.reqDist, leth.serverPool.GetTimeout) - leth.relay = newLesTxRelay(peers, leth.retriever) - - leth.odr = NewLesOdr(chainDb, light.DefaultClientIndexerConfig, leth.peers, leth.retriever) - leth.chtIndexer = light.NewChtIndexer(chainDb, leth.odr, params.CHTFrequency, params.HelperTrieConfirmations, config.LightNoPrune) - leth.bloomTrieIndexer = light.NewBloomTrieIndexer(chainDb, leth.odr, params.BloomBitsBlocksClient, params.BloomTrieFrequency, config.LightNoPrune) - leth.odr.SetIndexers(leth.chtIndexer, leth.bloomTrieIndexer, leth.bloomIndexer) - - // Note: NewLightChain adds the trusted checkpoint so it needs an ODR with - // indexers already set but not started yet - if leth.blockchain, err = light.NewLightChain(leth.odr, leth.chainConfig, leth.engine); err != nil { - return nil, err - } - leth.chainReader = leth.blockchain - leth.txPool = light.NewTxPool(leth.chainConfig, leth.blockchain, leth.relay) - - // Note: AddChildIndexer starts the update process for the child - leth.bloomIndexer.AddChildIndexer(leth.bloomTrieIndexer) - leth.chtIndexer.Start(leth.blockchain) - leth.bloomIndexer.Start(leth.blockchain) - - // Rewind the chain in case of an incompatible config upgrade. - if compat, ok := genesisErr.(*params.ConfigCompatError); ok { - log.Warn("Rewinding chain to upgrade configuration", "err", compat) - if compat.RewindToTime > 0 { - leth.blockchain.SetHeadWithTimestamp(compat.RewindToTime) - } else { - leth.blockchain.SetHead(compat.RewindToBlock) - } - rawdb.WriteChainConfig(chainDb, genesisHash, chainConfig) - } - - leth.ApiBackend = &LesApiBackend{stack.Config().ExtRPCEnabled(), stack.Config().AllowUnprotectedTxs, leth, nil} - gpoParams := config.GPO - if gpoParams.Default == nil { - gpoParams.Default = config.Miner.GasPrice - } - leth.ApiBackend.gpo = gasprice.NewOracle(leth.ApiBackend, gpoParams) - - leth.handler = newClientHandler(leth) - - if config.RollupSequencerHTTP != "" { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - client, err := rpc.DialContext(ctx, config.RollupSequencerHTTP) - cancel() - if err != nil { - return nil, err - } - leth.seqRPCService = client - } - - if config.RollupHistoricalRPC != "" { - ctx, cancel := context.WithTimeout(context.Background(), config.RollupHistoricalRPCTimeout) - client, err := rpc.DialContext(ctx, config.RollupHistoricalRPC) - cancel() - if err != nil { - return nil, err - } - leth.historicalRPCService = client - } - - leth.netRPCService = ethapi.NewNetAPI(leth.p2pServer, leth.config.NetworkId) - - // Register the backend on the node - stack.RegisterAPIs(leth.APIs()) - stack.RegisterProtocols(leth.Protocols()) - stack.RegisterLifecycle(leth) - - // Successful startup; push a marker and check previous unclean shutdowns. - leth.shutdownTracker.MarkStartup() - - return leth, nil -} - -// VfluxRequest sends a batch of requests to the given node through discv5 UDP TalkRequest and returns the responses -func (s *LightEthereum) VfluxRequest(n *enode.Node, reqs vflux.Requests) vflux.Replies { - if !s.udpEnabled { - return nil - } - reqsEnc, _ := rlp.EncodeToBytes(&reqs) - repliesEnc, _ := s.p2pServer.DiscV5.TalkRequest(s.serverPool.DialNode(n), "vfx", reqsEnc) - var replies vflux.Replies - if len(repliesEnc) == 0 || rlp.DecodeBytes(repliesEnc, &replies) != nil { - return nil - } - return replies -} - -// vfxVersion returns the version number of the "les" service subdomain of the vflux UDP -// service, as advertised in the ENR record -func (s *LightEthereum) vfxVersion(n *enode.Node) uint { - if n.Seq() == 0 { - var err error - if !s.udpEnabled { - return 0 - } - if n, err = s.p2pServer.DiscV5.RequestENR(n); n != nil && err == nil && n.Seq() != 0 { - s.serverPool.Persist(n) - } else { - return 0 - } - } - - var les []rlp.RawValue - if err := n.Load(enr.WithEntry("les", &les)); err != nil || len(les) < 1 { - return 0 - } - var version uint - rlp.DecodeBytes(les[0], &version) // Ignore additional fields (for forward compatibility). - return version -} - -// prenegQuery sends a capacity query to the given server node to determine whether -// a connection slot is immediately available -func (s *LightEthereum) prenegQuery(n *enode.Node) int { - if s.vfxVersion(n) < 1 { - // UDP query not supported, always try TCP connection - return 1 - } - - var requests vflux.Requests - requests.Add("les", vflux.CapacityQueryName, vflux.CapacityQueryReq{ - Bias: 180, - AddTokens: []vflux.IntOrInf{{}}, - }) - replies := s.VfluxRequest(n, requests) - var cqr vflux.CapacityQueryReply - if replies.Get(0, &cqr) != nil || len(cqr) != 1 { // Note: Get returns an error if replies is nil - return -1 - } - if cqr[0] > 0 { - return 1 - } - return 0 -} - -type LightDummyAPI struct{} - -// Etherbase is the address that mining rewards will be sent to -func (s *LightDummyAPI) Etherbase() (common.Address, error) { - return common.Address{}, errors.New("mining is not supported in light mode") -} - -// Coinbase is the address that mining rewards will be sent to (alias for Etherbase) -func (s *LightDummyAPI) Coinbase() (common.Address, error) { - return common.Address{}, errors.New("mining is not supported in light mode") -} - -// Hashrate returns the POW hashrate -func (s *LightDummyAPI) Hashrate() hexutil.Uint { - return 0 -} - -// Mining returns an indication if this node is currently mining. -func (s *LightDummyAPI) Mining() bool { - return false -} - -// APIs returns the collection of RPC services the ethereum package offers. -// NOTE, some of these services probably need to be moved to somewhere else. -func (s *LightEthereum) APIs() []rpc.API { - apis := ethapi.GetAPIs(s.ApiBackend) - apis = append(apis, s.engine.APIs(s.BlockChain().HeaderChain())...) - return append(apis, []rpc.API{ - { - Namespace: "eth", - Service: &LightDummyAPI{}, - }, { - Namespace: "net", - Service: s.netRPCService, - }, { - Namespace: "vflux", - Service: s.serverPool.API(), - }, - }...) -} - -func (s *LightEthereum) ResetWithGenesisBlock(gb *types.Block) { - s.blockchain.ResetWithGenesisBlock(gb) -} - -func (s *LightEthereum) BlockChain() *light.LightChain { return s.blockchain } -func (s *LightEthereum) TxPool() *light.TxPool { return s.txPool } -func (s *LightEthereum) Engine() consensus.Engine { return s.engine } -func (s *LightEthereum) LesVersion() int { return int(ClientProtocolVersions[0]) } -func (s *LightEthereum) EventMux() *event.TypeMux { return s.eventMux } -func (s *LightEthereum) Merger() *consensus.Merger { return s.merger } - -// Protocols returns all the currently configured network protocols to start. -func (s *LightEthereum) Protocols() []p2p.Protocol { - return s.makeProtocols(ClientProtocolVersions, s.handler.runPeer, func(id enode.ID) interface{} { - if p := s.peers.peer(id.String()); p != nil { - return p.Info() - } - return nil - }, s.serverPoolIterator) -} - -// Start implements node.Lifecycle, starting all internal goroutines needed by the -// light ethereum protocol implementation. -func (s *LightEthereum) Start() error { - log.Warn("Light client mode is an experimental feature") - - // Regularly update shutdown marker - s.shutdownTracker.Start() - - if s.udpEnabled && s.p2pServer.DiscV5 == nil { - s.udpEnabled = false - log.Error("Discovery v5 is not initialized") - } - discovery, err := s.setupDiscovery() - if err != nil { - return err - } - s.serverPool.AddSource(discovery) - s.serverPool.Start() - // Start bloom request workers. - s.wg.Add(bloomServiceThreads) - s.startBloomHandlers(params.BloomBitsBlocksClient) - - return nil -} - -// Stop implements node.Lifecycle, terminating all internal goroutines used by the -// Ethereum protocol. -func (s *LightEthereum) Stop() error { - close(s.closeCh) - s.serverPool.Stop() - s.peers.close() - s.reqDist.close() - s.odr.Stop() - s.relay.Stop() - s.bloomIndexer.Close() - s.chtIndexer.Close() - s.blockchain.Stop() - s.handler.stop() - s.txPool.Stop() - s.engine.Close() - s.eventMux.Stop() - // Clean shutdown marker as the last thing before closing db - s.shutdownTracker.Stop() - - s.chainDb.Close() - s.lesDb.Close() - s.wg.Wait() - log.Info("Light ethereum stopped") - return nil -} diff --git a/les/client_handler.go b/les/client_handler.go deleted file mode 100644 index 50f6dce879..0000000000 --- a/les/client_handler.go +++ /dev/null @@ -1,309 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/core/forkid" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -// clientHandler is responsible for receiving and processing all incoming server -// responses. -type clientHandler struct { - forkFilter forkid.Filter - backend *LightEthereum - - closeCh chan struct{} - wg sync.WaitGroup // WaitGroup used to track all connected peers. -} - -func newClientHandler(backend *LightEthereum) *clientHandler { - handler := &clientHandler{ - forkFilter: forkid.NewFilter(backend.blockchain), - backend: backend, - closeCh: make(chan struct{}), - } - return handler -} - -func (h *clientHandler) stop() { - close(h.closeCh) - h.wg.Wait() -} - -// runPeer is the p2p protocol run function for the given version. -func (h *clientHandler) runPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) error { - peer := newServerPeer(int(version), h.backend.config.NetworkId, false, p, newMeteredMsgWriter(rw, int(version))) - defer peer.close() - h.wg.Add(1) - defer h.wg.Done() - err := h.handle(peer, false) - return err -} - -func (h *clientHandler) handle(p *serverPeer, noInitAnnounce bool) error { - if h.backend.peers.len() >= h.backend.config.LightPeers && !p.Peer.Info().Network.Trusted { - return p2p.DiscTooManyPeers - } - p.Log().Debug("Light Ethereum peer connected", "name", p.Name()) - - // Execute the LES handshake - forkid := forkid.NewID(h.backend.blockchain.Config(), h.backend.BlockChain().Genesis(), h.backend.blockchain.CurrentHeader().Number.Uint64(), h.backend.blockchain.CurrentHeader().Time) - if err := p.Handshake(h.backend.blockchain.Genesis().Hash(), forkid, h.forkFilter); err != nil { - p.Log().Debug("Light Ethereum handshake failed", "err", err) - return err - } - // Register peer with the server pool - if h.backend.serverPool != nil { - if nvt, err := h.backend.serverPool.RegisterNode(p.Node()); err == nil { - p.setValueTracker(nvt) - p.updateVtParams() - defer func() { - p.setValueTracker(nil) - h.backend.serverPool.UnregisterNode(p.Node()) - }() - } else { - return err - } - } - // Register the peer locally - if err := h.backend.peers.register(p); err != nil { - p.Log().Error("Light Ethereum peer registration failed", "err", err) - return err - } - - serverConnectionGauge.Update(int64(h.backend.peers.len())) - - connectedAt := mclock.Now() - defer func() { - h.backend.peers.unregister(p.id) - connectionTimer.Update(time.Duration(mclock.Now() - connectedAt)) - serverConnectionGauge.Update(int64(h.backend.peers.len())) - }() - - // Mark the peer starts to be served. - p.serving.Store(true) - defer p.serving.Store(false) - - // Spawn a main loop to handle all incoming messages. - for { - if err := h.handleMsg(p); err != nil { - p.Log().Debug("Light Ethereum message handling failed", "err", err) - p.fcServer.DumpLogs() - return err - } - } -} - -// handleMsg is invoked whenever an inbound message is received from a remote -// peer. The remote connection is torn down upon returning any error. -func (h *clientHandler) handleMsg(p *serverPeer) error { - // Read the next message from the remote peer, and ensure it's fully consumed - msg, err := p.rw.ReadMsg() - if err != nil { - return err - } - p.Log().Trace("Light Ethereum message arrived", "code", msg.Code, "bytes", msg.Size) - - if msg.Size > ProtocolMaxMsgSize { - return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) - } - defer msg.Discard() - - var deliverMsg *Msg - - // Handle the message depending on its contents - switch { - case msg.Code == AnnounceMsg: - p.Log().Trace("Received announce message") - var req announceData - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "%v: %v", msg, err) - } - if err := req.sanityCheck(); err != nil { - return err - } - update, size := req.Update.decode() - if p.rejectUpdate(size) { - return errResp(ErrRequestRejected, "") - } - p.updateFlowControl(update) - p.updateVtParams() - - if req.Hash != (common.Hash{}) { - if p.announceType == announceTypeNone { - return errResp(ErrUnexpectedResponse, "") - } - if p.announceType == announceTypeSigned { - if err := req.checkSignature(p.ID(), update); err != nil { - p.Log().Trace("Invalid announcement signature", "err", err) - return err - } - p.Log().Trace("Valid announcement signature") - } - p.Log().Trace("Announce message content", "number", req.Number, "hash", req.Hash, "td", req.Td, "reorg", req.ReorgDepth) - - // Update peer head information first and then notify the announcement - p.updateHead(req.Hash, req.Number, req.Td) - } - case msg.Code == BlockHeadersMsg: - p.Log().Trace("Received block header response message") - var resp struct { - ReqID, BV uint64 - Headers []*types.Header - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.ReceivedReply(resp.ReqID, resp.BV) - p.answeredRequest(resp.ReqID) - - deliverMsg = &Msg{ - MsgType: MsgBlockHeaders, - ReqID: resp.ReqID, - Obj: resp.Headers, - } - case msg.Code == BlockBodiesMsg: - p.Log().Trace("Received block bodies response") - var resp struct { - ReqID, BV uint64 - Data []*types.Body - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.ReceivedReply(resp.ReqID, resp.BV) - p.answeredRequest(resp.ReqID) - deliverMsg = &Msg{ - MsgType: MsgBlockBodies, - ReqID: resp.ReqID, - Obj: resp.Data, - } - case msg.Code == CodeMsg: - p.Log().Trace("Received code response") - var resp struct { - ReqID, BV uint64 - Data [][]byte - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.ReceivedReply(resp.ReqID, resp.BV) - p.answeredRequest(resp.ReqID) - deliverMsg = &Msg{ - MsgType: MsgCode, - ReqID: resp.ReqID, - Obj: resp.Data, - } - case msg.Code == ReceiptsMsg: - p.Log().Trace("Received receipts response") - var resp struct { - ReqID, BV uint64 - Receipts []types.Receipts - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.ReceivedReply(resp.ReqID, resp.BV) - p.answeredRequest(resp.ReqID) - deliverMsg = &Msg{ - MsgType: MsgReceipts, - ReqID: resp.ReqID, - Obj: resp.Receipts, - } - case msg.Code == ProofsV2Msg: - p.Log().Trace("Received les/2 proofs response") - var resp struct { - ReqID, BV uint64 - Data trienode.ProofList - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.ReceivedReply(resp.ReqID, resp.BV) - p.answeredRequest(resp.ReqID) - deliverMsg = &Msg{ - MsgType: MsgProofsV2, - ReqID: resp.ReqID, - Obj: resp.Data, - } - case msg.Code == HelperTrieProofsMsg: - p.Log().Trace("Received helper trie proof response") - var resp struct { - ReqID, BV uint64 - Data HelperTrieResps - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.ReceivedReply(resp.ReqID, resp.BV) - p.answeredRequest(resp.ReqID) - deliverMsg = &Msg{ - MsgType: MsgHelperTrieProofs, - ReqID: resp.ReqID, - Obj: resp.Data, - } - case msg.Code == TxStatusMsg: - p.Log().Trace("Received tx status response") - var resp struct { - ReqID, BV uint64 - Status []light.TxStatus - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.ReceivedReply(resp.ReqID, resp.BV) - p.answeredRequest(resp.ReqID) - deliverMsg = &Msg{ - MsgType: MsgTxStatus, - ReqID: resp.ReqID, - Obj: resp.Status, - } - case msg.Code == StopMsg && p.version >= lpv3: - p.freeze() - h.backend.retriever.frozen(p) - p.Log().Debug("Service stopped") - case msg.Code == ResumeMsg && p.version >= lpv3: - var bv uint64 - if err := msg.Decode(&bv); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.ResumeFreeze(bv) - p.unfreeze() - p.Log().Debug("Service resumed") - default: - p.Log().Trace("Received invalid message", "code", msg.Code) - return errResp(ErrInvalidMsgCode, "%v", msg.Code) - } - // Deliver the received response to retriever. - if deliverMsg != nil { - if err := h.backend.retriever.deliver(p, deliverMsg); err != nil { - if val := p.errCount.Add(1, mclock.Now()); val > maxResponseErrors { - return err - } - } - } - return nil -} diff --git a/les/commons.go b/les/commons.go deleted file mode 100644 index cb3fc430b7..0000000000 --- a/les/commons.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "fmt" - "math/big" - "sync" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/params" -) - -func errResp(code errCode, format string, v ...interface{}) error { - return fmt.Errorf("%v - %v", code, fmt.Sprintf(format, v...)) -} - -type chainReader interface { - CurrentHeader() *types.Header -} - -// lesCommons contains fields needed by both server and client. -type lesCommons struct { - genesis common.Hash - config *ethconfig.Config - chainConfig *params.ChainConfig - iConfig *light.IndexerConfig - chainDb, lesDb ethdb.Database - chainReader chainReader - chtIndexer, bloomTrieIndexer *core.ChainIndexer - - closeCh chan struct{} - wg sync.WaitGroup -} - -// NodeInfo represents a short summary of the Ethereum sub-protocol metadata -// known about the host peer. -type NodeInfo struct { - Network uint64 `json:"network"` // Ethereum network ID (1=Mainnet, Goerli=5) - Difficulty *big.Int `json:"difficulty"` // Total difficulty of the host's blockchain - Genesis common.Hash `json:"genesis"` // SHA3 hash of the host's genesis block - Config *params.ChainConfig `json:"config"` // Chain configuration for the fork rules - Head common.Hash `json:"head"` // SHA3 hash of the host's best owned block -} - -// makeProtocols creates protocol descriptors for the given LES versions. -func (c *lesCommons) makeProtocols(versions []uint, runPeer func(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) error, peerInfo func(id enode.ID) interface{}, dialCandidates enode.Iterator) []p2p.Protocol { - protos := make([]p2p.Protocol, len(versions)) - for i, version := range versions { - version := version - protos[i] = p2p.Protocol{ - Name: "les", - Version: version, - Length: ProtocolLengths[version], - NodeInfo: c.nodeInfo, - Run: func(peer *p2p.Peer, rw p2p.MsgReadWriter) error { - return runPeer(version, peer, rw) - }, - PeerInfo: peerInfo, - DialCandidates: dialCandidates, - } - } - return protos -} - -// nodeInfo retrieves some protocol metadata about the running host node. -func (c *lesCommons) nodeInfo() interface{} { - head := c.chainReader.CurrentHeader() - hash := head.Hash() - return &NodeInfo{ - Network: c.config.NetworkId, - Difficulty: rawdb.ReadTd(c.chainDb, hash, head.Number.Uint64()), - Genesis: c.genesis, - Config: c.chainConfig, - Head: hash, - } -} diff --git a/les/costtracker.go b/les/costtracker.go deleted file mode 100644 index 695d54e141..0000000000 --- a/les/costtracker.go +++ /dev/null @@ -1,517 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "encoding/binary" - "math" - "sync" - "sync/atomic" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/les/flowcontrol" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" -) - -const makeCostStats = false // make request cost statistics during operation - -var ( - // average request cost estimates based on serving time - reqAvgTimeCost = requestCostTable{ - GetBlockHeadersMsg: {150000, 30000}, - GetBlockBodiesMsg: {0, 700000}, - GetReceiptsMsg: {0, 1000000}, - GetCodeMsg: {0, 450000}, - GetProofsV2Msg: {0, 600000}, - GetHelperTrieProofsMsg: {0, 1000000}, - SendTxV2Msg: {0, 450000}, - GetTxStatusMsg: {0, 250000}, - } - // maximum incoming message size estimates - reqMaxInSize = requestCostTable{ - GetBlockHeadersMsg: {40, 0}, - GetBlockBodiesMsg: {0, 40}, - GetReceiptsMsg: {0, 40}, - GetCodeMsg: {0, 80}, - GetProofsV2Msg: {0, 80}, - GetHelperTrieProofsMsg: {0, 20}, - SendTxV2Msg: {0, 16500}, - GetTxStatusMsg: {0, 50}, - } - // maximum outgoing message size estimates - reqMaxOutSize = requestCostTable{ - GetBlockHeadersMsg: {0, 556}, - GetBlockBodiesMsg: {0, 100000}, - GetReceiptsMsg: {0, 200000}, - GetCodeMsg: {0, 50000}, - GetProofsV2Msg: {0, 4000}, - GetHelperTrieProofsMsg: {0, 4000}, - SendTxV2Msg: {0, 100}, - GetTxStatusMsg: {0, 100}, - } - // request amounts that have to fit into the minimum buffer size minBufferMultiplier times - minBufferReqAmount = map[uint64]uint64{ - GetBlockHeadersMsg: 192, - GetBlockBodiesMsg: 1, - GetReceiptsMsg: 1, - GetCodeMsg: 1, - GetProofsV2Msg: 1, - GetHelperTrieProofsMsg: 16, - SendTxV2Msg: 8, - GetTxStatusMsg: 64, - } - minBufferMultiplier = 3 -) - -const ( - maxCostFactor = 2 // ratio of maximum and average cost estimates - bufLimitRatio = 6000 // fixed bufLimit/MRR ratio - gfUsageThreshold = 0.5 - gfUsageTC = time.Second - gfRaiseTC = time.Second * 200 - gfDropTC = time.Second * 50 - gfDbKey = "_globalCostFactorV6" -) - -// costTracker is responsible for calculating costs and cost estimates on the -// server side. It continuously updates the global cost factor which is defined -// as the number of cost units per nanosecond of serving time in a single thread. -// It is based on statistics collected during serving requests in high-load periods -// and practically acts as a one-dimension request price scaling factor over the -// pre-defined cost estimate table. -// -// The reason for dynamically maintaining the global factor on the server side is: -// the estimated time cost of the request is fixed(hardcoded) but the configuration -// of the machine running the server is really different. Therefore, the request serving -// time in different machine will vary greatly. And also, the request serving time -// in same machine may vary greatly with different request pressure. -// -// In order to more effectively limit resources, we apply the global factor to serving -// time to make the result as close as possible to the estimated time cost no matter -// the server is slow or fast. And also we scale the totalRecharge with global factor -// so that fast server can serve more requests than estimation and slow server can -// reduce request pressure. -// -// Instead of scaling the cost values, the real value of cost units is changed by -// applying the factor to the serving times. This is more convenient because the -// changes in the cost factor can be applied immediately without always notifying -// the clients about the changed cost tables. -type costTracker struct { - db ethdb.Database - stopCh chan chan struct{} - - inSizeFactor float64 - outSizeFactor float64 - factor float64 - utilTarget float64 - minBufLimit uint64 - - gfLock sync.RWMutex - reqInfoCh chan reqInfo - totalRechargeCh chan uint64 - - stats map[uint64][]atomic.Uint64 // Used for testing purpose. - - // TestHooks - testing bool // Disable real cost evaluation for testing purpose. - testCostList RequestCostList // Customized cost table for testing purpose. -} - -// newCostTracker creates a cost tracker and loads the cost factor statistics from the database. -// It also returns the minimum capacity that can be assigned to any peer. -func newCostTracker(db ethdb.Database, config *ethconfig.Config) (*costTracker, uint64) { - utilTarget := float64(config.LightServ) * flowcontrol.FixedPointMultiplier / 100 - ct := &costTracker{ - db: db, - stopCh: make(chan chan struct{}), - reqInfoCh: make(chan reqInfo, 100), - utilTarget: utilTarget, - } - if config.LightIngress > 0 { - ct.inSizeFactor = utilTarget / float64(config.LightIngress) - } - if config.LightEgress > 0 { - ct.outSizeFactor = utilTarget / float64(config.LightEgress) - } - if makeCostStats { - ct.stats = make(map[uint64][]atomic.Uint64) - for code := range reqAvgTimeCost { - ct.stats[code] = make([]atomic.Uint64, 10) - } - } - ct.gfLoop() - costList := ct.makeCostList(ct.globalFactor() * 1.25) - for _, c := range costList { - amount := minBufferReqAmount[c.MsgCode] - cost := c.BaseCost + amount*c.ReqCost - if cost > ct.minBufLimit { - ct.minBufLimit = cost - } - } - ct.minBufLimit *= uint64(minBufferMultiplier) - return ct, (ct.minBufLimit-1)/bufLimitRatio + 1 -} - -// stop stops the cost tracker and saves the cost factor statistics to the database -func (ct *costTracker) stop() { - stopCh := make(chan struct{}) - ct.stopCh <- stopCh - <-stopCh - if makeCostStats { - ct.printStats() - } -} - -// makeCostList returns upper cost estimates based on the hardcoded cost estimate -// tables and the optionally specified incoming/outgoing bandwidth limits -func (ct *costTracker) makeCostList(globalFactor float64) RequestCostList { - maxCost := func(avgTimeCost, inSize, outSize uint64) uint64 { - cost := avgTimeCost * maxCostFactor - inSizeCost := uint64(float64(inSize) * ct.inSizeFactor * globalFactor) - if inSizeCost > cost { - cost = inSizeCost - } - outSizeCost := uint64(float64(outSize) * ct.outSizeFactor * globalFactor) - if outSizeCost > cost { - cost = outSizeCost - } - return cost - } - var list RequestCostList - for code, data := range reqAvgTimeCost { - baseCost := maxCost(data.baseCost, reqMaxInSize[code].baseCost, reqMaxOutSize[code].baseCost) - reqCost := maxCost(data.reqCost, reqMaxInSize[code].reqCost, reqMaxOutSize[code].reqCost) - if ct.minBufLimit != 0 { - // if minBufLimit is set then always enforce maximum request cost <= minBufLimit - maxCost := baseCost + reqCost*minBufferReqAmount[code] - if maxCost > ct.minBufLimit { - mul := 0.999 * float64(ct.minBufLimit) / float64(maxCost) - baseCost = uint64(float64(baseCost) * mul) - reqCost = uint64(float64(reqCost) * mul) - } - } - - list = append(list, requestCostListItem{ - MsgCode: code, - BaseCost: baseCost, - ReqCost: reqCost, - }) - } - return list -} - -// reqInfo contains the estimated time cost and the actual request serving time -// which acts as a feed source to update factor maintained by costTracker. -type reqInfo struct { - // avgTimeCost is the estimated time cost corresponding to maxCostTable. - avgTimeCost float64 - - // servingTime is the CPU time corresponding to the actual processing of - // the request. - servingTime float64 - - // msgCode indicates the type of request. - msgCode uint64 -} - -// gfLoop starts an event loop which updates the global cost factor which is -// calculated as a weighted average of the average estimate / serving time ratio. -// The applied weight equals the serving time if gfUsage is over a threshold, -// zero otherwise. gfUsage is the recent average serving time per time unit in -// an exponential moving window. This ensures that statistics are collected only -// under high-load circumstances where the measured serving times are relevant. -// The total recharge parameter of the flow control system which controls the -// total allowed serving time per second but nominated in cost units, should -// also be scaled with the cost factor and is also updated by this loop. -func (ct *costTracker) gfLoop() { - var ( - factor, totalRecharge float64 - gfLog, recentTime, recentAvg float64 - - lastUpdate, expUpdate = mclock.Now(), mclock.Now() - ) - - // Load historical cost factor statistics from the database. - data, _ := ct.db.Get([]byte(gfDbKey)) - if len(data) == 8 { - gfLog = math.Float64frombits(binary.BigEndian.Uint64(data[:])) - } - ct.factor = math.Exp(gfLog) - factor, totalRecharge = ct.factor, ct.utilTarget*ct.factor - - // In order to perform factor data statistics under the high request pressure, - // we only adjust factor when recent factor usage beyond the threshold. - threshold := gfUsageThreshold * float64(gfUsageTC) * ct.utilTarget / flowcontrol.FixedPointMultiplier - - go func() { - saveCostFactor := func() { - var data [8]byte - binary.BigEndian.PutUint64(data[:], math.Float64bits(gfLog)) - ct.db.Put([]byte(gfDbKey), data[:]) - log.Debug("global cost factor saved", "value", factor) - } - saveTicker := time.NewTicker(time.Minute * 10) - defer saveTicker.Stop() - - for { - select { - case r := <-ct.reqInfoCh: - relCost := int64(factor * r.servingTime * 100 / r.avgTimeCost) // Convert the value to a percentage form - - // Record more metrics if we are debugging - if metrics.EnabledExpensive { - switch r.msgCode { - case GetBlockHeadersMsg: - relativeCostHeaderHistogram.Update(relCost) - case GetBlockBodiesMsg: - relativeCostBodyHistogram.Update(relCost) - case GetReceiptsMsg: - relativeCostReceiptHistogram.Update(relCost) - case GetCodeMsg: - relativeCostCodeHistogram.Update(relCost) - case GetProofsV2Msg: - relativeCostProofHistogram.Update(relCost) - case GetHelperTrieProofsMsg: - relativeCostHelperProofHistogram.Update(relCost) - case SendTxV2Msg: - relativeCostSendTxHistogram.Update(relCost) - case GetTxStatusMsg: - relativeCostTxStatusHistogram.Update(relCost) - } - } - // SendTxV2 and GetTxStatus requests are two special cases. - // All other requests will only put pressure on the database, and - // the corresponding delay is relatively stable. While these two - // requests involve txpool query, which is usually unstable. - // - // TODO(rjl493456442) fixes this. - if r.msgCode == SendTxV2Msg || r.msgCode == GetTxStatusMsg { - continue - } - requestServedMeter.Mark(int64(r.servingTime)) - requestServedTimer.Update(time.Duration(r.servingTime)) - requestEstimatedMeter.Mark(int64(r.avgTimeCost / factor)) - requestEstimatedTimer.Update(time.Duration(r.avgTimeCost / factor)) - relativeCostHistogram.Update(relCost) - - now := mclock.Now() - dt := float64(now - expUpdate) - expUpdate = now - exp := math.Exp(-dt / float64(gfUsageTC)) - - // calculate factor correction until now, based on previous values - var gfCorr float64 - max := recentTime - if recentAvg > max { - max = recentAvg - } - // we apply continuous correction when MAX(recentTime, recentAvg) > threshold - if max > threshold { - // calculate correction time between last expUpdate and now - if max*exp >= threshold { - gfCorr = dt - } else { - gfCorr = math.Log(max/threshold) * float64(gfUsageTC) - } - // calculate log(factor) correction with the right direction and time constant - if recentTime > recentAvg { - // drop factor if actual serving times are larger than average estimates - gfCorr /= -float64(gfDropTC) - } else { - // raise factor if actual serving times are smaller than average estimates - gfCorr /= float64(gfRaiseTC) - } - } - // update recent cost values with current request - recentTime = recentTime*exp + r.servingTime - recentAvg = recentAvg*exp + r.avgTimeCost/factor - - if gfCorr != 0 { - // Apply the correction to factor - gfLog += gfCorr - factor = math.Exp(gfLog) - // Notify outside modules the new factor and totalRecharge. - if time.Duration(now-lastUpdate) > time.Second { - totalRecharge, lastUpdate = ct.utilTarget*factor, now - ct.gfLock.Lock() - ct.factor = factor - ch := ct.totalRechargeCh - ct.gfLock.Unlock() - if ch != nil { - select { - case ct.totalRechargeCh <- uint64(totalRecharge): - default: - } - } - globalFactorGauge.Update(int64(1000 * factor)) - log.Debug("global cost factor updated", "factor", factor) - } - } - recentServedGauge.Update(int64(recentTime)) - recentEstimatedGauge.Update(int64(recentAvg)) - - case <-saveTicker.C: - saveCostFactor() - - case stopCh := <-ct.stopCh: - saveCostFactor() - close(stopCh) - return - } - } - }() -} - -// globalFactor returns the current value of the global cost factor -func (ct *costTracker) globalFactor() float64 { - ct.gfLock.RLock() - defer ct.gfLock.RUnlock() - - return ct.factor -} - -// totalRecharge returns the current total recharge parameter which is used by -// flowcontrol.ClientManager and is scaled by the global cost factor -func (ct *costTracker) totalRecharge() uint64 { - ct.gfLock.RLock() - defer ct.gfLock.RUnlock() - - return uint64(ct.factor * ct.utilTarget) -} - -// subscribeTotalRecharge returns all future updates to the total recharge value -// through a channel and also returns the current value -func (ct *costTracker) subscribeTotalRecharge(ch chan uint64) uint64 { - ct.gfLock.Lock() - defer ct.gfLock.Unlock() - - ct.totalRechargeCh = ch - return uint64(ct.factor * ct.utilTarget) -} - -// updateStats updates the global cost factor and (if enabled) the real cost vs. -// average estimate statistics -func (ct *costTracker) updateStats(code, amount, servingTime, realCost uint64) { - avg := reqAvgTimeCost[code] - avgTimeCost := avg.baseCost + amount*avg.reqCost - select { - case ct.reqInfoCh <- reqInfo{float64(avgTimeCost), float64(servingTime), code}: - default: - } - if makeCostStats { - realCost <<= 4 - l := 0 - for l < 9 && realCost > avgTimeCost { - l++ - realCost >>= 1 - } - ct.stats[code][l].Add(1) - } -} - -// realCost calculates the final cost of a request based on actual serving time, -// incoming and outgoing message size -// -// Note: message size is only taken into account if bandwidth limitation is applied -// and the cost based on either message size is greater than the cost based on -// serving time. A maximum of the three costs is applied instead of their sum -// because the three limited resources (serving thread time and i/o bandwidth) can -// also be maxed out simultaneously. -func (ct *costTracker) realCost(servingTime uint64, inSize, outSize uint32) uint64 { - cost := float64(servingTime) - inSizeCost := float64(inSize) * ct.inSizeFactor - if inSizeCost > cost { - cost = inSizeCost - } - outSizeCost := float64(outSize) * ct.outSizeFactor - if outSizeCost > cost { - cost = outSizeCost - } - return uint64(cost * ct.globalFactor()) -} - -// printStats prints the distribution of real request cost relative to the average estimates -func (ct *costTracker) printStats() { - if ct.stats == nil { - return - } - for code, arr := range ct.stats { - log.Info("Request cost statistics", "code", code, "1/16", arr[0].Load(), "1/8", arr[1].Load(), "1/4", arr[2].Load(), "1/2", arr[3].Load(), "1", arr[4].Load(), "2", arr[5].Load(), "4", arr[6].Load(), "8", arr[7].Load(), "16", arr[8].Load(), ">16", arr[9].Load()) - } -} - -type ( - // requestCostTable assigns a cost estimate function to each request type - // which is a linear function of the requested amount - // (cost = baseCost + reqCost * amount) - requestCostTable map[uint64]*requestCosts - requestCosts struct { - baseCost, reqCost uint64 - } - - // RequestCostList is a list representation of request costs which is used for - // database storage and communication through the network - RequestCostList []requestCostListItem - requestCostListItem struct { - MsgCode, BaseCost, ReqCost uint64 - } -) - -// getMaxCost calculates the estimated cost for a given request type and amount -func (table requestCostTable) getMaxCost(code, amount uint64) uint64 { - costs := table[code] - return costs.baseCost + amount*costs.reqCost -} - -// decode converts a cost list to a cost table -func (list RequestCostList) decode(protocolLength uint64) requestCostTable { - table := make(requestCostTable) - for _, e := range list { - if e.MsgCode < protocolLength { - table[e.MsgCode] = &requestCosts{ - baseCost: e.BaseCost, - reqCost: e.ReqCost, - } - } - } - return table -} - -// testCostList returns a dummy request cost list used by tests -func testCostList(testCost uint64) RequestCostList { - cl := make(RequestCostList, len(reqAvgTimeCost)) - var max uint64 - for code := range reqAvgTimeCost { - if code > max { - max = code - } - } - i := 0 - for code := uint64(0); code <= max; code++ { - if _, ok := reqAvgTimeCost[code]; ok { - cl[i].MsgCode = code - cl[i].BaseCost = testCost - cl[i].ReqCost = 0 - i++ - } - } - return cl -} diff --git a/les/distributor.go b/les/distributor.go deleted file mode 100644 index a0319c67f7..0000000000 --- a/les/distributor.go +++ /dev/null @@ -1,313 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "container/list" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/les/utils" -) - -// requestDistributor implements a mechanism that distributes requests to -// suitable peers, obeying flow control rules and prioritizing them in creation -// order (even when a resend is necessary). -type requestDistributor struct { - clock mclock.Clock - reqQueue *list.List - lastReqOrder uint64 - peers map[distPeer]struct{} - peerLock sync.RWMutex - loopChn chan struct{} - loopNextSent bool - lock sync.Mutex - - closeCh chan struct{} - wg sync.WaitGroup -} - -// distPeer is an LES server peer interface for the request distributor. -// waitBefore returns either the necessary waiting time before sending a request -// with the given upper estimated cost or the estimated remaining relative buffer -// value after sending such a request (in which case the request can be sent -// immediately). At least one of these values is always zero. -type distPeer interface { - waitBefore(uint64) (time.Duration, float64) - canQueue() bool - queueSend(f func()) bool -} - -// distReq is the request abstraction used by the distributor. It is based on -// three callback functions: -// - getCost returns the upper estimate of the cost of sending the request to a given peer -// - canSend tells if the server peer is suitable to serve the request -// - request prepares sending the request to the given peer and returns a function that -// does the actual sending. Request order should be preserved but the callback itself should not -// block until it is sent because other peers might still be able to receive requests while -// one of them is blocking. Instead, the returned function is put in the peer's send queue. -type distReq struct { - getCost func(distPeer) uint64 - canSend func(distPeer) bool - request func(distPeer) func() - - reqOrder uint64 - sentChn chan distPeer - element *list.Element - waitForPeers mclock.AbsTime - enterQueue mclock.AbsTime -} - -// newRequestDistributor creates a new request distributor -func newRequestDistributor(peers *serverPeerSet, clock mclock.Clock) *requestDistributor { - d := &requestDistributor{ - clock: clock, - reqQueue: list.New(), - loopChn: make(chan struct{}, 2), - closeCh: make(chan struct{}), - peers: make(map[distPeer]struct{}), - } - if peers != nil { - peers.subscribe(d) - } - d.wg.Add(1) - go d.loop() - return d -} - -// registerPeer implements peerSetNotify -func (d *requestDistributor) registerPeer(p *serverPeer) { - d.peerLock.Lock() - d.peers[p] = struct{}{} - d.peerLock.Unlock() -} - -// unregisterPeer implements peerSetNotify -func (d *requestDistributor) unregisterPeer(p *serverPeer) { - d.peerLock.Lock() - delete(d.peers, p) - d.peerLock.Unlock() -} - -// registerTestPeer adds a new test peer -func (d *requestDistributor) registerTestPeer(p distPeer) { - d.peerLock.Lock() - d.peers[p] = struct{}{} - d.peerLock.Unlock() -} - -var ( - // distMaxWait is the maximum waiting time after which further necessary waiting - // times are recalculated based on new feedback from the servers - distMaxWait = time.Millisecond * 50 - - // waitForPeers is the time window in which a request does not fail even if it - // has no suitable peers to send to at the moment - waitForPeers = time.Second * 3 -) - -// main event loop -func (d *requestDistributor) loop() { - defer d.wg.Done() - for { - select { - case <-d.closeCh: - d.lock.Lock() - elem := d.reqQueue.Front() - for elem != nil { - req := elem.Value.(*distReq) - close(req.sentChn) - req.sentChn = nil - elem = elem.Next() - } - d.lock.Unlock() - return - case <-d.loopChn: - d.lock.Lock() - d.loopNextSent = false - loop: - for { - peer, req, wait := d.nextRequest() - if req != nil && wait == 0 { - chn := req.sentChn // save sentChn because remove sets it to nil - d.remove(req) - send := req.request(peer) - if send != nil { - peer.queueSend(send) - requestSendDelay.Update(time.Duration(d.clock.Now() - req.enterQueue)) - } - chn <- peer - close(chn) - } else { - if wait == 0 { - // no request to send and nothing to wait for; the next - // queued request will wake up the loop - break loop - } - d.loopNextSent = true // a "next" signal has been sent, do not send another one until this one has been received - if wait > distMaxWait { - // waiting times may be reduced by incoming request replies, if it is too long, recalculate it periodically - wait = distMaxWait - } - go func() { - d.clock.Sleep(wait) - d.loopChn <- struct{}{} - }() - break loop - } - } - d.lock.Unlock() - } - } -} - -// selectPeerItem represents a peer to be selected for a request by weightedRandomSelect -type selectPeerItem struct { - peer distPeer - req *distReq - weight uint64 -} - -func selectPeerWeight(i interface{}) uint64 { - return i.(selectPeerItem).weight -} - -// nextRequest returns the next possible request from any peer, along with the -// associated peer and necessary waiting time -func (d *requestDistributor) nextRequest() (distPeer, *distReq, time.Duration) { - checkedPeers := make(map[distPeer]struct{}) - elem := d.reqQueue.Front() - var ( - bestWait time.Duration - sel *utils.WeightedRandomSelect - ) - - d.peerLock.RLock() - defer d.peerLock.RUnlock() - - peerCount := len(d.peers) - for (len(checkedPeers) < peerCount || elem == d.reqQueue.Front()) && elem != nil { - req := elem.Value.(*distReq) - canSend := false - now := d.clock.Now() - if req.waitForPeers > now { - canSend = true - wait := time.Duration(req.waitForPeers - now) - if bestWait == 0 || wait < bestWait { - bestWait = wait - } - } - for peer := range d.peers { - if _, ok := checkedPeers[peer]; !ok && peer.canQueue() && req.canSend(peer) { - canSend = true - cost := req.getCost(peer) - wait, bufRemain := peer.waitBefore(cost) - if wait == 0 { - if sel == nil { - sel = utils.NewWeightedRandomSelect(selectPeerWeight) - } - sel.Update(selectPeerItem{peer: peer, req: req, weight: uint64(bufRemain*1000000) + 1}) - } else { - if bestWait == 0 || wait < bestWait { - bestWait = wait - } - } - checkedPeers[peer] = struct{}{} - } - } - next := elem.Next() - if !canSend && elem == d.reqQueue.Front() { - close(req.sentChn) - d.remove(req) - } - elem = next - } - - if sel != nil { - c := sel.Choose().(selectPeerItem) - return c.peer, c.req, 0 - } - return nil, nil, bestWait -} - -// queue adds a request to the distribution queue, returns a channel where the -// receiving peer is sent once the request has been sent (request callback returned). -// If the request is cancelled or timed out without suitable peers, the channel is -// closed without sending any peer references to it. -func (d *requestDistributor) queue(r *distReq) chan distPeer { - d.lock.Lock() - defer d.lock.Unlock() - - if r.reqOrder == 0 { - d.lastReqOrder++ - r.reqOrder = d.lastReqOrder - r.waitForPeers = d.clock.Now().Add(waitForPeers) - } - // Assign the timestamp when the request is queued no matter it's - // a new one or re-queued one. - r.enterQueue = d.clock.Now() - - back := d.reqQueue.Back() - if back == nil || r.reqOrder > back.Value.(*distReq).reqOrder { - r.element = d.reqQueue.PushBack(r) - } else { - before := d.reqQueue.Front() - for before.Value.(*distReq).reqOrder < r.reqOrder { - before = before.Next() - } - r.element = d.reqQueue.InsertBefore(r, before) - } - - if !d.loopNextSent { - d.loopNextSent = true - d.loopChn <- struct{}{} - } - - r.sentChn = make(chan distPeer, 1) - return r.sentChn -} - -// cancel removes a request from the queue if it has not been sent yet (returns -// false if it has been sent already). It is guaranteed that the callback functions -// will not be called after cancel returns. -func (d *requestDistributor) cancel(r *distReq) bool { - d.lock.Lock() - defer d.lock.Unlock() - - if r.sentChn == nil { - return false - } - - close(r.sentChn) - d.remove(r) - return true -} - -// remove removes a request from the queue -func (d *requestDistributor) remove(r *distReq) { - r.sentChn = nil - if r.element != nil { - d.reqQueue.Remove(r.element) - r.element = nil - } -} - -func (d *requestDistributor) close() { - close(d.closeCh) - d.wg.Wait() -} diff --git a/les/distributor_test.go b/les/distributor_test.go deleted file mode 100644 index 9a93dba145..0000000000 --- a/les/distributor_test.go +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "math/rand" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" -) - -type testDistReq struct { - cost, procTime, order uint64 - canSendTo map[*testDistPeer]struct{} -} - -func (r *testDistReq) getCost(dp distPeer) uint64 { - return r.cost -} - -func (r *testDistReq) canSend(dp distPeer) bool { - _, ok := r.canSendTo[dp.(*testDistPeer)] - return ok -} - -func (r *testDistReq) request(dp distPeer) func() { - return func() { dp.(*testDistPeer).send(r) } -} - -type testDistPeer struct { - sent []*testDistReq - sumCost uint64 - lock sync.RWMutex -} - -func (p *testDistPeer) send(r *testDistReq) { - p.lock.Lock() - defer p.lock.Unlock() - - p.sent = append(p.sent, r) - p.sumCost += r.cost -} - -func (p *testDistPeer) worker(t *testing.T, checkOrder bool, stop chan struct{}) { - var last uint64 - for { - wait := time.Millisecond - p.lock.Lock() - if len(p.sent) > 0 { - rq := p.sent[0] - wait = time.Duration(rq.procTime) - p.sumCost -= rq.cost - if checkOrder { - if rq.order <= last { - t.Errorf("Requests processed in wrong order") - } - last = rq.order - } - p.sent = p.sent[1:] - } - p.lock.Unlock() - select { - case <-stop: - return - case <-time.After(wait): - } - } -} - -const ( - testDistBufLimit = 10000000 - testDistMaxCost = 1000000 - testDistPeerCount = 2 - testDistReqCount = 10 - testDistMaxResendCount = 3 -) - -func (p *testDistPeer) waitBefore(cost uint64) (time.Duration, float64) { - p.lock.RLock() - sumCost := p.sumCost + cost - p.lock.RUnlock() - if sumCost < testDistBufLimit { - return 0, float64(testDistBufLimit-sumCost) / float64(testDistBufLimit) - } - return time.Duration(sumCost - testDistBufLimit), 0 -} - -func (p *testDistPeer) canQueue() bool { - return true -} - -func (p *testDistPeer) queueSend(f func()) bool { - f() - return true -} - -func TestRequestDistributor(t *testing.T) { - testRequestDistributor(t, false) -} - -func TestRequestDistributorResend(t *testing.T) { - testRequestDistributor(t, true) -} - -func testRequestDistributor(t *testing.T, resend bool) { - stop := make(chan struct{}) - defer close(stop) - - dist := newRequestDistributor(nil, &mclock.System{}) - var peers [testDistPeerCount]*testDistPeer - for i := range peers { - peers[i] = &testDistPeer{} - go peers[i].worker(t, !resend, stop) - dist.registerTestPeer(peers[i]) - } - // Disable the mechanism that we will wait a few time for request - // even there is no suitable peer to send right now. - waitForPeers = 0 - - var wg sync.WaitGroup - - for i := 1; i <= testDistReqCount; i++ { - cost := uint64(rand.Int63n(testDistMaxCost)) - procTime := uint64(rand.Int63n(int64(cost + 1))) - rq := &testDistReq{ - cost: cost, - procTime: procTime, - order: uint64(i), - canSendTo: make(map[*testDistPeer]struct{}), - } - for _, peer := range peers { - if rand.Intn(2) != 0 { - rq.canSendTo[peer] = struct{}{} - } - } - - wg.Add(1) - req := &distReq{ - getCost: rq.getCost, - canSend: rq.canSend, - request: rq.request, - } - chn := dist.queue(req) - go func() { - cnt := 1 - if resend && len(rq.canSendTo) != 0 { - cnt = rand.Intn(testDistMaxResendCount) + 1 - } - for i := 0; i < cnt; i++ { - if i != 0 { - chn = dist.queue(req) - } - p := <-chn - if p == nil { - if len(rq.canSendTo) != 0 { - t.Errorf("Request that could have been sent was dropped") - } - } else { - peer := p.(*testDistPeer) - if _, ok := rq.canSendTo[peer]; !ok { - t.Errorf("Request sent to wrong peer") - } - } - } - wg.Done() - }() - if rand.Intn(1000) == 0 { - time.Sleep(time.Duration(rand.Intn(5000000))) - } - } - - wg.Wait() -} diff --git a/les/enr_entry.go b/les/enr_entry.go deleted file mode 100644 index 307313fb10..0000000000 --- a/les/enr_entry.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "github.com/ethereum/go-ethereum/core/forkid" - "github.com/ethereum/go-ethereum/p2p/dnsdisc" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/rlp" -) - -// lesEntry is the "les" ENR entry. This is set for LES servers only. -type lesEntry struct { - // Ignore additional fields (for forward compatibility). - VfxVersion uint - Rest []rlp.RawValue `rlp:"tail"` -} - -func (lesEntry) ENRKey() string { return "les" } - -// ethEntry is the "eth" ENR entry. This is redeclared here to avoid depending on package eth. -type ethEntry struct { - ForkID forkid.ID - Tail []rlp.RawValue `rlp:"tail"` -} - -func (ethEntry) ENRKey() string { return "eth" } - -// setupDiscovery creates the node discovery source for the eth protocol. -func (eth *LightEthereum) setupDiscovery() (enode.Iterator, error) { - it := enode.NewFairMix(0) - - // Enable DNS discovery. - if len(eth.config.EthDiscoveryURLs) != 0 { - client := dnsdisc.NewClient(dnsdisc.Config{}) - dns, err := client.NewIterator(eth.config.EthDiscoveryURLs...) - if err != nil { - return nil, err - } - it.AddSource(dns) - } - - // Enable DHT. - if eth.udpEnabled { - it.AddSource(eth.p2pServer.DiscV5.RandomNodes()) - } - - forkFilter := forkid.NewFilter(eth.blockchain) - iterator := enode.Filter(it, func(n *enode.Node) bool { return nodeIsServer(forkFilter, n) }) - return iterator, nil -} - -// nodeIsServer checks whether n is an LES server node. -func nodeIsServer(forkFilter forkid.Filter, n *enode.Node) bool { - var les lesEntry - var eth ethEntry - return n.Load(&les) == nil && n.Load(ð) == nil && forkFilter(eth.ForkID) == nil -} diff --git a/les/flowcontrol/control.go b/les/flowcontrol/control.go deleted file mode 100644 index 76a241fa5a..0000000000 --- a/les/flowcontrol/control.go +++ /dev/null @@ -1,433 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package flowcontrol implements a client side flow control mechanism -package flowcontrol - -import ( - "fmt" - "math" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/log" -) - -const ( - // fcTimeConst is the time constant applied for MinRecharge during linear - // buffer recharge period - fcTimeConst = time.Millisecond - // DecParamDelay is applied at server side when decreasing capacity in order to - // avoid a buffer underrun error due to requests sent by the client before - // receiving the capacity update announcement - DecParamDelay = time.Second * 2 - // keepLogs is the duration of keeping logs; logging is not used if zero - keepLogs = 0 -) - -// ServerParams are the flow control parameters specified by a server for a client -// -// Note: a server can assign different amounts of capacity to each client by giving -// different parameters to them. -type ServerParams struct { - BufLimit, MinRecharge uint64 -} - -// scheduledUpdate represents a delayed flow control parameter update -type scheduledUpdate struct { - time mclock.AbsTime - params ServerParams -} - -// ClientNode is the flow control system's representation of a client -// (used in server mode only) -type ClientNode struct { - params ServerParams - bufValue int64 - lastTime mclock.AbsTime - updateSchedule []scheduledUpdate - sumCost uint64 // sum of req costs received from this client - accepted map[uint64]uint64 // value = sumCost after accepting the given req - connected bool - lock sync.Mutex - cm *ClientManager - log *logger - cmNodeFields -} - -// NewClientNode returns a new ClientNode -func NewClientNode(cm *ClientManager, params ServerParams) *ClientNode { - node := &ClientNode{ - cm: cm, - params: params, - bufValue: int64(params.BufLimit), - lastTime: cm.clock.Now(), - accepted: make(map[uint64]uint64), - connected: true, - } - if keepLogs > 0 { - node.log = newLogger(keepLogs) - } - cm.connect(node) - return node -} - -// Disconnect should be called when a client is disconnected -func (node *ClientNode) Disconnect() { - node.lock.Lock() - defer node.lock.Unlock() - - node.connected = false - node.cm.disconnect(node) -} - -// BufferStatus returns the current buffer value and limit -func (node *ClientNode) BufferStatus() (uint64, uint64) { - node.lock.Lock() - defer node.lock.Unlock() - - if !node.connected { - return 0, 0 - } - now := node.cm.clock.Now() - node.update(now) - node.cm.updateBuffer(node, 0, now) - bv := node.bufValue - if bv < 0 { - bv = 0 - } - return uint64(bv), node.params.BufLimit -} - -// OneTimeCost subtracts the given amount from the node's buffer. -// -// Note: this call can take the buffer into the negative region internally. -// In this case zero buffer value is returned by exported calls and no requests -// are accepted. -func (node *ClientNode) OneTimeCost(cost uint64) { - node.lock.Lock() - defer node.lock.Unlock() - - now := node.cm.clock.Now() - node.update(now) - node.bufValue -= int64(cost) - node.cm.updateBuffer(node, -int64(cost), now) -} - -// Freeze notifies the client manager about a client freeze event in which case -// the total capacity allowance is slightly reduced. -func (node *ClientNode) Freeze() { - node.lock.Lock() - frozenCap := node.params.MinRecharge - node.lock.Unlock() - node.cm.reduceTotalCapacity(frozenCap) -} - -// update recalculates the buffer value at a specified time while also performing -// scheduled flow control parameter updates if necessary -func (node *ClientNode) update(now mclock.AbsTime) { - for len(node.updateSchedule) > 0 && node.updateSchedule[0].time <= now { - node.recalcBV(node.updateSchedule[0].time) - node.updateParams(node.updateSchedule[0].params, now) - node.updateSchedule = node.updateSchedule[1:] - } - node.recalcBV(now) -} - -// recalcBV recalculates the buffer value at a specified time -func (node *ClientNode) recalcBV(now mclock.AbsTime) { - dt := uint64(now - node.lastTime) - if now < node.lastTime { - dt = 0 - } - node.bufValue += int64(node.params.MinRecharge * dt / uint64(fcTimeConst)) - if node.bufValue > int64(node.params.BufLimit) { - node.bufValue = int64(node.params.BufLimit) - } - if node.log != nil { - node.log.add(now, fmt.Sprintf("updated bv=%d MRR=%d BufLimit=%d", node.bufValue, node.params.MinRecharge, node.params.BufLimit)) - } - node.lastTime = now -} - -// UpdateParams updates the flow control parameters of a client node -func (node *ClientNode) UpdateParams(params ServerParams) { - node.lock.Lock() - defer node.lock.Unlock() - - now := node.cm.clock.Now() - node.update(now) - if params.MinRecharge >= node.params.MinRecharge { - node.updateSchedule = nil - node.updateParams(params, now) - } else { - for i, s := range node.updateSchedule { - if params.MinRecharge >= s.params.MinRecharge { - s.params = params - node.updateSchedule = node.updateSchedule[:i+1] - return - } - } - node.updateSchedule = append(node.updateSchedule, scheduledUpdate{time: now.Add(DecParamDelay), params: params}) - } -} - -// updateParams updates the flow control parameters of the node -func (node *ClientNode) updateParams(params ServerParams, now mclock.AbsTime) { - diff := int64(params.BufLimit - node.params.BufLimit) - if diff > 0 { - node.bufValue += diff - } else if node.bufValue > int64(params.BufLimit) { - node.bufValue = int64(params.BufLimit) - } - node.cm.updateParams(node, params, now) -} - -// AcceptRequest returns whether a new request can be accepted and the missing -// buffer amount if it was rejected due to a buffer underrun. If accepted, maxCost -// is deducted from the flow control buffer. -func (node *ClientNode) AcceptRequest(reqID, index, maxCost uint64) (accepted bool, bufShort uint64, priority int64) { - node.lock.Lock() - defer node.lock.Unlock() - - now := node.cm.clock.Now() - node.update(now) - if int64(maxCost) > node.bufValue { - if node.log != nil { - node.log.add(now, fmt.Sprintf("rejected reqID=%d bv=%d maxCost=%d", reqID, node.bufValue, maxCost)) - node.log.dump(now) - } - return false, maxCost - uint64(node.bufValue), 0 - } - node.bufValue -= int64(maxCost) - node.sumCost += maxCost - if node.log != nil { - node.log.add(now, fmt.Sprintf("accepted reqID=%d bv=%d maxCost=%d sumCost=%d", reqID, node.bufValue, maxCost, node.sumCost)) - } - node.accepted[index] = node.sumCost - return true, 0, node.cm.accepted(node, maxCost, now) -} - -// RequestProcessed should be called when the request has been processed -func (node *ClientNode) RequestProcessed(reqID, index, maxCost, realCost uint64) uint64 { - node.lock.Lock() - defer node.lock.Unlock() - - now := node.cm.clock.Now() - node.update(now) - node.cm.processed(node, maxCost, realCost, now) - bv := node.bufValue + int64(node.sumCost-node.accepted[index]) - if node.log != nil { - node.log.add(now, fmt.Sprintf("processed reqID=%d bv=%d maxCost=%d realCost=%d sumCost=%d oldSumCost=%d reportedBV=%d", reqID, node.bufValue, maxCost, realCost, node.sumCost, node.accepted[index], bv)) - } - delete(node.accepted, index) - if bv < 0 { - return 0 - } - return uint64(bv) -} - -// ServerNode is the flow control system's representation of a server -// (used in client mode only) -type ServerNode struct { - clock mclock.Clock - bufEstimate uint64 - bufRecharge bool - lastTime mclock.AbsTime - params ServerParams - sumCost uint64 // sum of req costs sent to this server - pending map[uint64]uint64 // value = sumCost after sending the given req - log *logger - lock sync.RWMutex -} - -// NewServerNode returns a new ServerNode -func NewServerNode(params ServerParams, clock mclock.Clock) *ServerNode { - node := &ServerNode{ - clock: clock, - bufEstimate: params.BufLimit, - bufRecharge: false, - lastTime: clock.Now(), - params: params, - pending: make(map[uint64]uint64), - } - if keepLogs > 0 { - node.log = newLogger(keepLogs) - } - return node -} - -// UpdateParams updates the flow control parameters of the node -func (node *ServerNode) UpdateParams(params ServerParams) { - node.lock.Lock() - defer node.lock.Unlock() - - node.recalcBLE(mclock.Now()) - if params.BufLimit > node.params.BufLimit { - node.bufEstimate += params.BufLimit - node.params.BufLimit - } else { - if node.bufEstimate > params.BufLimit { - node.bufEstimate = params.BufLimit - } - } - node.params = params -} - -// recalcBLE recalculates the lowest estimate for the client's buffer value at -// the given server at the specified time -func (node *ServerNode) recalcBLE(now mclock.AbsTime) { - if now < node.lastTime { - return - } - if node.bufRecharge { - dt := uint64(now - node.lastTime) - node.bufEstimate += node.params.MinRecharge * dt / uint64(fcTimeConst) - if node.bufEstimate >= node.params.BufLimit { - node.bufEstimate = node.params.BufLimit - node.bufRecharge = false - } - } - node.lastTime = now - if node.log != nil { - node.log.add(now, fmt.Sprintf("updated bufEst=%d MRR=%d BufLimit=%d", node.bufEstimate, node.params.MinRecharge, node.params.BufLimit)) - } -} - -// safetyMargin is added to the flow control waiting time when estimated buffer value is low -const safetyMargin = time.Millisecond - -// CanSend returns the minimum waiting time required before sending a request -// with the given maximum estimated cost. Second return value is the relative -// estimated buffer level after sending the request (divided by BufLimit). -func (node *ServerNode) CanSend(maxCost uint64) (time.Duration, float64) { - node.lock.RLock() - defer node.lock.RUnlock() - - if node.params.BufLimit == 0 { - return time.Duration(math.MaxInt64), 0 - } - now := node.clock.Now() - node.recalcBLE(now) - maxCost += uint64(safetyMargin) * node.params.MinRecharge / uint64(fcTimeConst) - if maxCost > node.params.BufLimit { - maxCost = node.params.BufLimit - } - if node.bufEstimate >= maxCost { - relBuf := float64(node.bufEstimate-maxCost) / float64(node.params.BufLimit) - if node.log != nil { - node.log.add(now, fmt.Sprintf("canSend bufEst=%d maxCost=%d true relBuf=%f", node.bufEstimate, maxCost, relBuf)) - } - return 0, relBuf - } - timeLeft := time.Duration((maxCost - node.bufEstimate) * uint64(fcTimeConst) / node.params.MinRecharge) - if node.log != nil { - node.log.add(now, fmt.Sprintf("canSend bufEst=%d maxCost=%d false timeLeft=%v", node.bufEstimate, maxCost, timeLeft)) - } - return timeLeft, 0 -} - -// QueuedRequest should be called when the request has been assigned to the given -// server node, before putting it in the send queue. It is mandatory that requests -// are sent in the same order as the QueuedRequest calls are made. -func (node *ServerNode) QueuedRequest(reqID, maxCost uint64) { - node.lock.Lock() - defer node.lock.Unlock() - - now := node.clock.Now() - node.recalcBLE(now) - // Note: we do not know when requests actually arrive to the server so bufRecharge - // is not turned on here if buffer was full; in this case it is going to be turned - // on by the first reply's bufValue feedback - if node.bufEstimate >= maxCost { - node.bufEstimate -= maxCost - } else { - log.Error("Queued request with insufficient buffer estimate") - node.bufEstimate = 0 - } - node.sumCost += maxCost - node.pending[reqID] = node.sumCost - if node.log != nil { - node.log.add(now, fmt.Sprintf("queued reqID=%d bufEst=%d maxCost=%d sumCost=%d", reqID, node.bufEstimate, maxCost, node.sumCost)) - } -} - -// ReceivedReply adjusts estimated buffer value according to the value included in -// the latest request reply. -func (node *ServerNode) ReceivedReply(reqID, bv uint64) { - node.lock.Lock() - defer node.lock.Unlock() - - now := node.clock.Now() - node.recalcBLE(now) - if bv > node.params.BufLimit { - bv = node.params.BufLimit - } - sc, ok := node.pending[reqID] - if !ok { - return - } - delete(node.pending, reqID) - cc := node.sumCost - sc - newEstimate := uint64(0) - if bv > cc { - newEstimate = bv - cc - } - if newEstimate > node.bufEstimate { - // Note: we never reduce the buffer estimate based on the reported value because - // this can only happen because of the delayed delivery of the latest reply. - // The lowest estimate based on the previous reply can still be considered valid. - node.bufEstimate = newEstimate - } - - node.bufRecharge = node.bufEstimate < node.params.BufLimit - node.lastTime = now - if node.log != nil { - node.log.add(now, fmt.Sprintf("received reqID=%d bufEst=%d reportedBv=%d sumCost=%d oldSumCost=%d", reqID, node.bufEstimate, bv, node.sumCost, sc)) - } -} - -// ResumeFreeze cleans all pending requests and sets the buffer estimate to the -// reported value after resuming from a frozen state -func (node *ServerNode) ResumeFreeze(bv uint64) { - node.lock.Lock() - defer node.lock.Unlock() - - for reqID := range node.pending { - delete(node.pending, reqID) - } - now := node.clock.Now() - node.recalcBLE(now) - if bv > node.params.BufLimit { - bv = node.params.BufLimit - } - node.bufEstimate = bv - node.bufRecharge = node.bufEstimate < node.params.BufLimit - node.lastTime = now - if node.log != nil { - node.log.add(now, fmt.Sprintf("unfreeze bv=%d sumCost=%d", bv, node.sumCost)) - } -} - -// DumpLogs dumps the event log if logging is used -func (node *ServerNode) DumpLogs() { - node.lock.Lock() - defer node.lock.Unlock() - - if node.log != nil { - node.log.dump(node.clock.Now()) - } -} diff --git a/les/flowcontrol/logger.go b/les/flowcontrol/logger.go deleted file mode 100644 index 428d7fbf22..0000000000 --- a/les/flowcontrol/logger.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package flowcontrol - -import ( - "fmt" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" -) - -// logger collects events in string format and discards events older than the -// "keep" parameter -type logger struct { - events map[uint64]logEvent - writePtr, delPtr uint64 - keep time.Duration -} - -// logEvent describes a single event -type logEvent struct { - time mclock.AbsTime - event string -} - -// newLogger creates a new logger -func newLogger(keep time.Duration) *logger { - return &logger{ - events: make(map[uint64]logEvent), - keep: keep, - } -} - -// add adds a new event and discards old events if possible -func (l *logger) add(now mclock.AbsTime, event string) { - keepAfter := now - mclock.AbsTime(l.keep) - for l.delPtr < l.writePtr && l.events[l.delPtr].time <= keepAfter { - delete(l.events, l.delPtr) - l.delPtr++ - } - l.events[l.writePtr] = logEvent{now, event} - l.writePtr++ -} - -// dump prints all stored events -func (l *logger) dump(now mclock.AbsTime) { - for i := l.delPtr; i < l.writePtr; i++ { - e := l.events[i] - fmt.Println(time.Duration(e.time-now), e.event) - } -} diff --git a/les/flowcontrol/manager.go b/les/flowcontrol/manager.go deleted file mode 100644 index b7cc9bd903..0000000000 --- a/les/flowcontrol/manager.go +++ /dev/null @@ -1,476 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package flowcontrol - -import ( - "fmt" - "math" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/common/prque" -) - -// cmNodeFields are ClientNode fields used by the client manager -// Note: these fields are locked by the client manager's mutex -type cmNodeFields struct { - corrBufValue int64 // buffer value adjusted with the extra recharge amount - rcLastIntValue int64 // past recharge integrator value when corrBufValue was last updated - rcFullIntValue int64 // future recharge integrator value when corrBufValue will reach maximum - queueIndex int // position in the recharge queue (-1 if not queued) -} - -// FixedPointMultiplier is applied to the recharge integrator and the recharge curve. -// -// Note: fixed point arithmetic is required for the integrator because it is a -// constantly increasing value that can wrap around int64 limits (which behavior is -// also supported by the priority queue). A floating point value would gradually lose -// precision in this application. -// The recharge curve and all recharge values are encoded as fixed point because -// sumRecharge is frequently updated by adding or subtracting individual recharge -// values and perfect precision is required. -const FixedPointMultiplier = 1000000 - -var ( - capacityDropFactor = 0.1 - capacityRaiseTC = 1 / (3 * float64(time.Hour)) // time constant for raising the capacity factor - capacityRaiseThresholdRatio = 1.125 // total/connected capacity ratio threshold for raising the capacity factor -) - -// ClientManager controls the capacity assigned to the clients of a server. -// Since ServerParams guarantee a safe lower estimate for processable requests -// even in case of all clients being active, ClientManager calculates a -// corrugated buffer value and usually allows a higher remaining buffer value -// to be returned with each reply. -type ClientManager struct { - clock mclock.Clock - lock sync.Mutex - stop chan chan struct{} - - curve PieceWiseLinear - sumRecharge, totalRecharge, totalConnected uint64 - logTotalCap, totalCapacity float64 - logTotalCapRaiseLimit float64 - minLogTotalCap, maxLogTotalCap float64 - capacityRaiseThreshold uint64 - capLastUpdate mclock.AbsTime - totalCapacityCh chan uint64 - - // recharge integrator is increasing in each moment with a rate of - // (totalRecharge / sumRecharge)*FixedPointMultiplier or 0 if sumRecharge==0 - rcLastUpdate mclock.AbsTime // last time the recharge integrator was updated - rcLastIntValue int64 // last updated value of the recharge integrator - priorityOffset int64 // offset for prque priority values ensures that all priorities stay in the int64 range - // recharge queue is a priority queue with currently recharging client nodes - // as elements. The priority value is rcFullIntValue which allows to quickly - // determine which client will first finish recharge. - rcQueue *prque.Prque[int64, *ClientNode] -} - -// NewClientManager returns a new client manager. -// Client manager enhances flow control performance by allowing client buffers -// to recharge quicker than the minimum guaranteed recharge rate if possible. -// The sum of all minimum recharge rates (sumRecharge) is updated each time -// a clients starts or finishes buffer recharging. Then an adjusted total -// recharge rate is calculated using a piecewise linear recharge curve: -// -// totalRecharge = curve(sumRecharge) -// (totalRecharge >= sumRecharge is enforced) -// -// Then the "bonus" buffer recharge is distributed between currently recharging -// clients proportionally to their minimum recharge rates. -// -// Note: total recharge is proportional to the average number of parallel running -// serving threads. A recharge value of 1000000 corresponds to one thread in average. -// The maximum number of allowed serving threads should always be considerably -// higher than the targeted average number. -// -// Note 2: although it is possible to specify a curve allowing the total target -// recharge starting from zero sumRecharge, it makes sense to add a linear ramp -// starting from zero in order to not let a single low-priority client use up -// the entire server capacity and thus ensure quick availability for others at -// any moment. -func NewClientManager(curve PieceWiseLinear, clock mclock.Clock) *ClientManager { - cm := &ClientManager{ - clock: clock, - rcQueue: prque.New[int64, *ClientNode](func(a *ClientNode, i int) { a.queueIndex = i }), - capLastUpdate: clock.Now(), - stop: make(chan chan struct{}), - } - if curve != nil { - cm.SetRechargeCurve(curve) - } - go func() { - // regularly recalculate and update total capacity - for { - select { - case <-time.After(time.Minute): - cm.lock.Lock() - cm.updateTotalCapacity(cm.clock.Now(), true) - cm.lock.Unlock() - case stop := <-cm.stop: - close(stop) - return - } - } - }() - return cm -} - -// Stop stops the client manager -func (cm *ClientManager) Stop() { - stop := make(chan struct{}) - cm.stop <- stop - <-stop -} - -// SetRechargeCurve updates the recharge curve -func (cm *ClientManager) SetRechargeCurve(curve PieceWiseLinear) { - cm.lock.Lock() - defer cm.lock.Unlock() - - now := cm.clock.Now() - cm.updateRecharge(now) - cm.curve = curve - if len(curve) > 0 { - cm.totalRecharge = curve[len(curve)-1].Y - } else { - cm.totalRecharge = 0 - } -} - -// SetCapacityLimits sets a threshold value used for raising capFactor. -// Either if the difference between total allowed and connected capacity is less -// than this threshold or if their ratio is less than capacityRaiseThresholdRatio -// then capFactor is allowed to slowly raise. -func (cm *ClientManager) SetCapacityLimits(min, max, raiseThreshold uint64) { - if min < 1 { - min = 1 - } - cm.minLogTotalCap = math.Log(float64(min)) - if max < 1 { - max = 1 - } - cm.maxLogTotalCap = math.Log(float64(max)) - cm.logTotalCap = cm.maxLogTotalCap - cm.capacityRaiseThreshold = raiseThreshold - cm.refreshCapacity() -} - -// connect should be called when a client is connected, before passing it to any -// other ClientManager function -func (cm *ClientManager) connect(node *ClientNode) { - cm.lock.Lock() - defer cm.lock.Unlock() - - now := cm.clock.Now() - cm.updateRecharge(now) - node.corrBufValue = int64(node.params.BufLimit) - node.rcLastIntValue = cm.rcLastIntValue - node.queueIndex = -1 - cm.updateTotalCapacity(now, true) - cm.totalConnected += node.params.MinRecharge - cm.updateRaiseLimit() -} - -// disconnect should be called when a client is disconnected -func (cm *ClientManager) disconnect(node *ClientNode) { - cm.lock.Lock() - defer cm.lock.Unlock() - - now := cm.clock.Now() - cm.updateRecharge(cm.clock.Now()) - cm.updateTotalCapacity(now, true) - cm.totalConnected -= node.params.MinRecharge - cm.updateRaiseLimit() -} - -// accepted is called when a request with given maximum cost is accepted. -// It returns a priority indicator for the request which is used to determine placement -// in the serving queue. Older requests have higher priority by default. If the client -// is almost out of buffer, request priority is reduced. -func (cm *ClientManager) accepted(node *ClientNode, maxCost uint64, now mclock.AbsTime) (priority int64) { - cm.lock.Lock() - defer cm.lock.Unlock() - - cm.updateNodeRc(node, -int64(maxCost), &node.params, now) - rcTime := (node.params.BufLimit - uint64(node.corrBufValue)) * FixedPointMultiplier / node.params.MinRecharge - return -int64(now) - int64(rcTime) -} - -// processed updates the client buffer according to actual request cost after -// serving has been finished. -// -// Note: processed should always be called for all accepted requests -func (cm *ClientManager) processed(node *ClientNode, maxCost, realCost uint64, now mclock.AbsTime) { - if realCost > maxCost { - realCost = maxCost - } - cm.updateBuffer(node, int64(maxCost-realCost), now) -} - -// updateBuffer recalculates the corrected buffer value, adds the given value to it -// and updates the node's actual buffer value if possible -func (cm *ClientManager) updateBuffer(node *ClientNode, add int64, now mclock.AbsTime) { - cm.lock.Lock() - defer cm.lock.Unlock() - - cm.updateNodeRc(node, add, &node.params, now) - if node.corrBufValue > node.bufValue { - if node.log != nil { - node.log.add(now, fmt.Sprintf("corrected bv=%d oldBv=%d", node.corrBufValue, node.bufValue)) - } - node.bufValue = node.corrBufValue - } -} - -// updateParams updates the flow control parameters of a client node -func (cm *ClientManager) updateParams(node *ClientNode, params ServerParams, now mclock.AbsTime) { - cm.lock.Lock() - defer cm.lock.Unlock() - - cm.updateRecharge(now) - cm.updateTotalCapacity(now, true) - cm.totalConnected += params.MinRecharge - node.params.MinRecharge - cm.updateRaiseLimit() - cm.updateNodeRc(node, 0, ¶ms, now) -} - -// updateRaiseLimit recalculates the limiting value until which logTotalCap -// can be raised when no client freeze events occur -func (cm *ClientManager) updateRaiseLimit() { - if cm.capacityRaiseThreshold == 0 { - cm.logTotalCapRaiseLimit = 0 - return - } - limit := float64(cm.totalConnected + cm.capacityRaiseThreshold) - limit2 := float64(cm.totalConnected) * capacityRaiseThresholdRatio - if limit2 > limit { - limit = limit2 - } - if limit < 1 { - limit = 1 - } - cm.logTotalCapRaiseLimit = math.Log(limit) -} - -// updateRecharge updates the recharge integrator and checks the recharge queue -// for nodes with recently filled buffers -func (cm *ClientManager) updateRecharge(now mclock.AbsTime) { - lastUpdate := cm.rcLastUpdate - cm.rcLastUpdate = now - // updating is done in multiple steps if node buffers are filled and sumRecharge - // is decreased before the given target time - for cm.sumRecharge > 0 { - sumRecharge := cm.sumRecharge - if sumRecharge > cm.totalRecharge { - sumRecharge = cm.totalRecharge - } - bonusRatio := float64(1) - v := cm.curve.ValueAt(sumRecharge) - s := float64(sumRecharge) - if v > s && s > 0 { - bonusRatio = v / s - } - dt := now - lastUpdate - // fetch the client that finishes first - rcqNode := cm.rcQueue.PopItem() // if sumRecharge > 0 then the queue cannot be empty - // check whether it has already finished - dtNext := mclock.AbsTime(float64(rcqNode.rcFullIntValue-cm.rcLastIntValue) / bonusRatio) - if dt < dtNext { - // not finished yet, put it back, update integrator according - // to current bonusRatio and return - cm.addToQueue(rcqNode) - cm.rcLastIntValue += int64(bonusRatio * float64(dt)) - return - } - lastUpdate += dtNext - // finished recharging, update corrBufValue and sumRecharge if necessary and do next step - if rcqNode.corrBufValue < int64(rcqNode.params.BufLimit) { - rcqNode.corrBufValue = int64(rcqNode.params.BufLimit) - cm.sumRecharge -= rcqNode.params.MinRecharge - } - cm.rcLastIntValue = rcqNode.rcFullIntValue - } -} - -func (cm *ClientManager) addToQueue(node *ClientNode) { - if cm.priorityOffset-node.rcFullIntValue < -0x4000000000000000 { - cm.priorityOffset += 0x4000000000000000 - // recreate priority queue with new offset to avoid overflow; should happen very rarely - newRcQueue := prque.New[int64, *ClientNode](func(a *ClientNode, i int) { a.queueIndex = i }) - for cm.rcQueue.Size() > 0 { - n := cm.rcQueue.PopItem() - newRcQueue.Push(n, cm.priorityOffset-n.rcFullIntValue) - } - cm.rcQueue = newRcQueue - } - cm.rcQueue.Push(node, cm.priorityOffset-node.rcFullIntValue) -} - -// updateNodeRc updates a node's corrBufValue and adds an external correction value. -// It also adds or removes the rcQueue entry and updates ServerParams and sumRecharge if necessary. -func (cm *ClientManager) updateNodeRc(node *ClientNode, bvc int64, params *ServerParams, now mclock.AbsTime) { - cm.updateRecharge(now) - wasFull := true - if node.corrBufValue != int64(node.params.BufLimit) { - wasFull = false - node.corrBufValue += (cm.rcLastIntValue - node.rcLastIntValue) * int64(node.params.MinRecharge) / FixedPointMultiplier - if node.corrBufValue > int64(node.params.BufLimit) { - node.corrBufValue = int64(node.params.BufLimit) - } - node.rcLastIntValue = cm.rcLastIntValue - } - node.corrBufValue += bvc - diff := int64(params.BufLimit - node.params.BufLimit) - if diff > 0 { - node.corrBufValue += diff - } - isFull := false - if node.corrBufValue >= int64(params.BufLimit) { - node.corrBufValue = int64(params.BufLimit) - isFull = true - } - if !wasFull { - cm.sumRecharge -= node.params.MinRecharge - } - if params != &node.params { - node.params = *params - } - if !isFull { - cm.sumRecharge += node.params.MinRecharge - if node.queueIndex != -1 { - cm.rcQueue.Remove(node.queueIndex) - } - node.rcLastIntValue = cm.rcLastIntValue - node.rcFullIntValue = cm.rcLastIntValue + (int64(node.params.BufLimit)-node.corrBufValue)*FixedPointMultiplier/int64(node.params.MinRecharge) - cm.addToQueue(node) - } -} - -// reduceTotalCapacity reduces the total capacity allowance in case of a client freeze event -func (cm *ClientManager) reduceTotalCapacity(frozenCap uint64) { - cm.lock.Lock() - defer cm.lock.Unlock() - - ratio := float64(1) - if frozenCap < cm.totalConnected { - ratio = float64(frozenCap) / float64(cm.totalConnected) - } - now := cm.clock.Now() - cm.updateTotalCapacity(now, false) - cm.logTotalCap -= capacityDropFactor * ratio - if cm.logTotalCap < cm.minLogTotalCap { - cm.logTotalCap = cm.minLogTotalCap - } - cm.updateTotalCapacity(now, true) -} - -// updateTotalCapacity updates the total capacity factor. The capacity factor allows -// the total capacity of the system to go over the allowed total recharge value -// if clients go to frozen state sufficiently rarely. -// The capacity factor is dropped instantly by a small amount if a clients is frozen. -// It is raised slowly (with a large time constant) if the total connected capacity -// is close to the total allowed amount and no clients are frozen. -func (cm *ClientManager) updateTotalCapacity(now mclock.AbsTime, refresh bool) { - dt := now - cm.capLastUpdate - cm.capLastUpdate = now - - if cm.logTotalCap < cm.logTotalCapRaiseLimit { - cm.logTotalCap += capacityRaiseTC * float64(dt) - if cm.logTotalCap > cm.logTotalCapRaiseLimit { - cm.logTotalCap = cm.logTotalCapRaiseLimit - } - } - if cm.logTotalCap > cm.maxLogTotalCap { - cm.logTotalCap = cm.maxLogTotalCap - } - if refresh { - cm.refreshCapacity() - } -} - -// refreshCapacity recalculates the total capacity value and sends an update to the subscription -// channel if the relative change of the value since the last update is more than 0.1 percent -func (cm *ClientManager) refreshCapacity() { - totalCapacity := math.Exp(cm.logTotalCap) - if totalCapacity >= cm.totalCapacity*0.999 && totalCapacity <= cm.totalCapacity*1.001 { - return - } - cm.totalCapacity = totalCapacity - if cm.totalCapacityCh != nil { - select { - case cm.totalCapacityCh <- uint64(cm.totalCapacity): - default: - } - } -} - -// SubscribeTotalCapacity returns all future updates to the total capacity value -// through a channel and also returns the current value -func (cm *ClientManager) SubscribeTotalCapacity(ch chan uint64) uint64 { - cm.lock.Lock() - defer cm.lock.Unlock() - - cm.totalCapacityCh = ch - return uint64(cm.totalCapacity) -} - -// PieceWiseLinear is used to describe recharge curves -type PieceWiseLinear []struct{ X, Y uint64 } - -// ValueAt returns the curve's value at a given point -func (pwl PieceWiseLinear) ValueAt(x uint64) float64 { - l := 0 - h := len(pwl) - if h == 0 { - return 0 - } - for h != l { - m := (l + h) / 2 - if x > pwl[m].X { - l = m + 1 - } else { - h = m - } - } - if l == 0 { - return float64(pwl[0].Y) - } - l-- - if h == len(pwl) { - return float64(pwl[l].Y) - } - dx := pwl[h].X - pwl[l].X - if dx < 1 { - return float64(pwl[l].Y) - } - return float64(pwl[l].Y) + float64(pwl[h].Y-pwl[l].Y)*float64(x-pwl[l].X)/float64(dx) -} - -// Valid returns true if the X coordinates of the curve points are non-strictly monotonic -func (pwl PieceWiseLinear) Valid() bool { - var lastX uint64 - for _, i := range pwl { - if i.X < lastX { - return false - } - lastX = i.X - } - return true -} diff --git a/les/flowcontrol/manager_test.go b/les/flowcontrol/manager_test.go deleted file mode 100644 index 3afc31272f..0000000000 --- a/les/flowcontrol/manager_test.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package flowcontrol - -import ( - "math" - "math/rand" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" -) - -type testNode struct { - node *ClientNode - bufLimit, capacity uint64 - waitUntil mclock.AbsTime - index, totalCost uint64 -} - -const ( - testMaxCost = 1000000 - testLength = 100000 -) - -// testConstantTotalCapacity simulates multiple request sender nodes and verifies -// whether the total amount of served requests matches the expected value based on -// the total capacity and the duration of the test. -// Some nodes are sending requests occasionally so that their buffer should regularly -// reach the maximum while other nodes (the "max capacity nodes") are sending at the -// maximum permitted rate. The max capacity nodes are changed multiple times during -// a single test. -func TestConstantTotalCapacity(t *testing.T) { - testConstantTotalCapacity(t, 10, 1, 0, false) - testConstantTotalCapacity(t, 10, 1, 1, false) - testConstantTotalCapacity(t, 30, 1, 0, false) - testConstantTotalCapacity(t, 30, 2, 3, false) - testConstantTotalCapacity(t, 100, 1, 0, false) - testConstantTotalCapacity(t, 100, 3, 5, false) - testConstantTotalCapacity(t, 100, 5, 10, false) - testConstantTotalCapacity(t, 100, 3, 5, true) -} - -func testConstantTotalCapacity(t *testing.T, nodeCount, maxCapacityNodes, randomSend int, priorityOverflow bool) { - clock := &mclock.Simulated{} - nodes := make([]*testNode, nodeCount) - var totalCapacity uint64 - for i := range nodes { - nodes[i] = &testNode{capacity: uint64(50000 + rand.Intn(100000))} - totalCapacity += nodes[i].capacity - } - m := NewClientManager(PieceWiseLinear{{0, totalCapacity}}, clock) - if priorityOverflow { - // provoke a situation where rcLastUpdate overflow needs to be handled - m.rcLastIntValue = math.MaxInt64 - 10000000000 - } - for _, n := range nodes { - n.bufLimit = n.capacity * 6000 - n.node = NewClientNode(m, ServerParams{BufLimit: n.bufLimit, MinRecharge: n.capacity}) - } - maxNodes := make([]int, maxCapacityNodes) - for i := range maxNodes { - // we don't care if some indexes are selected multiple times - // in that case we have fewer max nodes - maxNodes[i] = rand.Intn(nodeCount) - } - - var sendCount int - for i := 0; i < testLength; i++ { - now := clock.Now() - for _, idx := range maxNodes { - for nodes[idx].send(t, now) { - } - } - if rand.Intn(testLength) < maxCapacityNodes*3 { - maxNodes[rand.Intn(maxCapacityNodes)] = rand.Intn(nodeCount) - } - - sendCount += randomSend - failCount := randomSend * 10 - for sendCount > 0 && failCount > 0 { - if nodes[rand.Intn(nodeCount)].send(t, now) { - sendCount-- - } else { - failCount-- - } - } - clock.Run(time.Millisecond) - } - - var totalCost uint64 - for _, n := range nodes { - totalCost += n.totalCost - } - ratio := float64(totalCost) / float64(totalCapacity) / testLength - if ratio < 0.98 || ratio > 1.02 { - t.Errorf("totalCost/totalCapacity/testLength ratio incorrect (expected: 1, got: %f)", ratio) - } -} - -func (n *testNode) send(t *testing.T, now mclock.AbsTime) bool { - if now < n.waitUntil { - return false - } - n.index++ - if ok, _, _ := n.node.AcceptRequest(0, n.index, testMaxCost); !ok { - t.Fatalf("Rejected request after expected waiting time has passed") - } - rcost := uint64(rand.Int63n(testMaxCost)) - bv := n.node.RequestProcessed(0, n.index, testMaxCost, rcost) - if bv < testMaxCost { - n.waitUntil = now + mclock.AbsTime((testMaxCost-bv)*1001000/n.capacity) - } - n.totalCost += rcost - return true -} diff --git a/les/handler_test.go b/les/handler_test.go deleted file mode 100644 index c803a5ddb3..0000000000 --- a/les/handler_test.go +++ /dev/null @@ -1,754 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "encoding/binary" - "math/big" - "math/rand" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -func expectResponse(r p2p.MsgReader, msgcode, reqID, bv uint64, data interface{}) error { - type resp struct { - ReqID, BV uint64 - Data interface{} - } - return p2p.ExpectMsg(r, msgcode, resp{reqID, bv, data}) -} - -// Tests that block headers can be retrieved from a remote chain based on user queries. -func TestGetBlockHeadersLes2(t *testing.T) { testGetBlockHeaders(t, 2) } -func TestGetBlockHeadersLes3(t *testing.T) { testGetBlockHeaders(t, 3) } -func TestGetBlockHeadersLes4(t *testing.T) { testGetBlockHeaders(t, 4) } - -func testGetBlockHeaders(t *testing.T, protocol int) { - netconfig := testnetConfig{ - blocks: downloader.MaxHeaderFetch + 15, - protocol: protocol, - nopruning: true, - } - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - bc := server.handler.blockchain - - // Create a "random" unknown hash for testing - var unknown common.Hash - for i := range unknown { - unknown[i] = byte(i) - } - // Create a batch of tests for various scenarios - limit := uint64(MaxHeaderFetch) - tests := []struct { - query *GetBlockHeadersData // The query to execute for header retrieval - expect []common.Hash // The hashes of the block whose headers are expected - }{ - // A single random block should be retrievable by hash and number too - { - &GetBlockHeadersData{Origin: hashOrNumber{Hash: bc.GetBlockByNumber(limit / 2).Hash()}, Amount: 1}, - []common.Hash{bc.GetBlockByNumber(limit / 2).Hash()}, - }, { - &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 1}, - []common.Hash{bc.GetBlockByNumber(limit / 2).Hash()}, - }, - // Multiple headers should be retrievable in both directions - { - &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 3}, - []common.Hash{ - bc.GetBlockByNumber(limit / 2).Hash(), - bc.GetBlockByNumber(limit/2 + 1).Hash(), - bc.GetBlockByNumber(limit/2 + 2).Hash(), - }, - }, { - &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Amount: 3, Reverse: true}, - []common.Hash{ - bc.GetBlockByNumber(limit / 2).Hash(), - bc.GetBlockByNumber(limit/2 - 1).Hash(), - bc.GetBlockByNumber(limit/2 - 2).Hash(), - }, - }, - // Multiple headers with skip lists should be retrievable - { - &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3}, - []common.Hash{ - bc.GetBlockByNumber(limit / 2).Hash(), - bc.GetBlockByNumber(limit/2 + 4).Hash(), - bc.GetBlockByNumber(limit/2 + 8).Hash(), - }, - }, { - &GetBlockHeadersData{Origin: hashOrNumber{Number: limit / 2}, Skip: 3, Amount: 3, Reverse: true}, - []common.Hash{ - bc.GetBlockByNumber(limit / 2).Hash(), - bc.GetBlockByNumber(limit/2 - 4).Hash(), - bc.GetBlockByNumber(limit/2 - 8).Hash(), - }, - }, - // The chain endpoints should be retrievable - { - &GetBlockHeadersData{Origin: hashOrNumber{Number: 0}, Amount: 1}, - []common.Hash{bc.GetBlockByNumber(0).Hash()}, - }, { - &GetBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().Number.Uint64()}, Amount: 1}, - []common.Hash{bc.CurrentBlock().Hash()}, - }, - // Ensure protocol limits are honored - //{ - // &GetBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().Number.Uint64()() - 1}, Amount: limit + 10, Reverse: true}, - // []common.Hash{}, - //}, - // Check that requesting more than available is handled gracefully - { - &GetBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().Number.Uint64() - 4}, Skip: 3, Amount: 3}, - []common.Hash{ - bc.GetBlockByNumber(bc.CurrentBlock().Number.Uint64() - 4).Hash(), - bc.GetBlockByNumber(bc.CurrentBlock().Number.Uint64()).Hash(), - }, - }, { - &GetBlockHeadersData{Origin: hashOrNumber{Number: 4}, Skip: 3, Amount: 3, Reverse: true}, - []common.Hash{ - bc.GetBlockByNumber(4).Hash(), - bc.GetBlockByNumber(0).Hash(), - }, - }, - // Check that requesting more than available is handled gracefully, even if mid skip - { - &GetBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().Number.Uint64() - 4}, Skip: 2, Amount: 3}, - []common.Hash{ - bc.GetBlockByNumber(bc.CurrentBlock().Number.Uint64() - 4).Hash(), - bc.GetBlockByNumber(bc.CurrentBlock().Number.Uint64() - 1).Hash(), - }, - }, { - &GetBlockHeadersData{Origin: hashOrNumber{Number: 4}, Skip: 2, Amount: 3, Reverse: true}, - []common.Hash{ - bc.GetBlockByNumber(4).Hash(), - bc.GetBlockByNumber(1).Hash(), - }, - }, - // Check that non existing headers aren't returned - { - &GetBlockHeadersData{Origin: hashOrNumber{Hash: unknown}, Amount: 1}, - []common.Hash{}, - }, { - &GetBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().Number.Uint64() + 1}, Amount: 1}, - []common.Hash{}, - }, - } - // Run each of the tests and verify the results against the chain - var reqID uint64 - for i, tt := range tests { - // Collect the headers to expect in the response - var headers []*types.Header - for _, hash := range tt.expect { - headers = append(headers, bc.GetHeaderByHash(hash)) - } - // Send the hash request and verify the response - reqID++ - - sendRequest(rawPeer.app, GetBlockHeadersMsg, reqID, tt.query) - if err := expectResponse(rawPeer.app, BlockHeadersMsg, reqID, testBufLimit, headers); err != nil { - t.Errorf("test %d: headers mismatch: %v", i, err) - } - } -} - -// Tests that block contents can be retrieved from a remote chain based on their hashes. -func TestGetBlockBodiesLes2(t *testing.T) { testGetBlockBodies(t, 2) } -func TestGetBlockBodiesLes3(t *testing.T) { testGetBlockBodies(t, 3) } -func TestGetBlockBodiesLes4(t *testing.T) { testGetBlockBodies(t, 4) } - -func testGetBlockBodies(t *testing.T, protocol int) { - netconfig := testnetConfig{ - blocks: downloader.MaxHeaderFetch + 15, - protocol: protocol, - nopruning: true, - } - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - bc := server.handler.blockchain - - // Create a batch of tests for various scenarios - limit := MaxBodyFetch - tests := []struct { - random int // Number of blocks to fetch randomly from the chain - explicit []common.Hash // Explicitly requested blocks - available []bool // Availability of explicitly requested blocks - expected int // Total number of existing blocks to expect - }{ - {1, nil, nil, 1}, // A single random block should be retrievable - {10, nil, nil, 10}, // Multiple random blocks should be retrievable - {limit, nil, nil, limit}, // The maximum possible blocks should be retrievable - //{limit + 1, nil, nil, limit}, // No more than the possible block count should be returned - {0, []common.Hash{bc.Genesis().Hash()}, []bool{true}, 1}, // The genesis block should be retrievable - {0, []common.Hash{bc.CurrentBlock().Hash()}, []bool{true}, 1}, // The chains head block should be retrievable - {0, []common.Hash{{}}, []bool{false}, 0}, // A non existent block should not be returned - - // Existing and non-existing blocks interleaved should not cause problems - {0, []common.Hash{ - {}, - bc.GetBlockByNumber(1).Hash(), - {}, - bc.GetBlockByNumber(10).Hash(), - {}, - bc.GetBlockByNumber(100).Hash(), - {}, - }, []bool{false, true, false, true, false, true, false}, 3}, - } - // Run each of the tests and verify the results against the chain - var reqID uint64 - for i, tt := range tests { - // Collect the hashes to request, and the response to expect - var hashes []common.Hash - seen := make(map[int64]bool) - var bodies []*types.Body - - for j := 0; j < tt.random; j++ { - for { - num := rand.Int63n(int64(bc.CurrentBlock().Number.Uint64())) - if !seen[num] { - seen[num] = true - - block := bc.GetBlockByNumber(uint64(num)) - hashes = append(hashes, block.Hash()) - if len(bodies) < tt.expected { - bodies = append(bodies, &types.Body{Transactions: block.Transactions(), Uncles: block.Uncles()}) - } - break - } - } - } - for j, hash := range tt.explicit { - hashes = append(hashes, hash) - if tt.available[j] && len(bodies) < tt.expected { - block := bc.GetBlockByHash(hash) - bodies = append(bodies, &types.Body{Transactions: block.Transactions(), Uncles: block.Uncles()}) - } - } - reqID++ - - // Send the hash request and verify the response - sendRequest(rawPeer.app, GetBlockBodiesMsg, reqID, hashes) - if err := expectResponse(rawPeer.app, BlockBodiesMsg, reqID, testBufLimit, bodies); err != nil { - t.Errorf("test %d: bodies mismatch: %v", i, err) - } - } -} - -// Tests that the contract codes can be retrieved based on account addresses. -func TestGetCodeLes2(t *testing.T) { testGetCode(t, 2) } -func TestGetCodeLes3(t *testing.T) { testGetCode(t, 3) } -func TestGetCodeLes4(t *testing.T) { testGetCode(t, 4) } - -func testGetCode(t *testing.T, protocol int) { - // Assemble the test environment - netconfig := testnetConfig{ - blocks: 4, - protocol: protocol, - nopruning: true, - } - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - bc := server.handler.blockchain - - var codereqs []*CodeReq - var codes [][]byte - for i := uint64(0); i <= bc.CurrentBlock().Number.Uint64(); i++ { - header := bc.GetHeaderByNumber(i) - req := &CodeReq{ - BHash: header.Hash(), - AccountAddress: testContractAddr[:], - } - codereqs = append(codereqs, req) - if i >= testContractDeployed { - codes = append(codes, testContractCodeDeployed) - } - } - - sendRequest(rawPeer.app, GetCodeMsg, 42, codereqs) - if err := expectResponse(rawPeer.app, CodeMsg, 42, testBufLimit, codes); err != nil { - t.Errorf("codes mismatch: %v", err) - } -} - -// Tests that the stale contract codes can't be retrieved based on account addresses. -func TestGetStaleCodeLes2(t *testing.T) { testGetStaleCode(t, 2) } -func TestGetStaleCodeLes3(t *testing.T) { testGetStaleCode(t, 3) } -func TestGetStaleCodeLes4(t *testing.T) { testGetStaleCode(t, 4) } - -func testGetStaleCode(t *testing.T, protocol int) { - netconfig := testnetConfig{ - blocks: core.TriesInMemory + 4, - protocol: protocol, - nopruning: true, - } - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - bc := server.handler.blockchain - - check := func(number uint64, expected [][]byte) { - req := &CodeReq{ - BHash: bc.GetHeaderByNumber(number).Hash(), - AccountAddress: testContractAddr[:], - } - sendRequest(rawPeer.app, GetCodeMsg, 42, []*CodeReq{req}) - if err := expectResponse(rawPeer.app, CodeMsg, 42, testBufLimit, expected); err != nil { - t.Errorf("codes mismatch: %v", err) - } - } - check(0, [][]byte{}) // Non-exist contract - check(testContractDeployed, [][]byte{}) // Stale contract - check(bc.CurrentHeader().Number.Uint64(), [][]byte{testContractCodeDeployed}) // Fresh contract -} - -// Tests that the transaction receipts can be retrieved based on hashes. -func TestGetReceiptLes2(t *testing.T) { testGetReceipt(t, 2) } -func TestGetReceiptLes3(t *testing.T) { testGetReceipt(t, 3) } -func TestGetReceiptLes4(t *testing.T) { testGetReceipt(t, 4) } - -func testGetReceipt(t *testing.T, protocol int) { - // Assemble the test environment - netconfig := testnetConfig{ - blocks: 4, - protocol: protocol, - nopruning: true, - } - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - bc := server.handler.blockchain - - // Collect the hashes to request, and the response to expect - var receipts []types.Receipts - var hashes []common.Hash - for i := uint64(0); i <= bc.CurrentBlock().Number.Uint64(); i++ { - block := bc.GetBlockByNumber(i) - - hashes = append(hashes, block.Hash()) - receipts = append(receipts, rawdb.ReadReceipts(server.db, block.Hash(), block.NumberU64(), block.Time(), bc.Config())) - } - // Send the hash request and verify the response - sendRequest(rawPeer.app, GetReceiptsMsg, 42, hashes) - if err := expectResponse(rawPeer.app, ReceiptsMsg, 42, testBufLimit, receipts); err != nil { - t.Errorf("receipts mismatch: %v", err) - } -} - -// Tests that trie merkle proofs can be retrieved -func TestGetProofsLes2(t *testing.T) { testGetProofs(t, 2) } -func TestGetProofsLes3(t *testing.T) { testGetProofs(t, 3) } -func TestGetProofsLes4(t *testing.T) { testGetProofs(t, 4) } - -func testGetProofs(t *testing.T, protocol int) { - // Assemble the test environment - netconfig := testnetConfig{ - blocks: 4, - protocol: protocol, - nopruning: true, - } - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - bc := server.handler.blockchain - - var proofreqs []ProofReq - proofsV2 := trienode.NewProofSet() - - accounts := []common.Address{bankAddr, userAddr1, userAddr2, signerAddr, {}} - for i := uint64(0); i <= bc.CurrentBlock().Number.Uint64(); i++ { - header := bc.GetHeaderByNumber(i) - trie, _ := trie.New(trie.StateTrieID(header.Root), server.backend.Blockchain().TrieDB()) - - for _, acc := range accounts { - req := ProofReq{ - BHash: header.Hash(), - Key: crypto.Keccak256(acc[:]), - } - proofreqs = append(proofreqs, req) - trie.Prove(crypto.Keccak256(acc[:]), proofsV2) - } - } - // Send the proof request and verify the response - sendRequest(rawPeer.app, GetProofsV2Msg, 42, proofreqs) - if err := expectResponse(rawPeer.app, ProofsV2Msg, 42, testBufLimit, proofsV2.List()); err != nil { - t.Errorf("proofs mismatch: %v", err) - } -} - -// Tests that the stale contract codes can't be retrieved based on account addresses. -func TestGetStaleProofLes2(t *testing.T) { testGetStaleProof(t, 2) } -func TestGetStaleProofLes3(t *testing.T) { testGetStaleProof(t, 3) } -func TestGetStaleProofLes4(t *testing.T) { testGetStaleProof(t, 4) } - -func testGetStaleProof(t *testing.T, protocol int) { - netconfig := testnetConfig{ - blocks: core.TriesInMemory + 4, - protocol: protocol, - nopruning: true, - } - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - bc := server.handler.blockchain - - check := func(number uint64, wantOK bool) { - var ( - header = bc.GetHeaderByNumber(number) - account = crypto.Keccak256(userAddr1.Bytes()) - ) - req := &ProofReq{ - BHash: header.Hash(), - Key: account, - } - sendRequest(rawPeer.app, GetProofsV2Msg, 42, []*ProofReq{req}) - - var expected []rlp.RawValue - if wantOK { - proofsV2 := trienode.NewProofSet() - t, _ := trie.New(trie.StateTrieID(header.Root), server.backend.Blockchain().TrieDB()) - t.Prove(account, proofsV2) - expected = proofsV2.List() - } - if err := expectResponse(rawPeer.app, ProofsV2Msg, 42, testBufLimit, expected); err != nil { - t.Errorf("codes mismatch: %v", err) - } - } - check(0, false) // Non-exist proof - check(2, false) // Stale proof - check(bc.CurrentHeader().Number.Uint64(), true) // Fresh proof -} - -// Tests that CHT proofs can be correctly retrieved. -func TestGetCHTProofsLes2(t *testing.T) { testGetCHTProofs(t, 2) } -func TestGetCHTProofsLes3(t *testing.T) { testGetCHTProofs(t, 3) } -func TestGetCHTProofsLes4(t *testing.T) { testGetCHTProofs(t, 4) } - -func testGetCHTProofs(t *testing.T, protocol int) { - var ( - config = light.TestServerIndexerConfig - waitIndexers = func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { - for { - cs, _, _ := cIndexer.Sections() - if cs >= 1 { - break - } - time.Sleep(10 * time.Millisecond) - } - } - netconfig = testnetConfig{ - blocks: int(config.ChtSize + config.ChtConfirms), - protocol: protocol, - indexFn: waitIndexers, - nopruning: true, - } - ) - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - bc := server.handler.blockchain - - // Assemble the proofs from the different protocols - header := bc.GetHeaderByNumber(config.ChtSize - 1) - rlp, _ := rlp.EncodeToBytes(header) - - key := make([]byte, 8) - binary.BigEndian.PutUint64(key, config.ChtSize-1) - - proofsV2 := HelperTrieResps{ - AuxData: [][]byte{rlp}, - } - root := light.GetChtRoot(server.db, 0, bc.GetHeaderByNumber(config.ChtSize-1).Hash()) - trie, _ := trie.New(trie.TrieID(root), trie.NewDatabase(rawdb.NewTable(server.db, string(rawdb.ChtTablePrefix)), trie.HashDefaults)) - trie.Prove(key, &proofsV2.Proofs) - // Assemble the requests for the different protocols - requestsV2 := []HelperTrieReq{{ - Type: htCanonical, - TrieIdx: 0, - Key: key, - AuxReq: htAuxHeader, - }} - // Send the proof request and verify the response - sendRequest(rawPeer.app, GetHelperTrieProofsMsg, 42, requestsV2) - if err := expectResponse(rawPeer.app, HelperTrieProofsMsg, 42, testBufLimit, proofsV2); err != nil { - t.Errorf("proofs mismatch: %v", err) - } -} - -func TestGetBloombitsProofsLes2(t *testing.T) { testGetBloombitsProofs(t, 2) } -func TestGetBloombitsProofsLes3(t *testing.T) { testGetBloombitsProofs(t, 3) } -func TestGetBloombitsProofsLes4(t *testing.T) { testGetBloombitsProofs(t, 4) } - -// Tests that bloombits proofs can be correctly retrieved. -func testGetBloombitsProofs(t *testing.T, protocol int) { - var ( - config = light.TestServerIndexerConfig - waitIndexers = func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { - for { - bts, _, _ := btIndexer.Sections() - if bts >= 1 { - break - } - time.Sleep(10 * time.Millisecond) - } - } - netconfig = testnetConfig{ - blocks: int(config.BloomTrieSize + config.BloomTrieConfirms), - protocol: protocol, - indexFn: waitIndexers, - nopruning: true, - } - ) - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - bc := server.handler.blockchain - - // Request and verify each bit of the bloom bits proofs - for bit := 0; bit < 2048; bit++ { - // Assemble the request and proofs for the bloombits - key := make([]byte, 10) - - binary.BigEndian.PutUint16(key[:2], uint16(bit)) - // Only the first bloom section has data. - binary.BigEndian.PutUint64(key[2:], 0) - - requests := []HelperTrieReq{{ - Type: htBloomBits, - TrieIdx: 0, - Key: key, - }} - var proofs HelperTrieResps - - root := light.GetBloomTrieRoot(server.db, 0, bc.GetHeaderByNumber(config.BloomTrieSize-1).Hash()) - trie, _ := trie.New(trie.TrieID(root), trie.NewDatabase(rawdb.NewTable(server.db, string(rawdb.BloomTrieTablePrefix)), trie.HashDefaults)) - trie.Prove(key, &proofs.Proofs) - - // Send the proof request and verify the response - sendRequest(rawPeer.app, GetHelperTrieProofsMsg, 42, requests) - if err := expectResponse(rawPeer.app, HelperTrieProofsMsg, 42, testBufLimit, proofs); err != nil { - t.Errorf("bit %d: proofs mismatch: %v", bit, err) - } - } -} - -func TestTransactionStatusLes2(t *testing.T) { testTransactionStatus(t, lpv2) } -func TestTransactionStatusLes3(t *testing.T) { testTransactionStatus(t, lpv3) } -func TestTransactionStatusLes4(t *testing.T) { testTransactionStatus(t, lpv4) } - -func testTransactionStatus(t *testing.T, protocol int) { - netconfig := testnetConfig{ - protocol: protocol, - nopruning: true, - } - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - server.handler.addTxsSync = true - - chain := server.handler.blockchain - - var reqID uint64 - - test := func(tx *types.Transaction, send bool, expStatus light.TxStatus) { - t.Helper() - - reqID++ - if send { - sendRequest(rawPeer.app, SendTxV2Msg, reqID, types.Transactions{tx}) - } else { - sendRequest(rawPeer.app, GetTxStatusMsg, reqID, []common.Hash{tx.Hash()}) - } - if err := expectResponse(rawPeer.app, TxStatusMsg, reqID, testBufLimit, []light.TxStatus{expStatus}); err != nil { - t.Errorf("transaction status mismatch: %v", err) - } - } - signer := types.HomesteadSigner{} - - // test error status by sending an underpriced transaction - tx0, _ := types.SignTx(types.NewTransaction(0, userAddr1, big.NewInt(10000), params.TxGas, nil, nil), signer, bankKey) - test(tx0, true, light.TxStatus{Status: txpool.TxStatusUnknown, Error: "transaction underpriced: tip needed 1, tip permitted 0"}) - - tx1, _ := types.SignTx(types.NewTransaction(0, userAddr1, big.NewInt(10000), params.TxGas, big.NewInt(100000000000), nil), signer, bankKey) - test(tx1, false, light.TxStatus{Status: txpool.TxStatusUnknown}) // query before sending, should be unknown - test(tx1, true, light.TxStatus{Status: txpool.TxStatusPending}) // send valid processable tx, should return pending - test(tx1, true, light.TxStatus{Status: txpool.TxStatusPending}) // adding it again should not return an error - - tx2, _ := types.SignTx(types.NewTransaction(1, userAddr1, big.NewInt(10000), params.TxGas, big.NewInt(100000000000), nil), signer, bankKey) - tx3, _ := types.SignTx(types.NewTransaction(2, userAddr1, big.NewInt(10000), params.TxGas, big.NewInt(100000000000), nil), signer, bankKey) - // send transactions in the wrong order, tx3 should be queued - test(tx3, true, light.TxStatus{Status: txpool.TxStatusQueued}) - test(tx2, true, light.TxStatus{Status: txpool.TxStatusPending}) - // query again, now tx3 should be pending too - test(tx3, false, light.TxStatus{Status: txpool.TxStatusPending}) - - // generate and add a block with tx1 and tx2 included - gchain, _ := core.GenerateChain(params.TestChainConfig, chain.GetBlockByNumber(0), ethash.NewFaker(), server.db, 1, func(i int, block *core.BlockGen) { - block.AddTx(tx1) - block.AddTx(tx2) - }) - if _, err := chain.InsertChain(gchain); err != nil { - panic(err) - } - // wait until TxPool processes the inserted block - for i := 0; i < 10; i++ { - if pending, _ := server.handler.txpool.Stats(); pending == 1 { - break - } - time.Sleep(100 * time.Millisecond) - } - if pending, _ := server.handler.txpool.Stats(); pending != 1 { - t.Fatalf("pending count mismatch: have %d, want 1", pending) - } - // Discard new block announcement - msg, _ := rawPeer.app.ReadMsg() - msg.Discard() - - // check if their status is included now - block1hash := rawdb.ReadCanonicalHash(server.db, 1) - test(tx1, false, light.TxStatus{Status: txpool.TxStatusIncluded, Lookup: &rawdb.LegacyTxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 0}}) - - test(tx2, false, light.TxStatus{Status: txpool.TxStatusIncluded, Lookup: &rawdb.LegacyTxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 1}}) - - // create a reorg that rolls them back - gchain, _ = core.GenerateChain(params.TestChainConfig, chain.GetBlockByNumber(0), ethash.NewFaker(), server.db, 2, func(i int, block *core.BlockGen) {}) - if _, err := chain.InsertChain(gchain); err != nil { - panic(err) - } - // wait until TxPool processes the reorg - for i := 0; i < 10; i++ { - if pending, _ := server.handler.txpool.Stats(); pending == 3 { - break - } - time.Sleep(100 * time.Millisecond) - } - if pending, _ := server.handler.txpool.Stats(); pending != 3 { - t.Fatalf("pending count mismatch: have %d, want 3", pending) - } - // Discard new block announcement - msg, _ = rawPeer.app.ReadMsg() - msg.Discard() - - // check if their status is pending again - test(tx1, false, light.TxStatus{Status: txpool.TxStatusPending}) - test(tx2, false, light.TxStatus{Status: txpool.TxStatusPending}) -} - -func TestStopResumeLES3(t *testing.T) { testStopResume(t, lpv3) } -func TestStopResumeLES4(t *testing.T) { testStopResume(t, lpv4) } - -func testStopResume(t *testing.T, protocol int) { - netconfig := testnetConfig{ - protocol: protocol, - simClock: true, - nopruning: true, - } - server, _, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - server.handler.server.costTracker.testing = true - server.handler.server.costTracker.testCostList = testCostList(testBufLimit / 10) - - rawPeer, closePeer, _ := server.newRawPeer(t, "peer", protocol) - defer closePeer() - - var ( - reqID uint64 - expBuf = testBufLimit - testCost = testBufLimit / 10 - ) - header := server.handler.blockchain.CurrentHeader() - req := func() { - reqID++ - sendRequest(rawPeer.app, GetBlockHeadersMsg, reqID, &GetBlockHeadersData{Origin: hashOrNumber{Hash: header.Hash()}, Amount: 1}) - } - for i := 1; i <= 5; i++ { - // send requests while we still have enough buffer and expect a response - for expBuf >= testCost { - req() - expBuf -= testCost - if err := expectResponse(rawPeer.app, BlockHeadersMsg, reqID, expBuf, []*types.Header{header}); err != nil { - t.Errorf("expected response and failed: %v", err) - } - } - // send some more requests in excess and expect a single StopMsg - c := i - for c > 0 { - req() - c-- - } - if err := p2p.ExpectMsg(rawPeer.app, StopMsg, nil); err != nil { - t.Errorf("expected StopMsg and failed: %v", err) - } - // wait until the buffer is recharged by half of the limit - wait := testBufLimit / testBufRecharge / 2 - server.clock.(*mclock.Simulated).Run(time.Millisecond * time.Duration(wait)) - - // expect a ResumeMsg with the partially recharged buffer value - expBuf += testBufRecharge * wait - if err := p2p.ExpectMsg(rawPeer.app, ResumeMsg, expBuf); err != nil { - t.Errorf("expected ResumeMsg and failed: %v", err) - } - } -} diff --git a/les/metrics.go b/les/metrics.go deleted file mode 100644 index 07d3133c95..0000000000 --- a/les/metrics.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/p2p" -) - -var ( - miscInPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/total", nil) - miscInTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/total", nil) - miscInHeaderPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/header", nil) - miscInHeaderTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/header", nil) - miscInBodyPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/body", nil) - miscInBodyTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/body", nil) - miscInCodePacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/code", nil) - miscInCodeTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/code", nil) - miscInReceiptPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/receipt", nil) - miscInReceiptTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/receipt", nil) - miscInTrieProofPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/proof", nil) - miscInTrieProofTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/proof", nil) - miscInHelperTriePacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/helperTrie", nil) - miscInHelperTrieTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/helperTrie", nil) - miscInTxsPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/txs", nil) - miscInTxsTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/txs", nil) - miscInTxStatusPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/txStatus", nil) - miscInTxStatusTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/txStatus", nil) - - miscOutPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/total", nil) - miscOutTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/total", nil) - miscOutHeaderPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/header", nil) - miscOutHeaderTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/header", nil) - miscOutBodyPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/body", nil) - miscOutBodyTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/body", nil) - miscOutCodePacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/code", nil) - miscOutCodeTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/code", nil) - miscOutReceiptPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/receipt", nil) - miscOutReceiptTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/receipt", nil) - miscOutTrieProofPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/proof", nil) - miscOutTrieProofTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/proof", nil) - miscOutHelperTriePacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/helperTrie", nil) - miscOutHelperTrieTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/helperTrie", nil) - miscOutTxsPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/txs", nil) - miscOutTxsTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/txs", nil) - miscOutTxStatusPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/txStatus", nil) - miscOutTxStatusTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/txStatus", nil) - - miscServingTimeHeaderTimer = metrics.NewRegisteredTimer("les/misc/serve/header", nil) - miscServingTimeBodyTimer = metrics.NewRegisteredTimer("les/misc/serve/body", nil) - miscServingTimeCodeTimer = metrics.NewRegisteredTimer("les/misc/serve/code", nil) - miscServingTimeReceiptTimer = metrics.NewRegisteredTimer("les/misc/serve/receipt", nil) - miscServingTimeTrieProofTimer = metrics.NewRegisteredTimer("les/misc/serve/proof", nil) - miscServingTimeHelperTrieTimer = metrics.NewRegisteredTimer("les/misc/serve/helperTrie", nil) - miscServingTimeTxTimer = metrics.NewRegisteredTimer("les/misc/serve/txs", nil) - miscServingTimeTxStatusTimer = metrics.NewRegisteredTimer("les/misc/serve/txStatus", nil) - - connectionTimer = metrics.NewRegisteredTimer("les/connection/duration", nil) - serverConnectionGauge = metrics.NewRegisteredGauge("les/connection/server", nil) - - totalCapacityGauge = metrics.NewRegisteredGauge("les/server/totalCapacity", nil) - totalRechargeGauge = metrics.NewRegisteredGauge("les/server/totalRecharge", nil) - blockProcessingTimer = metrics.NewRegisteredTimer("les/server/blockProcessingTime", nil) - - requestServedMeter = metrics.NewRegisteredMeter("les/server/req/avgServedTime", nil) - requestServedTimer = metrics.NewRegisteredTimer("les/server/req/servedTime", nil) - requestEstimatedMeter = metrics.NewRegisteredMeter("les/server/req/avgEstimatedTime", nil) - requestEstimatedTimer = metrics.NewRegisteredTimer("les/server/req/estimatedTime", nil) - relativeCostHistogram = metrics.NewRegisteredHistogram("les/server/req/relative", nil, metrics.NewExpDecaySample(1028, 0.015)) - relativeCostHeaderHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/header", nil, metrics.NewExpDecaySample(1028, 0.015)) - relativeCostBodyHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/body", nil, metrics.NewExpDecaySample(1028, 0.015)) - relativeCostReceiptHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/receipt", nil, metrics.NewExpDecaySample(1028, 0.015)) - relativeCostCodeHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/code", nil, metrics.NewExpDecaySample(1028, 0.015)) - relativeCostProofHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/proof", nil, metrics.NewExpDecaySample(1028, 0.015)) - relativeCostHelperProofHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/helperTrie", nil, metrics.NewExpDecaySample(1028, 0.015)) - relativeCostSendTxHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/txs", nil, metrics.NewExpDecaySample(1028, 0.015)) - relativeCostTxStatusHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/txStatus", nil, metrics.NewExpDecaySample(1028, 0.015)) - - globalFactorGauge = metrics.NewRegisteredGauge("les/server/globalFactor", nil) - recentServedGauge = metrics.NewRegisteredGauge("les/server/recentRequestServed", nil) - recentEstimatedGauge = metrics.NewRegisteredGauge("les/server/recentRequestEstimated", nil) - sqServedGauge = metrics.NewRegisteredGauge("les/server/servingQueue/served", nil) - sqQueuedGauge = metrics.NewRegisteredGauge("les/server/servingQueue/queued", nil) - - clientFreezeMeter = metrics.NewRegisteredMeter("les/server/clientEvent/freeze", nil) - clientErrorMeter = metrics.NewRegisteredMeter("les/server/clientEvent/error", nil) - - requestRTT = metrics.NewRegisteredTimer("les/client/req/rtt", nil) - requestSendDelay = metrics.NewRegisteredTimer("les/client/req/sendDelay", nil) - - serverSelectableGauge = metrics.NewRegisteredGauge("les/client/serverPool/selectable", nil) - serverDialedMeter = metrics.NewRegisteredMeter("les/client/serverPool/dialed", nil) - serverConnectedGauge = metrics.NewRegisteredGauge("les/client/serverPool/connected", nil) - sessionValueMeter = metrics.NewRegisteredMeter("les/client/serverPool/sessionValue", nil) - totalValueGauge = metrics.NewRegisteredGauge("les/client/serverPool/totalValue", nil) - suggestedTimeoutGauge = metrics.NewRegisteredGauge("les/client/serverPool/timeout", nil) -) - -// meteredMsgReadWriter is a wrapper around a p2p.MsgReadWriter, capable of -// accumulating the above defined metrics based on the data stream contents. -type meteredMsgReadWriter struct { - p2p.MsgReadWriter // Wrapped message stream to meter - version int // Protocol version to select correct meters -} - -// newMeteredMsgWriter wraps a p2p MsgReadWriter with metering support. If the -// metrics system is disabled, this function returns the original object. -func newMeteredMsgWriter(rw p2p.MsgReadWriter, version int) p2p.MsgReadWriter { - if !metrics.Enabled { - return rw - } - return &meteredMsgReadWriter{MsgReadWriter: rw, version: version} -} - -func (rw *meteredMsgReadWriter) ReadMsg() (p2p.Msg, error) { - // Read the message and short circuit in case of an error - msg, err := rw.MsgReadWriter.ReadMsg() - if err != nil { - return msg, err - } - // Account for the data traffic - packets, traffic := miscInPacketsMeter, miscInTrafficMeter - packets.Mark(1) - traffic.Mark(int64(msg.Size)) - - return msg, err -} - -func (rw *meteredMsgReadWriter) WriteMsg(msg p2p.Msg) error { - // Account for the data traffic - packets, traffic := miscOutPacketsMeter, miscOutTrafficMeter - packets.Mark(1) - traffic.Mark(int64(msg.Size)) - - // Send the packet to the p2p layer - return rw.MsgReadWriter.WriteMsg(msg) -} diff --git a/les/odr.go b/les/odr.go deleted file mode 100644 index 943b05fdfc..0000000000 --- a/les/odr.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "context" - "math/rand" - "sort" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/light" -) - -// LesOdr implements light.OdrBackend -type LesOdr struct { - db ethdb.Database - indexerConfig *light.IndexerConfig - chtIndexer, bloomTrieIndexer, bloomIndexer *core.ChainIndexer - peers *serverPeerSet - retriever *retrieveManager - stop chan struct{} -} - -func NewLesOdr(db ethdb.Database, config *light.IndexerConfig, peers *serverPeerSet, retriever *retrieveManager) *LesOdr { - return &LesOdr{ - db: db, - indexerConfig: config, - peers: peers, - retriever: retriever, - stop: make(chan struct{}), - } -} - -// Stop cancels all pending retrievals -func (odr *LesOdr) Stop() { - close(odr.stop) -} - -// Database returns the backing database -func (odr *LesOdr) Database() ethdb.Database { - return odr.db -} - -// SetIndexers adds the necessary chain indexers to the ODR backend -func (odr *LesOdr) SetIndexers(chtIndexer, bloomTrieIndexer, bloomIndexer *core.ChainIndexer) { - odr.chtIndexer = chtIndexer - odr.bloomTrieIndexer = bloomTrieIndexer - odr.bloomIndexer = bloomIndexer -} - -// ChtIndexer returns the CHT chain indexer -func (odr *LesOdr) ChtIndexer() *core.ChainIndexer { - return odr.chtIndexer -} - -// BloomTrieIndexer returns the bloom trie chain indexer -func (odr *LesOdr) BloomTrieIndexer() *core.ChainIndexer { - return odr.bloomTrieIndexer -} - -// BloomIndexer returns the bloombits chain indexer -func (odr *LesOdr) BloomIndexer() *core.ChainIndexer { - return odr.bloomIndexer -} - -// IndexerConfig returns the indexer config. -func (odr *LesOdr) IndexerConfig() *light.IndexerConfig { - return odr.indexerConfig -} - -const ( - MsgBlockHeaders = iota - MsgBlockBodies - MsgCode - MsgReceipts - MsgProofsV2 - MsgHelperTrieProofs - MsgTxStatus -) - -// Msg encodes a LES message that delivers reply data for a request -type Msg struct { - MsgType int - ReqID uint64 - Obj interface{} -} - -// peerByTxHistory is a heap.Interface implementation which can sort -// the peerset by transaction history. -type peerByTxHistory []*serverPeer - -func (h peerByTxHistory) Len() int { return len(h) } -func (h peerByTxHistory) Less(i, j int) bool { - if h[i].txHistory == txIndexUnlimited { - return false - } - if h[j].txHistory == txIndexUnlimited { - return true - } - return h[i].txHistory < h[j].txHistory -} -func (h peerByTxHistory) Swap(i, j int) { h[i], h[j] = h[j], h[i] } - -const ( - maxTxStatusRetry = 3 // The maximum retries will be made for tx status request. - maxTxStatusCandidates = 5 // The maximum les servers the tx status requests will be sent to. -) - -// RetrieveTxStatus retrieves the transaction status from the LES network. -// There is no guarantee in the LES protocol that the mined transaction will -// be retrieved back for sure because of different reasons(the transaction -// is unindexed, the malicious server doesn't reply it deliberately, etc). -// Therefore, unretrieved transactions(UNKNOWN) will receive a certain number -// of retries, thus giving a weak guarantee. -func (odr *LesOdr) RetrieveTxStatus(ctx context.Context, req *light.TxStatusRequest) error { - // Sort according to the transaction history supported by the peer and - // select the peers with longest history. - var ( - retries int - peers []*serverPeer - missing = len(req.Hashes) - result = make([]light.TxStatus, len(req.Hashes)) - canSend = make(map[string]bool) - ) - for _, peer := range odr.peers.allPeers() { - if peer.txHistory == txIndexDisabled { - continue - } - peers = append(peers, peer) - } - sort.Sort(sort.Reverse(peerByTxHistory(peers))) - for i := 0; i < maxTxStatusCandidates && i < len(peers); i++ { - canSend[peers[i].id] = true - } - // Send out the request and assemble the result. - for { - if retries >= maxTxStatusRetry || len(canSend) == 0 { - break - } - var ( - // Deep copy the request, so that the partial result won't be mixed. - req = &TxStatusRequest{Hashes: req.Hashes} - id = rand.Uint64() - distreq = &distReq{ - getCost: func(dp distPeer) uint64 { return req.GetCost(dp.(*serverPeer)) }, - canSend: func(dp distPeer) bool { return canSend[dp.(*serverPeer).id] }, - request: func(dp distPeer) func() { - p := dp.(*serverPeer) - p.fcServer.QueuedRequest(id, req.GetCost(p)) - delete(canSend, p.id) - return func() { req.Request(id, p) } - }, - } - ) - if err := odr.retriever.retrieve(ctx, id, distreq, func(p distPeer, msg *Msg) error { return req.Validate(odr.db, msg) }, odr.stop); err != nil { - return err - } - // Collect the response and assemble them to the final result. - // All the response is not verifiable, so always pick the first - // one we get. - for index, status := range req.Status { - if result[index].Status != txpool.TxStatusUnknown { - continue - } - if status.Status == txpool.TxStatusUnknown { - continue - } - result[index], missing = status, missing-1 - } - // Abort the procedure if all the status are retrieved - if missing == 0 { - break - } - retries += 1 - } - req.Status = result - return nil -} - -// Retrieve tries to fetch an object from the LES network. It's a common API -// for most of the LES requests except for the TxStatusRequest which needs -// the additional retry mechanism. -// If the network retrieval was successful, it stores the object in local db. -func (odr *LesOdr) Retrieve(ctx context.Context, req light.OdrRequest) (err error) { - lreq := LesRequest(req) - - reqID := rand.Uint64() - rq := &distReq{ - getCost: func(dp distPeer) uint64 { - return lreq.GetCost(dp.(*serverPeer)) - }, - canSend: func(dp distPeer) bool { - p := dp.(*serverPeer) - if !p.onlyAnnounce { - return lreq.CanSend(p) - } - return false - }, - request: func(dp distPeer) func() { - p := dp.(*serverPeer) - cost := lreq.GetCost(p) - p.fcServer.QueuedRequest(reqID, cost) - return func() { lreq.Request(reqID, p) } - }, - } - - defer func(sent mclock.AbsTime) { - if err != nil { - return - } - requestRTT.Update(time.Duration(mclock.Now() - sent)) - }(mclock.Now()) - - if err := odr.retriever.retrieve(ctx, reqID, rq, func(p distPeer, msg *Msg) error { return lreq.Validate(odr.db, msg) }, odr.stop); err != nil { - return err - } - req.StoreResult(odr.db) - return nil -} diff --git a/les/odr_requests.go b/les/odr_requests.go deleted file mode 100644 index c907018590..0000000000 --- a/les/odr_requests.go +++ /dev/null @@ -1,537 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "encoding/binary" - "errors" - "fmt" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -var ( - errInvalidMessageType = errors.New("invalid message type") - errInvalidEntryCount = errors.New("invalid number of response entries") - errHeaderUnavailable = errors.New("header unavailable") - errTxHashMismatch = errors.New("transaction hash mismatch") - errUncleHashMismatch = errors.New("uncle hash mismatch") - errReceiptHashMismatch = errors.New("receipt hash mismatch") - errDataHashMismatch = errors.New("data hash mismatch") - errCHTHashMismatch = errors.New("cht hash mismatch") - errCHTNumberMismatch = errors.New("cht number mismatch") - errUselessNodes = errors.New("useless nodes in merkle proof nodeset") -) - -type LesOdrRequest interface { - GetCost(*serverPeer) uint64 - CanSend(*serverPeer) bool - Request(uint64, *serverPeer) error - Validate(ethdb.Database, *Msg) error -} - -func LesRequest(req light.OdrRequest) LesOdrRequest { - switch r := req.(type) { - case *light.BlockRequest: - return (*BlockRequest)(r) - case *light.ReceiptsRequest: - return (*ReceiptsRequest)(r) - case *light.TrieRequest: - return (*TrieRequest)(r) - case *light.CodeRequest: - return (*CodeRequest)(r) - case *light.ChtRequest: - return (*ChtRequest)(r) - case *light.BloomRequest: - return (*BloomRequest)(r) - case *light.TxStatusRequest: - return (*TxStatusRequest)(r) - default: - return nil - } -} - -// BlockRequest is the ODR request type for block bodies -type BlockRequest light.BlockRequest - -// GetCost returns the cost of the given ODR request according to the serving -// peer's cost table (implementation of LesOdrRequest) -func (r *BlockRequest) GetCost(peer *serverPeer) uint64 { - return peer.getRequestCost(GetBlockBodiesMsg, 1) -} - -// CanSend tells if a certain peer is suitable for serving the given request -func (r *BlockRequest) CanSend(peer *serverPeer) bool { - return peer.HasBlock(r.Hash, r.Number, false) -} - -// Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *BlockRequest) Request(reqID uint64, peer *serverPeer) error { - peer.Log().Debug("Requesting block body", "hash", r.Hash) - return peer.requestBodies(reqID, []common.Hash{r.Hash}) -} - -// Validate processes an ODR request reply message from the LES network -// returns true and stores results in memory if the message was a valid reply -// to the request (implementation of LesOdrRequest) -func (r *BlockRequest) Validate(db ethdb.Database, msg *Msg) error { - log.Debug("Validating block body", "hash", r.Hash) - - // Ensure we have a correct message with a single block body - if msg.MsgType != MsgBlockBodies { - return errInvalidMessageType - } - bodies := msg.Obj.([]*types.Body) - if len(bodies) != 1 { - return errInvalidEntryCount - } - body := bodies[0] - - // Retrieve our stored header and validate block content against it - if r.Header == nil { - r.Header = rawdb.ReadHeader(db, r.Hash, r.Number) - } - if r.Header == nil { - return errHeaderUnavailable - } - if r.Header.TxHash != types.DeriveSha(types.Transactions(body.Transactions), trie.NewStackTrie(nil)) { - return errTxHashMismatch - } - if r.Header.UncleHash != types.CalcUncleHash(body.Uncles) { - return errUncleHashMismatch - } - // Validations passed, encode and store RLP - data, err := rlp.EncodeToBytes(body) - if err != nil { - return err - } - r.Rlp = data - return nil -} - -// ReceiptsRequest is the ODR request type for block receipts by block hash -type ReceiptsRequest light.ReceiptsRequest - -// GetCost returns the cost of the given ODR request according to the serving -// peer's cost table (implementation of LesOdrRequest) -func (r *ReceiptsRequest) GetCost(peer *serverPeer) uint64 { - return peer.getRequestCost(GetReceiptsMsg, 1) -} - -// CanSend tells if a certain peer is suitable for serving the given request -func (r *ReceiptsRequest) CanSend(peer *serverPeer) bool { - return peer.HasBlock(r.Hash, r.Number, false) -} - -// Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *ReceiptsRequest) Request(reqID uint64, peer *serverPeer) error { - peer.Log().Debug("Requesting block receipts", "hash", r.Hash) - return peer.requestReceipts(reqID, []common.Hash{r.Hash}) -} - -// Validate processes an ODR request reply message from the LES network -// returns true and stores results in memory if the message was a valid reply -// to the request (implementation of LesOdrRequest) -func (r *ReceiptsRequest) Validate(db ethdb.Database, msg *Msg) error { - log.Debug("Validating block receipts", "hash", r.Hash) - - // Ensure we have a correct message with a single block receipt - if msg.MsgType != MsgReceipts { - return errInvalidMessageType - } - receipts := msg.Obj.([]types.Receipts) - if len(receipts) != 1 { - return errInvalidEntryCount - } - receipt := receipts[0] - - // Retrieve our stored header and validate receipt content against it - if r.Header == nil { - r.Header = rawdb.ReadHeader(db, r.Hash, r.Number) - } - if r.Header == nil { - return errHeaderUnavailable - } - if r.Header.ReceiptHash != types.DeriveSha(receipt, trie.NewStackTrie(nil)) { - return errReceiptHashMismatch - } - // Validations passed, store and return - r.Receipts = receipt - return nil -} - -type ProofReq struct { - BHash common.Hash - AccountAddress, Key []byte - FromLevel uint -} - -// ODR request type for state/storage trie entries, see LesOdrRequest interface -type TrieRequest light.TrieRequest - -// GetCost returns the cost of the given ODR request according to the serving -// peer's cost table (implementation of LesOdrRequest) -func (r *TrieRequest) GetCost(peer *serverPeer) uint64 { - return peer.getRequestCost(GetProofsV2Msg, 1) -} - -// CanSend tells if a certain peer is suitable for serving the given request -func (r *TrieRequest) CanSend(peer *serverPeer) bool { - return peer.HasBlock(r.Id.BlockHash, r.Id.BlockNumber, true) -} - -// Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *TrieRequest) Request(reqID uint64, peer *serverPeer) error { - peer.Log().Debug("Requesting trie proof", "root", r.Id.Root, "key", r.Key) - req := ProofReq{ - BHash: r.Id.BlockHash, - AccountAddress: r.Id.AccountAddress, - Key: r.Key, - } - return peer.requestProofs(reqID, []ProofReq{req}) -} - -// Validate processes an ODR request reply message from the LES network -// returns true and stores results in memory if the message was a valid reply -// to the request (implementation of LesOdrRequest) -func (r *TrieRequest) Validate(db ethdb.Database, msg *Msg) error { - log.Debug("Validating trie proof", "root", r.Id.Root, "key", r.Key) - - if msg.MsgType != MsgProofsV2 { - return errInvalidMessageType - } - proofs := msg.Obj.(trienode.ProofList) - // Verify the proof and store if checks out - nodeSet := proofs.Set() - reads := &readTraceDB{db: nodeSet} - if _, err := trie.VerifyProof(r.Id.Root, r.Key, reads); err != nil { - return fmt.Errorf("merkle proof verification failed: %v", err) - } - // check if all nodes have been read by VerifyProof - if len(reads.reads) != nodeSet.KeyCount() { - return errUselessNodes - } - r.Proof = nodeSet - return nil -} - -type CodeReq struct { - BHash common.Hash - AccountAddress []byte -} - -// CodeRequest is the ODR request type for node data (used for retrieving contract code), see LesOdrRequest interface -type CodeRequest light.CodeRequest - -// GetCost returns the cost of the given ODR request according to the serving -// peer's cost table (implementation of LesOdrRequest) -func (r *CodeRequest) GetCost(peer *serverPeer) uint64 { - return peer.getRequestCost(GetCodeMsg, 1) -} - -// CanSend tells if a certain peer is suitable for serving the given request -func (r *CodeRequest) CanSend(peer *serverPeer) bool { - return peer.HasBlock(r.Id.BlockHash, r.Id.BlockNumber, true) -} - -// Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *CodeRequest) Request(reqID uint64, peer *serverPeer) error { - peer.Log().Debug("Requesting code data", "hash", r.Hash) - req := CodeReq{ - BHash: r.Id.BlockHash, - AccountAddress: r.Id.AccountAddress, - } - return peer.requestCode(reqID, []CodeReq{req}) -} - -// Validate processes an ODR request reply message from the LES network -// returns true and stores results in memory if the message was a valid reply -// to the request (implementation of LesOdrRequest) -func (r *CodeRequest) Validate(db ethdb.Database, msg *Msg) error { - log.Debug("Validating code data", "hash", r.Hash) - - // Ensure we have a correct message with a single code element - if msg.MsgType != MsgCode { - return errInvalidMessageType - } - reply := msg.Obj.([][]byte) - if len(reply) != 1 { - return errInvalidEntryCount - } - data := reply[0] - - // Verify the data and store if checks out - if hash := crypto.Keccak256Hash(data); r.Hash != hash { - return errDataHashMismatch - } - r.Data = data - return nil -} - -const ( - // helper trie type constants - htCanonical = iota // Canonical hash trie - htBloomBits // BloomBits trie - - // helper trie auxiliary types - // htAuxNone = 1 ; deprecated number, used in les2/3 previously. - htAuxHeader = 2 // applicable for htCanonical, requests for relevant headers -) - -type HelperTrieReq struct { - Type uint - TrieIdx uint64 - Key []byte - FromLevel, AuxReq uint -} - -type HelperTrieResps struct { // describes all responses, not just a single one - Proofs trienode.ProofList - AuxData [][]byte -} - -// ChtRequest is the ODR request type for requesting headers by Canonical Hash Trie, see LesOdrRequest interface -type ChtRequest light.ChtRequest - -// GetCost returns the cost of the given ODR request according to the serving -// peer's cost table (implementation of LesOdrRequest) -func (r *ChtRequest) GetCost(peer *serverPeer) uint64 { - return peer.getRequestCost(GetHelperTrieProofsMsg, 1) -} - -// CanSend tells if a certain peer is suitable for serving the given request -func (r *ChtRequest) CanSend(peer *serverPeer) bool { - peer.lock.RLock() - defer peer.lock.RUnlock() - - return peer.headInfo.Number >= r.Config.ChtConfirms && r.ChtNum <= (peer.headInfo.Number-r.Config.ChtConfirms)/r.Config.ChtSize -} - -// Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *ChtRequest) Request(reqID uint64, peer *serverPeer) error { - peer.Log().Debug("Requesting CHT", "cht", r.ChtNum, "block", r.BlockNum) - var encNum [8]byte - binary.BigEndian.PutUint64(encNum[:], r.BlockNum) - req := HelperTrieReq{ - Type: htCanonical, - TrieIdx: r.ChtNum, - Key: encNum[:], - AuxReq: htAuxHeader, - } - return peer.requestHelperTrieProofs(reqID, []HelperTrieReq{req}) -} - -// Validate processes an ODR request reply message from the LES network -// returns true and stores results in memory if the message was a valid reply -// to the request (implementation of LesOdrRequest) -func (r *ChtRequest) Validate(db ethdb.Database, msg *Msg) error { - log.Debug("Validating CHT", "cht", r.ChtNum, "block", r.BlockNum) - - if msg.MsgType != MsgHelperTrieProofs { - return errInvalidMessageType - } - resp := msg.Obj.(HelperTrieResps) - if len(resp.AuxData) != 1 { - return errInvalidEntryCount - } - nodeSet := resp.Proofs.Set() - headerEnc := resp.AuxData[0] - if len(headerEnc) == 0 { - return errHeaderUnavailable - } - header := new(types.Header) - if err := rlp.DecodeBytes(headerEnc, header); err != nil { - return errHeaderUnavailable - } - // Verify the CHT - var ( - node light.ChtNode - encNumber [8]byte - ) - binary.BigEndian.PutUint64(encNumber[:], r.BlockNum) - - reads := &readTraceDB{db: nodeSet} - value, err := trie.VerifyProof(r.ChtRoot, encNumber[:], reads) - if err != nil { - return fmt.Errorf("merkle proof verification failed: %v", err) - } - if len(reads.reads) != nodeSet.KeyCount() { - return errUselessNodes - } - if err := rlp.DecodeBytes(value, &node); err != nil { - return err - } - if node.Hash != header.Hash() { - return errCHTHashMismatch - } - if r.BlockNum != header.Number.Uint64() { - return errCHTNumberMismatch - } - // Verifications passed, store and return - r.Header = header - r.Proof = nodeSet - r.Td = node.Td - return nil -} - -type BloomReq struct { - BloomTrieNum, BitIdx, SectionIndex, FromLevel uint64 -} - -// BloomRequest is the ODR request type for requesting headers by Canonical Hash Trie, see LesOdrRequest interface -type BloomRequest light.BloomRequest - -// GetCost returns the cost of the given ODR request according to the serving -// peer's cost table (implementation of LesOdrRequest) -func (r *BloomRequest) GetCost(peer *serverPeer) uint64 { - return peer.getRequestCost(GetHelperTrieProofsMsg, len(r.SectionIndexList)) -} - -// CanSend tells if a certain peer is suitable for serving the given request -func (r *BloomRequest) CanSend(peer *serverPeer) bool { - peer.lock.RLock() - defer peer.lock.RUnlock() - - if peer.version < lpv2 { - return false - } - return peer.headInfo.Number >= r.Config.BloomTrieConfirms && r.BloomTrieNum <= (peer.headInfo.Number-r.Config.BloomTrieConfirms)/r.Config.BloomTrieSize -} - -// Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *BloomRequest) Request(reqID uint64, peer *serverPeer) error { - peer.Log().Debug("Requesting BloomBits", "bloomTrie", r.BloomTrieNum, "bitIdx", r.BitIdx, "sections", r.SectionIndexList) - reqs := make([]HelperTrieReq, len(r.SectionIndexList)) - - var encNumber [10]byte - binary.BigEndian.PutUint16(encNumber[:2], uint16(r.BitIdx)) - - for i, sectionIdx := range r.SectionIndexList { - binary.BigEndian.PutUint64(encNumber[2:], sectionIdx) - reqs[i] = HelperTrieReq{ - Type: htBloomBits, - TrieIdx: r.BloomTrieNum, - Key: common.CopyBytes(encNumber[:]), - } - } - return peer.requestHelperTrieProofs(reqID, reqs) -} - -// Validate processes an ODR request reply message from the LES network -// returns true and stores results in memory if the message was a valid reply -// to the request (implementation of LesOdrRequest) -func (r *BloomRequest) Validate(db ethdb.Database, msg *Msg) error { - log.Debug("Validating BloomBits", "bloomTrie", r.BloomTrieNum, "bitIdx", r.BitIdx, "sections", r.SectionIndexList) - - // Ensure we have a correct message with a single proof element - if msg.MsgType != MsgHelperTrieProofs { - return errInvalidMessageType - } - resps := msg.Obj.(HelperTrieResps) - proofs := resps.Proofs - nodeSet := proofs.Set() - reads := &readTraceDB{db: nodeSet} - - r.BloomBits = make([][]byte, len(r.SectionIndexList)) - - // Verify the proofs - var encNumber [10]byte - binary.BigEndian.PutUint16(encNumber[:2], uint16(r.BitIdx)) - - for i, idx := range r.SectionIndexList { - binary.BigEndian.PutUint64(encNumber[2:], idx) - value, err := trie.VerifyProof(r.BloomTrieRoot, encNumber[:], reads) - if err != nil { - return err - } - r.BloomBits[i] = value - } - - if len(reads.reads) != nodeSet.KeyCount() { - return errUselessNodes - } - r.Proofs = nodeSet - return nil -} - -// TxStatusRequest is the ODR request type for transaction status -type TxStatusRequest light.TxStatusRequest - -// GetCost returns the cost of the given ODR request according to the serving -// peer's cost table (implementation of LesOdrRequest) -func (r *TxStatusRequest) GetCost(peer *serverPeer) uint64 { - return peer.getRequestCost(GetTxStatusMsg, len(r.Hashes)) -} - -// CanSend tells if a certain peer is suitable for serving the given request -func (r *TxStatusRequest) CanSend(peer *serverPeer) bool { - return peer.txHistory != txIndexDisabled -} - -// Request sends an ODR request to the LES network (implementation of LesOdrRequest) -func (r *TxStatusRequest) Request(reqID uint64, peer *serverPeer) error { - peer.Log().Debug("Requesting transaction status", "count", len(r.Hashes)) - return peer.requestTxStatus(reqID, r.Hashes) -} - -// Validate processes an ODR request reply message from the LES network -// returns true and stores results in memory if the message was a valid reply -// to the request (implementation of LesOdrRequest) -func (r *TxStatusRequest) Validate(db ethdb.Database, msg *Msg) error { - log.Debug("Validating transaction status", "count", len(r.Hashes)) - - if msg.MsgType != MsgTxStatus { - return errInvalidMessageType - } - status := msg.Obj.([]light.TxStatus) - if len(status) != len(r.Hashes) { - return errInvalidEntryCount - } - r.Status = status - return nil -} - -// readTraceDB stores the keys of database reads. We use this to check that received node -// sets contain only the trie nodes necessary to make proofs pass. -type readTraceDB struct { - db ethdb.KeyValueReader - reads map[string]struct{} -} - -// Get returns a stored node -func (db *readTraceDB) Get(k []byte) ([]byte, error) { - if db.reads == nil { - db.reads = make(map[string]struct{}) - } - db.reads[string(k)] = struct{}{} - return db.db.Get(k) -} - -// Has returns true if the node set contains the given key -func (db *readTraceDB) Has(key []byte) (bool, error) { - _, err := db.Get(key) - return err == nil, nil -} diff --git a/les/odr_test.go b/les/odr_test.go deleted file mode 100644 index 63ae88dcb3..0000000000 --- a/les/odr_test.go +++ /dev/null @@ -1,458 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -// Note: these tests are disabled now because they cannot work with the old sync -// mechanism removed but will be useful again once the PoS ultralight mode is implemented - -/* -import ( - "bytes" - "context" - "crypto/rand" - "fmt" - "math/big" - "reflect" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/math" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" -) - -type odrTestFn func(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte - -func TestOdrGetBlockLes2(t *testing.T) { testOdr(t, 2, 1, true, odrGetBlock) } -func TestOdrGetBlockLes3(t *testing.T) { testOdr(t, 3, 1, true, odrGetBlock) } -func TestOdrGetBlockLes4(t *testing.T) { testOdr(t, 4, 1, true, odrGetBlock) } - -func odrGetBlock(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte { - var block *types.Block - if bc != nil { - block = bc.GetBlockByHash(bhash) - } else { - block, _ = lc.GetBlockByHash(ctx, bhash) - } - if block == nil { - return nil - } - rlp, _ := rlp.EncodeToBytes(block) - return rlp -} - -func TestOdrGetReceiptsLes2(t *testing.T) { testOdr(t, 2, 1, true, odrGetReceipts) } -func TestOdrGetReceiptsLes3(t *testing.T) { testOdr(t, 3, 1, true, odrGetReceipts) } -func TestOdrGetReceiptsLes4(t *testing.T) { testOdr(t, 4, 1, true, odrGetReceipts) } - -func odrGetReceipts(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte { - var receipts types.Receipts - if bc != nil { - if number := rawdb.ReadHeaderNumber(db, bhash); number != nil { - if header := rawdb.ReadHeader(db, bhash, *number); header != nil { - receipts = rawdb.ReadReceipts(db, bhash, *number, header.Time, config) - } - } - } else { - if number := rawdb.ReadHeaderNumber(db, bhash); number != nil { - receipts, _ = light.GetBlockReceipts(ctx, lc.Odr(), bhash, *number) - } - } - if receipts == nil { - return nil - } - rlp, _ := rlp.EncodeToBytes(receipts) - return rlp -} - -func TestOdrAccountsLes2(t *testing.T) { testOdr(t, 2, 1, true, odrAccounts) } -func TestOdrAccountsLes3(t *testing.T) { testOdr(t, 3, 1, true, odrAccounts) } -func TestOdrAccountsLes4(t *testing.T) { testOdr(t, 4, 1, true, odrAccounts) } - -func odrAccounts(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte { - dummyAddr := common.HexToAddress("1234567812345678123456781234567812345678") - acc := []common.Address{bankAddr, userAddr1, userAddr2, dummyAddr} - - var ( - res []byte - st *state.StateDB - err error - ) - for _, addr := range acc { - if bc != nil { - header := bc.GetHeaderByHash(bhash) - st, err = state.New(header.Root, bc.StateCache(), nil) - } else { - header := lc.GetHeaderByHash(bhash) - st = light.NewState(ctx, header, lc.Odr()) - } - if err == nil { - bal := st.GetBalance(addr) - rlp, _ := rlp.EncodeToBytes(bal) - res = append(res, rlp...) - } - } - return res -} - -func TestOdrContractCallLes2(t *testing.T) { testOdr(t, 2, 2, true, odrContractCall) } -func TestOdrContractCallLes3(t *testing.T) { testOdr(t, 3, 2, true, odrContractCall) } -func TestOdrContractCallLes4(t *testing.T) { testOdr(t, 4, 2, true, odrContractCall) } - -func odrContractCall(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte { - data := common.Hex2Bytes("60CD26850000000000000000000000000000000000000000000000000000000000000000") - - var res []byte - for i := 0; i < 3; i++ { - data[35] = byte(i) - if bc != nil { - header := bc.GetHeaderByHash(bhash) - statedb, err := state.New(header.Root, bc.StateCache(), nil) - - if err == nil { - from := statedb.GetOrNewStateObject(bankAddr) - from.SetBalance(math.MaxBig256) - - msg := &core.Message{ - From: from.Address(), - To: &testContractAddr, - Value: new(big.Int), - GasLimit: 100000, - GasPrice: big.NewInt(params.InitialBaseFee), - GasFeeCap: big.NewInt(params.InitialBaseFee), - GasTipCap: new(big.Int), - Data: data, - SkipAccountChecks: true, - } - - context := core.NewEVMBlockContext(header, bc, nil, config, statedb) - txContext := core.NewEVMTxContext(msg) - vmenv := vm.NewEVM(context, txContext, statedb, config, vm.Config{NoBaseFee: true}) - - //vmenv := core.NewEnv(statedb, config, bc, msg, header, vm.Config{EnableParallelExec: true, ParallelTxNum: 1}) - gp := new(core.GasPool).AddGas(math.MaxUint64) - result, _ := core.ApplyMessage(vmenv, msg, gp) - res = append(res, result.Return()...) - } - } else { - header := lc.GetHeaderByHash(bhash) - state := light.NewState(ctx, header, lc.Odr()) - state.SetBalance(bankAddr, math.MaxBig256) - msg := &core.Message{ - From: bankAddr, - To: &testContractAddr, - Value: new(big.Int), - GasLimit: 100000, - GasPrice: big.NewInt(params.InitialBaseFee), - GasFeeCap: big.NewInt(params.InitialBaseFee), - GasTipCap: new(big.Int), - Data: data, - SkipAccountChecks: true, - } - context := core.NewEVMBlockContext(header, lc, nil, config, state) - txContext := core.NewEVMTxContext(msg) - vmenv := vm.NewEVM(context, txContext, state, config, vm.Config{NoBaseFee: true}) - gp := new(core.GasPool).AddGas(math.MaxUint64) - result, _ := core.ApplyMessage(vmenv, msg, gp) - if state.Error() == nil { - res = append(res, result.Return()...) - } - } - } - return res -} - -func TestOdrTxStatusLes2(t *testing.T) { testOdr(t, 2, 1, false, odrTxStatus) } -func TestOdrTxStatusLes3(t *testing.T) { testOdr(t, 3, 1, false, odrTxStatus) } -func TestOdrTxStatusLes4(t *testing.T) { testOdr(t, 4, 1, false, odrTxStatus) } - -func odrTxStatus(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte { - var txs types.Transactions - if bc != nil { - block := bc.GetBlockByHash(bhash) - txs = block.Transactions() - } else { - if block, _ := lc.GetBlockByHash(ctx, bhash); block != nil { - btxs := block.Transactions() - txs = make(types.Transactions, len(btxs)) - for i, tx := range btxs { - var err error - txs[i], _, _, _, err = light.GetTransaction(ctx, lc.Odr(), tx.Hash()) - if err != nil { - return nil - } - } - } - } - rlp, _ := rlp.EncodeToBytes(txs) - return rlp -} - -// testOdr tests odr requests whose validation guaranteed by block headers. -func testOdr(t *testing.T, protocol int, expFail uint64, checkCached bool, fn odrTestFn) { - // Assemble the test environment - netconfig := testnetConfig{ - blocks: 4, - protocol: protocol, - connect: true, - nopruning: true, - } - server, client, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - // Ensure the client has synced all necessary data. - clientHead := client.handler.backend.blockchain.CurrentHeader() - if clientHead.Number.Uint64() != 4 { - t.Fatalf("Failed to sync the chain with server, head: %v", clientHead.Number.Uint64()) - } - // Disable the mechanism that we will wait a few time for request - // even there is no suitable peer to send right now. - waitForPeers = 0 - - test := func(expFail uint64) { - // Mark this as a helper to put the failures at the correct lines - t.Helper() - - for i := uint64(0); i <= server.handler.blockchain.CurrentHeader().Number.Uint64(); i++ { - bhash := rawdb.ReadCanonicalHash(server.db, i) - b1 := fn(light.NoOdr, server.db, server.handler.server.chainConfig, server.handler.blockchain, nil, bhash) - - // Set the timeout as 1 second here, ensure there is enough time - // for travis to make the action. - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - b2 := fn(ctx, client.db, client.handler.backend.chainConfig, nil, client.handler.backend.blockchain, bhash) - cancel() - - eq := bytes.Equal(b1, b2) - exp := i < expFail - if exp && !eq { - t.Fatalf("odr mismatch: have %x, want %x", b2, b1) - } - if !exp && eq { - t.Fatalf("unexpected odr match") - } - } - } - - // expect retrievals to fail (except genesis block) without a les peer - client.handler.backend.peers.lock.Lock() - client.peer.speer.hasBlockHook = func(common.Hash, uint64, bool) bool { return false } - client.handler.backend.peers.lock.Unlock() - test(expFail) - - // expect all retrievals to pass - client.handler.backend.peers.lock.Lock() - client.peer.speer.hasBlockHook = func(common.Hash, uint64, bool) bool { return true } - client.handler.backend.peers.lock.Unlock() - test(5) - - // still expect all retrievals to pass, now data should be cached locally - if checkCached { - client.handler.backend.peers.unregister(client.peer.speer.id) - time.Sleep(time.Millisecond * 10) // ensure that all peerSetNotify callbacks are executed - test(5) - } -} - -func TestGetTxStatusFromUnindexedPeersLES4(t *testing.T) { testGetTxStatusFromUnindexedPeers(t, lpv4) } - -func testGetTxStatusFromUnindexedPeers(t *testing.T, protocol int) { - var ( - blocks = 8 - netconfig = testnetConfig{ - blocks: blocks, - protocol: protocol, - nopruning: true, - } - ) - server, client, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - // Iterate the chain, create the tx indexes locally - var ( - testHash common.Hash - testStatus light.TxStatus - - txs = make(map[common.Hash]*types.Transaction) // Transaction objects set - blockNumbers = make(map[common.Hash]uint64) // Transaction hash to block number mappings - blockHashes = make(map[common.Hash]common.Hash) // Transaction hash to block hash mappings - intraIndex = make(map[common.Hash]uint64) // Transaction intra-index in block - ) - for number := uint64(1); number < server.backend.Blockchain().CurrentBlock().Number.Uint64(); number++ { - block := server.backend.Blockchain().GetBlockByNumber(number) - if block == nil { - t.Fatalf("Failed to retrieve block %d", number) - } - for index, tx := range block.Transactions() { - txs[tx.Hash()] = tx - blockNumbers[tx.Hash()] = number - blockHashes[tx.Hash()] = block.Hash() - intraIndex[tx.Hash()] = uint64(index) - - if testHash == (common.Hash{}) { - testHash = tx.Hash() - testStatus = light.TxStatus{ - Status: txpool.TxStatusIncluded, - Lookup: &rawdb.LegacyTxLookupEntry{ - BlockHash: block.Hash(), - BlockIndex: block.NumberU64(), - Index: uint64(index), - }, - } - } - } - } - // serveMsg processes incoming GetTxStatusMsg and sends the response back. - serveMsg := func(peer *testPeer, txLookup uint64) error { - msg, err := peer.app.ReadMsg() - if err != nil { - return err - } - if msg.Code != GetTxStatusMsg { - return fmt.Errorf("message code mismatch: got %d, expected %d", msg.Code, GetTxStatusMsg) - } - var r GetTxStatusPacket - if err := msg.Decode(&r); err != nil { - return err - } - stats := make([]light.TxStatus, len(r.Hashes)) - for i, hash := range r.Hashes { - number, exist := blockNumbers[hash] - if !exist { - continue // Filter out unknown transactions - } - min := uint64(blocks) - txLookup - if txLookup != txIndexUnlimited && (txLookup == txIndexDisabled || number < min) { - continue // Filter out unindexed transactions - } - stats[i].Status = txpool.TxStatusIncluded - stats[i].Lookup = &rawdb.LegacyTxLookupEntry{ - BlockHash: blockHashes[hash], - BlockIndex: number, - Index: intraIndex[hash], - } - } - data, _ := rlp.EncodeToBytes(stats) - reply := &reply{peer.app, TxStatusMsg, r.ReqID, data} - reply.send(testBufLimit) - return nil - } - - var testspecs = []struct { - peers int - txLookups []uint64 - txs []common.Hash - results []light.TxStatus - }{ - // Retrieve mined transaction from the empty peerset - { - peers: 0, - txLookups: []uint64{}, - txs: []common.Hash{testHash}, - results: []light.TxStatus{{}}, - }, - // Retrieve unknown transaction from the full peers - { - peers: 3, - txLookups: []uint64{txIndexUnlimited, txIndexUnlimited, txIndexUnlimited}, - txs: []common.Hash{randomHash()}, - results: []light.TxStatus{{}}, - }, - // Retrieve mined transaction from the full peers - { - peers: 3, - txLookups: []uint64{txIndexUnlimited, txIndexUnlimited, txIndexUnlimited}, - txs: []common.Hash{testHash}, - results: []light.TxStatus{testStatus}, - }, - // Retrieve mixed transactions from the full peers - { - peers: 3, - txLookups: []uint64{txIndexUnlimited, txIndexUnlimited, txIndexUnlimited}, - txs: []common.Hash{randomHash(), testHash}, - results: []light.TxStatus{{}, testStatus}, - }, - // Retrieve mixed transactions from unindexed peer(but the target is still available) - { - peers: 3, - txLookups: []uint64{uint64(blocks) - testStatus.Lookup.BlockIndex, uint64(blocks) - testStatus.Lookup.BlockIndex - 1, uint64(blocks) - testStatus.Lookup.BlockIndex - 2}, - txs: []common.Hash{randomHash(), testHash}, - results: []light.TxStatus{{}, testStatus}, - }, - // Retrieve mixed transactions from unindexed peer(but the target is not available) - { - peers: 3, - txLookups: []uint64{uint64(blocks) - testStatus.Lookup.BlockIndex - 1, uint64(blocks) - testStatus.Lookup.BlockIndex - 1, uint64(blocks) - testStatus.Lookup.BlockIndex - 2}, - txs: []common.Hash{randomHash(), testHash}, - results: []light.TxStatus{{}, {}}, - }, - } - for _, testspec := range testspecs { - // Create a bunch of server peers with different tx history - var ( - closeFns []func() - ) - for i := 0; i < testspec.peers; i++ { - peer, closePeer, _ := client.newRawPeer(t, fmt.Sprintf("server-%d", i), protocol, testspec.txLookups[i]) - closeFns = append(closeFns, closePeer) - - // Create a one-time routine for serving message - go func(i int, peer *testPeer, lookup uint64) { - serveMsg(peer, lookup) - }(i, peer, testspec.txLookups[i]) - } - - // Send out the GetTxStatus requests, compare the result with - // expected value. - r := &light.TxStatusRequest{Hashes: testspec.txs} - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - - err := client.handler.backend.odr.RetrieveTxStatus(ctx, r) - if err != nil { - t.Errorf("Failed to retrieve tx status %v", err) - } else { - if !reflect.DeepEqual(testspec.results, r.Status) { - t.Errorf("Result mismatch, diff") - } - } - - // Close all connected peers and start the next round - for _, closeFn := range closeFns { - closeFn() - } - } -} - -// randomHash generates a random blob of data and returns it as a hash. -func randomHash() common.Hash { - var hash common.Hash - if n, err := rand.Read(hash[:]); n != common.HashLength || err != nil { - panic(err) - } - return hash -} -*/ diff --git a/les/peer.go b/les/peer.go deleted file mode 100644 index 58cb928700..0000000000 --- a/les/peer.go +++ /dev/null @@ -1,1362 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "crypto/ecdsa" - "errors" - "fmt" - "math/big" - "math/rand" - "net" - "sync" - "sync/atomic" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/forkid" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/les/flowcontrol" - "github.com/ethereum/go-ethereum/les/utils" - vfc "github.com/ethereum/go-ethereum/les/vflux/client" - vfs "github.com/ethereum/go-ethereum/les/vflux/server" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -var ( - errClosed = errors.New("peer set is closed") - errAlreadyRegistered = errors.New("peer is already registered") - errNotRegistered = errors.New("peer is not registered") -) - -const ( - maxRequestErrors = 20 // number of invalid requests tolerated (makes the protocol less brittle but still avoids spam) - maxResponseErrors = 50 // number of invalid responses tolerated (makes the protocol less brittle but still avoids spam) - - allowedUpdateBytes = 100000 // initial/maximum allowed update size - allowedUpdateRate = time.Millisecond * 10 // time constant for recharging one byte of allowance - - freezeTimeBase = time.Millisecond * 700 // fixed component of client freeze time - freezeTimeRandom = time.Millisecond * 600 // random component of client freeze time - freezeCheckPeriod = time.Millisecond * 100 // buffer value recheck period after initial freeze time has elapsed - - // If the total encoded size of a sent transaction batch is over txSizeCostLimit - // per transaction then the request cost is calculated as proportional to the - // encoded size instead of the transaction count - txSizeCostLimit = 0x4000 - - // handshakeTimeout is the timeout LES handshake will be treated as failed. - handshakeTimeout = 5 * time.Second -) - -const ( - announceTypeNone = iota - announceTypeSimple - announceTypeSigned -) - -type keyValueEntry struct { - Key string - Value rlp.RawValue -} - -type keyValueList []keyValueEntry -type keyValueMap map[string]rlp.RawValue - -func (l keyValueList) add(key string, val interface{}) keyValueList { - var entry keyValueEntry - entry.Key = key - if val == nil { - val = uint64(0) - } - enc, err := rlp.EncodeToBytes(val) - if err == nil { - entry.Value = enc - } - return append(l, entry) -} - -func (l keyValueList) decode() (keyValueMap, uint64) { - m := make(keyValueMap) - var size uint64 - for _, entry := range l { - m[entry.Key] = entry.Value - size += uint64(len(entry.Key)) + uint64(len(entry.Value)) + 8 - } - return m, size -} - -func (m keyValueMap) get(key string, val interface{}) error { - enc, ok := m[key] - if !ok { - return errResp(ErrMissingKey, "%s", key) - } - if val == nil { - return nil - } - return rlp.DecodeBytes(enc, val) -} - -// peerCommons contains fields needed by both server peer and client peer. -type peerCommons struct { - *p2p.Peer - rw p2p.MsgReadWriter - - id string // Peer identity. - version int // Protocol version negotiated. - network uint64 // Network ID being on. - frozen atomic.Bool // Flag whether the peer is frozen. - announceType uint64 // New block announcement type. - serving atomic.Bool // The status indicates the peer is served. - headInfo blockInfo // Last announced block information. - - // Background task queue for caching peer tasks and executing in order. - sendQueue *utils.ExecQueue - - // Flow control agreement. - fcParams flowcontrol.ServerParams // The config for token bucket. - fcCosts requestCostTable // The Maximum request cost table. - - closeCh chan struct{} - lock sync.RWMutex // Lock used to protect all thread-sensitive fields. -} - -// isFrozen returns true if the client is frozen or the server has put our -// client in frozen state -func (p *peerCommons) isFrozen() bool { - return p.frozen.Load() -} - -// canQueue returns an indicator whether the peer can queue an operation. -func (p *peerCommons) canQueue() bool { - return p.sendQueue.CanQueue() && !p.isFrozen() -} - -// queueSend caches a peer operation in the background task queue. -// Please ensure to check `canQueue` before call this function -func (p *peerCommons) queueSend(f func()) bool { - return p.sendQueue.Queue(f) -} - -// String implements fmt.Stringer. -func (p *peerCommons) String() string { - return fmt.Sprintf("Peer %s [%s]", p.id, fmt.Sprintf("les/%d", p.version)) -} - -// PeerInfo represents a short summary of the `eth` sub-protocol metadata known -// about a connected peer. -type PeerInfo struct { - Version int `json:"version"` // Ethereum protocol version negotiated - Difficulty *big.Int `json:"difficulty"` // Total difficulty of the peer's blockchain - Head string `json:"head"` // SHA3 hash of the peer's best owned block -} - -// Info gathers and returns a collection of metadata known about a peer. -func (p *peerCommons) Info() *PeerInfo { - return &PeerInfo{ - Version: p.version, - Difficulty: p.Td(), - Head: fmt.Sprintf("%x", p.Head()), - } -} - -// Head retrieves a copy of the current head (most recent) hash of the peer. -func (p *peerCommons) Head() (hash common.Hash) { - p.lock.RLock() - defer p.lock.RUnlock() - - return p.headInfo.Hash -} - -// Td retrieves the current total difficulty of a peer. -func (p *peerCommons) Td() *big.Int { - p.lock.RLock() - defer p.lock.RUnlock() - - return new(big.Int).Set(p.headInfo.Td) -} - -// HeadAndTd retrieves the current head hash and total difficulty of a peer. -func (p *peerCommons) HeadAndTd() (hash common.Hash, td *big.Int) { - p.lock.RLock() - defer p.lock.RUnlock() - - return p.headInfo.Hash, new(big.Int).Set(p.headInfo.Td) -} - -// sendReceiveHandshake exchanges handshake packet with remote peer and returns any error -// if failed to send or receive packet. -func (p *peerCommons) sendReceiveHandshake(sendList keyValueList) (keyValueList, error) { - var ( - errc = make(chan error, 2) - recvList keyValueList - ) - // Send out own handshake in a new thread - go func() { - errc <- p2p.Send(p.rw, StatusMsg, &sendList) - }() - go func() { - // In the mean time retrieve the remote status message - msg, err := p.rw.ReadMsg() - if err != nil { - errc <- err - return - } - if msg.Code != StatusMsg { - errc <- errResp(ErrNoStatusMsg, "first msg has code %x (!= %x)", msg.Code, StatusMsg) - return - } - if msg.Size > ProtocolMaxMsgSize { - errc <- errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) - return - } - // Decode the handshake - if err := msg.Decode(&recvList); err != nil { - errc <- errResp(ErrDecode, "msg %v: %v", msg, err) - return - } - errc <- nil - }() - timeout := time.NewTimer(handshakeTimeout) - defer timeout.Stop() - for i := 0; i < 2; i++ { - select { - case err := <-errc: - if err != nil { - return nil, err - } - case <-timeout.C: - return nil, p2p.DiscReadTimeout - } - } - return recvList, nil -} - -// handshake executes the les protocol handshake, negotiating version number, -// network IDs, difficulties, head and genesis blocks. Besides the basic handshake -// fields, server and client can exchange and resolve some specified fields through -// two callback functions. -func (p *peerCommons) handshake(td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, forkID forkid.ID, forkFilter forkid.Filter, sendCallback func(*keyValueList), recvCallback func(keyValueMap) error) error { - p.lock.Lock() - defer p.lock.Unlock() - - var send keyValueList - - // Add some basic handshake fields - send = send.add("protocolVersion", uint64(p.version)) - send = send.add("networkId", p.network) - // Note: the head info announced at handshake is only used in case of server peers - // but dummy values are still announced by clients for compatibility with older servers - send = send.add("headTd", td) - send = send.add("headHash", head) - send = send.add("headNum", headNum) - send = send.add("genesisHash", genesis) - - // If the protocol version is beyond les4, then pass the forkID - // as well. Check http://eips.ethereum.org/EIPS/eip-2124 for more - // spec detail. - if p.version >= lpv4 { - send = send.add("forkID", forkID) - } - // Add client-specified or server-specified fields - if sendCallback != nil { - sendCallback(&send) - } - // Exchange the handshake packet and resolve the received one. - recvList, err := p.sendReceiveHandshake(send) - if err != nil { - return err - } - recv, size := recvList.decode() - if size > allowedUpdateBytes { - return errResp(ErrRequestRejected, "") - } - var rGenesis common.Hash - var rVersion, rNetwork uint64 - if err := recv.get("protocolVersion", &rVersion); err != nil { - return err - } - if err := recv.get("networkId", &rNetwork); err != nil { - return err - } - if err := recv.get("genesisHash", &rGenesis); err != nil { - return err - } - if rGenesis != genesis { - return errResp(ErrGenesisBlockMismatch, "%x (!= %x)", rGenesis[:8], genesis[:8]) - } - if rNetwork != p.network { - return errResp(ErrNetworkIdMismatch, "%d (!= %d)", rNetwork, p.network) - } - if int(rVersion) != p.version { - return errResp(ErrProtocolVersionMismatch, "%d (!= %d)", rVersion, p.version) - } - // Check forkID if the protocol version is beyond the les4 - if p.version >= lpv4 { - var forkID forkid.ID - if err := recv.get("forkID", &forkID); err != nil { - return err - } - if err := forkFilter(forkID); err != nil { - return errResp(ErrForkIDRejected, "%v", err) - } - } - if recvCallback != nil { - return recvCallback(recv) - } - return nil -} - -// close closes the channel and notifies all background routines to exit. -func (p *peerCommons) close() { - close(p.closeCh) - p.sendQueue.Quit() -} - -// serverPeer represents each node to which the client is connected. -// The node here refers to the les server. -type serverPeer struct { - peerCommons - - // Status fields - trusted bool // The flag whether the server is selected as trusted server. - onlyAnnounce bool // The flag whether the server sends announcement only. - chainSince, chainRecent uint64 // The range of chain server peer can serve. - stateSince, stateRecent uint64 // The range of state server peer can serve. - txHistory uint64 // The length of available tx history, 0 means all, 1 means disabled - - fcServer *flowcontrol.ServerNode // Client side mirror token bucket. - vtLock sync.Mutex - nodeValueTracker *vfc.NodeValueTracker - sentReqs map[uint64]sentReqEntry - - // Statistics - errCount utils.LinearExpiredValue // Counter the invalid responses server has replied - updateCount uint64 - updateTime mclock.AbsTime - - // Test callback hooks - hasBlockHook func(common.Hash, uint64, bool) bool // Used to determine whether the server has the specified block. -} - -func newServerPeer(version int, network uint64, trusted bool, p *p2p.Peer, rw p2p.MsgReadWriter) *serverPeer { - return &serverPeer{ - peerCommons: peerCommons{ - Peer: p, - rw: rw, - id: p.ID().String(), - version: version, - network: network, - sendQueue: utils.NewExecQueue(100), - closeCh: make(chan struct{}), - }, - trusted: trusted, - errCount: utils.LinearExpiredValue{Rate: mclock.AbsTime(time.Hour)}, - } -} - -// rejectUpdate returns true if a parameter update has to be rejected because -// the size and/or rate of updates exceed the capacity limitation -func (p *serverPeer) rejectUpdate(size uint64) bool { - now := mclock.Now() - if p.updateCount == 0 { - p.updateTime = now - } else { - dt := now - p.updateTime - p.updateTime = now - - r := uint64(dt / mclock.AbsTime(allowedUpdateRate)) - if p.updateCount > r { - p.updateCount -= r - } else { - p.updateCount = 0 - } - } - p.updateCount += size - return p.updateCount > allowedUpdateBytes -} - -// freeze processes Stop messages from the given server and set the status as -// frozen. -func (p *serverPeer) freeze() { - if p.frozen.CompareAndSwap(false, true) { - p.sendQueue.Clear() - } -} - -// unfreeze processes Resume messages from the given server and set the status -// as unfrozen. -func (p *serverPeer) unfreeze() { - p.frozen.Store(false) -} - -// sendRequest send a request to the server based on the given message type -// and content. -func sendRequest(w p2p.MsgWriter, msgcode, reqID uint64, data interface{}) error { - type req struct { - ReqID uint64 - Data interface{} - } - return p2p.Send(w, msgcode, &req{reqID, data}) -} - -func (p *serverPeer) sendRequest(msgcode, reqID uint64, data interface{}, amount int) error { - p.sentRequest(reqID, uint32(msgcode), uint32(amount)) - return sendRequest(p.rw, msgcode, reqID, data) -} - -// requestHeadersByHash fetches a batch of blocks' headers corresponding to the -// specified header query, based on the hash of an origin block. -func (p *serverPeer) requestHeadersByHash(reqID uint64, origin common.Hash, amount int, skip int, reverse bool) error { - p.Log().Debug("Fetching batch of headers", "count", amount, "fromhash", origin, "skip", skip, "reverse", reverse) - return p.sendRequest(GetBlockHeadersMsg, reqID, &GetBlockHeadersData{Origin: hashOrNumber{Hash: origin}, Amount: uint64(amount), Skip: uint64(skip), Reverse: reverse}, amount) -} - -// requestHeadersByNumber fetches a batch of blocks' headers corresponding to the -// specified header query, based on the number of an origin block. -func (p *serverPeer) requestHeadersByNumber(reqID, origin uint64, amount int, skip int, reverse bool) error { - p.Log().Debug("Fetching batch of headers", "count", amount, "fromnum", origin, "skip", skip, "reverse", reverse) - return p.sendRequest(GetBlockHeadersMsg, reqID, &GetBlockHeadersData{Origin: hashOrNumber{Number: origin}, Amount: uint64(amount), Skip: uint64(skip), Reverse: reverse}, amount) -} - -// requestBodies fetches a batch of blocks' bodies corresponding to the hashes -// specified. -func (p *serverPeer) requestBodies(reqID uint64, hashes []common.Hash) error { - p.Log().Debug("Fetching batch of block bodies", "count", len(hashes)) - return p.sendRequest(GetBlockBodiesMsg, reqID, hashes, len(hashes)) -} - -// requestCode fetches a batch of arbitrary data from a node's known state -// data, corresponding to the specified hashes. -func (p *serverPeer) requestCode(reqID uint64, reqs []CodeReq) error { - p.Log().Debug("Fetching batch of codes", "count", len(reqs)) - return p.sendRequest(GetCodeMsg, reqID, reqs, len(reqs)) -} - -// requestReceipts fetches a batch of transaction receipts from a remote node. -func (p *serverPeer) requestReceipts(reqID uint64, hashes []common.Hash) error { - p.Log().Debug("Fetching batch of receipts", "count", len(hashes)) - return p.sendRequest(GetReceiptsMsg, reqID, hashes, len(hashes)) -} - -// requestProofs fetches a batch of merkle proofs from a remote node. -func (p *serverPeer) requestProofs(reqID uint64, reqs []ProofReq) error { - p.Log().Debug("Fetching batch of proofs", "count", len(reqs)) - return p.sendRequest(GetProofsV2Msg, reqID, reqs, len(reqs)) -} - -// requestHelperTrieProofs fetches a batch of HelperTrie merkle proofs from a remote node. -func (p *serverPeer) requestHelperTrieProofs(reqID uint64, reqs []HelperTrieReq) error { - p.Log().Debug("Fetching batch of HelperTrie proofs", "count", len(reqs)) - return p.sendRequest(GetHelperTrieProofsMsg, reqID, reqs, len(reqs)) -} - -// requestTxStatus fetches a batch of transaction status records from a remote node. -func (p *serverPeer) requestTxStatus(reqID uint64, txHashes []common.Hash) error { - p.Log().Debug("Requesting transaction status", "count", len(txHashes)) - return p.sendRequest(GetTxStatusMsg, reqID, txHashes, len(txHashes)) -} - -// sendTxs creates a reply with a batch of transactions to be added to the remote transaction pool. -func (p *serverPeer) sendTxs(reqID uint64, amount int, txs rlp.RawValue) error { - p.Log().Debug("Sending batch of transactions", "amount", amount, "size", len(txs)) - sizeFactor := (len(txs) + txSizeCostLimit/2) / txSizeCostLimit - if sizeFactor > amount { - amount = sizeFactor - } - return p.sendRequest(SendTxV2Msg, reqID, txs, amount) -} - -// waitBefore implements distPeer interface -func (p *serverPeer) waitBefore(maxCost uint64) (time.Duration, float64) { - return p.fcServer.CanSend(maxCost) -} - -// getRequestCost returns an estimated request cost according to the flow control -// rules negotiated between the server and the client. -func (p *serverPeer) getRequestCost(msgcode uint64, amount int) uint64 { - p.lock.RLock() - defer p.lock.RUnlock() - - costs := p.fcCosts[msgcode] - if costs == nil { - return 0 - } - cost := costs.baseCost + costs.reqCost*uint64(amount) - if cost > p.fcParams.BufLimit { - cost = p.fcParams.BufLimit - } - return cost -} - -// getTxRelayCost returns an estimated relay cost according to the flow control -// rules negotiated between the server and the client. -func (p *serverPeer) getTxRelayCost(amount, size int) uint64 { - p.lock.RLock() - defer p.lock.RUnlock() - - costs := p.fcCosts[SendTxV2Msg] - if costs == nil { - return 0 - } - cost := costs.baseCost + costs.reqCost*uint64(amount) - sizeCost := costs.baseCost + costs.reqCost*uint64(size)/txSizeCostLimit - if sizeCost > cost { - cost = sizeCost - } - if cost > p.fcParams.BufLimit { - cost = p.fcParams.BufLimit - } - return cost -} - -// HasBlock checks if the peer has a given block -func (p *serverPeer) HasBlock(hash common.Hash, number uint64, hasState bool) bool { - p.lock.RLock() - defer p.lock.RUnlock() - - if p.hasBlockHook != nil { - return p.hasBlockHook(hash, number, hasState) - } - head := p.headInfo.Number - var since, recent uint64 - if hasState { - since = p.stateSince - recent = p.stateRecent - } else { - since = p.chainSince - recent = p.chainRecent - } - return head >= number && number >= since && (recent == 0 || number+recent+4 > head) -} - -// updateFlowControl updates the flow control parameters belonging to the server -// node if the announced key/value set contains relevant fields -func (p *serverPeer) updateFlowControl(update keyValueMap) { - p.lock.Lock() - defer p.lock.Unlock() - - // If any of the flow control params is nil, refuse to update. - var params flowcontrol.ServerParams - if update.get("flowControl/BL", ¶ms.BufLimit) == nil && update.get("flowControl/MRR", ¶ms.MinRecharge) == nil { - // todo can light client set a minimal acceptable flow control params? - p.fcParams = params - p.fcServer.UpdateParams(params) - } - var MRC RequestCostList - if update.get("flowControl/MRC", &MRC) == nil { - costUpdate := MRC.decode(ProtocolLengths[uint(p.version)]) - for code, cost := range costUpdate { - p.fcCosts[code] = cost - } - } -} - -// updateHead updates the head information based on the announcement from -// the peer. -func (p *serverPeer) updateHead(hash common.Hash, number uint64, td *big.Int) { - p.lock.Lock() - defer p.lock.Unlock() - - p.headInfo = blockInfo{Hash: hash, Number: number, Td: td} -} - -// Handshake executes the les protocol handshake, negotiating version number, -// network IDs and genesis blocks. -func (p *serverPeer) Handshake(genesis common.Hash, forkid forkid.ID, forkFilter forkid.Filter) error { - // Note: there is no need to share local head with a server but older servers still - // require these fields so we announce zero values. - return p.handshake(common.Big0, common.Hash{}, 0, genesis, forkid, forkFilter, func(lists *keyValueList) { - // Add some client-specific handshake fields - // - // Enable signed announcement randomly even the server is not trusted. - p.announceType = announceTypeSimple - if p.trusted { - p.announceType = announceTypeSigned - } - *lists = (*lists).add("announceType", p.announceType) - }, func(recv keyValueMap) error { - var ( - rHash common.Hash - rNum uint64 - rTd *big.Int - ) - if err := recv.get("headTd", &rTd); err != nil { - return err - } - if err := recv.get("headHash", &rHash); err != nil { - return err - } - if err := recv.get("headNum", &rNum); err != nil { - return err - } - p.headInfo = blockInfo{Hash: rHash, Number: rNum, Td: rTd} - if recv.get("serveChainSince", &p.chainSince) != nil { - p.onlyAnnounce = true - } - if recv.get("serveRecentChain", &p.chainRecent) != nil { - p.chainRecent = 0 - } - if recv.get("serveStateSince", &p.stateSince) != nil { - p.onlyAnnounce = true - } - if recv.get("serveRecentState", &p.stateRecent) != nil { - p.stateRecent = 0 - } - if recv.get("txRelay", nil) != nil { - p.onlyAnnounce = true - } - if p.version >= lpv4 { - var recentTx uint - if err := recv.get("recentTxLookup", &recentTx); err != nil { - return err - } - p.txHistory = uint64(recentTx) - } else { - // The weak assumption is held here that legacy les server(les2,3) - // has unlimited transaction history. The les serving in these legacy - // versions is disabled if the transaction is unindexed. - p.txHistory = txIndexUnlimited - } - if p.onlyAnnounce && !p.trusted { - return errResp(ErrUselessPeer, "peer cannot serve requests") - } - // Parse flow control handshake packet. - var sParams flowcontrol.ServerParams - if err := recv.get("flowControl/BL", &sParams.BufLimit); err != nil { - return err - } - if err := recv.get("flowControl/MRR", &sParams.MinRecharge); err != nil { - return err - } - var MRC RequestCostList - if err := recv.get("flowControl/MRC", &MRC); err != nil { - return err - } - p.fcParams = sParams - p.fcServer = flowcontrol.NewServerNode(sParams, &mclock.System{}) - p.fcCosts = MRC.decode(ProtocolLengths[uint(p.version)]) - - if !p.onlyAnnounce { - for msgCode := range reqAvgTimeCost { - if p.fcCosts[msgCode] == nil { - return errResp(ErrUselessPeer, "peer does not support message %d", msgCode) - } - } - } - return nil - }) -} - -// setValueTracker sets the value tracker references for connected servers. Note that the -// references should be removed upon disconnection by setValueTracker(nil, nil). -func (p *serverPeer) setValueTracker(nvt *vfc.NodeValueTracker) { - p.vtLock.Lock() - p.nodeValueTracker = nvt - if nvt != nil { - p.sentReqs = make(map[uint64]sentReqEntry) - } else { - p.sentReqs = nil - } - p.vtLock.Unlock() -} - -// updateVtParams updates the server's price table in the value tracker. -func (p *serverPeer) updateVtParams() { - p.vtLock.Lock() - defer p.vtLock.Unlock() - - if p.nodeValueTracker == nil { - return - } - reqCosts := make([]uint64, len(requestList)) - for code, costs := range p.fcCosts { - if m, ok := requestMapping[uint32(code)]; ok { - reqCosts[m.first] = costs.baseCost + costs.reqCost - if m.rest != -1 { - reqCosts[m.rest] = costs.reqCost - } - } - } - p.nodeValueTracker.UpdateCosts(reqCosts) -} - -// sentReqEntry remembers sent requests and their sending times -type sentReqEntry struct { - reqType, amount uint32 - at mclock.AbsTime -} - -// sentRequest marks a request sent at the current moment to this server. -func (p *serverPeer) sentRequest(id uint64, reqType, amount uint32) { - p.vtLock.Lock() - if p.sentReqs != nil { - p.sentReqs[id] = sentReqEntry{reqType, amount, mclock.Now()} - } - p.vtLock.Unlock() -} - -// answeredRequest marks a request answered at the current moment by this server. -func (p *serverPeer) answeredRequest(id uint64) { - p.vtLock.Lock() - if p.sentReqs == nil { - p.vtLock.Unlock() - return - } - e, ok := p.sentReqs[id] - delete(p.sentReqs, id) - nvt := p.nodeValueTracker - p.vtLock.Unlock() - if !ok { - return - } - var ( - vtReqs [2]vfc.ServedRequest - reqCount int - ) - m := requestMapping[e.reqType] - if m.rest == -1 || e.amount <= 1 { - reqCount = 1 - vtReqs[0] = vfc.ServedRequest{ReqType: uint32(m.first), Amount: e.amount} - } else { - reqCount = 2 - vtReqs[0] = vfc.ServedRequest{ReqType: uint32(m.first), Amount: 1} - vtReqs[1] = vfc.ServedRequest{ReqType: uint32(m.rest), Amount: e.amount - 1} - } - dt := time.Duration(mclock.Now() - e.at) - nvt.Served(vtReqs[:reqCount], dt) -} - -// clientPeer represents each node to which the les server is connected. -// The node here refers to the light client. -type clientPeer struct { - peerCommons - - // responseLock ensures that responses are queued in the same order as - // RequestProcessed is called - responseLock sync.Mutex - responseCount uint64 // Counter to generate an unique id for request processing. - - balance vfs.ConnectedBalance - - // invalidLock is used for protecting invalidCount. - invalidLock sync.RWMutex - invalidCount utils.LinearExpiredValue // Counter the invalid request the client peer has made. - - capacity uint64 - // lastAnnounce is the last broadcast created by the server; may be newer than the last head - // sent to the specific client (stored in headInfo) if capacity is zero. In this case the - // latest head is sent when the client gains non-zero capacity. - lastAnnounce announceData - - connectedAt mclock.AbsTime - server bool - errCh chan error - fcClient *flowcontrol.ClientNode // Server side mirror token bucket. -} - -func newClientPeer(version int, network uint64, p *p2p.Peer, rw p2p.MsgReadWriter) *clientPeer { - return &clientPeer{ - peerCommons: peerCommons{ - Peer: p, - rw: rw, - id: p.ID().String(), - version: version, - network: network, - sendQueue: utils.NewExecQueue(100), - closeCh: make(chan struct{}), - }, - invalidCount: utils.LinearExpiredValue{Rate: mclock.AbsTime(time.Hour)}, - errCh: make(chan error, 1), - } -} - -// FreeClientId returns a string identifier for the peer. Multiple peers with -// the same identifier can not be connected in free mode simultaneously. -func (p *clientPeer) FreeClientId() string { - if addr, ok := p.RemoteAddr().(*net.TCPAddr); ok { - if addr.IP.IsLoopback() { - // using peer id instead of loopback ip address allows multiple free - // connections from local machine to own server - return p.id - } else { - return addr.IP.String() - } - } - return p.id -} - -// sendStop notifies the client about being in frozen state -func (p *clientPeer) sendStop() error { - return p2p.Send(p.rw, StopMsg, struct{}{}) -} - -// sendResume notifies the client about getting out of frozen state -func (p *clientPeer) sendResume(bv uint64) error { - return p2p.Send(p.rw, ResumeMsg, bv) -} - -// freeze temporarily puts the client in a frozen state which means all unprocessed -// and subsequent requests are dropped. Unfreezing happens automatically after a short -// time if the client's buffer value is at least in the slightly positive region. -// The client is also notified about being frozen/unfrozen with a Stop/Resume message. -func (p *clientPeer) freeze() { - if p.version < lpv3 { - // if Stop/Resume is not supported then just drop the peer after setting - // its frozen status permanently - p.frozen.Store(true) - p.Peer.Disconnect(p2p.DiscUselessPeer) - return - } - if !p.frozen.Swap(true) { - go func() { - p.sendStop() - time.Sleep(freezeTimeBase + time.Duration(rand.Int63n(int64(freezeTimeRandom)))) - for { - bufValue, bufLimit := p.fcClient.BufferStatus() - if bufLimit == 0 { - return - } - if bufValue <= bufLimit/8 { - time.Sleep(freezeCheckPeriod) - continue - } - p.frozen.Store(false) - p.sendResume(bufValue) - return - } - }() - } -} - -// reply struct represents a reply with the actual data already RLP encoded and -// only the bv (buffer value) missing. This allows the serving mechanism to -// calculate the bv value which depends on the data size before sending the reply. -type reply struct { - w p2p.MsgWriter - msgcode, reqID uint64 - data rlp.RawValue -} - -// send sends the reply with the calculated buffer value -func (r *reply) send(bv uint64) error { - type resp struct { - ReqID, BV uint64 - Data rlp.RawValue - } - return p2p.Send(r.w, r.msgcode, &resp{r.reqID, bv, r.data}) -} - -// size returns the RLP encoded size of the message data -func (r *reply) size() uint32 { - return uint32(len(r.data)) -} - -// replyBlockHeaders creates a reply with a batch of block headers -func (p *clientPeer) replyBlockHeaders(reqID uint64, headers []*types.Header) *reply { - data, _ := rlp.EncodeToBytes(headers) - return &reply{p.rw, BlockHeadersMsg, reqID, data} -} - -// replyBlockBodiesRLP creates a reply with a batch of block contents from -// an already RLP encoded format. -func (p *clientPeer) replyBlockBodiesRLP(reqID uint64, bodies []rlp.RawValue) *reply { - data, _ := rlp.EncodeToBytes(bodies) - return &reply{p.rw, BlockBodiesMsg, reqID, data} -} - -// replyCode creates a reply with a batch of arbitrary internal data, corresponding to the -// hashes requested. -func (p *clientPeer) replyCode(reqID uint64, codes [][]byte) *reply { - data, _ := rlp.EncodeToBytes(codes) - return &reply{p.rw, CodeMsg, reqID, data} -} - -// replyReceiptsRLP creates a reply with a batch of transaction receipts, corresponding to the -// ones requested from an already RLP encoded format. -func (p *clientPeer) replyReceiptsRLP(reqID uint64, receipts []rlp.RawValue) *reply { - data, _ := rlp.EncodeToBytes(receipts) - return &reply{p.rw, ReceiptsMsg, reqID, data} -} - -// replyProofsV2 creates a reply with a batch of merkle proofs, corresponding to the ones requested. -func (p *clientPeer) replyProofsV2(reqID uint64, proofs trienode.ProofList) *reply { - data, _ := rlp.EncodeToBytes(proofs) - return &reply{p.rw, ProofsV2Msg, reqID, data} -} - -// replyHelperTrieProofs creates a reply with a batch of HelperTrie proofs, corresponding to the ones requested. -func (p *clientPeer) replyHelperTrieProofs(reqID uint64, resp HelperTrieResps) *reply { - data, _ := rlp.EncodeToBytes(resp) - return &reply{p.rw, HelperTrieProofsMsg, reqID, data} -} - -// replyTxStatus creates a reply with a batch of transaction status records, corresponding to the ones requested. -func (p *clientPeer) replyTxStatus(reqID uint64, stats []light.TxStatus) *reply { - data, _ := rlp.EncodeToBytes(stats) - return &reply{p.rw, TxStatusMsg, reqID, data} -} - -// sendAnnounce announces the availability of a number of blocks through -// a hash notification. -func (p *clientPeer) sendAnnounce(request announceData) error { - return p2p.Send(p.rw, AnnounceMsg, request) -} - -// InactiveAllowance implements vfs.clientPeer -func (p *clientPeer) InactiveAllowance() time.Duration { - return 0 // will return more than zero for les/5 clients -} - -// getCapacity returns the current capacity of the peer -func (p *clientPeer) getCapacity() uint64 { - p.lock.RLock() - defer p.lock.RUnlock() - - return p.capacity -} - -// UpdateCapacity updates the request serving capacity assigned to a given client -// and also sends an announcement about the updated flow control parameters. -// Note: UpdateCapacity implements vfs.clientPeer and should not block. The requested -// parameter is true if the callback was initiated by ClientPool.SetCapacity on the given peer. -func (p *clientPeer) UpdateCapacity(newCap uint64, requested bool) { - p.lock.Lock() - defer p.lock.Unlock() - - if newCap != p.fcParams.MinRecharge { - p.fcParams = flowcontrol.ServerParams{MinRecharge: newCap, BufLimit: newCap * bufLimitRatio} - p.fcClient.UpdateParams(p.fcParams) - var kvList keyValueList - kvList = kvList.add("flowControl/MRR", newCap) - kvList = kvList.add("flowControl/BL", newCap*bufLimitRatio) - p.queueSend(func() { p.sendAnnounce(announceData{Update: kvList}) }) - } - - if p.capacity == 0 && newCap != 0 { - p.sendLastAnnounce() - } - p.capacity = newCap -} - -// announceOrStore sends the given head announcement to the client if the client is -// active (capacity != 0) and the same announcement hasn't been sent before. If the -// client is inactive the announcement is stored and sent later if the client is -// activated again. -func (p *clientPeer) announceOrStore(announce announceData) { - p.lock.Lock() - defer p.lock.Unlock() - - p.lastAnnounce = announce - if p.capacity != 0 { - p.sendLastAnnounce() - } -} - -// announce sends the given head announcement to the client if it hasn't been sent before -func (p *clientPeer) sendLastAnnounce() { - if p.lastAnnounce.Td == nil { - return - } - if p.headInfo.Td == nil || p.lastAnnounce.Td.Cmp(p.headInfo.Td) > 0 { - if !p.queueSend(func() { p.sendAnnounce(p.lastAnnounce) }) { - p.Log().Debug("Dropped announcement because queue is full", "number", p.lastAnnounce.Number, "hash", p.lastAnnounce.Hash) - } else { - p.Log().Debug("Sent announcement", "number", p.lastAnnounce.Number, "hash", p.lastAnnounce.Hash) - } - p.headInfo = blockInfo{Hash: p.lastAnnounce.Hash, Number: p.lastAnnounce.Number, Td: p.lastAnnounce.Td} - } -} - -// Handshake executes the les protocol handshake, negotiating version number, -// network IDs, difficulties, head and genesis blocks. -func (p *clientPeer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, forkID forkid.ID, forkFilter forkid.Filter, server *LesServer) error { - recentTx := server.handler.blockchain.TxLookupLimit() - if recentTx != txIndexUnlimited { - if recentTx < blockSafetyMargin { - recentTx = txIndexDisabled - } else { - recentTx -= blockSafetyMargin - txIndexRecentOffset - } - } - if recentTx != txIndexUnlimited && p.version < lpv4 { - return errors.New("Cannot serve old clients without a complete tx index") - } - // Note: clientPeer.headInfo should contain the last head announced to the client by us. - // The values announced in the handshake are dummy values for compatibility reasons and should be ignored. - p.headInfo = blockInfo{Hash: head, Number: headNum, Td: td} - return p.handshake(td, head, headNum, genesis, forkID, forkFilter, func(lists *keyValueList) { - // Add some information which services server can offer. - *lists = (*lists).add("serveHeaders", nil) - *lists = (*lists).add("serveChainSince", uint64(0)) - *lists = (*lists).add("serveStateSince", uint64(0)) - - // If local ethereum node is running in archive mode, advertise ourselves we have - // all version state data. Otherwise only recent state is available. - stateRecent := uint64(core.TriesInMemory - blockSafetyMargin) - if server.archiveMode { - stateRecent = 0 - } - *lists = (*lists).add("serveRecentState", stateRecent) - *lists = (*lists).add("txRelay", nil) - if p.version >= lpv4 { - *lists = (*lists).add("recentTxLookup", recentTx) - } - *lists = (*lists).add("flowControl/BL", server.defParams.BufLimit) - *lists = (*lists).add("flowControl/MRR", server.defParams.MinRecharge) - - var costList RequestCostList - if server.costTracker.testCostList != nil { - costList = server.costTracker.testCostList - } else { - costList = server.costTracker.makeCostList(server.costTracker.globalFactor()) - } - *lists = (*lists).add("flowControl/MRC", costList) - p.fcCosts = costList.decode(ProtocolLengths[uint(p.version)]) - p.fcParams = server.defParams - }, func(recv keyValueMap) error { - p.server = recv.get("flowControl/MRR", nil) == nil - if p.server { - p.announceType = announceTypeNone // connected to another server, send no messages - } else { - if recv.get("announceType", &p.announceType) != nil { - // set default announceType on server side - p.announceType = announceTypeSimple - } - } - return nil - }) -} - -func (p *clientPeer) bumpInvalid() { - p.invalidLock.Lock() - p.invalidCount.Add(1, mclock.Now()) - p.invalidLock.Unlock() -} - -func (p *clientPeer) getInvalid() uint64 { - p.invalidLock.RLock() - defer p.invalidLock.RUnlock() - return p.invalidCount.Value(mclock.Now()) -} - -// Disconnect implements vfs.clientPeer -func (p *clientPeer) Disconnect() { - p.Peer.Disconnect(p2p.DiscRequested) -} - -// serverPeerSubscriber is an interface to notify services about added or -// removed server peers -type serverPeerSubscriber interface { - registerPeer(*serverPeer) - unregisterPeer(*serverPeer) -} - -// serverPeerSet represents the set of active server peers currently -// participating in the Light Ethereum sub-protocol. -type serverPeerSet struct { - peers map[string]*serverPeer - // subscribers is a batch of subscribers and peerset will notify - // these subscribers when the peerset changes(new server peer is - // added or removed) - subscribers []serverPeerSubscriber - closed bool - lock sync.RWMutex -} - -// newServerPeerSet creates a new peer set to track the active server peers. -func newServerPeerSet() *serverPeerSet { - return &serverPeerSet{peers: make(map[string]*serverPeer)} -} - -// subscribe adds a service to be notified about added or removed -// peers and also register all active peers into the given service. -func (ps *serverPeerSet) subscribe(sub serverPeerSubscriber) { - ps.lock.Lock() - defer ps.lock.Unlock() - - ps.subscribers = append(ps.subscribers, sub) - for _, p := range ps.peers { - sub.registerPeer(p) - } -} - -// register adds a new server peer into the set, or returns an error if the -// peer is already known. -func (ps *serverPeerSet) register(peer *serverPeer) error { - ps.lock.Lock() - defer ps.lock.Unlock() - - if ps.closed { - return errClosed - } - if _, exist := ps.peers[peer.id]; exist { - return errAlreadyRegistered - } - ps.peers[peer.id] = peer - for _, sub := range ps.subscribers { - sub.registerPeer(peer) - } - return nil -} - -// unregister removes a remote peer from the active set, disabling any further -// actions to/from that particular entity. It also initiates disconnection at -// the networking layer. -func (ps *serverPeerSet) unregister(id string) error { - ps.lock.Lock() - defer ps.lock.Unlock() - - p, ok := ps.peers[id] - if !ok { - return errNotRegistered - } - delete(ps.peers, id) - for _, sub := range ps.subscribers { - sub.unregisterPeer(p) - } - p.Peer.Disconnect(p2p.DiscRequested) - return nil -} - -// ids returns a list of all registered peer IDs -func (ps *serverPeerSet) ids() []string { - ps.lock.RLock() - defer ps.lock.RUnlock() - - var ids []string - for id := range ps.peers { - ids = append(ids, id) - } - return ids -} - -// peer retrieves the registered peer with the given id. -func (ps *serverPeerSet) peer(id string) *serverPeer { - ps.lock.RLock() - defer ps.lock.RUnlock() - - return ps.peers[id] -} - -// len returns if the current number of peers in the set. -func (ps *serverPeerSet) len() int { - ps.lock.RLock() - defer ps.lock.RUnlock() - - return len(ps.peers) -} - -// allServerPeers returns all server peers in a list. -func (ps *serverPeerSet) allPeers() []*serverPeer { - ps.lock.RLock() - defer ps.lock.RUnlock() - - list := make([]*serverPeer, 0, len(ps.peers)) - for _, p := range ps.peers { - list = append(list, p) - } - return list -} - -// close disconnects all peers. No new peers can be registered -// after close has returned. -func (ps *serverPeerSet) close() { - ps.lock.Lock() - defer ps.lock.Unlock() - - for _, p := range ps.peers { - p.Disconnect(p2p.DiscQuitting) - } - ps.closed = true -} - -// clientPeerSet represents the set of active client peers currently -// participating in the Light Ethereum sub-protocol. -type clientPeerSet struct { - peers map[enode.ID]*clientPeer - lock sync.RWMutex - closed bool - - privateKey *ecdsa.PrivateKey - lastAnnounce, signedAnnounce announceData -} - -// newClientPeerSet creates a new peer set to track the client peers. -func newClientPeerSet() *clientPeerSet { - return &clientPeerSet{peers: make(map[enode.ID]*clientPeer)} -} - -// register adds a new peer into the peer set, or returns an error if the -// peer is already known. -func (ps *clientPeerSet) register(peer *clientPeer) error { - ps.lock.Lock() - defer ps.lock.Unlock() - - if ps.closed { - return errClosed - } - if _, exist := ps.peers[peer.ID()]; exist { - return errAlreadyRegistered - } - ps.peers[peer.ID()] = peer - ps.announceOrStore(peer) - return nil -} - -// unregister removes a remote peer from the peer set, disabling any further -// actions to/from that particular entity. It also initiates disconnection -// at the networking layer. -func (ps *clientPeerSet) unregister(id enode.ID) error { - ps.lock.Lock() - defer ps.lock.Unlock() - - p, ok := ps.peers[id] - if !ok { - return errNotRegistered - } - delete(ps.peers, id) - p.Peer.Disconnect(p2p.DiscRequested) - return nil -} - -// ids returns a list of all registered peer IDs -func (ps *clientPeerSet) ids() []enode.ID { - ps.lock.RLock() - defer ps.lock.RUnlock() - - var ids []enode.ID - for id := range ps.peers { - ids = append(ids, id) - } - return ids -} - -// peer retrieves the registered peer with the given id. -func (ps *clientPeerSet) peer(id enode.ID) *clientPeer { - ps.lock.RLock() - defer ps.lock.RUnlock() - - return ps.peers[id] -} - -// setSignerKey sets the signer key for signed announcements. Should be called before -// starting the protocol handler. -func (ps *clientPeerSet) setSignerKey(privateKey *ecdsa.PrivateKey) { - ps.privateKey = privateKey -} - -// broadcast sends the given announcements to all active peers -func (ps *clientPeerSet) broadcast(announce announceData) { - ps.lock.Lock() - defer ps.lock.Unlock() - - ps.lastAnnounce = announce - for _, peer := range ps.peers { - ps.announceOrStore(peer) - } -} - -// announceOrStore sends the requested type of announcement to the given peer or stores -// it for later if the peer is inactive (capacity == 0). -func (ps *clientPeerSet) announceOrStore(p *clientPeer) { - if ps.lastAnnounce.Td == nil { - return - } - switch p.announceType { - case announceTypeSimple: - p.announceOrStore(ps.lastAnnounce) - case announceTypeSigned: - if ps.signedAnnounce.Hash != ps.lastAnnounce.Hash { - ps.signedAnnounce = ps.lastAnnounce - ps.signedAnnounce.sign(ps.privateKey) - } - p.announceOrStore(ps.signedAnnounce) - } -} - -// close disconnects all peers. No new peers can be registered -// after close has returned. -func (ps *clientPeerSet) close() { - ps.lock.Lock() - defer ps.lock.Unlock() - - for _, p := range ps.peers { - p.Peer.Disconnect(p2p.DiscQuitting) - } - ps.closed = true -} - -// serverSet is a special set which contains all connected les servers. -// Les servers will also be discovered by discovery protocol because they -// also run the LES protocol. We can't drop them although they are useless -// for us(server) but for other protocols(e.g. ETH) upon the devp2p they -// may be useful. -type serverSet struct { - lock sync.Mutex - set map[string]*clientPeer - closed bool -} - -func newServerSet() *serverSet { - return &serverSet{set: make(map[string]*clientPeer)} -} - -func (s *serverSet) register(peer *clientPeer) error { - s.lock.Lock() - defer s.lock.Unlock() - - if s.closed { - return errClosed - } - if _, exist := s.set[peer.id]; exist { - return errAlreadyRegistered - } - s.set[peer.id] = peer - return nil -} - -func (s *serverSet) unregister(peer *clientPeer) error { - s.lock.Lock() - defer s.lock.Unlock() - - if s.closed { - return errClosed - } - if _, exist := s.set[peer.id]; !exist { - return errNotRegistered - } - delete(s.set, peer.id) - peer.Peer.Disconnect(p2p.DiscQuitting) - return nil -} - -func (s *serverSet) close() { - s.lock.Lock() - defer s.lock.Unlock() - - for _, p := range s.set { - p.Peer.Disconnect(p2p.DiscQuitting) - } - s.closed = true -} diff --git a/les/peer_test.go b/les/peer_test.go deleted file mode 100644 index 0881dd292b..0000000000 --- a/les/peer_test.go +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "crypto/rand" - "errors" - "math/big" - "reflect" - "sort" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/forkid" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/params" -) - -type testServerPeerSub struct { - regCh chan *serverPeer - unregCh chan *serverPeer -} - -func newTestServerPeerSub() *testServerPeerSub { - return &testServerPeerSub{ - regCh: make(chan *serverPeer, 1), - unregCh: make(chan *serverPeer, 1), - } -} - -func (t *testServerPeerSub) registerPeer(p *serverPeer) { t.regCh <- p } -func (t *testServerPeerSub) unregisterPeer(p *serverPeer) { t.unregCh <- p } - -func TestPeerSubscription(t *testing.T) { - peers := newServerPeerSet() - defer peers.close() - - checkIds := func(expect []string) { - given := peers.ids() - if len(given) == 0 && len(expect) == 0 { - return - } - sort.Strings(given) - sort.Strings(expect) - if !reflect.DeepEqual(given, expect) { - t.Fatalf("all peer ids mismatch, want %v, given %v", expect, given) - } - } - checkPeers := func(peerCh chan *serverPeer) { - select { - case <-peerCh: - case <-time.NewTimer(100 * time.Millisecond).C: - t.Fatalf("timeout, no event received") - } - select { - case <-peerCh: - t.Fatalf("unexpected event received") - case <-time.NewTimer(10 * time.Millisecond).C: - } - } - checkIds([]string{}) - - sub := newTestServerPeerSub() - peers.subscribe(sub) - - // Generate a random id and create the peer - var id enode.ID - rand.Read(id[:]) - peer := newServerPeer(2, NetworkId, false, p2p.NewPeer(id, "name", nil), nil) - peers.register(peer) - - checkIds([]string{peer.id}) - checkPeers(sub.regCh) - - peers.unregister(peer.id) - checkIds([]string{}) - checkPeers(sub.unregCh) -} - -type fakeChain struct{} - -func (f *fakeChain) Config() *params.ChainConfig { return params.MainnetChainConfig } -func (f *fakeChain) Genesis() *types.Block { - return core.DefaultGenesisBlock().ToBlock() -} -func (f *fakeChain) CurrentHeader() *types.Header { return &types.Header{Number: big.NewInt(10000000)} } - -func TestHandshake(t *testing.T) { - // Create a message pipe to communicate through - app, net := p2p.MsgPipe() - - // Generate a random id and create the peer - var id enode.ID - rand.Read(id[:]) - - peer1 := newClientPeer(2, NetworkId, p2p.NewPeer(id, "name", nil), net) - peer2 := newServerPeer(2, NetworkId, true, p2p.NewPeer(id, "name", nil), app) - - var ( - errCh1 = make(chan error, 1) - errCh2 = make(chan error, 1) - - td = big.NewInt(100) - head = common.HexToHash("deadbeef") - headNum = uint64(10) - genesis = common.HexToHash("cafebabe") - - chain1, chain2 = &fakeChain{}, &fakeChain{} - forkID1 = forkid.NewID(chain1.Config(), chain1.Genesis(), chain1.CurrentHeader().Number.Uint64(), chain1.CurrentHeader().Time) - forkID2 = forkid.NewID(chain2.Config(), chain2.Genesis(), chain2.CurrentHeader().Number.Uint64(), chain2.CurrentHeader().Time) - filter1, filter2 = forkid.NewFilter(chain1), forkid.NewFilter(chain2) - ) - - go func() { - errCh1 <- peer1.handshake(td, head, headNum, genesis, forkID1, filter1, func(list *keyValueList) { - var announceType uint64 = announceTypeSigned - *list = (*list).add("announceType", announceType) - }, nil) - }() - go func() { - errCh2 <- peer2.handshake(td, head, headNum, genesis, forkID2, filter2, nil, func(recv keyValueMap) error { - var reqType uint64 - err := recv.get("announceType", &reqType) - if err != nil { - return err - } - if reqType != announceTypeSigned { - return errors.New("Expected announceTypeSigned") - } - return nil - }) - }() - - for i := 0; i < 2; i++ { - select { - case err := <-errCh1: - if err != nil { - t.Fatalf("handshake failed, %v", err) - } - case err := <-errCh2: - if err != nil { - t.Fatalf("handshake failed, %v", err) - } - case <-time.After(time.Second): - t.Fatalf("timeout") - } - } -} diff --git a/les/protocol.go b/les/protocol.go deleted file mode 100644 index cfebdbfb9a..0000000000 --- a/les/protocol.go +++ /dev/null @@ -1,327 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "crypto/ecdsa" - "errors" - "fmt" - "io" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - vfc "github.com/ethereum/go-ethereum/les/vflux/client" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/rlp" -) - -// Constants to match up protocol versions and messages -const ( - lpv2 = 2 - lpv3 = 3 - lpv4 = 4 -) - -// Supported versions of the les protocol (first is primary) -var ( - ClientProtocolVersions = []uint{lpv2, lpv3, lpv4} - ServerProtocolVersions = []uint{lpv2, lpv3, lpv4} -) - -// ProtocolLengths is the number of implemented message corresponding to different protocol versions. -var ProtocolLengths = map[uint]uint64{lpv2: 22, lpv3: 24, lpv4: 24} - -const ( - NetworkId = 1 - ProtocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message - blockSafetyMargin = 4 // safety margin applied to block ranges specified relative to head block - - txIndexUnlimited = 0 // this value in the "recentTxLookup" handshake field means the entire tx index history is served - txIndexDisabled = 1 // this value means tx index is not served at all - txIndexRecentOffset = 1 // txIndexRecentOffset + N in the handshake field means then tx index of the last N blocks is supported -) - -// les protocol message codes -const ( - // Protocol messages inherited from LPV1 - StatusMsg = 0x00 - AnnounceMsg = 0x01 - GetBlockHeadersMsg = 0x02 - BlockHeadersMsg = 0x03 - GetBlockBodiesMsg = 0x04 - BlockBodiesMsg = 0x05 - GetReceiptsMsg = 0x06 - ReceiptsMsg = 0x07 - GetCodeMsg = 0x0a - CodeMsg = 0x0b - // Protocol messages introduced in LPV2 - GetProofsV2Msg = 0x0f - ProofsV2Msg = 0x10 - GetHelperTrieProofsMsg = 0x11 - HelperTrieProofsMsg = 0x12 - SendTxV2Msg = 0x13 - GetTxStatusMsg = 0x14 - TxStatusMsg = 0x15 - // Protocol messages introduced in LPV3 - StopMsg = 0x16 - ResumeMsg = 0x17 -) - -// GetBlockHeadersData represents a block header query (the request ID is not included) -type GetBlockHeadersData struct { - Origin hashOrNumber // Block from which to retrieve headers - Amount uint64 // Maximum number of headers to retrieve - Skip uint64 // Blocks to skip between consecutive headers - Reverse bool // Query direction (false = rising towards latest, true = falling towards genesis) -} - -// GetBlockHeadersPacket represents a block header request -type GetBlockHeadersPacket struct { - ReqID uint64 - Query GetBlockHeadersData -} - -// GetBlockBodiesPacket represents a block body request -type GetBlockBodiesPacket struct { - ReqID uint64 - Hashes []common.Hash -} - -// GetCodePacket represents a contract code request -type GetCodePacket struct { - ReqID uint64 - Reqs []CodeReq -} - -// GetReceiptsPacket represents a block receipts request -type GetReceiptsPacket struct { - ReqID uint64 - Hashes []common.Hash -} - -// GetProofsPacket represents a proof request -type GetProofsPacket struct { - ReqID uint64 - Reqs []ProofReq -} - -// GetHelperTrieProofsPacket represents a helper trie proof request -type GetHelperTrieProofsPacket struct { - ReqID uint64 - Reqs []HelperTrieReq -} - -// SendTxPacket represents a transaction propagation request -type SendTxPacket struct { - ReqID uint64 - Txs []*types.Transaction -} - -// GetTxStatusPacket represents a transaction status query -type GetTxStatusPacket struct { - ReqID uint64 - Hashes []common.Hash -} - -type requestInfo struct { - name string - maxCount uint64 - refBasketFirst, refBasketRest float64 -} - -// reqMapping maps an LES request to one or two vflux service vector entries. -// If rest != -1 and the request type is used with amounts larger than one then the -// first one of the multi-request is mapped to first while the rest is mapped to rest. -type reqMapping struct { - first, rest int -} - -var ( - // requests describes the available LES request types and their initializing amounts - // in the vfc.ValueTracker reference basket. Initial values are estimates - // based on the same values as the server's default cost estimates (reqAvgTimeCost). - requests = map[uint64]requestInfo{ - GetBlockHeadersMsg: {"GetBlockHeaders", MaxHeaderFetch, 10, 1000}, - GetBlockBodiesMsg: {"GetBlockBodies", MaxBodyFetch, 1, 0}, - GetReceiptsMsg: {"GetReceipts", MaxReceiptFetch, 1, 0}, - GetCodeMsg: {"GetCode", MaxCodeFetch, 1, 0}, - GetProofsV2Msg: {"GetProofsV2", MaxProofsFetch, 10, 0}, - GetHelperTrieProofsMsg: {"GetHelperTrieProofs", MaxHelperTrieProofsFetch, 10, 100}, - SendTxV2Msg: {"SendTxV2", MaxTxSend, 1, 0}, - GetTxStatusMsg: {"GetTxStatus", MaxTxStatus, 10, 0}, - } - requestList []vfc.RequestInfo - requestMapping map[uint32]reqMapping -) - -// init creates a request list and mapping between protocol message codes and vflux -// service vector indices. -func init() { - requestMapping = make(map[uint32]reqMapping) - for code, req := range requests { - cost := reqAvgTimeCost[code] - rm := reqMapping{len(requestList), -1} - requestList = append(requestList, vfc.RequestInfo{ - Name: req.name + ".first", - InitAmount: req.refBasketFirst, - InitValue: float64(cost.baseCost + cost.reqCost), - }) - if req.refBasketRest != 0 { - rm.rest = len(requestList) - requestList = append(requestList, vfc.RequestInfo{ - Name: req.name + ".rest", - InitAmount: req.refBasketRest, - InitValue: float64(cost.reqCost), - }) - } - requestMapping[uint32(code)] = rm - } -} - -type errCode int - -const ( - ErrMsgTooLarge = iota - ErrDecode - ErrInvalidMsgCode - ErrProtocolVersionMismatch - ErrNetworkIdMismatch - ErrGenesisBlockMismatch - ErrNoStatusMsg - ErrExtraStatusMsg - ErrSuspendedPeer - ErrUselessPeer - ErrRequestRejected - ErrUnexpectedResponse - ErrInvalidResponse - ErrTooManyTimeouts - ErrMissingKey - ErrForkIDRejected -) - -func (e errCode) String() string { - return errorToString[int(e)] -} - -// XXX change once legacy code is out -var errorToString = map[int]string{ - ErrMsgTooLarge: "Message too long", - ErrDecode: "Invalid message", - ErrInvalidMsgCode: "Invalid message code", - ErrProtocolVersionMismatch: "Protocol version mismatch", - ErrNetworkIdMismatch: "NetworkId mismatch", - ErrGenesisBlockMismatch: "Genesis block mismatch", - ErrNoStatusMsg: "No status message", - ErrExtraStatusMsg: "Extra status message", - ErrSuspendedPeer: "Suspended peer", - ErrRequestRejected: "Request rejected", - ErrUnexpectedResponse: "Unexpected response", - ErrInvalidResponse: "Invalid response", - ErrTooManyTimeouts: "Too many request timeouts", - ErrMissingKey: "Key missing from list", - ErrForkIDRejected: "ForkID rejected", -} - -// announceData is the network packet for the block announcements. -type announceData struct { - Hash common.Hash // Hash of one particular block being announced - Number uint64 // Number of one particular block being announced - Td *big.Int // Total difficulty of one particular block being announced - ReorgDepth uint64 - Update keyValueList -} - -// sanityCheck verifies that the values are reasonable, as a DoS protection -func (a *announceData) sanityCheck() error { - if tdlen := a.Td.BitLen(); tdlen > 100 { - return fmt.Errorf("too large block TD: bitlen %d", tdlen) - } - return nil -} - -// sign adds a signature to the block announcement by the given privKey -func (a *announceData) sign(privKey *ecdsa.PrivateKey) { - rlp, _ := rlp.EncodeToBytes(blockInfo{a.Hash, a.Number, a.Td}) - sig, _ := crypto.Sign(crypto.Keccak256(rlp), privKey) - a.Update = a.Update.add("sign", sig) -} - -// checkSignature verifies if the block announcement has a valid signature by the given pubKey -func (a *announceData) checkSignature(id enode.ID, update keyValueMap) error { - var sig []byte - if err := update.get("sign", &sig); err != nil { - return err - } - rlp, _ := rlp.EncodeToBytes(blockInfo{a.Hash, a.Number, a.Td}) - recPubkey, err := crypto.SigToPub(crypto.Keccak256(rlp), sig) - if err != nil { - return err - } - if id == enode.PubkeyToIDV4(recPubkey) { - return nil - } - return errors.New("wrong signature") -} - -type blockInfo struct { - Hash common.Hash // Hash of one particular block being announced - Number uint64 // Number of one particular block being announced - Td *big.Int // Total difficulty of one particular block being announced -} - -// hashOrNumber is a combined field for specifying an origin block. -type hashOrNumber struct { - Hash common.Hash // Block hash from which to retrieve headers (excludes Number) - Number uint64 // Block hash from which to retrieve headers (excludes Hash) -} - -// EncodeRLP is a specialized encoder for hashOrNumber to encode only one of the -// two contained union fields. -func (hn *hashOrNumber) EncodeRLP(w io.Writer) error { - if hn.Hash == (common.Hash{}) { - return rlp.Encode(w, hn.Number) - } - if hn.Number != 0 { - return fmt.Errorf("both origin hash (%x) and number (%d) provided", hn.Hash, hn.Number) - } - return rlp.Encode(w, hn.Hash) -} - -// DecodeRLP is a specialized decoder for hashOrNumber to decode the contents -// into either a block hash or a block number. -func (hn *hashOrNumber) DecodeRLP(s *rlp.Stream) error { - _, size, err := s.Kind() - switch { - case err != nil: - return err - case size == 32: - hn.Number = 0 - return s.Decode(&hn.Hash) - case size <= 8: - hn.Hash = common.Hash{} - return s.Decode(&hn.Number) - default: - return fmt.Errorf("invalid input size %d for origin", size) - } -} - -// CodeData is the network response packet for a node data retrieval. -type CodeData []struct { - Value []byte -} diff --git a/les/request_test.go b/les/request_test.go deleted file mode 100644 index 5e354b7efd..0000000000 --- a/les/request_test.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -// Note: these tests are disabled now because they cannot work with the old sync -// mechanism removed but will be useful again once the PoS ultralight mode is implemented - -/* -import ( - "context" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/light" -) - -var testBankSecureTrieKey = secAddr(bankAddr) - -func secAddr(addr common.Address) []byte { - return crypto.Keccak256(addr[:]) -} - -type accessTestFn func(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest - -func TestBlockAccessLes2(t *testing.T) { testAccess(t, 2, tfBlockAccess) } -func TestBlockAccessLes3(t *testing.T) { testAccess(t, 3, tfBlockAccess) } -func TestBlockAccessLes4(t *testing.T) { testAccess(t, 4, tfBlockAccess) } - -func tfBlockAccess(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest { - return &light.BlockRequest{Hash: bhash, Number: number} -} - -func TestReceiptsAccessLes2(t *testing.T) { testAccess(t, 2, tfReceiptsAccess) } -func TestReceiptsAccessLes3(t *testing.T) { testAccess(t, 3, tfReceiptsAccess) } -func TestReceiptsAccessLes4(t *testing.T) { testAccess(t, 4, tfReceiptsAccess) } - -func tfReceiptsAccess(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest { - return &light.ReceiptsRequest{Hash: bhash, Number: number} -} - -func TestTrieEntryAccessLes2(t *testing.T) { testAccess(t, 2, tfTrieEntryAccess) } -func TestTrieEntryAccessLes3(t *testing.T) { testAccess(t, 3, tfTrieEntryAccess) } -func TestTrieEntryAccessLes4(t *testing.T) { testAccess(t, 4, tfTrieEntryAccess) } - -func tfTrieEntryAccess(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest { - if number := rawdb.ReadHeaderNumber(db, bhash); number != nil { - return &light.TrieRequest{Id: light.StateTrieID(rawdb.ReadHeader(db, bhash, *number)), Key: testBankSecureTrieKey} - } - return nil -} - -func TestCodeAccessLes2(t *testing.T) { testAccess(t, 2, tfCodeAccess) } -func TestCodeAccessLes3(t *testing.T) { testAccess(t, 3, tfCodeAccess) } -func TestCodeAccessLes4(t *testing.T) { testAccess(t, 4, tfCodeAccess) } - -func tfCodeAccess(db ethdb.Database, bhash common.Hash, num uint64) light.OdrRequest { - number := rawdb.ReadHeaderNumber(db, bhash) - if number != nil { - return nil - } - header := rawdb.ReadHeader(db, bhash, *number) - if header.Number.Uint64() < testContractDeployed { - return nil - } - sti := light.StateTrieID(header) - ci := light.StorageTrieID(sti, testContractAddr, types.EmptyRootHash) - return &light.CodeRequest{Id: ci, Hash: crypto.Keccak256Hash(testContractCodeDeployed)} -} - -func testAccess(t *testing.T, protocol int, fn accessTestFn) { - // Assemble the test environment - netconfig := testnetConfig{ - blocks: 4, - protocol: protocol, - indexFn: nil, - connect: true, - nopruning: true, - } - server, client, tearDown := newClientServerEnv(t, netconfig) - defer tearDown() - - // Ensure the client has synced all necessary data. - clientHead := client.handler.backend.blockchain.CurrentHeader() - if clientHead.Number.Uint64() != 4 { - t.Fatalf("Failed to sync the chain with server, head: %v", clientHead.Number.Uint64()) - } - - test := func(expFail uint64) { - for i := uint64(0); i <= server.handler.blockchain.CurrentHeader().Number.Uint64(); i++ { - bhash := rawdb.ReadCanonicalHash(server.db, i) - if req := fn(client.db, bhash, i); req != nil { - ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) - - err := client.handler.backend.odr.Retrieve(ctx, req) - cancel() - - got := err == nil - exp := i < expFail - if exp && !got { - t.Errorf("object retrieval failed") - } - if !exp && got { - t.Errorf("unexpected object retrieval success") - } - } - } - } - test(5) -} -*/ diff --git a/les/retrieve.go b/les/retrieve.go deleted file mode 100644 index 728f960a54..0000000000 --- a/les/retrieve.go +++ /dev/null @@ -1,421 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "context" - "errors" - "sync" - "time" - - "github.com/ethereum/go-ethereum/light" -) - -var ( - retryQueue = time.Millisecond * 100 - hardRequestTimeout = time.Second * 10 -) - -// retrieveManager is a layer on top of requestDistributor which takes care of -// matching replies by request ID and handles timeouts and resends if necessary. -type retrieveManager struct { - dist *requestDistributor - peers *serverPeerSet - softRequestTimeout func() time.Duration - - lock sync.RWMutex - sentReqs map[uint64]*sentReq -} - -// validatorFunc is a function that processes a reply message -type validatorFunc func(distPeer, *Msg) error - -// sentReq represents a request sent and tracked by retrieveManager -type sentReq struct { - rm *retrieveManager - req *distReq - id uint64 - validate validatorFunc - - eventsCh chan reqPeerEvent - stopCh chan struct{} - stopped bool - err error - - lock sync.RWMutex // protect access to sentTo map - sentTo map[distPeer]sentReqToPeer - - lastReqQueued bool // last request has been queued but not sent - lastReqSentTo distPeer // if not nil then last request has been sent to given peer but not timed out - reqSrtoCount int // number of requests that reached soft (but not hard) timeout -} - -// sentReqToPeer notifies the request-from-peer goroutine (tryRequest) about a response -// delivered by the given peer. Only one delivery is allowed per request per peer, -// after which delivered is set to true, the validity of the response is sent on the -// valid channel and no more responses are accepted. -type sentReqToPeer struct { - delivered, frozen bool - event chan int -} - -// reqPeerEvent is sent by the request-from-peer goroutine (tryRequest) to the -// request state machine (retrieveLoop) through the eventsCh channel. -type reqPeerEvent struct { - event int - peer distPeer -} - -const ( - rpSent = iota // if peer == nil, not sent (no suitable peers) - rpSoftTimeout - rpHardTimeout - rpDeliveredValid - rpDeliveredInvalid - rpNotDelivered -) - -// newRetrieveManager creates the retrieve manager -func newRetrieveManager(peers *serverPeerSet, dist *requestDistributor, srto func() time.Duration) *retrieveManager { - return &retrieveManager{ - peers: peers, - dist: dist, - sentReqs: make(map[uint64]*sentReq), - softRequestTimeout: srto, - } -} - -// retrieve sends a request (to multiple peers if necessary) and waits for an answer -// that is delivered through the deliver function and successfully validated by the -// validator callback. It returns when a valid answer is delivered or the context is -// cancelled. -func (rm *retrieveManager) retrieve(ctx context.Context, reqID uint64, req *distReq, val validatorFunc, shutdown chan struct{}) error { - sentReq := rm.sendReq(reqID, req, val) - select { - case <-sentReq.stopCh: - case <-ctx.Done(): - sentReq.stop(ctx.Err()) - case <-shutdown: - sentReq.stop(errors.New("client is shutting down")) - } - return sentReq.getError() -} - -// sendReq starts a process that keeps trying to retrieve a valid answer for a -// request from any suitable peers until stopped or succeeded. -func (rm *retrieveManager) sendReq(reqID uint64, req *distReq, val validatorFunc) *sentReq { - r := &sentReq{ - rm: rm, - req: req, - id: reqID, - sentTo: make(map[distPeer]sentReqToPeer), - stopCh: make(chan struct{}), - eventsCh: make(chan reqPeerEvent, 10), - validate: val, - } - - canSend := req.canSend - req.canSend = func(p distPeer) bool { - // add an extra check to canSend: the request has not been sent to the same peer before - r.lock.RLock() - _, sent := r.sentTo[p] - r.lock.RUnlock() - return !sent && canSend(p) - } - - request := req.request - req.request = func(p distPeer) func() { - // before actually sending the request, put an entry into the sentTo map - r.lock.Lock() - r.sentTo[p] = sentReqToPeer{delivered: false, frozen: false, event: make(chan int, 1)} - r.lock.Unlock() - return request(p) - } - rm.lock.Lock() - rm.sentReqs[reqID] = r - rm.lock.Unlock() - - go r.retrieveLoop() - return r -} - -// deliver is called by the LES protocol manager to deliver reply messages to waiting requests -func (rm *retrieveManager) deliver(peer distPeer, msg *Msg) error { - rm.lock.RLock() - req, ok := rm.sentReqs[msg.ReqID] - rm.lock.RUnlock() - - if ok { - return req.deliver(peer, msg) - } - return errResp(ErrUnexpectedResponse, "reqID = %v", msg.ReqID) -} - -// frozen is called by the LES protocol manager when a server has suspended its service and we -// should not expect an answer for the requests already sent there -func (rm *retrieveManager) frozen(peer distPeer) { - rm.lock.RLock() - defer rm.lock.RUnlock() - - for _, req := range rm.sentReqs { - req.frozen(peer) - } -} - -// reqStateFn represents a state of the retrieve loop state machine -type reqStateFn func() reqStateFn - -// retrieveLoop is the retrieval state machine event loop -func (r *sentReq) retrieveLoop() { - go r.tryRequest() - r.lastReqQueued = true - state := r.stateRequesting - - for state != nil { - state = state() - } - - r.rm.lock.Lock() - delete(r.rm.sentReqs, r.id) - r.rm.lock.Unlock() -} - -// stateRequesting: a request has been queued or sent recently; when it reaches soft timeout, -// a new request is sent to a new peer -func (r *sentReq) stateRequesting() reqStateFn { - select { - case ev := <-r.eventsCh: - r.update(ev) - switch ev.event { - case rpSent: - if ev.peer == nil { - // request send failed, no more suitable peers - if r.waiting() { - // we are already waiting for sent requests which may succeed so keep waiting - return r.stateNoMorePeers - } - // nothing to wait for, no more peers to ask, return with error - r.stop(light.ErrNoPeers) - // no need to go to stopped state because waiting() already returned false - return nil - } - case rpSoftTimeout: - // last request timed out, try asking a new peer - go r.tryRequest() - r.lastReqQueued = true - return r.stateRequesting - case rpDeliveredInvalid, rpNotDelivered: - // if it was the last sent request (set to nil by update) then start a new one - if !r.lastReqQueued && r.lastReqSentTo == nil { - go r.tryRequest() - r.lastReqQueued = true - } - return r.stateRequesting - case rpDeliveredValid: - r.stop(nil) - return r.stateStopped - } - return r.stateRequesting - case <-r.stopCh: - return r.stateStopped - } -} - -// stateNoMorePeers: could not send more requests because no suitable peers are available. -// Peers may become suitable for a certain request later or new peers may appear so we -// keep trying. -func (r *sentReq) stateNoMorePeers() reqStateFn { - select { - case <-time.After(retryQueue): - go r.tryRequest() - r.lastReqQueued = true - return r.stateRequesting - case ev := <-r.eventsCh: - r.update(ev) - if ev.event == rpDeliveredValid { - r.stop(nil) - return r.stateStopped - } - if r.waiting() { - return r.stateNoMorePeers - } - r.stop(light.ErrNoPeers) - return nil - case <-r.stopCh: - return r.stateStopped - } -} - -// stateStopped: request succeeded or cancelled, just waiting for some peers -// to either answer or time out hard -func (r *sentReq) stateStopped() reqStateFn { - for r.waiting() { - r.update(<-r.eventsCh) - } - return nil -} - -// update updates the queued/sent flags and timed out peers counter according to the event -func (r *sentReq) update(ev reqPeerEvent) { - switch ev.event { - case rpSent: - r.lastReqQueued = false - r.lastReqSentTo = ev.peer - case rpSoftTimeout: - r.lastReqSentTo = nil - r.reqSrtoCount++ - case rpHardTimeout: - r.reqSrtoCount-- - case rpDeliveredValid, rpDeliveredInvalid, rpNotDelivered: - if ev.peer == r.lastReqSentTo { - r.lastReqSentTo = nil - } else { - r.reqSrtoCount-- - } - } -} - -// waiting returns true if the retrieval mechanism is waiting for an answer from -// any peer -func (r *sentReq) waiting() bool { - return r.lastReqQueued || r.lastReqSentTo != nil || r.reqSrtoCount > 0 -} - -// tryRequest tries to send the request to a new peer and waits for it to either -// succeed or time out if it has been sent. It also sends the appropriate reqPeerEvent -// messages to the request's event channel. -func (r *sentReq) tryRequest() { - sent := r.rm.dist.queue(r.req) - var p distPeer - select { - case p = <-sent: - case <-r.stopCh: - if r.rm.dist.cancel(r.req) { - p = nil - } else { - p = <-sent - } - } - - r.eventsCh <- reqPeerEvent{rpSent, p} - if p == nil { - return - } - - hrto := false - - r.lock.RLock() - s, ok := r.sentTo[p] - r.lock.RUnlock() - if !ok { - panic(nil) - } - - defer func() { - pp, ok := p.(*serverPeer) - if hrto && ok { - pp.Log().Debug("Request timed out hard") - if r.rm.peers != nil { - r.rm.peers.unregister(pp.id) - } - } - }() - - select { - case event := <-s.event: - if event == rpNotDelivered { - r.lock.Lock() - delete(r.sentTo, p) - r.lock.Unlock() - } - r.eventsCh <- reqPeerEvent{event, p} - return - case <-time.After(r.rm.softRequestTimeout()): - r.eventsCh <- reqPeerEvent{rpSoftTimeout, p} - } - - select { - case event := <-s.event: - if event == rpNotDelivered { - r.lock.Lock() - delete(r.sentTo, p) - r.lock.Unlock() - } - r.eventsCh <- reqPeerEvent{event, p} - case <-time.After(hardRequestTimeout): - hrto = true - r.eventsCh <- reqPeerEvent{rpHardTimeout, p} - } -} - -// deliver a reply belonging to this request -func (r *sentReq) deliver(peer distPeer, msg *Msg) error { - r.lock.Lock() - defer r.lock.Unlock() - - s, ok := r.sentTo[peer] - if !ok || s.delivered { - return errResp(ErrUnexpectedResponse, "reqID = %v", msg.ReqID) - } - if s.frozen { - return nil - } - valid := r.validate(peer, msg) == nil - r.sentTo[peer] = sentReqToPeer{delivered: true, frozen: false, event: s.event} - if valid { - s.event <- rpDeliveredValid - } else { - s.event <- rpDeliveredInvalid - } - if !valid { - return errResp(ErrInvalidResponse, "reqID = %v", msg.ReqID) - } - return nil -} - -// frozen sends a "not delivered" event to the peer event channel belonging to the -// given peer if the request has been sent there, causing the state machine to not -// expect an answer and potentially even send the request to the same peer again -// when canSend allows it. -func (r *sentReq) frozen(peer distPeer) { - r.lock.Lock() - defer r.lock.Unlock() - - s, ok := r.sentTo[peer] - if ok && !s.delivered && !s.frozen { - r.sentTo[peer] = sentReqToPeer{delivered: false, frozen: true, event: s.event} - s.event <- rpNotDelivered - } -} - -// stop stops the retrieval process and sets an error code that will be returned -// by getError -func (r *sentReq) stop(err error) { - r.lock.Lock() - if !r.stopped { - r.stopped = true - r.err = err - close(r.stopCh) - } - r.lock.Unlock() -} - -// getError returns any retrieval error (either internally generated or set by the -// stop function) after stopCh has been closed -func (r *sentReq) getError() error { - return r.err -} diff --git a/les/server.go b/les/server.go deleted file mode 100644 index d84856c7fb..0000000000 --- a/les/server.go +++ /dev/null @@ -1,281 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "crypto/ecdsa" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/les/flowcontrol" - vfs "github.com/ethereum/go-ethereum/les/vflux/server" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rpc" -) - -var ( - defaultPosFactors = vfs.PriceFactors{TimeFactor: 0, CapacityFactor: 1, RequestFactor: 1} - defaultNegFactors = vfs.PriceFactors{TimeFactor: 0, CapacityFactor: 1, RequestFactor: 1} -) - -const defaultConnectedBias = time.Minute * 3 - -type ethBackend interface { - ArchiveMode() bool - BlockChain() *core.BlockChain - BloomIndexer() *core.ChainIndexer - ChainDb() ethdb.Database - Synced() bool - TxPool() *txpool.TxPool -} - -type LesServer struct { - lesCommons - - archiveMode bool // Flag whether the ethereum node runs in archive mode. - handler *serverHandler - peers *clientPeerSet - serverset *serverSet - vfluxServer *vfs.Server - privateKey *ecdsa.PrivateKey - - // Flow control and capacity management - fcManager *flowcontrol.ClientManager - costTracker *costTracker - defParams flowcontrol.ServerParams - servingQueue *servingQueue - clientPool *vfs.ClientPool - - minCapacity, maxCapacity uint64 - threadsIdle int // Request serving threads count when system is idle. - threadsBusy int // Request serving threads count when system is busy(block insertion). - - p2pSrv *p2p.Server -} - -func NewLesServer(node *node.Node, e ethBackend, config *ethconfig.Config) (*LesServer, error) { - lesDb, err := node.OpenDatabase("les.server", 0, 0, "eth/db/lesserver/", false) - if err != nil { - return nil, err - } - // Calculate the number of threads used to service the light client - // requests based on the user-specified value. - threads := config.LightServ * 4 / 100 - if threads < 4 { - threads = 4 - } - srv := &LesServer{ - lesCommons: lesCommons{ - genesis: e.BlockChain().Genesis().Hash(), - config: config, - chainConfig: e.BlockChain().Config(), - iConfig: light.DefaultServerIndexerConfig, - chainDb: e.ChainDb(), - lesDb: lesDb, - chainReader: e.BlockChain(), - chtIndexer: light.NewChtIndexer(e.ChainDb(), nil, params.CHTFrequency, params.HelperTrieProcessConfirmations, true), - bloomTrieIndexer: light.NewBloomTrieIndexer(e.ChainDb(), nil, params.BloomBitsBlocks, params.BloomTrieFrequency, true), - closeCh: make(chan struct{}), - }, - archiveMode: e.ArchiveMode(), - peers: newClientPeerSet(), - serverset: newServerSet(), - vfluxServer: vfs.NewServer(time.Millisecond * 10), - fcManager: flowcontrol.NewClientManager(nil, &mclock.System{}), - servingQueue: newServingQueue(int64(time.Millisecond*10), float64(config.LightServ)/100), - threadsBusy: config.LightServ/100 + 1, - threadsIdle: threads, - p2pSrv: node.Server(), - } - issync := e.Synced - if config.LightNoSyncServe { - issync = func() bool { return true } - } - srv.handler = newServerHandler(srv, e.BlockChain(), e.ChainDb(), e.TxPool(), issync) - srv.costTracker, srv.minCapacity = newCostTracker(e.ChainDb(), config) - - // Initialize the bloom trie indexer. - e.BloomIndexer().AddChildIndexer(srv.bloomTrieIndexer) - - // Initialize server capacity management fields. - srv.defParams = flowcontrol.ServerParams{ - BufLimit: srv.minCapacity * bufLimitRatio, - MinRecharge: srv.minCapacity, - } - // LES flow control tries to more or less guarantee the possibility for the - // clients to send a certain amount of requests at any time and get a quick - // response. Most of the clients want this guarantee but don't actually need - // to send requests most of the time. Our goal is to serve as many clients as - // possible while the actually used server capacity does not exceed the limits - totalRecharge := srv.costTracker.totalRecharge() - srv.maxCapacity = srv.minCapacity * uint64(srv.config.LightPeers) - if totalRecharge > srv.maxCapacity { - srv.maxCapacity = totalRecharge - } - srv.fcManager.SetCapacityLimits(srv.minCapacity, srv.maxCapacity, srv.minCapacity*2) - srv.clientPool = vfs.NewClientPool(lesDb, srv.minCapacity, defaultConnectedBias, mclock.System{}, issync) - srv.clientPool.Start() - srv.clientPool.SetDefaultFactors(defaultPosFactors, defaultNegFactors) - srv.vfluxServer.Register(srv.clientPool, "les", "Ethereum light client service") - srv.chtIndexer.Start(e.BlockChain()) - - node.RegisterProtocols(srv.Protocols()) - node.RegisterAPIs(srv.APIs()) - node.RegisterLifecycle(srv) - return srv, nil -} - -func (s *LesServer) APIs() []rpc.API { - return []rpc.API{ - { - Namespace: "les", - Service: NewLightServerAPI(s), - }, - { - Namespace: "debug", - Service: NewDebugAPI(s), - }, - } -} - -func (s *LesServer) Protocols() []p2p.Protocol { - ps := s.makeProtocols(ServerProtocolVersions, s.handler.runPeer, func(id enode.ID) interface{} { - if p := s.peers.peer(id); p != nil { - return p.Info() - } - return nil - }, nil) - // Add "les" ENR entries. - for i := range ps { - ps[i].Attributes = []enr.Entry{&lesEntry{ - VfxVersion: 1, - }} - } - return ps -} - -// Start starts the LES server -func (s *LesServer) Start() error { - s.privateKey = s.p2pSrv.PrivateKey - s.peers.setSignerKey(s.privateKey) - s.handler.start() - s.wg.Add(1) - go s.capacityManagement() - if s.p2pSrv.DiscV5 != nil { - s.p2pSrv.DiscV5.RegisterTalkHandler("vfx", s.vfluxServer.ServeEncoded) - } - return nil -} - -// Stop stops the LES service -func (s *LesServer) Stop() error { - close(s.closeCh) - - s.clientPool.Stop() - if s.serverset != nil { - s.serverset.close() - } - s.peers.close() - s.fcManager.Stop() - s.costTracker.stop() - s.handler.stop() - s.servingQueue.stop() - if s.vfluxServer != nil { - s.vfluxServer.Stop() - } - - // Note, bloom trie indexer is closed by parent bloombits indexer. - if s.chtIndexer != nil { - s.chtIndexer.Close() - } - if s.lesDb != nil { - s.lesDb.Close() - } - s.wg.Wait() - log.Info("Les server stopped") - - return nil -} - -// capacityManagement starts an event handler loop that updates the recharge curve of -// the client manager and adjusts the client pool's size according to the total -// capacity updates coming from the client manager -func (s *LesServer) capacityManagement() { - defer s.wg.Done() - - processCh := make(chan bool, 100) - sub := s.handler.blockchain.SubscribeBlockProcessingEvent(processCh) - defer sub.Unsubscribe() - - totalRechargeCh := make(chan uint64, 100) - totalRecharge := s.costTracker.subscribeTotalRecharge(totalRechargeCh) - - totalCapacityCh := make(chan uint64, 100) - totalCapacity := s.fcManager.SubscribeTotalCapacity(totalCapacityCh) - s.clientPool.SetLimits(uint64(s.config.LightPeers), totalCapacity) - - var ( - busy bool - freePeers uint64 - blockProcess mclock.AbsTime - ) - updateRecharge := func() { - if busy { - s.servingQueue.setThreads(s.threadsBusy) - s.fcManager.SetRechargeCurve(flowcontrol.PieceWiseLinear{{0, 0}, {totalRecharge, totalRecharge}}) - } else { - s.servingQueue.setThreads(s.threadsIdle) - s.fcManager.SetRechargeCurve(flowcontrol.PieceWiseLinear{{0, 0}, {totalRecharge / 10, totalRecharge}, {totalRecharge, totalRecharge}}) - } - } - updateRecharge() - - for { - select { - case busy = <-processCh: - if busy { - blockProcess = mclock.Now() - } else { - blockProcessingTimer.Update(time.Duration(mclock.Now() - blockProcess)) - } - updateRecharge() - case totalRecharge = <-totalRechargeCh: - totalRechargeGauge.Update(int64(totalRecharge)) - updateRecharge() - case totalCapacity = <-totalCapacityCh: - totalCapacityGauge.Update(int64(totalCapacity)) - newFreePeers := totalCapacity / s.minCapacity - if newFreePeers < freePeers && newFreePeers < uint64(s.config.LightPeers) { - log.Warn("Reduced free peer connections", "from", freePeers, "to", newFreePeers) - } - freePeers = newFreePeers - s.clientPool.SetLimits(uint64(s.config.LightPeers), totalCapacity) - case <-s.closeCh: - return - } - } -} diff --git a/les/server_handler.go b/les/server_handler.go deleted file mode 100644 index 5b3505064b..0000000000 --- a/les/server_handler.go +++ /dev/null @@ -1,436 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "errors" - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/forkid" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/les/flowcontrol" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/trie" -) - -const ( - softResponseLimit = 2 * 1024 * 1024 // Target maximum size of returned blocks, headers or node data. - estHeaderRlpSize = 500 // Approximate size of an RLP encoded block header - - MaxHeaderFetch = 192 // Amount of block headers to be fetched per retrieval request - MaxBodyFetch = 32 // Amount of block bodies to be fetched per retrieval request - MaxReceiptFetch = 128 // Amount of transaction receipts to allow fetching per request - MaxCodeFetch = 64 // Amount of contract codes to allow fetching per request - MaxProofsFetch = 64 // Amount of merkle proofs to be fetched per retrieval request - MaxHelperTrieProofsFetch = 64 // Amount of helper tries to be fetched per retrieval request - MaxTxSend = 64 // Amount of transactions to be send per request - MaxTxStatus = 256 // Amount of transactions to queried per request -) - -var ( - errTooManyInvalidRequest = errors.New("too many invalid requests made") -) - -// serverHandler is responsible for serving light client and process -// all incoming light requests. -type serverHandler struct { - forkFilter forkid.Filter - blockchain *core.BlockChain - chainDb ethdb.Database - txpool *txpool.TxPool - server *LesServer - - closeCh chan struct{} // Channel used to exit all background routines of handler. - wg sync.WaitGroup // WaitGroup used to track all background routines of handler. - synced func() bool // Callback function used to determine whether local node is synced. - - // Testing fields - addTxsSync bool -} - -func newServerHandler(server *LesServer, blockchain *core.BlockChain, chainDb ethdb.Database, txpool *txpool.TxPool, synced func() bool) *serverHandler { - handler := &serverHandler{ - forkFilter: forkid.NewFilter(blockchain), - server: server, - blockchain: blockchain, - chainDb: chainDb, - txpool: txpool, - closeCh: make(chan struct{}), - synced: synced, - } - return handler -} - -// start starts the server handler. -func (h *serverHandler) start() { - h.wg.Add(1) - go h.broadcastLoop() -} - -// stop stops the server handler. -func (h *serverHandler) stop() { - close(h.closeCh) - h.wg.Wait() -} - -// runPeer is the p2p protocol run function for the given version. -func (h *serverHandler) runPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) error { - peer := newClientPeer(int(version), h.server.config.NetworkId, p, newMeteredMsgWriter(rw, int(version))) - defer peer.close() - h.wg.Add(1) - defer h.wg.Done() - return h.handle(peer) -} - -func (h *serverHandler) handle(p *clientPeer) error { - p.Log().Debug("Light Ethereum peer connected", "name", p.Name()) - - // Execute the LES handshake - var ( - head = h.blockchain.CurrentHeader() - hash = head.Hash() - number = head.Number.Uint64() - td = h.blockchain.GetTd(hash, number) - forkID = forkid.NewID(h.blockchain.Config(), h.blockchain.Genesis(), number, head.Time) - ) - if err := p.Handshake(td, hash, number, h.blockchain.Genesis().Hash(), forkID, h.forkFilter, h.server); err != nil { - p.Log().Debug("Light Ethereum handshake failed", "err", err) - return err - } - // Connected to another server, no messages expected, just wait for disconnection - if p.server { - if err := h.server.serverset.register(p); err != nil { - return err - } - _, err := p.rw.ReadMsg() - h.server.serverset.unregister(p) - return err - } - // Setup flow control mechanism for the peer - p.fcClient = flowcontrol.NewClientNode(h.server.fcManager, p.fcParams) - defer p.fcClient.Disconnect() - - // Reject light clients if server is not synced. Put this checking here, so - // that "non-synced" les-server peers are still allowed to keep the connection. - if !h.synced() { - p.Log().Debug("Light server not synced, rejecting peer") - return p2p.DiscRequested - } - - // Register the peer into the peerset and clientpool - if err := h.server.peers.register(p); err != nil { - return err - } - if p.balance = h.server.clientPool.Register(p); p.balance == nil { - h.server.peers.unregister(p.ID()) - p.Log().Debug("Client pool already closed") - return p2p.DiscRequested - } - p.connectedAt = mclock.Now() - - var wg sync.WaitGroup // Wait group used to track all in-flight task routines. - defer func() { - wg.Wait() // Ensure all background task routines have exited. - h.server.clientPool.Unregister(p) - h.server.peers.unregister(p.ID()) - p.balance = nil - connectionTimer.Update(time.Duration(mclock.Now() - p.connectedAt)) - }() - - // Mark the peer as being served. - p.serving.Store(true) - defer p.serving.Store(false) - - // Spawn a main loop to handle all incoming messages. - for { - select { - case err := <-p.errCh: - p.Log().Debug("Failed to send light ethereum response", "err", err) - return err - default: - } - if err := h.handleMsg(p, &wg); err != nil { - p.Log().Debug("Light Ethereum message handling failed", "err", err) - return err - } - } -} - -// beforeHandle will do a series of prechecks before handling message. -func (h *serverHandler) beforeHandle(p *clientPeer, reqID, responseCount uint64, msg p2p.Msg, reqCnt uint64, maxCount uint64) (*servingTask, uint64) { - // Ensure that the request sent by client peer is valid - inSizeCost := h.server.costTracker.realCost(0, msg.Size, 0) - if reqCnt == 0 || reqCnt > maxCount { - p.fcClient.OneTimeCost(inSizeCost) - return nil, 0 - } - // Ensure that the client peer complies with the flow control - // rules agreed by both sides. - if p.isFrozen() { - p.fcClient.OneTimeCost(inSizeCost) - return nil, 0 - } - maxCost := p.fcCosts.getMaxCost(msg.Code, reqCnt) - accepted, bufShort, priority := p.fcClient.AcceptRequest(reqID, responseCount, maxCost) - if !accepted { - p.freeze() - p.Log().Error("Request came too early", "remaining", common.PrettyDuration(time.Duration(bufShort*1000000/p.fcParams.MinRecharge))) - p.fcClient.OneTimeCost(inSizeCost) - return nil, 0 - } - // Create a multi-stage task, estimate the time it takes for the task to - // execute, and cache it in the request service queue. - factor := h.server.costTracker.globalFactor() - if factor < 0.001 { - factor = 1 - p.Log().Error("Invalid global cost factor", "factor", factor) - } - maxTime := uint64(float64(maxCost) / factor) - task := h.server.servingQueue.newTask(p, maxTime, priority) - if !task.start() { - p.fcClient.RequestProcessed(reqID, responseCount, maxCost, inSizeCost) - return nil, 0 - } - return task, maxCost -} - -// Afterhandle will perform a series of operations after message handling, -// such as updating flow control data, sending reply, etc. -func (h *serverHandler) afterHandle(p *clientPeer, reqID, responseCount uint64, msg p2p.Msg, maxCost uint64, reqCnt uint64, task *servingTask, reply *reply) { - if reply != nil { - task.done() - } - p.responseLock.Lock() - defer p.responseLock.Unlock() - - // Short circuit if the client is already frozen. - if p.isFrozen() { - realCost := h.server.costTracker.realCost(task.servingTime, msg.Size, 0) - p.fcClient.RequestProcessed(reqID, responseCount, maxCost, realCost) - return - } - // Positive correction buffer value with real cost. - var replySize uint32 - if reply != nil { - replySize = reply.size() - } - var realCost uint64 - if h.server.costTracker.testing { - realCost = maxCost // Assign a fake cost for testing purpose - } else { - realCost = h.server.costTracker.realCost(task.servingTime, msg.Size, replySize) - if realCost > maxCost { - realCost = maxCost - } - } - bv := p.fcClient.RequestProcessed(reqID, responseCount, maxCost, realCost) - if reply != nil { - // Feed cost tracker request serving statistic. - h.server.costTracker.updateStats(msg.Code, reqCnt, task.servingTime, realCost) - // Reduce priority "balance" for the specific peer. - p.balance.RequestServed(realCost) - p.queueSend(func() { - if err := reply.send(bv); err != nil { - select { - case p.errCh <- err: - default: - } - } - }) - } -} - -// handleMsg is invoked whenever an inbound message is received from a remote -// peer. The remote connection is torn down upon returning any error. -func (h *serverHandler) handleMsg(p *clientPeer, wg *sync.WaitGroup) error { - // Read the next message from the remote peer, and ensure it's fully consumed - msg, err := p.rw.ReadMsg() - if err != nil { - return err - } - p.Log().Trace("Light Ethereum message arrived", "code", msg.Code, "bytes", msg.Size) - - // Discard large message which exceeds the limitation. - if msg.Size > ProtocolMaxMsgSize { - clientErrorMeter.Mark(1) - return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) - } - defer msg.Discard() - - // Lookup the request handler table, ensure it's supported - // message type by the protocol. - req, ok := Les3[msg.Code] - if !ok { - p.Log().Trace("Received invalid message", "code", msg.Code) - clientErrorMeter.Mark(1) - return errResp(ErrInvalidMsgCode, "%v", msg.Code) - } - p.Log().Trace("Received " + req.Name) - - // Decode the p2p message, resolve the concrete handler for it. - serve, reqID, reqCnt, err := req.Handle(msg) - if err != nil { - clientErrorMeter.Mark(1) - return errResp(ErrDecode, "%v: %v", msg, err) - } - if metrics.EnabledExpensive { - req.InPacketsMeter.Mark(1) - req.InTrafficMeter.Mark(int64(msg.Size)) - } - p.responseCount++ - responseCount := p.responseCount - - // First check this client message complies all rules before - // handling it and return a processor if all checks are passed. - task, maxCost := h.beforeHandle(p, reqID, responseCount, msg, reqCnt, req.MaxCount) - if task == nil { - return nil - } - wg.Add(1) - go func() { - defer wg.Done() - - reply := serve(h, p, task.waitOrStop) - h.afterHandle(p, reqID, responseCount, msg, maxCost, reqCnt, task, reply) - - if metrics.EnabledExpensive { - size := uint32(0) - if reply != nil { - size = reply.size() - } - req.OutPacketsMeter.Mark(1) - req.OutTrafficMeter.Mark(int64(size)) - req.ServingTimeMeter.Update(time.Duration(task.servingTime)) - } - }() - // If the client has made too much invalid request(e.g. request a non-existent data), - // reject them to prevent SPAM attack. - if p.getInvalid() > maxRequestErrors { - clientErrorMeter.Mark(1) - return errTooManyInvalidRequest - } - return nil -} - -// BlockChain implements serverBackend -func (h *serverHandler) BlockChain() *core.BlockChain { - return h.blockchain -} - -// TxPool implements serverBackend -func (h *serverHandler) TxPool() *txpool.TxPool { - return h.txpool -} - -// ArchiveMode implements serverBackend -func (h *serverHandler) ArchiveMode() bool { - return h.server.archiveMode -} - -// AddTxsSync implements serverBackend -func (h *serverHandler) AddTxsSync() bool { - return h.addTxsSync -} - -// getAccount retrieves an account from the state based on root. -func getAccount(triedb *trie.Database, root common.Hash, addr common.Address) (types.StateAccount, error) { - trie, err := trie.NewStateTrie(trie.StateTrieID(root), triedb) - if err != nil { - return types.StateAccount{}, err - } - acc, err := trie.GetAccount(addr) - if err != nil { - return types.StateAccount{}, err - } - if acc == nil { - return types.StateAccount{}, fmt.Errorf("account %#x is not present", addr) - } - return *acc, nil -} - -// GetHelperTrie returns the post-processed trie root for the given trie ID and section index -func (h *serverHandler) GetHelperTrie(typ uint, index uint64) *trie.Trie { - var ( - root common.Hash - prefix string - ) - switch typ { - case htCanonical: - sectionHead := rawdb.ReadCanonicalHash(h.chainDb, (index+1)*h.server.iConfig.ChtSize-1) - root, prefix = light.GetChtRoot(h.chainDb, index, sectionHead), string(rawdb.ChtTablePrefix) - case htBloomBits: - sectionHead := rawdb.ReadCanonicalHash(h.chainDb, (index+1)*h.server.iConfig.BloomTrieSize-1) - root, prefix = light.GetBloomTrieRoot(h.chainDb, index, sectionHead), string(rawdb.BloomTrieTablePrefix) - } - if root == (common.Hash{}) { - return nil - } - triedb := trie.NewDatabase(rawdb.NewTable(h.chainDb, prefix), trie.HashDefaults) - trie, _ := trie.New(trie.TrieID(root), triedb) - return trie -} - -// broadcastLoop broadcasts new block information to all connected light -// clients. According to the agreement between client and server, server should -// only broadcast new announcement if the total difficulty is higher than the -// last one. Besides server will add the signature if client requires. -func (h *serverHandler) broadcastLoop() { - defer h.wg.Done() - - headCh := make(chan core.ChainHeadEvent, 10) - headSub := h.blockchain.SubscribeChainHeadEvent(headCh) - defer headSub.Unsubscribe() - - var ( - lastHead = h.blockchain.CurrentHeader() - lastTd = common.Big0 - ) - for { - select { - case ev := <-headCh: - header := ev.Block.Header() - hash, number := header.Hash(), header.Number.Uint64() - td := h.blockchain.GetTd(hash, number) - if td == nil || td.Cmp(lastTd) <= 0 { - continue - } - var reorg uint64 - if lastHead != nil { - // If a setHead has been performed, the common ancestor can be nil. - if ancestor := rawdb.FindCommonAncestor(h.chainDb, header, lastHead); ancestor != nil { - reorg = lastHead.Number.Uint64() - ancestor.Number.Uint64() - } - } - lastHead, lastTd = header, td - log.Debug("Announcing block to peers", "number", number, "hash", hash, "td", td, "reorg", reorg) - h.server.peers.broadcast(announceData{Hash: hash, Number: number, Td: td, ReorgDepth: reorg}) - case <-h.closeCh: - return - } - } -} diff --git a/les/server_requests.go b/les/server_requests.go deleted file mode 100644 index 9a249f04c9..0000000000 --- a/les/server_requests.go +++ /dev/null @@ -1,566 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "encoding/binary" - "encoding/json" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -// serverBackend defines the backend functions needed for serving LES requests -type serverBackend interface { - ArchiveMode() bool - AddTxsSync() bool - BlockChain() *core.BlockChain - TxPool() *txpool.TxPool - GetHelperTrie(typ uint, index uint64) *trie.Trie -} - -// Decoder is implemented by the messages passed to the handler functions -type Decoder interface { - Decode(val interface{}) error -} - -// RequestType is a static struct that describes an LES request type and references -// its handler function. -type RequestType struct { - Name string - MaxCount uint64 - InPacketsMeter, InTrafficMeter, OutPacketsMeter, OutTrafficMeter metrics.Meter - ServingTimeMeter metrics.Timer - Handle func(msg Decoder) (serve serveRequestFn, reqID, amount uint64, err error) -} - -// serveRequestFn is returned by the request handler functions after decoding the request. -// This function does the actual request serving using the supplied backend. waitOrStop is -// called between serving individual request items and may block if the serving process -// needs to be throttled. If it returns false then the process is terminated. -// The reply is not sent by this function yet. The flow control feedback value is supplied -// by the protocol handler when calling the send function of the returned reply struct. -type serveRequestFn func(backend serverBackend, peer *clientPeer, waitOrStop func() bool) *reply - -// Les3 contains the request types supported by les/2 and les/3 -var Les3 = map[uint64]RequestType{ - GetBlockHeadersMsg: { - Name: "block header request", - MaxCount: MaxHeaderFetch, - InPacketsMeter: miscInHeaderPacketsMeter, - InTrafficMeter: miscInHeaderTrafficMeter, - OutPacketsMeter: miscOutHeaderPacketsMeter, - OutTrafficMeter: miscOutHeaderTrafficMeter, - ServingTimeMeter: miscServingTimeHeaderTimer, - Handle: handleGetBlockHeaders, - }, - GetBlockBodiesMsg: { - Name: "block bodies request", - MaxCount: MaxBodyFetch, - InPacketsMeter: miscInBodyPacketsMeter, - InTrafficMeter: miscInBodyTrafficMeter, - OutPacketsMeter: miscOutBodyPacketsMeter, - OutTrafficMeter: miscOutBodyTrafficMeter, - ServingTimeMeter: miscServingTimeBodyTimer, - Handle: handleGetBlockBodies, - }, - GetCodeMsg: { - Name: "code request", - MaxCount: MaxCodeFetch, - InPacketsMeter: miscInCodePacketsMeter, - InTrafficMeter: miscInCodeTrafficMeter, - OutPacketsMeter: miscOutCodePacketsMeter, - OutTrafficMeter: miscOutCodeTrafficMeter, - ServingTimeMeter: miscServingTimeCodeTimer, - Handle: handleGetCode, - }, - GetReceiptsMsg: { - Name: "receipts request", - MaxCount: MaxReceiptFetch, - InPacketsMeter: miscInReceiptPacketsMeter, - InTrafficMeter: miscInReceiptTrafficMeter, - OutPacketsMeter: miscOutReceiptPacketsMeter, - OutTrafficMeter: miscOutReceiptTrafficMeter, - ServingTimeMeter: miscServingTimeReceiptTimer, - Handle: handleGetReceipts, - }, - GetProofsV2Msg: { - Name: "les/2 proofs request", - MaxCount: MaxProofsFetch, - InPacketsMeter: miscInTrieProofPacketsMeter, - InTrafficMeter: miscInTrieProofTrafficMeter, - OutPacketsMeter: miscOutTrieProofPacketsMeter, - OutTrafficMeter: miscOutTrieProofTrafficMeter, - ServingTimeMeter: miscServingTimeTrieProofTimer, - Handle: handleGetProofs, - }, - GetHelperTrieProofsMsg: { - Name: "helper trie proof request", - MaxCount: MaxHelperTrieProofsFetch, - InPacketsMeter: miscInHelperTriePacketsMeter, - InTrafficMeter: miscInHelperTrieTrafficMeter, - OutPacketsMeter: miscOutHelperTriePacketsMeter, - OutTrafficMeter: miscOutHelperTrieTrafficMeter, - ServingTimeMeter: miscServingTimeHelperTrieTimer, - Handle: handleGetHelperTrieProofs, - }, - SendTxV2Msg: { - Name: "new transactions", - MaxCount: MaxTxSend, - InPacketsMeter: miscInTxsPacketsMeter, - InTrafficMeter: miscInTxsTrafficMeter, - OutPacketsMeter: miscOutTxsPacketsMeter, - OutTrafficMeter: miscOutTxsTrafficMeter, - ServingTimeMeter: miscServingTimeTxTimer, - Handle: handleSendTx, - }, - GetTxStatusMsg: { - Name: "transaction status query request", - MaxCount: MaxTxStatus, - InPacketsMeter: miscInTxStatusPacketsMeter, - InTrafficMeter: miscInTxStatusTrafficMeter, - OutPacketsMeter: miscOutTxStatusPacketsMeter, - OutTrafficMeter: miscOutTxStatusTrafficMeter, - ServingTimeMeter: miscServingTimeTxStatusTimer, - Handle: handleGetTxStatus, - }, -} - -// handleGetBlockHeaders handles a block header request -func handleGetBlockHeaders(msg Decoder) (serveRequestFn, uint64, uint64, error) { - var r GetBlockHeadersPacket - if err := msg.Decode(&r); err != nil { - return nil, 0, 0, err - } - return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { - // Gather headers until the fetch or network limits is reached - var ( - bc = backend.BlockChain() - hashMode = r.Query.Origin.Hash != (common.Hash{}) - first = true - maxNonCanonical = uint64(100) - bytes common.StorageSize - headers []*types.Header - unknown bool - ) - for !unknown && len(headers) < int(r.Query.Amount) && bytes < softResponseLimit { - if !first && !waitOrStop() { - return nil - } - // Retrieve the next header satisfying the r - var origin *types.Header - if hashMode { - if first { - origin = bc.GetHeaderByHash(r.Query.Origin.Hash) - if origin != nil { - r.Query.Origin.Number = origin.Number.Uint64() - } - } else { - origin = bc.GetHeader(r.Query.Origin.Hash, r.Query.Origin.Number) - } - } else { - origin = bc.GetHeaderByNumber(r.Query.Origin.Number) - } - if origin == nil { - break - } - headers = append(headers, origin) - bytes += estHeaderRlpSize - - // Advance to the next header of the r - switch { - case hashMode && r.Query.Reverse: - // Hash based traversal towards the genesis block - ancestor := r.Query.Skip + 1 - if ancestor == 0 { - unknown = true - } else { - r.Query.Origin.Hash, r.Query.Origin.Number = bc.GetAncestor(r.Query.Origin.Hash, r.Query.Origin.Number, ancestor, &maxNonCanonical) - unknown = r.Query.Origin.Hash == common.Hash{} - } - case hashMode && !r.Query.Reverse: - // Hash based traversal towards the leaf block - var ( - current = origin.Number.Uint64() - next = current + r.Query.Skip + 1 - ) - if next <= current { - infos, _ := json.Marshal(p.Peer.Info()) - p.Log().Warn("GetBlockHeaders skip overflow attack", "current", current, "skip", r.Query.Skip, "next", next, "attacker", string(infos)) - unknown = true - } else { - if header := bc.GetHeaderByNumber(next); header != nil { - nextHash := header.Hash() - expOldHash, _ := bc.GetAncestor(nextHash, next, r.Query.Skip+1, &maxNonCanonical) - if expOldHash == r.Query.Origin.Hash { - r.Query.Origin.Hash, r.Query.Origin.Number = nextHash, next - } else { - unknown = true - } - } else { - unknown = true - } - } - case r.Query.Reverse: - // Number based traversal towards the genesis block - if r.Query.Origin.Number >= r.Query.Skip+1 { - r.Query.Origin.Number -= r.Query.Skip + 1 - } else { - unknown = true - } - - case !r.Query.Reverse: - // Number based traversal towards the leaf block - r.Query.Origin.Number += r.Query.Skip + 1 - } - first = false - } - return p.replyBlockHeaders(r.ReqID, headers) - }, r.ReqID, r.Query.Amount, nil -} - -// handleGetBlockBodies handles a block body request -func handleGetBlockBodies(msg Decoder) (serveRequestFn, uint64, uint64, error) { - var r GetBlockBodiesPacket - if err := msg.Decode(&r); err != nil { - return nil, 0, 0, err - } - return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { - var ( - bytes int - bodies []rlp.RawValue - ) - bc := backend.BlockChain() - for i, hash := range r.Hashes { - if i != 0 && !waitOrStop() { - return nil - } - if bytes >= softResponseLimit { - break - } - body := bc.GetBodyRLP(hash) - if body == nil { - p.bumpInvalid() - continue - } - bodies = append(bodies, body) - bytes += len(body) - } - return p.replyBlockBodiesRLP(r.ReqID, bodies) - }, r.ReqID, uint64(len(r.Hashes)), nil -} - -// handleGetCode handles a contract code request -func handleGetCode(msg Decoder) (serveRequestFn, uint64, uint64, error) { - var r GetCodePacket - if err := msg.Decode(&r); err != nil { - return nil, 0, 0, err - } - return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { - var ( - bytes int - data [][]byte - ) - bc := backend.BlockChain() - for i, request := range r.Reqs { - if i != 0 && !waitOrStop() { - return nil - } - // Look up the root hash belonging to the request - header := bc.GetHeaderByHash(request.BHash) - if header == nil { - p.Log().Warn("Failed to retrieve associate header for code", "hash", request.BHash) - p.bumpInvalid() - continue - } - // Refuse to search stale state data in the database since looking for - // a non-exist key is kind of expensive. - local := bc.CurrentHeader().Number.Uint64() - if !backend.ArchiveMode() && header.Number.Uint64()+core.TriesInMemory <= local { - p.Log().Debug("Reject stale code request", "number", header.Number.Uint64(), "head", local) - p.bumpInvalid() - continue - } - address := common.BytesToAddress(request.AccountAddress) - account, err := getAccount(bc.TrieDB(), header.Root, address) - if err != nil { - p.Log().Warn("Failed to retrieve account for code", "block", header.Number, "hash", header.Hash(), "account", address, "err", err) - p.bumpInvalid() - continue - } - code, err := bc.StateCache().ContractCode(address, common.BytesToHash(account.CodeHash)) - if err != nil { - p.Log().Warn("Failed to retrieve account code", "block", header.Number, "hash", header.Hash(), "account", address, "codehash", common.BytesToHash(account.CodeHash), "err", err) - continue - } - // Accumulate the code and abort if enough data was retrieved - data = append(data, code) - if bytes += len(code); bytes >= softResponseLimit { - break - } - } - return p.replyCode(r.ReqID, data) - }, r.ReqID, uint64(len(r.Reqs)), nil -} - -// handleGetReceipts handles a block receipts request -func handleGetReceipts(msg Decoder) (serveRequestFn, uint64, uint64, error) { - var r GetReceiptsPacket - if err := msg.Decode(&r); err != nil { - return nil, 0, 0, err - } - return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { - var ( - bytes int - receipts []rlp.RawValue - ) - bc := backend.BlockChain() - for i, hash := range r.Hashes { - if i != 0 && !waitOrStop() { - return nil - } - if bytes >= softResponseLimit { - break - } - // Retrieve the requested block's receipts, skipping if unknown to us - results := bc.GetReceiptsByHash(hash) - if results == nil { - if header := bc.GetHeaderByHash(hash); header == nil || header.ReceiptHash != types.EmptyReceiptsHash { - p.bumpInvalid() - continue - } - } - // If known, encode and queue for response packet - if encoded, err := rlp.EncodeToBytes(results); err != nil { - log.Error("Failed to encode receipt", "err", err) - } else { - receipts = append(receipts, encoded) - bytes += len(encoded) - } - } - return p.replyReceiptsRLP(r.ReqID, receipts) - }, r.ReqID, uint64(len(r.Hashes)), nil -} - -// handleGetProofs handles a proof request -func handleGetProofs(msg Decoder) (serveRequestFn, uint64, uint64, error) { - var r GetProofsPacket - if err := msg.Decode(&r); err != nil { - return nil, 0, 0, err - } - return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { - var ( - lastBHash common.Hash - root common.Hash - header *types.Header - err error - ) - bc := backend.BlockChain() - nodes := trienode.NewProofSet() - - for i, request := range r.Reqs { - if i != 0 && !waitOrStop() { - return nil - } - // Look up the root hash belonging to the request - if request.BHash != lastBHash { - root, lastBHash = common.Hash{}, request.BHash - - if header = bc.GetHeaderByHash(request.BHash); header == nil { - p.Log().Warn("Failed to retrieve header for proof", "hash", request.BHash) - p.bumpInvalid() - continue - } - // Refuse to search stale state data in the database since looking for - // a non-exist key is kind of expensive. - local := bc.CurrentHeader().Number.Uint64() - if !backend.ArchiveMode() && header.Number.Uint64()+core.TriesInMemory <= local { - p.Log().Debug("Reject stale trie request", "number", header.Number.Uint64(), "head", local) - p.bumpInvalid() - continue - } - root = header.Root - } - // If a header lookup failed (non existent), ignore subsequent requests for the same header - if root == (common.Hash{}) { - p.bumpInvalid() - continue - } - // Open the account or storage trie for the request - statedb := bc.StateCache() - - var trie state.Trie - switch len(request.AccountAddress) { - case 0: - // No account key specified, open an account trie - trie, err = statedb.OpenTrie(root) - if trie == nil || err != nil { - p.Log().Warn("Failed to open storage trie for proof", "block", header.Number, "hash", header.Hash(), "root", root, "err", err) - continue - } - default: - // Account key specified, open a storage trie - address := common.BytesToAddress(request.AccountAddress) - account, err := getAccount(bc.TrieDB(), root, address) - if err != nil { - p.Log().Warn("Failed to retrieve account for proof", "block", header.Number, "hash", header.Hash(), "account", address, "err", err) - p.bumpInvalid() - continue - } - trie, err = statedb.OpenStorageTrie(root, address, account.Root) - if trie == nil || err != nil { - p.Log().Warn("Failed to open storage trie for proof", "block", header.Number, "hash", header.Hash(), "account", address, "root", account.Root, "err", err) - continue - } - } - // Prove the user's request from the account or storage trie - if err := trie.Prove(request.Key, nodes); err != nil { - p.Log().Warn("Failed to prove state request", "block", header.Number, "hash", header.Hash(), "err", err) - continue - } - if nodes.DataSize() >= softResponseLimit { - break - } - } - return p.replyProofsV2(r.ReqID, nodes.List()) - }, r.ReqID, uint64(len(r.Reqs)), nil -} - -// handleGetHelperTrieProofs handles a helper trie proof request -func handleGetHelperTrieProofs(msg Decoder) (serveRequestFn, uint64, uint64, error) { - var r GetHelperTrieProofsPacket - if err := msg.Decode(&r); err != nil { - return nil, 0, 0, err - } - return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { - var ( - lastIdx uint64 - lastType uint - auxTrie *trie.Trie - auxBytes int - auxData [][]byte - ) - bc := backend.BlockChain() - nodes := trienode.NewProofSet() - for i, request := range r.Reqs { - if i != 0 && !waitOrStop() { - return nil - } - if auxTrie == nil || request.Type != lastType || request.TrieIdx != lastIdx { - lastType, lastIdx = request.Type, request.TrieIdx - auxTrie = backend.GetHelperTrie(request.Type, request.TrieIdx) - } - if auxTrie == nil { - return nil - } - // TODO(rjl493456442) short circuit if the proving is failed. - // The original client side code has a dirty hack to retrieve - // the headers with no valid proof. Keep the compatibility for - // legacy les protocol and drop this hack when the les2/3 are - // not supported. - err := auxTrie.Prove(request.Key, nodes) - if p.version >= lpv4 && err != nil { - return nil - } - if request.Type == htCanonical && request.AuxReq == htAuxHeader && len(request.Key) == 8 { - header := bc.GetHeaderByNumber(binary.BigEndian.Uint64(request.Key)) - data, err := rlp.EncodeToBytes(header) - if err != nil { - log.Error("Failed to encode header", "err", err) - return nil - } - auxData = append(auxData, data) - auxBytes += len(data) - } - if nodes.DataSize()+auxBytes >= softResponseLimit { - break - } - } - return p.replyHelperTrieProofs(r.ReqID, HelperTrieResps{Proofs: nodes.List(), AuxData: auxData}) - }, r.ReqID, uint64(len(r.Reqs)), nil -} - -// handleSendTx handles a transaction propagation request -func handleSendTx(msg Decoder) (serveRequestFn, uint64, uint64, error) { - var r SendTxPacket - if err := msg.Decode(&r); err != nil { - return nil, 0, 0, err - } - amount := uint64(len(r.Txs)) - return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { - stats := make([]light.TxStatus, len(r.Txs)) - for i, tx := range r.Txs { - if i != 0 && !waitOrStop() { - return nil - } - hash := tx.Hash() - stats[i] = txStatus(backend, hash) - if stats[i].Status == txpool.TxStatusUnknown { - if errs := backend.TxPool().Add([]*types.Transaction{tx}, false, backend.AddTxsSync()); errs[0] != nil { - stats[i].Error = errs[0].Error() - continue - } - stats[i] = txStatus(backend, hash) - } - } - return p.replyTxStatus(r.ReqID, stats) - }, r.ReqID, amount, nil -} - -// handleGetTxStatus handles a transaction status query -func handleGetTxStatus(msg Decoder) (serveRequestFn, uint64, uint64, error) { - var r GetTxStatusPacket - if err := msg.Decode(&r); err != nil { - return nil, 0, 0, err - } - return func(backend serverBackend, p *clientPeer, waitOrStop func() bool) *reply { - stats := make([]light.TxStatus, len(r.Hashes)) - for i, hash := range r.Hashes { - if i != 0 && !waitOrStop() { - return nil - } - stats[i] = txStatus(backend, hash) - } - return p.replyTxStatus(r.ReqID, stats) - }, r.ReqID, uint64(len(r.Hashes)), nil -} - -// txStatus returns the status of a specified transaction. -func txStatus(b serverBackend, hash common.Hash) light.TxStatus { - var stat light.TxStatus - // Looking the transaction in txpool first. - stat.Status = b.TxPool().Status(hash) - - // If the transaction is unknown to the pool, try looking it up locally. - if stat.Status == txpool.TxStatusUnknown { - lookup := b.BlockChain().GetTransactionLookup(hash) - if lookup != nil { - stat.Status = txpool.TxStatusIncluded - stat.Lookup = lookup - } - } - return stat -} diff --git a/les/servingqueue.go b/les/servingqueue.go deleted file mode 100644 index b258fc3caf..0000000000 --- a/les/servingqueue.go +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "sync" - "sync/atomic" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/common/prque" - "golang.org/x/exp/slices" -) - -// servingQueue allows running tasks in a limited number of threads and puts the -// waiting tasks in a priority queue -type servingQueue struct { - recentTime, queuedTime uint64 - servingTimeDiff atomic.Uint64 - burstLimit, burstDropLimit uint64 - burstDecRate float64 - lastUpdate mclock.AbsTime - - queueAddCh, queueBestCh chan *servingTask - stopThreadCh, quit chan struct{} - setThreadsCh chan int - - wg sync.WaitGroup - threadCount int // number of currently running threads - queue *prque.Prque[int64, *servingTask] // priority queue for waiting or suspended tasks - best *servingTask // the highest priority task (not included in the queue) - suspendBias int64 // priority bias against suspending an already running task -} - -// servingTask represents a request serving task. Tasks can be implemented to -// run in multiple steps, allowing the serving queue to suspend execution between -// steps if higher priority tasks are entered. The creator of the task should -// set the following fields: -// -// - priority: greater value means higher priority; values can wrap around the int64 range -// - run: execute a single step; return true if finished -// - after: executed after run finishes or returns an error, receives the total serving time -type servingTask struct { - sq *servingQueue - servingTime, timeAdded, maxTime, expTime uint64 - peer *clientPeer - priority int64 - biasAdded bool - token runToken - tokenCh chan runToken -} - -// runToken received by servingTask.start allows the task to run. Closing the -// channel by servingTask.stop signals the thread controller to allow a new task -// to start running. -type runToken chan struct{} - -// start blocks until the task can start and returns true if it is allowed to run. -// Returning false means that the task should be cancelled. -func (t *servingTask) start() bool { - if t.peer.isFrozen() { - return false - } - t.tokenCh = make(chan runToken, 1) - select { - case t.sq.queueAddCh <- t: - case <-t.sq.quit: - return false - } - select { - case t.token = <-t.tokenCh: - case <-t.sq.quit: - return false - } - if t.token == nil { - return false - } - t.servingTime -= uint64(mclock.Now()) - return true -} - -// done signals the thread controller about the task being finished and returns -// the total serving time of the task in nanoseconds. -func (t *servingTask) done() uint64 { - t.servingTime += uint64(mclock.Now()) - close(t.token) - diff := t.servingTime - t.timeAdded - t.timeAdded = t.servingTime - if t.expTime > diff { - t.expTime -= diff - t.sq.servingTimeDiff.Add(t.expTime) - } else { - t.expTime = 0 - } - return t.servingTime -} - -// waitOrStop can be called during the execution of the task. It blocks if there -// is a higher priority task waiting (a bias is applied in favor of the currently -// running task). Returning true means that the execution can be resumed. False -// means the task should be cancelled. -func (t *servingTask) waitOrStop() bool { - t.done() - if !t.biasAdded { - t.priority += t.sq.suspendBias - t.biasAdded = true - } - return t.start() -} - -// newServingQueue returns a new servingQueue -func newServingQueue(suspendBias int64, utilTarget float64) *servingQueue { - sq := &servingQueue{ - queue: prque.New[int64, *servingTask](nil), - suspendBias: suspendBias, - queueAddCh: make(chan *servingTask, 100), - queueBestCh: make(chan *servingTask), - stopThreadCh: make(chan struct{}), - quit: make(chan struct{}), - setThreadsCh: make(chan int, 10), - burstLimit: uint64(utilTarget * bufLimitRatio * 1200000), - burstDropLimit: uint64(utilTarget * bufLimitRatio * 1000000), - burstDecRate: utilTarget, - lastUpdate: mclock.Now(), - } - sq.wg.Add(2) - go sq.queueLoop() - go sq.threadCountLoop() - return sq -} - -// newTask creates a new task with the given priority -func (sq *servingQueue) newTask(peer *clientPeer, maxTime uint64, priority int64) *servingTask { - return &servingTask{ - sq: sq, - peer: peer, - maxTime: maxTime, - expTime: maxTime, - priority: priority, - } -} - -// threadController is started in multiple goroutines and controls the execution -// of tasks. The number of active thread controllers equals the allowed number of -// concurrently running threads. It tries to fetch the highest priority queued -// task first. If there are no queued tasks waiting then it can directly catch -// run tokens from the token channel and allow the corresponding tasks to run -// without entering the priority queue. -func (sq *servingQueue) threadController() { - defer sq.wg.Done() - for { - token := make(runToken) - select { - case best := <-sq.queueBestCh: - best.tokenCh <- token - case <-sq.stopThreadCh: - return - case <-sq.quit: - return - } - select { - case <-sq.stopThreadCh: - return - case <-sq.quit: - return - case <-token: - } - } -} - -// peerTasks lists the tasks received from a given peer when selecting peers to freeze -type peerTasks struct { - peer *clientPeer - list []*servingTask - sumTime uint64 - priority float64 -} - -// freezePeers selects the peers with the worst priority queued tasks and freezes -// them until burstTime goes under burstDropLimit or all peers are frozen -func (sq *servingQueue) freezePeers() { - peerMap := make(map[*clientPeer]*peerTasks) - var peerList []*peerTasks - if sq.best != nil { - sq.queue.Push(sq.best, sq.best.priority) - } - sq.best = nil - for sq.queue.Size() > 0 { - task := sq.queue.PopItem() - tasks := peerMap[task.peer] - if tasks == nil { - bufValue, bufLimit := task.peer.fcClient.BufferStatus() - if bufLimit < 1 { - bufLimit = 1 - } - tasks = &peerTasks{ - peer: task.peer, - priority: float64(bufValue) / float64(bufLimit), // lower value comes first - } - peerMap[task.peer] = tasks - peerList = append(peerList, tasks) - } - tasks.list = append(tasks.list, task) - tasks.sumTime += task.expTime - } - slices.SortFunc(peerList, func(a, b *peerTasks) int { - if a.priority < b.priority { - return -1 - } - if a.priority > b.priority { - return 1 - } - return 0 - }) - drop := true - for _, tasks := range peerList { - if drop { - tasks.peer.freeze() - tasks.peer.fcClient.Freeze() - sq.queuedTime -= tasks.sumTime - sqQueuedGauge.Update(int64(sq.queuedTime)) - clientFreezeMeter.Mark(1) - drop = sq.recentTime+sq.queuedTime > sq.burstDropLimit - for _, task := range tasks.list { - task.tokenCh <- nil - } - } else { - for _, task := range tasks.list { - sq.queue.Push(task, task.priority) - } - } - } - if sq.queue.Size() > 0 { - sq.best = sq.queue.PopItem() - } -} - -// updateRecentTime recalculates the recent serving time value -func (sq *servingQueue) updateRecentTime() { - subTime := sq.servingTimeDiff.Swap(0) - now := mclock.Now() - dt := now - sq.lastUpdate - sq.lastUpdate = now - if dt > 0 { - subTime += uint64(float64(dt) * sq.burstDecRate) - } - if sq.recentTime > subTime { - sq.recentTime -= subTime - } else { - sq.recentTime = 0 - } -} - -// addTask inserts a task into the priority queue -func (sq *servingQueue) addTask(task *servingTask) { - if sq.best == nil { - sq.best = task - } else if task.priority-sq.best.priority > 0 { - sq.queue.Push(sq.best, sq.best.priority) - sq.best = task - } else { - sq.queue.Push(task, task.priority) - } - sq.updateRecentTime() - sq.queuedTime += task.expTime - sqServedGauge.Update(int64(sq.recentTime)) - sqQueuedGauge.Update(int64(sq.queuedTime)) - if sq.recentTime+sq.queuedTime > sq.burstLimit { - sq.freezePeers() - } -} - -// queueLoop is an event loop running in a goroutine. It receives tasks from queueAddCh -// and always tries to send the highest priority task to queueBestCh. Successfully sent -// tasks are removed from the queue. -func (sq *servingQueue) queueLoop() { - defer sq.wg.Done() - for { - if sq.best != nil { - expTime := sq.best.expTime - select { - case task := <-sq.queueAddCh: - sq.addTask(task) - case sq.queueBestCh <- sq.best: - sq.updateRecentTime() - sq.queuedTime -= expTime - sq.recentTime += expTime - sqServedGauge.Update(int64(sq.recentTime)) - sqQueuedGauge.Update(int64(sq.queuedTime)) - if sq.queue.Size() == 0 { - sq.best = nil - } else { - sq.best = sq.queue.PopItem() - } - case <-sq.quit: - return - } - } else { - select { - case task := <-sq.queueAddCh: - sq.addTask(task) - case <-sq.quit: - return - } - } - } -} - -// threadCountLoop is an event loop running in a goroutine. It adjusts the number -// of active thread controller goroutines. -func (sq *servingQueue) threadCountLoop() { - var threadCountTarget int - defer sq.wg.Done() - for { - for threadCountTarget > sq.threadCount { - sq.wg.Add(1) - go sq.threadController() - sq.threadCount++ - } - if threadCountTarget < sq.threadCount { - select { - case threadCountTarget = <-sq.setThreadsCh: - case sq.stopThreadCh <- struct{}{}: - sq.threadCount-- - case <-sq.quit: - return - } - } else { - select { - case threadCountTarget = <-sq.setThreadsCh: - case <-sq.quit: - return - } - } - } -} - -// setThreads sets the allowed processing thread count, suspending tasks as soon as -// possible if necessary. -func (sq *servingQueue) setThreads(threadCount int) { - select { - case sq.setThreadsCh <- threadCount: - case <-sq.quit: - return - } -} - -// stop stops task processing as soon as possible and shuts down the serving queue. -func (sq *servingQueue) stop() { - close(sq.quit) - sq.wg.Wait() -} diff --git a/les/state_accessor.go b/les/state_accessor.go deleted file mode 100644 index 9383c2cc35..0000000000 --- a/les/state_accessor.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "context" - "errors" - "fmt" - - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/eth/tracers" - "github.com/ethereum/go-ethereum/light" -) - -// noopReleaser is returned in case there is no operation expected -// for releasing state. -var noopReleaser = tracers.StateReleaseFunc(func() {}) - -// stateAtBlock retrieves the state database associated with a certain block. -func (leth *LightEthereum) stateAtBlock(ctx context.Context, block *types.Block, reexec uint64) (*state.StateDB, tracers.StateReleaseFunc, error) { - return light.NewState(ctx, block.Header(), leth.odr), noopReleaser, nil -} - -// stateAtTransaction returns the execution environment of a certain transaction. -func (leth *LightEthereum) stateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (*core.Message, vm.BlockContext, *state.StateDB, tracers.StateReleaseFunc, error) { - // Short circuit if it's genesis block. - if block.NumberU64() == 0 { - return nil, vm.BlockContext{}, nil, nil, errors.New("no transaction in genesis") - } - // Create the parent state database - parent, err := leth.blockchain.GetBlock(ctx, block.ParentHash(), block.NumberU64()-1) - if err != nil { - return nil, vm.BlockContext{}, nil, nil, err - } - statedb, release, err := leth.stateAtBlock(ctx, parent, reexec) - if err != nil { - return nil, vm.BlockContext{}, nil, nil, err - } - if txIndex == 0 && len(block.Transactions()) == 0 { - return nil, vm.BlockContext{}, statedb, release, nil - } - // Recompute transactions up to the target index. - signer := types.MakeSigner(leth.blockchain.Config(), block.Number(), block.Time()) - for idx, tx := range block.Transactions() { - // Assemble the transaction call message and return if the requested offset - msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee()) - txContext := core.NewEVMTxContext(msg) - context := core.NewEVMBlockContext(block.Header(), leth.blockchain, nil, leth.blockchain.Config(), statedb) - statedb.SetTxContext(tx.Hash(), idx) - if idx == txIndex { - return msg, context, statedb, release, nil - } - // Not yet the searched for transaction, execute on top of the current state - vmenv := vm.NewEVM(context, txContext, statedb, leth.blockchain.Config(), vm.Config{}) - if _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { - return nil, vm.BlockContext{}, nil, nil, fmt.Errorf("transaction %#x failed: %v", tx.Hash(), err) - } - // Ensure any modifications are committed to the state - // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect - statedb.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) - } - return nil, vm.BlockContext{}, nil, nil, fmt.Errorf("transaction index %d out of range for block %#x", txIndex, block.Hash()) -} diff --git a/les/test_helper.go b/les/test_helper.go deleted file mode 100644 index 6be13eaecd..0000000000 --- a/les/test_helper.go +++ /dev/null @@ -1,626 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// This file contains some shares testing functionality, common to multiple -// different files and modules being tested. Client based network and Server -// based network can be created easily with available APIs. - -package les - -import ( - "context" - "crypto/rand" - "fmt" - "math/big" - "testing" - "time" - - "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/forkid" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/txpool/legacypool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/event" - "github.com/ethereum/go-ethereum/les/flowcontrol" - vfs "github.com/ethereum/go-ethereum/les/vflux/server" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/trie" -) - -var ( - bankKey, _ = crypto.GenerateKey() - bankAddr = crypto.PubkeyToAddress(bankKey.PublicKey) - bankFunds = big.NewInt(1_000_000_000_000_000_000) - - userKey1, _ = crypto.GenerateKey() - userKey2, _ = crypto.GenerateKey() - userAddr1 = crypto.PubkeyToAddress(userKey1.PublicKey) - userAddr2 = crypto.PubkeyToAddress(userKey2.PublicKey) - - testContractAddr common.Address - testContractCode = common.Hex2Bytes("606060405260cc8060106000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806360cd2685146041578063c16431b914606b57603f565b005b6055600480803590602001909190505060a9565b6040518082815260200191505060405180910390f35b60886004808035906020019091908035906020019091905050608a565b005b80600060005083606481101560025790900160005b50819055505b5050565b6000600060005082606481101560025790900160005b5054905060c7565b91905056") - testContractCodeDeployed = testContractCode[16:] - testContractDeployed = uint64(2) - - testEventEmitterCode = common.Hex2Bytes("60606040523415600e57600080fd5b7f57050ab73f6b9ebdd9f76b8d4997793f48cf956e965ee070551b9ca0bb71584e60405160405180910390a160358060476000396000f3006060604052600080fd00a165627a7a723058203f727efcad8b5811f8cb1fc2620ce5e8c63570d697aef968172de296ea3994140029") - - // Checkpoint oracle relative fields - signerKey, _ = crypto.GenerateKey() - signerAddr = crypto.PubkeyToAddress(signerKey.PublicKey) -) - -var ( - // The token bucket buffer limit for testing purpose. - testBufLimit = uint64(1000000) - - // The buffer recharging speed for testing purpose. - testBufRecharge = uint64(1000) -) - -/* -contract test { - - uint256[100] data; - - function Put(uint256 addr, uint256 value) { - data[addr] = value; - } - - function Get(uint256 addr) constant returns (uint256 value) { - return data[addr]; - } -} -*/ - -// prepare pre-commits specified number customized blocks into chain. -func prepare(n int, backend *backends.SimulatedBackend) { - var ( - ctx = context.Background() - signer = types.HomesteadSigner{} - ) - for i := 0; i < n; i++ { - switch i { - case 0: - // Builtin-block - // number: 1 - // txs: 1 - - // bankUser transfers some ether to user1 - nonce, _ := backend.PendingNonceAt(ctx, bankAddr) - tx, _ := types.SignTx(types.NewTransaction(nonce, userAddr1, big.NewInt(10_000_000_000_000_000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), signer, bankKey) - backend.SendTransaction(ctx, tx) - case 1: - // Builtin-block - // number: 2 - // txs: 4 - - bankNonce, _ := backend.PendingNonceAt(ctx, bankAddr) - userNonce1, _ := backend.PendingNonceAt(ctx, userAddr1) - - // bankUser transfers more ether to user1 - tx1, _ := types.SignTx(types.NewTransaction(bankNonce, userAddr1, big.NewInt(1_000_000_000_000_000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), signer, bankKey) - backend.SendTransaction(ctx, tx1) - - // user1 relays ether to user2 - tx2, _ := types.SignTx(types.NewTransaction(userNonce1, userAddr2, big.NewInt(1_000_000_000_000_000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), signer, userKey1) - backend.SendTransaction(ctx, tx2) - - // user1 deploys a test contract - tx3, _ := types.SignTx(types.NewContractCreation(userNonce1+1, big.NewInt(0), 200000, big.NewInt(params.InitialBaseFee), testContractCode), signer, userKey1) - backend.SendTransaction(ctx, tx3) - testContractAddr = crypto.CreateAddress(userAddr1, userNonce1+1) - - // user1 deploys a event contract - tx4, _ := types.SignTx(types.NewContractCreation(userNonce1+2, big.NewInt(0), 200000, big.NewInt(params.InitialBaseFee), testEventEmitterCode), signer, userKey1) - backend.SendTransaction(ctx, tx4) - case 2: - // Builtin-block - // number: 3 - // txs: 2 - - // bankUser transfer some ether to signer - bankNonce, _ := backend.PendingNonceAt(ctx, bankAddr) - tx1, _ := types.SignTx(types.NewTransaction(bankNonce, signerAddr, big.NewInt(1000000000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), signer, bankKey) - backend.SendTransaction(ctx, tx1) - - // invoke test contract - data := common.Hex2Bytes("C16431B900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001") - tx2, _ := types.SignTx(types.NewTransaction(bankNonce+1, testContractAddr, big.NewInt(0), 100000, big.NewInt(params.InitialBaseFee), data), signer, bankKey) - backend.SendTransaction(ctx, tx2) - case 3: - // Builtin-block - // number: 4 - // txs: 1 - - // invoke test contract - bankNonce, _ := backend.PendingNonceAt(ctx, bankAddr) - data := common.Hex2Bytes("C16431B900000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002") - tx, _ := types.SignTx(types.NewTransaction(bankNonce, testContractAddr, big.NewInt(0), 100000, big.NewInt(params.InitialBaseFee), data), signer, bankKey) - backend.SendTransaction(ctx, tx) - } - backend.Commit() - } -} - -// testIndexers creates a set of indexers with specified params for testing purpose. -func testIndexers(db ethdb.Database, odr light.OdrBackend, config *light.IndexerConfig, disablePruning bool) []*core.ChainIndexer { - var indexers [3]*core.ChainIndexer - indexers[0] = light.NewChtIndexer(db, odr, config.ChtSize, config.ChtConfirms, disablePruning) - indexers[1] = core.NewBloomIndexer(db, config.BloomSize, config.BloomConfirms) - indexers[2] = light.NewBloomTrieIndexer(db, odr, config.BloomSize, config.BloomTrieSize, disablePruning) - // make bloomTrieIndexer as a child indexer of bloom indexer. - indexers[1].AddChildIndexer(indexers[2]) - return indexers[:] -} - -func newTestClientHandler(backend *backends.SimulatedBackend, odr *LesOdr, indexers []*core.ChainIndexer, db ethdb.Database, peers *serverPeerSet) (*clientHandler, func()) { - var ( - evmux = new(event.TypeMux) - engine = ethash.NewFaker() - gspec = core.Genesis{ - Config: params.AllEthashProtocolChanges, - Alloc: core.GenesisAlloc{bankAddr: {Balance: bankFunds}}, - GasLimit: 100000000, - BaseFee: big.NewInt(params.InitialBaseFee), - } - ) - genesis := gspec.MustCommit(db, trie.NewDatabase(db, trie.HashDefaults)) - chain, _ := light.NewLightChain(odr, gspec.Config, engine) - - client := &LightEthereum{ - lesCommons: lesCommons{ - genesis: genesis.Hash(), - config: ðconfig.Config{LightPeers: 100, NetworkId: NetworkId}, - chainConfig: params.AllEthashProtocolChanges, - iConfig: light.TestClientIndexerConfig, - chainDb: db, - chainReader: chain, - closeCh: make(chan struct{}), - }, - peers: peers, - reqDist: odr.retriever.dist, - retriever: odr.retriever, - odr: odr, - engine: engine, - blockchain: chain, - eventMux: evmux, - merger: consensus.NewMerger(rawdb.NewMemoryDatabase()), - } - client.handler = newClientHandler(client) - - return client.handler, func() { - client.handler.stop() - } -} - -func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Database, clock mclock.Clock) (*serverHandler, *backends.SimulatedBackend, func()) { - var ( - gspec = core.Genesis{ - Config: params.AllEthashProtocolChanges, - Alloc: core.GenesisAlloc{bankAddr: {Balance: bankFunds}}, - GasLimit: 100000000, - BaseFee: big.NewInt(params.InitialBaseFee), - } - ) - genesis := gspec.MustCommit(db, trie.NewDatabase(db, trie.HashDefaults)) - - // create a simulation backend and pre-commit several customized block to the database. - simulation := backends.NewSimulatedBackendWithDatabase(db, gspec.Alloc, 100000000) - prepare(blocks, simulation) - - txpoolConfig := legacypool.DefaultConfig - txpoolConfig.Journal = "" - - pool := legacypool.New(txpoolConfig, simulation.Blockchain()) - txpool, _ := txpool.New(new(big.Int).SetUint64(txpoolConfig.PriceLimit), simulation.Blockchain(), []txpool.SubPool{pool}) - - server := &LesServer{ - lesCommons: lesCommons{ - genesis: genesis.Hash(), - config: ðconfig.Config{LightPeers: 100, NetworkId: NetworkId}, - chainConfig: params.AllEthashProtocolChanges, - iConfig: light.TestServerIndexerConfig, - chainDb: db, - chainReader: simulation.Blockchain(), - closeCh: make(chan struct{}), - }, - peers: newClientPeerSet(), - servingQueue: newServingQueue(int64(time.Millisecond*10), 1), - defParams: flowcontrol.ServerParams{ - BufLimit: testBufLimit, - MinRecharge: testBufRecharge, - }, - fcManager: flowcontrol.NewClientManager(nil, clock), - } - server.costTracker, server.minCapacity = newCostTracker(db, server.config) - server.costTracker.testCostList = testCostList(0) // Disable flow control mechanism. - server.clientPool = vfs.NewClientPool(db, testBufRecharge, defaultConnectedBias, clock, alwaysTrueFn) - server.clientPool.Start() - server.clientPool.SetLimits(10000, 10000) // Assign enough capacity for clientpool - server.handler = newServerHandler(server, simulation.Blockchain(), db, txpool, func() bool { return true }) - server.servingQueue.setThreads(4) - server.handler.start() - closer := func() { server.Stop() } - return server.handler, simulation, closer -} - -func alwaysTrueFn() bool { - return true -} - -// testPeer is a simulated peer to allow testing direct network calls. -type testPeer struct { - cpeer *clientPeer - speer *serverPeer - - net p2p.MsgReadWriter // Network layer reader/writer to simulate remote messaging - app *p2p.MsgPipeRW // Application layer reader/writer to simulate the local side -} - -// handshakeWithServer executes the handshake with the remote server peer. -func (p *testPeer) handshakeWithServer(t *testing.T, td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, forkID forkid.ID) { - // It only works for the simulated client peer - if p.cpeer == nil { - t.Fatal("handshake for client peer only") - } - var sendList keyValueList - sendList = sendList.add("protocolVersion", uint64(p.cpeer.version)) - sendList = sendList.add("networkId", uint64(NetworkId)) - sendList = sendList.add("headTd", td) - sendList = sendList.add("headHash", head) - sendList = sendList.add("headNum", headNum) - sendList = sendList.add("genesisHash", genesis) - if p.cpeer.version >= lpv4 { - sendList = sendList.add("forkID", &forkID) - } - if err := p2p.ExpectMsg(p.app, StatusMsg, nil); err != nil { - t.Fatalf("status recv: %v", err) - } - if err := p2p.Send(p.app, StatusMsg, &sendList); err != nil { - t.Fatalf("status send: %v", err) - } -} - -// handshakeWithClient executes the handshake with the remote client peer. -// (used by temporarily disabled tests) -/*func (p *testPeer) handshakeWithClient(t *testing.T, td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, forkID forkid.ID, costList RequestCostList, recentTxLookup uint64) { - // It only works for the simulated client peer - if p.speer == nil { - t.Fatal("handshake for server peer only") - } - var sendList keyValueList - sendList = sendList.add("protocolVersion", uint64(p.speer.version)) - sendList = sendList.add("networkId", uint64(NetworkId)) - sendList = sendList.add("headTd", td) - sendList = sendList.add("headHash", head) - sendList = sendList.add("headNum", headNum) - sendList = sendList.add("genesisHash", genesis) - sendList = sendList.add("serveHeaders", nil) - sendList = sendList.add("serveChainSince", uint64(0)) - sendList = sendList.add("serveStateSince", uint64(0)) - sendList = sendList.add("serveRecentState", uint64(core.TriesInMemory-4)) - sendList = sendList.add("txRelay", nil) - sendList = sendList.add("flowControl/BL", testBufLimit) - sendList = sendList.add("flowControl/MRR", testBufRecharge) - sendList = sendList.add("flowControl/MRC", costList) - if p.speer.version >= lpv4 { - sendList = sendList.add("forkID", &forkID) - sendList = sendList.add("recentTxLookup", recentTxLookup) - } - if err := p2p.ExpectMsg(p.app, StatusMsg, nil); err != nil { - t.Fatalf("status recv: %v", err) - } - if err := p2p.Send(p.app, StatusMsg, &sendList); err != nil { - t.Fatalf("status send: %v", err) - } -}*/ - -// close terminates the local side of the peer, notifying the remote protocol -// manager of termination. -func (p *testPeer) close() { - p.app.Close() -} - -func newTestPeerPair(name string, version int, server *serverHandler, client *clientHandler, noInitAnnounce bool) (*testPeer, *testPeer, error) { - // Create a message pipe to communicate through - app, net := p2p.MsgPipe() - - // Generate a random id and create the peer - var id enode.ID - rand.Read(id[:]) - - peer1 := newClientPeer(version, NetworkId, p2p.NewPeer(id, name, nil), net) - peer2 := newServerPeer(version, NetworkId, false, p2p.NewPeer(id, name, nil), app) - - // Start the peer on a new thread - errc1 := make(chan error, 1) - errc2 := make(chan error, 1) - go func() { - select { - case <-server.closeCh: - errc1 <- p2p.DiscQuitting - case errc1 <- server.handle(peer1): - } - }() - go func() { - select { - case <-client.closeCh: - errc2 <- p2p.DiscQuitting - case errc2 <- client.handle(peer2, noInitAnnounce): - } - }() - // Ensure the connection is established or exits when any error occurs - for { - select { - case err := <-errc1: - return nil, nil, fmt.Errorf("failed to establish protocol connection %v", err) - case err := <-errc2: - return nil, nil, fmt.Errorf("failed to establish protocol connection %v", err) - default: - } - if peer1.serving.Load() && peer2.serving.Load() { - break - } - time.Sleep(50 * time.Millisecond) - } - return &testPeer{cpeer: peer1, net: net, app: app}, &testPeer{speer: peer2, net: app, app: net}, nil -} - -type indexerCallback func(*core.ChainIndexer, *core.ChainIndexer, *core.ChainIndexer) - -// testClient represents a client object for testing with necessary auxiliary fields. -type testClient struct { - clock mclock.Clock - db ethdb.Database - peer *testPeer - handler *clientHandler - - chtIndexer *core.ChainIndexer - bloomIndexer *core.ChainIndexer - bloomTrieIndexer *core.ChainIndexer -} - -// newRawPeer creates a new server peer connects to the server and do the handshake. -// (used by temporarily disabled tests) -/*func (client *testClient) newRawPeer(t *testing.T, name string, version int, recentTxLookup uint64) (*testPeer, func(), <-chan error) { - // Create a message pipe to communicate through - app, net := p2p.MsgPipe() - - // Generate a random id and create the peer - var id enode.ID - rand.Read(id[:]) - peer := newServerPeer(version, NetworkId, false, p2p.NewPeer(id, name, nil), net) - - // Start the peer on a new thread - errCh := make(chan error, 1) - go func() { - select { - case <-client.handler.closeCh: - errCh <- p2p.DiscQuitting - case errCh <- client.handler.handle(peer, false): - } - }() - tp := &testPeer{ - app: app, - net: net, - speer: peer, - } - var ( - genesis = client.handler.backend.blockchain.Genesis() - head = client.handler.backend.blockchain.CurrentHeader() - td = client.handler.backend.blockchain.GetTd(head.Hash(), head.Number.Uint64()) - ) - forkID := forkid.NewID(client.handler.backend.blockchain.Config(), genesis.Hash(), head.Number.Uint64(), head.Time) - tp.handshakeWithClient(t, td, head.Hash(), head.Number.Uint64(), genesis.Hash(), forkID, testCostList(0), recentTxLookup) // disable flow control by default - - // Ensure the connection is established or exits when any error occurs - for { - select { - case <-errCh: - return nil, nil, nil - default: - } - if peer.serving.Load() { - break - } - time.Sleep(50 * time.Millisecond) - } - closePeer := func() { - tp.speer.close() - tp.close() - } - return tp, closePeer, errCh -}*/ - -// testServer represents a server object for testing with necessary auxiliary fields. -type testServer struct { - clock mclock.Clock - backend *backends.SimulatedBackend - db ethdb.Database - peer *testPeer - handler *serverHandler - - chtIndexer *core.ChainIndexer - bloomIndexer *core.ChainIndexer - bloomTrieIndexer *core.ChainIndexer -} - -// newRawPeer creates a new client peer connects to the server and do the handshake. -func (server *testServer) newRawPeer(t *testing.T, name string, version int) (*testPeer, func(), <-chan error) { - // Create a message pipe to communicate through - app, net := p2p.MsgPipe() - - // Generate a random id and create the peer - var id enode.ID - rand.Read(id[:]) - peer := newClientPeer(version, NetworkId, p2p.NewPeer(id, name, nil), net) - - // Start the peer on a new thread - errCh := make(chan error, 1) - go func() { - select { - case <-server.handler.closeCh: - errCh <- p2p.DiscQuitting - case errCh <- server.handler.handle(peer): - } - }() - tp := &testPeer{ - app: app, - net: net, - cpeer: peer, - } - var ( - genesis = server.handler.blockchain.Genesis() - head = server.handler.blockchain.CurrentHeader() - td = server.handler.blockchain.GetTd(head.Hash(), head.Number.Uint64()) - ) - forkID := forkid.NewID(server.handler.blockchain.Config(), genesis, head.Number.Uint64(), head.Time) - tp.handshakeWithServer(t, td, head.Hash(), head.Number.Uint64(), genesis.Hash(), forkID) - - // Ensure the connection is established or exits when any error occurs - for { - select { - case <-errCh: - return nil, nil, nil - default: - } - if peer.serving.Load() { - break - } - time.Sleep(50 * time.Millisecond) - } - closePeer := func() { - tp.cpeer.close() - tp.close() - } - return tp, closePeer, errCh -} - -// testnetConfig wraps all the configurations for testing network. -type testnetConfig struct { - blocks int - protocol int - indexFn indexerCallback - simClock bool - connect bool - nopruning bool -} - -func newClientServerEnv(t *testing.T, config testnetConfig) (*testServer, *testClient, func()) { - var ( - sdb = rawdb.NewMemoryDatabase() - cdb = rawdb.NewMemoryDatabase() - speers = newServerPeerSet() - ) - var clock mclock.Clock = &mclock.System{} - if config.simClock { - clock = &mclock.Simulated{} - } - dist := newRequestDistributor(speers, clock) - rm := newRetrieveManager(speers, dist, func() time.Duration { return time.Millisecond * 500 }) - odr := NewLesOdr(cdb, light.TestClientIndexerConfig, speers, rm) - - sindexers := testIndexers(sdb, nil, light.TestServerIndexerConfig, true) - cIndexers := testIndexers(cdb, odr, light.TestClientIndexerConfig, config.nopruning) - - scIndexer, sbIndexer, sbtIndexer := sindexers[0], sindexers[1], sindexers[2] - ccIndexer, cbIndexer, cbtIndexer := cIndexers[0], cIndexers[1], cIndexers[2] - odr.SetIndexers(ccIndexer, cbIndexer, cbtIndexer) - - server, b, serverClose := newTestServerHandler(config.blocks, sindexers, sdb, clock) - client, clientClose := newTestClientHandler(b, odr, cIndexers, cdb, speers) - - scIndexer.Start(server.blockchain) - sbIndexer.Start(server.blockchain) - ccIndexer.Start(client.backend.blockchain) - cbIndexer.Start(client.backend.blockchain) - - if config.indexFn != nil { - config.indexFn(scIndexer, sbIndexer, sbtIndexer) - } - var ( - err error - speer, cpeer *testPeer - ) - if config.connect { - done := make(chan struct{}) - cpeer, speer, err = newTestPeerPair("peer", config.protocol, server, client, false) - if err != nil { - t.Fatalf("Failed to connect testing peers %v", err) - } - select { - case <-done: - case <-time.After(10 * time.Second): - t.Fatal("test peer did not connect and sync within 3s") - } - } - s := &testServer{ - clock: clock, - backend: b, - db: sdb, - peer: cpeer, - handler: server, - chtIndexer: scIndexer, - bloomIndexer: sbIndexer, - bloomTrieIndexer: sbtIndexer, - } - c := &testClient{ - clock: clock, - db: cdb, - peer: speer, - handler: client, - chtIndexer: ccIndexer, - bloomIndexer: cbIndexer, - bloomTrieIndexer: cbtIndexer, - } - teardown := func() { - if config.connect { - speer.close() - cpeer.close() - cpeer.cpeer.close() - speer.speer.close() - } - ccIndexer.Close() - cbIndexer.Close() - scIndexer.Close() - sbIndexer.Close() - dist.close() - serverClose() - b.Close() - clientClose() - } - return s, c, teardown -} - -// NewFuzzerPeer creates a client peer for test purposes, and also returns -// a function to close the peer: this is needed to avoid goroutine leaks in the -// exec queue. -func NewFuzzerPeer(version int) (p *clientPeer, closer func()) { - p = newClientPeer(version, 0, p2p.NewPeer(enode.ID{}, "", nil), nil) - return p, func() { p.peerCommons.close() } -} diff --git a/les/txrelay.go b/les/txrelay.go deleted file mode 100644 index 40a51fb76f..0000000000 --- a/les/txrelay.go +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "context" - "math/rand" - "sync" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rlp" -) - -type lesTxRelay struct { - txSent map[common.Hash]*types.Transaction - txPending map[common.Hash]struct{} - peerList []*serverPeer - peerStartPos int - lock sync.Mutex - stop chan struct{} - - retriever *retrieveManager -} - -func newLesTxRelay(ps *serverPeerSet, retriever *retrieveManager) *lesTxRelay { - r := &lesTxRelay{ - txSent: make(map[common.Hash]*types.Transaction), - txPending: make(map[common.Hash]struct{}), - retriever: retriever, - stop: make(chan struct{}), - } - ps.subscribe(r) - return r -} - -func (ltrx *lesTxRelay) Stop() { - close(ltrx.stop) -} - -func (ltrx *lesTxRelay) registerPeer(p *serverPeer) { - ltrx.lock.Lock() - defer ltrx.lock.Unlock() - - // Short circuit if the peer is announce only. - if p.onlyAnnounce { - return - } - ltrx.peerList = append(ltrx.peerList, p) -} - -func (ltrx *lesTxRelay) unregisterPeer(p *serverPeer) { - ltrx.lock.Lock() - defer ltrx.lock.Unlock() - - for i, peer := range ltrx.peerList { - if peer == p { - // Remove from the peer list - ltrx.peerList = append(ltrx.peerList[:i], ltrx.peerList[i+1:]...) - return - } - } -} - -// send sends a list of transactions to at most a given number of peers. -func (ltrx *lesTxRelay) send(txs types.Transactions, count int) { - sendTo := make(map[*serverPeer]types.Transactions) - - ltrx.peerStartPos++ // rotate the starting position of the peer list - if ltrx.peerStartPos >= len(ltrx.peerList) { - ltrx.peerStartPos = 0 - } - - for _, tx := range txs { - hash := tx.Hash() - _, ok := ltrx.txSent[hash] - if !ok { - ltrx.txSent[hash] = tx - ltrx.txPending[hash] = struct{}{} - } - if len(ltrx.peerList) > 0 { - cnt := count - pos := ltrx.peerStartPos - for { - peer := ltrx.peerList[pos] - sendTo[peer] = append(sendTo[peer], tx) - cnt-- - if cnt == 0 { - break // sent it to the desired number of peers - } - pos++ - if pos == len(ltrx.peerList) { - pos = 0 - } - if pos == ltrx.peerStartPos { - break // tried all available peers - } - } - } - } - - for p, list := range sendTo { - pp := p - ll := list - enc, _ := rlp.EncodeToBytes(ll) - - reqID := rand.Uint64() - rq := &distReq{ - getCost: func(dp distPeer) uint64 { - peer := dp.(*serverPeer) - return peer.getTxRelayCost(len(ll), len(enc)) - }, - canSend: func(dp distPeer) bool { - return !dp.(*serverPeer).onlyAnnounce && dp.(*serverPeer) == pp - }, - request: func(dp distPeer) func() { - peer := dp.(*serverPeer) - cost := peer.getTxRelayCost(len(ll), len(enc)) - peer.fcServer.QueuedRequest(reqID, cost) - return func() { peer.sendTxs(reqID, len(ll), enc) } - }, - } - go ltrx.retriever.retrieve(context.Background(), reqID, rq, func(p distPeer, msg *Msg) error { return nil }, ltrx.stop) - } -} - -func (ltrx *lesTxRelay) Send(txs types.Transactions) { - ltrx.lock.Lock() - defer ltrx.lock.Unlock() - - ltrx.send(txs, 3) -} - -func (ltrx *lesTxRelay) NewHead(head common.Hash, mined []common.Hash, rollback []common.Hash) { - ltrx.lock.Lock() - defer ltrx.lock.Unlock() - - for _, hash := range mined { - delete(ltrx.txPending, hash) - } - - for _, hash := range rollback { - ltrx.txPending[hash] = struct{}{} - } - - if len(ltrx.txPending) > 0 { - txs := make(types.Transactions, len(ltrx.txPending)) - i := 0 - for hash := range ltrx.txPending { - txs[i] = ltrx.txSent[hash] - i++ - } - ltrx.send(txs, 1) - } -} - -func (ltrx *lesTxRelay) Discard(hashes []common.Hash) { - ltrx.lock.Lock() - defer ltrx.lock.Unlock() - - for _, hash := range hashes { - delete(ltrx.txSent, hash) - delete(ltrx.txPending, hash) - } -} diff --git a/les/utils/exec_queue.go b/les/utils/exec_queue.go deleted file mode 100644 index 5942b06ec0..0000000000 --- a/les/utils/exec_queue.go +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import "sync" - -// ExecQueue implements a queue that executes function calls in a single thread, -// in the same order as they have been queued. -type ExecQueue struct { - mu sync.Mutex - cond *sync.Cond - funcs []func() - closeWait chan struct{} -} - -// NewExecQueue creates a new execution Queue. -func NewExecQueue(capacity int) *ExecQueue { - q := &ExecQueue{funcs: make([]func(), 0, capacity)} - q.cond = sync.NewCond(&q.mu) - go q.loop() - return q -} - -func (q *ExecQueue) loop() { - for f := q.waitNext(false); f != nil; f = q.waitNext(true) { - f() - } - close(q.closeWait) -} - -func (q *ExecQueue) waitNext(drop bool) (f func()) { - q.mu.Lock() - if drop && len(q.funcs) > 0 { - // Remove the function that just executed. We do this here instead of when - // dequeuing so len(q.funcs) includes the function that is running. - q.funcs = append(q.funcs[:0], q.funcs[1:]...) - } - for !q.isClosed() { - if len(q.funcs) > 0 { - f = q.funcs[0] - break - } - q.cond.Wait() - } - q.mu.Unlock() - return f -} - -func (q *ExecQueue) isClosed() bool { - return q.closeWait != nil -} - -// CanQueue returns true if more function calls can be added to the execution Queue. -func (q *ExecQueue) CanQueue() bool { - q.mu.Lock() - ok := !q.isClosed() && len(q.funcs) < cap(q.funcs) - q.mu.Unlock() - return ok -} - -// Queue adds a function call to the execution Queue. Returns true if successful. -func (q *ExecQueue) Queue(f func()) bool { - q.mu.Lock() - ok := !q.isClosed() && len(q.funcs) < cap(q.funcs) - if ok { - q.funcs = append(q.funcs, f) - q.cond.Signal() - } - q.mu.Unlock() - return ok -} - -// Clear drops all queued functions. -func (q *ExecQueue) Clear() { - q.mu.Lock() - q.funcs = q.funcs[:0] - q.mu.Unlock() -} - -// Quit stops the exec Queue. -// -// Quit waits for the current execution to finish before returning. -func (q *ExecQueue) Quit() { - q.mu.Lock() - if !q.isClosed() { - q.closeWait = make(chan struct{}) - q.cond.Signal() - } - q.mu.Unlock() - <-q.closeWait -} diff --git a/les/utils/exec_queue_test.go b/les/utils/exec_queue_test.go deleted file mode 100644 index 98601c4486..0000000000 --- a/les/utils/exec_queue_test.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import "testing" - -func TestExecQueue(t *testing.T) { - var ( - N = 10000 - q = NewExecQueue(N) - counter int - execd = make(chan int) - testexit = make(chan struct{}) - ) - defer q.Quit() - defer close(testexit) - - check := func(state string, wantOK bool) { - c := counter - counter++ - qf := func() { - select { - case execd <- c: - case <-testexit: - } - } - if q.CanQueue() != wantOK { - t.Fatalf("CanQueue() == %t for %s", !wantOK, state) - } - if q.Queue(qf) != wantOK { - t.Fatalf("Queue() == %t for %s", !wantOK, state) - } - } - - for i := 0; i < N; i++ { - check("queue below cap", true) - } - check("full queue", false) - for i := 0; i < N; i++ { - if c := <-execd; c != i { - t.Fatal("execution out of order") - } - } - q.Quit() - check("closed queue", false) -} diff --git a/les/utils/expiredvalue.go b/les/utils/expiredvalue.go deleted file mode 100644 index 099b61d053..0000000000 --- a/les/utils/expiredvalue.go +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import ( - "math" - "sync" - - "github.com/ethereum/go-ethereum/common/mclock" -) - -// ExpiredValue is a scalar value that is continuously expired (decreased -// exponentially) based on the provided logarithmic expiration offset value. -// -// The formula for value calculation is: base*2^(exp-logOffset). In order to -// simplify the calculation of ExpiredValue, its value is expressed in the form -// of an exponent with a base of 2. -// -// Also here is a trick to reduce a lot of calculations. In theory, when a value X -// decays over time and then a new value Y is added, the final result should be -// X*2^(exp-logOffset)+Y. However it's very hard to represent in memory. -// So the trick is using the idea of inflation instead of exponential decay. At this -// moment the temporary value becomes: X*2^exp+Y*2^logOffset_1, apply the exponential -// decay when we actually want to calculate the value. -// -// e.g. -// t0: V = 100 -// t1: add 30, inflationary value is: 100 + 30/0.3, 0.3 is the decay coefficient -// t2: get value, decay coefficient is 0.2 now, final result is: 200*0.2 = 40 -type ExpiredValue struct { - Base, Exp uint64 // rlp encoding works by default -} - -// ExpirationFactor is calculated from logOffset. 1 <= Factor < 2 and Factor*2^Exp -// describes the multiplier applicable for additions and the divider for readouts. -// If logOffset changes slowly then it saves some expensive operations to not calculate -// them for each addition and readout but cache this intermediate form for some time. -// It is also useful for structures where multiple values are expired with the same -// Expirer. -type ExpirationFactor struct { - Exp uint64 - Factor float64 -} - -// ExpFactor calculates ExpirationFactor based on logOffset -func ExpFactor(logOffset Fixed64) ExpirationFactor { - return ExpirationFactor{Exp: logOffset.ToUint64(), Factor: logOffset.Fraction().Pow2()} -} - -// Value calculates the expired value based on a floating point base and integer -// power-of-2 exponent. This function should be used by multi-value expired structures. -func (e ExpirationFactor) Value(base float64, exp uint64) float64 { - return base / e.Factor * math.Pow(2, float64(int64(exp-e.Exp))) -} - -// Value calculates the value at the given moment. -func (e ExpiredValue) Value(logOffset Fixed64) uint64 { - offset := Uint64ToFixed64(e.Exp) - logOffset - return uint64(float64(e.Base) * offset.Pow2()) -} - -// Add adds a signed value at the given moment -func (e *ExpiredValue) Add(amount int64, logOffset Fixed64) int64 { - integer, frac := logOffset.ToUint64(), logOffset.Fraction() - factor := frac.Pow2() - base := factor * float64(amount) - if integer < e.Exp { - base /= math.Pow(2, float64(e.Exp-integer)) - } - if integer > e.Exp { - e.Base >>= (integer - e.Exp) - e.Exp = integer - } - if base >= 0 || uint64(-base) <= e.Base { - // The conversion from negative float64 to - // uint64 is undefined in golang, and doesn't - // work with ARMv8. More details at: - // https://github.com/golang/go/issues/43047 - if base >= 0 { - e.Base += uint64(base) - } else { - e.Base -= uint64(-base) - } - return amount - } - net := int64(-float64(e.Base) / factor) - e.Base = 0 - return net -} - -// AddExp adds another ExpiredValue -func (e *ExpiredValue) AddExp(a ExpiredValue) { - if e.Exp > a.Exp { - a.Base >>= (e.Exp - a.Exp) - } - if e.Exp < a.Exp { - e.Base >>= (a.Exp - e.Exp) - e.Exp = a.Exp - } - e.Base += a.Base -} - -// SubExp subtracts another ExpiredValue -func (e *ExpiredValue) SubExp(a ExpiredValue) { - if e.Exp > a.Exp { - a.Base >>= (e.Exp - a.Exp) - } - if e.Exp < a.Exp { - e.Base >>= (a.Exp - e.Exp) - e.Exp = a.Exp - } - if e.Base > a.Base { - e.Base -= a.Base - } else { - e.Base = 0 - } -} - -// IsZero returns true if the value is zero -func (e *ExpiredValue) IsZero() bool { - return e.Base == 0 -} - -// LinearExpiredValue is very similar with the expiredValue which the value -// will continuously expired. But the different part is it's expired linearly. -type LinearExpiredValue struct { - Offset uint64 // The latest time offset - Val uint64 // The remaining value, can never be negative - Rate mclock.AbsTime `rlp:"-"` // Expiration rate(by nanosecond), will ignored by RLP -} - -// Value calculates the value at the given moment. This function always has the -// assumption that the given timestamp shouldn't less than the recorded one. -func (e LinearExpiredValue) Value(now mclock.AbsTime) uint64 { - offset := uint64(now / e.Rate) - if e.Offset < offset { - diff := offset - e.Offset - if e.Val >= diff { - e.Val -= diff - } else { - e.Val = 0 - } - } - return e.Val -} - -// Add adds a signed value at the given moment. This function always has the -// assumption that the given timestamp shouldn't less than the recorded one. -func (e *LinearExpiredValue) Add(amount int64, now mclock.AbsTime) uint64 { - offset := uint64(now / e.Rate) - if e.Offset < offset { - diff := offset - e.Offset - if e.Val >= diff { - e.Val -= diff - } else { - e.Val = 0 - } - e.Offset = offset - } - if amount < 0 && uint64(-amount) > e.Val { - e.Val = 0 - } else { - e.Val = uint64(int64(e.Val) + amount) - } - return e.Val -} - -// ValueExpirer controls value expiration rate -type ValueExpirer interface { - SetRate(now mclock.AbsTime, rate float64) - SetLogOffset(now mclock.AbsTime, logOffset Fixed64) - LogOffset(now mclock.AbsTime) Fixed64 -} - -// Expirer changes logOffset with a linear rate which can be changed during operation. -// It is not thread safe, if access by multiple goroutines is needed then it should be -// encapsulated into a locked structure. -// Note that if neither SetRate nor SetLogOffset are used during operation then LogOffset -// is thread safe. -type Expirer struct { - lock sync.RWMutex - logOffset Fixed64 - rate float64 - lastUpdate mclock.AbsTime -} - -// SetRate changes the expiration rate which is the inverse of the time constant in -// nanoseconds. -func (e *Expirer) SetRate(now mclock.AbsTime, rate float64) { - e.lock.Lock() - defer e.lock.Unlock() - - dt := now - e.lastUpdate - if dt > 0 { - e.logOffset += Fixed64(logToFixedFactor * float64(dt) * e.rate) - } - e.lastUpdate = now - e.rate = rate -} - -// SetLogOffset sets logOffset instantly. -func (e *Expirer) SetLogOffset(now mclock.AbsTime, logOffset Fixed64) { - e.lock.Lock() - defer e.lock.Unlock() - - e.lastUpdate = now - e.logOffset = logOffset -} - -// LogOffset returns the current logarithmic offset. -func (e *Expirer) LogOffset(now mclock.AbsTime) Fixed64 { - e.lock.RLock() - defer e.lock.RUnlock() - - dt := now - e.lastUpdate - if dt <= 0 { - return e.logOffset - } - return e.logOffset + Fixed64(logToFixedFactor*float64(dt)*e.rate) -} - -// fixedFactor is the fixed point multiplier factor used by Fixed64. -const fixedFactor = 0x1000000 - -// Fixed64 implements 64-bit fixed point arithmetic functions. -type Fixed64 int64 - -// Uint64ToFixed64 converts uint64 integer to Fixed64 format. -func Uint64ToFixed64(f uint64) Fixed64 { - return Fixed64(f * fixedFactor) -} - -// Float64ToFixed64 converts float64 to Fixed64 format. -func Float64ToFixed64(f float64) Fixed64 { - return Fixed64(f * fixedFactor) -} - -// ToUint64 converts Fixed64 format to uint64. -func (f64 Fixed64) ToUint64() uint64 { - return uint64(f64) / fixedFactor -} - -// Fraction returns the fractional part of a Fixed64 value. -func (f64 Fixed64) Fraction() Fixed64 { - return f64 % fixedFactor -} - -var ( - logToFixedFactor = float64(fixedFactor) / math.Log(2) - fixedToLogFactor = math.Log(2) / float64(fixedFactor) -) - -// Pow2 returns the base 2 power of the fixed point value. -func (f64 Fixed64) Pow2() float64 { - return math.Exp(float64(f64) * fixedToLogFactor) -} diff --git a/les/utils/expiredvalue_test.go b/les/utils/expiredvalue_test.go deleted file mode 100644 index 1c751d8cc6..0000000000 --- a/les/utils/expiredvalue_test.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import ( - "testing" - - "github.com/ethereum/go-ethereum/common/mclock" -) - -func TestValueExpiration(t *testing.T) { - var cases = []struct { - input ExpiredValue - timeOffset Fixed64 - expect uint64 - }{ - {ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 128}, - {ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(1), 64}, - {ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(2), 32}, - {ExpiredValue{Base: 128, Exp: 2}, Uint64ToFixed64(2), 128}, - {ExpiredValue{Base: 128, Exp: 2}, Uint64ToFixed64(3), 64}, - } - for _, c := range cases { - if got := c.input.Value(c.timeOffset); got != c.expect { - t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, got) - } - } -} - -func TestValueAddition(t *testing.T) { - var cases = []struct { - input ExpiredValue - addend int64 - timeOffset Fixed64 - expect uint64 - expectNet int64 - }{ - // Addition - {ExpiredValue{Base: 128, Exp: 0}, 128, Uint64ToFixed64(0), 256, 128}, - {ExpiredValue{Base: 128, Exp: 2}, 128, Uint64ToFixed64(0), 640, 128}, - - // Addition with offset - {ExpiredValue{Base: 128, Exp: 0}, 128, Uint64ToFixed64(1), 192, 128}, - {ExpiredValue{Base: 128, Exp: 2}, 128, Uint64ToFixed64(1), 384, 128}, - {ExpiredValue{Base: 128, Exp: 2}, 128, Uint64ToFixed64(3), 192, 128}, - - // Subtraction - {ExpiredValue{Base: 128, Exp: 0}, -64, Uint64ToFixed64(0), 64, -64}, - {ExpiredValue{Base: 128, Exp: 0}, -128, Uint64ToFixed64(0), 0, -128}, - {ExpiredValue{Base: 128, Exp: 0}, -192, Uint64ToFixed64(0), 0, -128}, - - // Subtraction with offset - {ExpiredValue{Base: 128, Exp: 0}, -64, Uint64ToFixed64(1), 0, -64}, - {ExpiredValue{Base: 128, Exp: 0}, -128, Uint64ToFixed64(1), 0, -64}, - {ExpiredValue{Base: 128, Exp: 2}, -128, Uint64ToFixed64(1), 128, -128}, - {ExpiredValue{Base: 128, Exp: 2}, -128, Uint64ToFixed64(2), 0, -128}, - } - for _, c := range cases { - if net := c.input.Add(c.addend, c.timeOffset); net != c.expectNet { - t.Fatalf("Net amount mismatch, want=%d, got=%d", c.expectNet, net) - } - if got := c.input.Value(c.timeOffset); got != c.expect { - t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, got) - } - } -} - -func TestExpiredValueAddition(t *testing.T) { - var cases = []struct { - input ExpiredValue - another ExpiredValue - timeOffset Fixed64 - expect uint64 - }{ - {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 256}, - {ExpiredValue{Base: 128, Exp: 1}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 384}, - {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 1}, Uint64ToFixed64(0), 384}, - {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(1), 128}, - } - for _, c := range cases { - c.input.AddExp(c.another) - if got := c.input.Value(c.timeOffset); got != c.expect { - t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, got) - } - } -} - -func TestExpiredValueSubtraction(t *testing.T) { - var cases = []struct { - input ExpiredValue - another ExpiredValue - timeOffset Fixed64 - expect uint64 - }{ - {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 0}, - {ExpiredValue{Base: 128, Exp: 0}, ExpiredValue{Base: 128, Exp: 1}, Uint64ToFixed64(0), 0}, - {ExpiredValue{Base: 128, Exp: 1}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(0), 128}, - {ExpiredValue{Base: 128, Exp: 1}, ExpiredValue{Base: 128, Exp: 0}, Uint64ToFixed64(1), 64}, - } - for _, c := range cases { - c.input.SubExp(c.another) - if got := c.input.Value(c.timeOffset); got != c.expect { - t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, got) - } - } -} - -func TestLinearExpiredValue(t *testing.T) { - var cases = []struct { - value LinearExpiredValue - now mclock.AbsTime - expect uint64 - }{ - {LinearExpiredValue{ - Offset: 0, - Val: 0, - Rate: mclock.AbsTime(1), - }, 0, 0}, - - {LinearExpiredValue{ - Offset: 1, - Val: 1, - Rate: mclock.AbsTime(1), - }, 0, 1}, - - {LinearExpiredValue{ - Offset: 1, - Val: 1, - Rate: mclock.AbsTime(1), - }, mclock.AbsTime(2), 0}, - - {LinearExpiredValue{ - Offset: 1, - Val: 1, - Rate: mclock.AbsTime(1), - }, mclock.AbsTime(3), 0}, - } - for _, c := range cases { - if value := c.value.Value(c.now); value != c.expect { - t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, value) - } - } -} - -func TestLinearExpiredAddition(t *testing.T) { - var cases = []struct { - value LinearExpiredValue - amount int64 - now mclock.AbsTime - expect uint64 - }{ - {LinearExpiredValue{ - Offset: 0, - Val: 0, - Rate: mclock.AbsTime(1), - }, -1, 0, 0}, - - {LinearExpiredValue{ - Offset: 1, - Val: 1, - Rate: mclock.AbsTime(1), - }, -1, 0, 0}, - - {LinearExpiredValue{ - Offset: 1, - Val: 2, - Rate: mclock.AbsTime(1), - }, -1, mclock.AbsTime(2), 0}, - - {LinearExpiredValue{ - Offset: 1, - Val: 2, - Rate: mclock.AbsTime(1), - }, -2, mclock.AbsTime(2), 0}, - } - for _, c := range cases { - if value := c.value.Add(c.amount, c.now); value != c.expect { - t.Fatalf("Value mismatch, want=%d, got=%d", c.expect, value) - } - } -} diff --git a/les/utils/limiter.go b/les/utils/limiter.go deleted file mode 100644 index 70b7ff64f7..0000000000 --- a/les/utils/limiter.go +++ /dev/null @@ -1,398 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import ( - "sync" - - "github.com/ethereum/go-ethereum/p2p/enode" - "golang.org/x/exp/slices" -) - -const maxSelectionWeight = 1000000000 // maximum selection weight of each individual node/address group - -// Limiter protects a network request serving mechanism from denial-of-service attacks. -// It limits the total amount of resources used for serving requests while ensuring that -// the most valuable connections always have a reasonable chance of being served. -type Limiter struct { - lock sync.Mutex - cond *sync.Cond - quit bool - - nodes map[enode.ID]*nodeQueue - addresses map[string]*addressGroup - addressSelect, valueSelect *WeightedRandomSelect - maxValue float64 - maxCost, sumCost, sumCostLimit uint - selectAddressNext bool -} - -// nodeQueue represents queued requests coming from a single node ID -type nodeQueue struct { - queue []request // always nil if penaltyCost != 0 - id enode.ID - address string - value float64 - flatWeight, valueWeight uint64 // current selection weights in the address/value selectors - sumCost uint // summed cost of requests queued by the node - penaltyCost uint // cumulative cost of dropped requests since last processed request - groupIndex int -} - -// addressGroup is a group of node IDs that have sent their last requests from the same -// network address -type addressGroup struct { - nodes []*nodeQueue - nodeSelect *WeightedRandomSelect - sumFlatWeight, groupWeight uint64 -} - -// request represents an incoming request scheduled for processing -type request struct { - process chan chan struct{} - cost uint -} - -// flatWeight distributes weights equally between each active network address -func flatWeight(item interface{}) uint64 { return item.(*nodeQueue).flatWeight } - -// add adds the node queue to the address group. It is the caller's responsibility to -// add the address group to the address map and the address selector if it wasn't -// there before. -func (ag *addressGroup) add(nq *nodeQueue) { - if nq.groupIndex != -1 { - panic("added node queue is already in an address group") - } - l := len(ag.nodes) - nq.groupIndex = l - ag.nodes = append(ag.nodes, nq) - ag.sumFlatWeight += nq.flatWeight - ag.groupWeight = ag.sumFlatWeight / uint64(l+1) - ag.nodeSelect.Update(ag.nodes[l]) -} - -// update updates the selection weight of the node queue inside the address group. -// It is the caller's responsibility to update the group's selection weight in the -// address selector. -func (ag *addressGroup) update(nq *nodeQueue, weight uint64) { - if nq.groupIndex == -1 || nq.groupIndex >= len(ag.nodes) || ag.nodes[nq.groupIndex] != nq { - panic("updated node queue is not in this address group") - } - ag.sumFlatWeight += weight - nq.flatWeight - nq.flatWeight = weight - ag.groupWeight = ag.sumFlatWeight / uint64(len(ag.nodes)) - ag.nodeSelect.Update(nq) -} - -// remove removes the node queue from the address group. It is the caller's responsibility -// to remove the address group from the address map if it is empty. -func (ag *addressGroup) remove(nq *nodeQueue) { - if nq.groupIndex == -1 || nq.groupIndex >= len(ag.nodes) || ag.nodes[nq.groupIndex] != nq { - panic("removed node queue is not in this address group") - } - - l := len(ag.nodes) - 1 - if nq.groupIndex != l { - ag.nodes[nq.groupIndex] = ag.nodes[l] - ag.nodes[nq.groupIndex].groupIndex = nq.groupIndex - } - nq.groupIndex = -1 - ag.nodes = ag.nodes[:l] - ag.sumFlatWeight -= nq.flatWeight - if l >= 1 { - ag.groupWeight = ag.sumFlatWeight / uint64(l) - } else { - ag.groupWeight = 0 - } - ag.nodeSelect.Remove(nq) -} - -// choose selects one of the node queues belonging to the address group -func (ag *addressGroup) choose() *nodeQueue { - return ag.nodeSelect.Choose().(*nodeQueue) -} - -// NewLimiter creates a new Limiter -func NewLimiter(sumCostLimit uint) *Limiter { - l := &Limiter{ - addressSelect: NewWeightedRandomSelect(func(item interface{}) uint64 { return item.(*addressGroup).groupWeight }), - valueSelect: NewWeightedRandomSelect(func(item interface{}) uint64 { return item.(*nodeQueue).valueWeight }), - nodes: make(map[enode.ID]*nodeQueue), - addresses: make(map[string]*addressGroup), - sumCostLimit: sumCostLimit, - } - l.cond = sync.NewCond(&l.lock) - go l.processLoop() - return l -} - -// selectionWeights calculates the selection weights of a node for both the address and -// the value selector. The selection weight depends on the next request cost or the -// summed cost of recently dropped requests. -func (l *Limiter) selectionWeights(reqCost uint, value float64) (flatWeight, valueWeight uint64) { - if value > l.maxValue { - l.maxValue = value - } - if value > 0 { - // normalize value to <= 1 - value /= l.maxValue - } - if reqCost > l.maxCost { - l.maxCost = reqCost - } - relCost := float64(reqCost) / float64(l.maxCost) - var f float64 - if relCost <= 0.001 { - f = 1 - } else { - f = 0.001 / relCost - } - f *= maxSelectionWeight - flatWeight, valueWeight = uint64(f), uint64(f*value) - if flatWeight == 0 { - flatWeight = 1 - } - return -} - -// Add adds a new request to the node queue belonging to the given id. Value belongs -// to the requesting node. A higher value gives the request a higher chance of being -// served quickly in case of heavy load or a DDoS attack. Cost is a rough estimate -// of the serving cost of the request. A lower cost also gives the request a -// better chance. -func (l *Limiter) Add(id enode.ID, address string, value float64, reqCost uint) chan chan struct{} { - l.lock.Lock() - defer l.lock.Unlock() - - process := make(chan chan struct{}, 1) - if l.quit { - close(process) - return process - } - if reqCost == 0 { - reqCost = 1 - } - if nq, ok := l.nodes[id]; ok { - if nq.queue != nil { - nq.queue = append(nq.queue, request{process, reqCost}) - nq.sumCost += reqCost - nq.value = value - if address != nq.address { - // known id sending request from a new address, move to different address group - l.removeFromGroup(nq) - l.addToGroup(nq, address) - } - } else { - // already waiting on a penalty, just add to the penalty cost and drop the request - nq.penaltyCost += reqCost - l.update(nq) - close(process) - return process - } - } else { - nq := &nodeQueue{ - queue: []request{{process, reqCost}}, - id: id, - value: value, - sumCost: reqCost, - groupIndex: -1, - } - nq.flatWeight, nq.valueWeight = l.selectionWeights(reqCost, value) - if len(l.nodes) == 0 { - l.cond.Signal() - } - l.nodes[id] = nq - if nq.valueWeight != 0 { - l.valueSelect.Update(nq) - } - l.addToGroup(nq, address) - } - l.sumCost += reqCost - if l.sumCost > l.sumCostLimit { - l.dropRequests() - } - return process -} - -// update updates the selection weights of the node queue -func (l *Limiter) update(nq *nodeQueue) { - var cost uint - if nq.queue != nil { - cost = nq.queue[0].cost - } else { - cost = nq.penaltyCost - } - flatWeight, valueWeight := l.selectionWeights(cost, nq.value) - ag := l.addresses[nq.address] - ag.update(nq, flatWeight) - l.addressSelect.Update(ag) - nq.valueWeight = valueWeight - l.valueSelect.Update(nq) -} - -// addToGroup adds the node queue to the given address group. The group is created if -// it does not exist yet. -func (l *Limiter) addToGroup(nq *nodeQueue, address string) { - nq.address = address - ag := l.addresses[address] - if ag == nil { - ag = &addressGroup{nodeSelect: NewWeightedRandomSelect(flatWeight)} - l.addresses[address] = ag - } - ag.add(nq) - l.addressSelect.Update(ag) -} - -// removeFromGroup removes the node queue from its address group -func (l *Limiter) removeFromGroup(nq *nodeQueue) { - ag := l.addresses[nq.address] - ag.remove(nq) - if len(ag.nodes) == 0 { - delete(l.addresses, nq.address) - } - l.addressSelect.Update(ag) -} - -// remove removes the node queue from its address group, the nodes map and the value -// selector -func (l *Limiter) remove(nq *nodeQueue) { - l.removeFromGroup(nq) - if nq.valueWeight != 0 { - l.valueSelect.Remove(nq) - } - delete(l.nodes, nq.id) -} - -// choose selects the next node queue to process. -func (l *Limiter) choose() *nodeQueue { - if l.valueSelect.IsEmpty() || l.selectAddressNext { - if ag, ok := l.addressSelect.Choose().(*addressGroup); ok { - l.selectAddressNext = false - return ag.choose() - } - } - nq, _ := l.valueSelect.Choose().(*nodeQueue) - l.selectAddressNext = true - return nq -} - -// processLoop processes requests sequentially -func (l *Limiter) processLoop() { - l.lock.Lock() - defer l.lock.Unlock() - - for { - if l.quit { - for _, nq := range l.nodes { - for _, request := range nq.queue { - close(request.process) - } - } - return - } - nq := l.choose() - if nq == nil { - l.cond.Wait() - continue - } - if nq.queue != nil { - request := nq.queue[0] - nq.queue = nq.queue[1:] - nq.sumCost -= request.cost - l.sumCost -= request.cost - l.lock.Unlock() - ch := make(chan struct{}) - request.process <- ch - <-ch - l.lock.Lock() - if len(nq.queue) > 0 { - l.update(nq) - } else { - l.remove(nq) - } - } else { - // penalized queue removed, next request will be added to a clean queue - l.remove(nq) - } - } -} - -// Stop stops the processing loop. All queued and future requests are rejected. -func (l *Limiter) Stop() { - l.lock.Lock() - defer l.lock.Unlock() - - l.quit = true - l.cond.Signal() -} - -type dropListItem struct { - nq *nodeQueue - priority float64 -} - -// dropRequests selects the nodes with the highest queued request cost to selection -// weight ratio and drops their queued request. The empty node queues stay in the -// selectors with a low selection weight in order to penalize these nodes. -func (l *Limiter) dropRequests() { - var ( - sumValue float64 - list []dropListItem - ) - for _, nq := range l.nodes { - sumValue += nq.value - } - for _, nq := range l.nodes { - if nq.sumCost == 0 { - continue - } - w := 1 / float64(len(l.addresses)*len(l.addresses[nq.address].nodes)) - if sumValue > 0 { - w += nq.value / sumValue - } - list = append(list, dropListItem{ - nq: nq, - priority: w / float64(nq.sumCost), - }) - } - slices.SortFunc(list, func(a, b dropListItem) int { - if a.priority < b.priority { - return -1 - } - if a.priority < b.priority { - return 1 - } - return 0 - }) - for _, item := range list { - for _, request := range item.nq.queue { - close(request.process) - } - // make the queue penalized; no more requests are accepted until the node is - // selected based on the penalty cost which is the cumulative cost of all dropped - // requests. This ensures that sending excess requests is always penalized - // and incentivizes the sender to stop for a while if no replies are received. - item.nq.queue = nil - item.nq.penaltyCost = item.nq.sumCost - l.sumCost -= item.nq.sumCost // penalty costs are not counted in sumCost - item.nq.sumCost = 0 - l.update(item.nq) - if l.sumCost <= l.sumCostLimit/2 { - return - } - } -} diff --git a/les/utils/limiter_test.go b/les/utils/limiter_test.go deleted file mode 100644 index c031b21de5..0000000000 --- a/les/utils/limiter_test.go +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import ( - "crypto/rand" - "testing" - - "github.com/ethereum/go-ethereum/p2p/enode" -) - -const ( - ltTolerance = 0.03 - ltRounds = 7 -) - -type ( - ltNode struct { - addr, id int - value, exp float64 - cost uint - reqRate float64 - reqMax, runCount int - lastTotalCost uint - - served, dropped int - } - - ltResult struct { - node *ltNode - ch chan struct{} - } - - limTest struct { - limiter *Limiter - results chan ltResult - runCount int - expCost, totalCost uint - } -) - -func (lt *limTest) request(n *ltNode) { - var ( - address string - id enode.ID - ) - if n.addr >= 0 { - address = string([]byte{byte(n.addr)}) - } else { - var b [32]byte - rand.Read(b[:]) - address = string(b[:]) - } - if n.id >= 0 { - id = enode.ID{byte(n.id)} - } else { - rand.Read(id[:]) - } - lt.runCount++ - n.runCount++ - cch := lt.limiter.Add(id, address, n.value, n.cost) - go func() { - lt.results <- ltResult{n, <-cch} - }() -} - -func (lt *limTest) moreRequests(n *ltNode) { - maxStart := int(float64(lt.totalCost-n.lastTotalCost) * n.reqRate) - if maxStart != 0 { - n.lastTotalCost = lt.totalCost - } - for n.reqMax > n.runCount && maxStart > 0 { - lt.request(n) - maxStart-- - } -} - -func (lt *limTest) process() { - res := <-lt.results - lt.runCount-- - res.node.runCount-- - if res.ch != nil { - res.node.served++ - if res.node.exp != 0 { - lt.expCost += res.node.cost - } - lt.totalCost += res.node.cost - close(res.ch) - } else { - res.node.dropped++ - } -} - -func TestLimiter(t *testing.T) { - limTests := [][]*ltNode{ - { // one id from an individual address and two ids from a shared address - {addr: 0, id: 0, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.5}, - {addr: 1, id: 1, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25}, - {addr: 1, id: 2, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25}, - }, - { // varying request costs - {addr: 0, id: 0, value: 0, cost: 10, reqRate: 0.2, reqMax: 1, exp: 0.5}, - {addr: 1, id: 1, value: 0, cost: 3, reqRate: 0.5, reqMax: 1, exp: 0.25}, - {addr: 1, id: 2, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25}, - }, - { // different request rate - {addr: 0, id: 0, value: 0, cost: 1, reqRate: 2, reqMax: 2, exp: 0.5}, - {addr: 1, id: 1, value: 0, cost: 1, reqRate: 10, reqMax: 10, exp: 0.25}, - {addr: 1, id: 2, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25}, - }, - { // adding value - {addr: 0, id: 0, value: 3, cost: 1, reqRate: 1, reqMax: 1, exp: (0.5 + 0.3) / 2}, - {addr: 1, id: 1, value: 0, cost: 1, reqRate: 1, reqMax: 1, exp: 0.25 / 2}, - {addr: 1, id: 2, value: 7, cost: 1, reqRate: 1, reqMax: 1, exp: (0.25 + 0.7) / 2}, - }, - { // DoS attack from a single address with a single id - {addr: 0, id: 0, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 1, id: 1, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 2, id: 2, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 3, id: 3, value: 0, cost: 1, reqRate: 10, reqMax: 1000000000, exp: 0}, - }, - { // DoS attack from a single address with different ids - {addr: 0, id: 0, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 1, id: 1, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 2, id: 2, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 3, id: -1, value: 0, cost: 1, reqRate: 1, reqMax: 1000000000, exp: 0}, - }, - { // DDoS attack from different addresses with a single id - {addr: 0, id: 0, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 1, id: 1, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 2, id: 2, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: -1, id: 3, value: 0, cost: 1, reqRate: 1, reqMax: 1000000000, exp: 0}, - }, - { // DDoS attack from different addresses with different ids - {addr: 0, id: 0, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 1, id: 1, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: 2, id: 2, value: 1, cost: 1, reqRate: 1, reqMax: 1, exp: 0.3333}, - {addr: -1, id: -1, value: 0, cost: 1, reqRate: 1, reqMax: 1000000000, exp: 0}, - }, - } - - lt := &limTest{ - limiter: NewLimiter(100), - results: make(chan ltResult), - } - for _, test := range limTests { - lt.expCost, lt.totalCost = 0, 0 - iterCount := 10000 - for j := 0; j < ltRounds; j++ { - // try to reach expected target range in multiple rounds with increasing iteration counts - last := j == ltRounds-1 - for _, n := range test { - lt.request(n) - } - for i := 0; i < iterCount; i++ { - lt.process() - for _, n := range test { - lt.moreRequests(n) - } - } - for lt.runCount > 0 { - lt.process() - } - if spamRatio := 1 - float64(lt.expCost)/float64(lt.totalCost); spamRatio > 0.5*(1+ltTolerance) { - t.Errorf("Spam ratio too high (%f)", spamRatio) - } - fail, success := false, true - for _, n := range test { - if n.exp != 0 { - if n.dropped > 0 { - t.Errorf("Dropped %d requests of non-spam node", n.dropped) - fail = true - } - r := float64(n.served) * float64(n.cost) / float64(lt.expCost) - if r < n.exp*(1-ltTolerance) || r > n.exp*(1+ltTolerance) { - if last { - // print error only if the target is still not reached in the last round - t.Errorf("Request ratio (%f) does not match expected value (%f)", r, n.exp) - } - success = false - } - } - } - if fail || success { - break - } - // neither failed nor succeeded; try more iterations to reach probability targets - iterCount *= 2 - } - } - lt.limiter.Stop() -} diff --git a/les/utils/timeutils.go b/les/utils/timeutils.go deleted file mode 100644 index 62a4285d15..0000000000 --- a/les/utils/timeutils.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import ( - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" -) - -type UpdateTimer struct { - clock mclock.Clock - lock sync.Mutex - last mclock.AbsTime - threshold time.Duration -} - -func NewUpdateTimer(clock mclock.Clock, threshold time.Duration) *UpdateTimer { - // We don't accept the update threshold less than 0. - if threshold < 0 { - return nil - } - // Don't panic for lazy users - if clock == nil { - clock = mclock.System{} - } - return &UpdateTimer{ - clock: clock, - last: clock.Now(), - threshold: threshold, - } -} - -func (t *UpdateTimer) Update(callback func(diff time.Duration) bool) bool { - return t.UpdateAt(t.clock.Now(), callback) -} - -func (t *UpdateTimer) UpdateAt(at mclock.AbsTime, callback func(diff time.Duration) bool) bool { - t.lock.Lock() - defer t.lock.Unlock() - - diff := time.Duration(at - t.last) - if diff < 0 { - diff = 0 - } - if diff < t.threshold { - return false - } - if callback(diff) { - t.last = at - return true - } - return false -} diff --git a/les/utils/timeutils_test.go b/les/utils/timeutils_test.go deleted file mode 100644 index b219d0439d..0000000000 --- a/les/utils/timeutils_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import ( - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" -) - -func TestUpdateTimer(t *testing.T) { - timer := NewUpdateTimer(mclock.System{}, -1) - if timer != nil { - t.Fatalf("Create update timer with negative threshold") - } - sim := &mclock.Simulated{} - timer = NewUpdateTimer(sim, time.Second) - if updated := timer.Update(func(diff time.Duration) bool { return true }); updated { - t.Fatalf("Update the clock without reaching the threshold") - } - sim.Run(time.Second) - if updated := timer.Update(func(diff time.Duration) bool { return true }); !updated { - t.Fatalf("Doesn't update the clock when reaching the threshold") - } - if updated := timer.UpdateAt(sim.Now().Add(time.Second), func(diff time.Duration) bool { return true }); !updated { - t.Fatalf("Doesn't update the clock when reaching the threshold") - } - timer = NewUpdateTimer(sim, 0) - if updated := timer.Update(func(diff time.Duration) bool { return true }); !updated { - t.Fatalf("Doesn't update the clock without threshold limitaion") - } -} diff --git a/les/utils/weighted_select.go b/les/utils/weighted_select.go deleted file mode 100644 index 486b00820a..0000000000 --- a/les/utils/weighted_select.go +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import ( - "math" - "math/rand" - - "github.com/ethereum/go-ethereum/log" -) - -type ( - // WeightedRandomSelect is capable of weighted random selection from a set of items - WeightedRandomSelect struct { - root *wrsNode - idx map[WrsItem]int - wfn WeightFn - } - WrsItem interface{} - WeightFn func(interface{}) uint64 -) - -// NewWeightedRandomSelect returns a new WeightedRandomSelect structure -func NewWeightedRandomSelect(wfn WeightFn) *WeightedRandomSelect { - return &WeightedRandomSelect{root: &wrsNode{maxItems: wrsBranches}, idx: make(map[WrsItem]int), wfn: wfn} -} - -// Update updates an item's weight, adds it if it was non-existent or removes it if -// the new weight is zero. Note that explicitly updating decreasing weights is not necessary. -func (w *WeightedRandomSelect) Update(item WrsItem) { - w.setWeight(item, w.wfn(item)) -} - -// Remove removes an item from the set -func (w *WeightedRandomSelect) Remove(item WrsItem) { - w.setWeight(item, 0) -} - -// IsEmpty returns true if the set is empty -func (w *WeightedRandomSelect) IsEmpty() bool { - return w.root.sumCost == 0 -} - -// setWeight sets an item's weight to a specific value (removes it if zero) -func (w *WeightedRandomSelect) setWeight(item WrsItem, weight uint64) { - if weight > math.MaxInt64-w.root.sumCost { - // old weight is still included in sumCost, remove and check again - w.setWeight(item, 0) - if weight > math.MaxInt64-w.root.sumCost { - log.Error("WeightedRandomSelect overflow", "sumCost", w.root.sumCost, "new weight", weight) - weight = math.MaxInt64 - w.root.sumCost - } - } - idx, ok := w.idx[item] - if ok { - w.root.setWeight(idx, weight) - if weight == 0 { - delete(w.idx, item) - } - } else { - if weight != 0 { - if w.root.itemCnt == w.root.maxItems { - // add a new level - newRoot := &wrsNode{sumCost: w.root.sumCost, itemCnt: w.root.itemCnt, level: w.root.level + 1, maxItems: w.root.maxItems * wrsBranches} - newRoot.items[0] = w.root - newRoot.weights[0] = w.root.sumCost - w.root = newRoot - } - w.idx[item] = w.root.insert(item, weight) - } - } -} - -// Choose randomly selects an item from the set, with a chance proportional to its -// current weight. If the weight of the chosen element has been decreased since the -// last stored value, returns it with a newWeight/oldWeight chance, otherwise just -// updates its weight and selects another one -func (w *WeightedRandomSelect) Choose() WrsItem { - for { - if w.root.sumCost == 0 { - return nil - } - val := uint64(rand.Int63n(int64(w.root.sumCost))) - choice, lastWeight := w.root.choose(val) - weight := w.wfn(choice) - if weight != lastWeight { - w.setWeight(choice, weight) - } - if weight >= lastWeight || uint64(rand.Int63n(int64(lastWeight))) < weight { - return choice - } - } -} - -const wrsBranches = 8 // max number of branches in the wrsNode tree - -// wrsNode is a node of a tree structure that can store WrsItems or further wrsNodes. -type wrsNode struct { - items [wrsBranches]interface{} - weights [wrsBranches]uint64 - sumCost uint64 - level, itemCnt, maxItems int -} - -// insert recursively inserts a new item to the tree and returns the item index -func (n *wrsNode) insert(item WrsItem, weight uint64) int { - branch := 0 - for n.items[branch] != nil && (n.level == 0 || n.items[branch].(*wrsNode).itemCnt == n.items[branch].(*wrsNode).maxItems) { - branch++ - if branch == wrsBranches { - panic(nil) - } - } - n.itemCnt++ - n.sumCost += weight - n.weights[branch] += weight - if n.level == 0 { - n.items[branch] = item - return branch - } - var subNode *wrsNode - if n.items[branch] == nil { - subNode = &wrsNode{maxItems: n.maxItems / wrsBranches, level: n.level - 1} - n.items[branch] = subNode - } else { - subNode = n.items[branch].(*wrsNode) - } - subIdx := subNode.insert(item, weight) - return subNode.maxItems*branch + subIdx -} - -// setWeight updates the weight of a certain item (which should exist) and returns -// the change of the last weight value stored in the tree -func (n *wrsNode) setWeight(idx int, weight uint64) uint64 { - if n.level == 0 { - oldWeight := n.weights[idx] - n.weights[idx] = weight - diff := weight - oldWeight - n.sumCost += diff - if weight == 0 { - n.items[idx] = nil - n.itemCnt-- - } - return diff - } - branchItems := n.maxItems / wrsBranches - branch := idx / branchItems - diff := n.items[branch].(*wrsNode).setWeight(idx-branch*branchItems, weight) - n.weights[branch] += diff - n.sumCost += diff - if weight == 0 { - n.itemCnt-- - } - return diff -} - -// choose recursively selects an item from the tree and returns it along with its weight -func (n *wrsNode) choose(val uint64) (WrsItem, uint64) { - for i, w := range n.weights { - if val < w { - if n.level == 0 { - return n.items[i].(WrsItem), n.weights[i] - } - return n.items[i].(*wrsNode).choose(val) - } - val -= w - } - panic(nil) -} diff --git a/les/utils/weighted_select_test.go b/les/utils/weighted_select_test.go deleted file mode 100644 index 3e1c0ad987..0000000000 --- a/les/utils/weighted_select_test.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package utils - -import ( - "math/rand" - "testing" -) - -type testWrsItem struct { - idx int - widx *int -} - -func testWeight(i interface{}) uint64 { - t := i.(*testWrsItem) - w := *t.widx - if w == -1 || w == t.idx { - return uint64(t.idx + 1) - } - return 0 -} - -func TestWeightedRandomSelect(t *testing.T) { - testFn := func(cnt int) { - s := NewWeightedRandomSelect(testWeight) - w := -1 - list := make([]testWrsItem, cnt) - for i := range list { - list[i] = testWrsItem{idx: i, widx: &w} - s.Update(&list[i]) - } - w = rand.Intn(cnt) - c := s.Choose() - if c == nil { - t.Errorf("expected item, got nil") - } else { - if c.(*testWrsItem).idx != w { - t.Errorf("expected another item") - } - } - w = -2 - if s.Choose() != nil { - t.Errorf("expected nil, got item") - } - } - testFn(1) - testFn(10) - testFn(100) - testFn(1000) - testFn(10000) - testFn(100000) - testFn(1000000) -} diff --git a/les/vflux/client/api.go b/les/vflux/client/api.go deleted file mode 100644 index 135273ef96..0000000000 --- a/les/vflux/client/api.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/p2p/enode" -) - -// PrivateClientAPI implements the vflux client side API -type PrivateClientAPI struct { - vt *ValueTracker -} - -// NewPrivateClientAPI creates a PrivateClientAPI -func NewPrivateClientAPI(vt *ValueTracker) *PrivateClientAPI { - return &PrivateClientAPI{vt} -} - -// parseNodeStr converts either an enode address or a plain hex node id to enode.ID -func parseNodeStr(nodeStr string) (enode.ID, error) { - if id, err := enode.ParseID(nodeStr); err == nil { - return id, nil - } - if node, err := enode.Parse(enode.ValidSchemes, nodeStr); err == nil { - return node.ID(), nil - } else { - return enode.ID{}, err - } -} - -// RequestStats returns the current contents of the reference request basket, with -// request values meaning average per request rather than total. -func (api *PrivateClientAPI) RequestStats() []RequestStatsItem { - return api.vt.RequestStats() -} - -// Distribution returns a distribution as a series of (X, Y) chart coordinates, -// where the X axis is the response time in seconds while the Y axis is the amount of -// service value received with a response time close to the X coordinate. -// The distribution is optionally normalized to a sum of 1. -// If nodeStr == "" then the global distribution is returned, otherwise the individual -// distribution of the specified server node. -func (api *PrivateClientAPI) Distribution(nodeStr string, normalized bool) (RtDistribution, error) { - var expFactor utils.ExpirationFactor - if !normalized { - expFactor = utils.ExpFactor(api.vt.StatsExpirer().LogOffset(mclock.Now())) - } - if nodeStr == "" { - return api.vt.RtStats().Distribution(normalized, expFactor), nil - } - if id, err := parseNodeStr(nodeStr); err == nil { - return api.vt.GetNode(id).RtStats().Distribution(normalized, expFactor), nil - } else { - return RtDistribution{}, err - } -} - -// Timeout suggests a timeout value based on either the global distribution or the -// distribution of the specified node. The parameter is the desired rate of timeouts -// assuming a similar distribution in the future. -// Note that the actual timeout should have a sensible minimum bound so that operating -// under ideal working conditions for a long time (for example, using a local server -// with very low response times) will not make it very hard for the system to accommodate -// longer response times in the future. -func (api *PrivateClientAPI) Timeout(nodeStr string, failRate float64) (float64, error) { - if nodeStr == "" { - return float64(api.vt.RtStats().Timeout(failRate)) / float64(time.Second), nil - } - if id, err := parseNodeStr(nodeStr); err == nil { - return float64(api.vt.GetNode(id).RtStats().Timeout(failRate)) / float64(time.Second), nil - } else { - return 0, err - } -} - -// Value calculates the total service value provided either globally or by the specified -// server node, using a weight function based on the given timeout. -func (api *PrivateClientAPI) Value(nodeStr string, timeout float64) (float64, error) { - wt := TimeoutWeights(time.Duration(timeout * float64(time.Second))) - expFactor := utils.ExpFactor(api.vt.StatsExpirer().LogOffset(mclock.Now())) - if nodeStr == "" { - return api.vt.RtStats().Value(wt, expFactor), nil - } - if id, err := parseNodeStr(nodeStr); err == nil { - return api.vt.GetNode(id).RtStats().Value(wt, expFactor), nil - } else { - return 0, err - } -} diff --git a/les/vflux/client/fillset.go b/les/vflux/client/fillset.go deleted file mode 100644 index 0da850bcac..0000000000 --- a/les/vflux/client/fillset.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "sync" - - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -// FillSet tries to read nodes from an input iterator and add them to a node set by -// setting the specified node state flag(s) until the size of the set reaches the target. -// Note that other mechanisms (like other FillSet instances reading from different inputs) -// can also set the same flag(s) and FillSet will always care about the total number of -// nodes having those flags. -type FillSet struct { - lock sync.Mutex - cond *sync.Cond - ns *nodestate.NodeStateMachine - input enode.Iterator - closed bool - flags nodestate.Flags - count, target int -} - -// NewFillSet creates a new FillSet -func NewFillSet(ns *nodestate.NodeStateMachine, input enode.Iterator, flags nodestate.Flags) *FillSet { - fs := &FillSet{ - ns: ns, - input: input, - flags: flags, - } - fs.cond = sync.NewCond(&fs.lock) - - ns.SubscribeState(flags, func(n *enode.Node, oldState, newState nodestate.Flags) { - fs.lock.Lock() - if oldState.Equals(flags) { - fs.count-- - } - if newState.Equals(flags) { - fs.count++ - } - if fs.target > fs.count { - fs.cond.Signal() - } - fs.lock.Unlock() - }) - - go fs.readLoop() - return fs -} - -// readLoop keeps reading nodes from the input and setting the specified flags for them -// whenever the node set size is under the current target -func (fs *FillSet) readLoop() { - for { - fs.lock.Lock() - for fs.target <= fs.count && !fs.closed { - fs.cond.Wait() - } - - fs.lock.Unlock() - if !fs.input.Next() { - return - } - fs.ns.SetState(fs.input.Node(), fs.flags, nodestate.Flags{}, 0) - } -} - -// SetTarget sets the current target for node set size. If the previous target was not -// reached and FillSet was still waiting for the next node from the input then the next -// incoming node will be added to the set regardless of the target. This ensures that -// all nodes coming from the input are eventually added to the set. -func (fs *FillSet) SetTarget(target int) { - fs.lock.Lock() - defer fs.lock.Unlock() - - fs.target = target - if fs.target > fs.count { - fs.cond.Signal() - } -} - -// Close shuts FillSet down and closes the input iterator -func (fs *FillSet) Close() { - fs.lock.Lock() - defer fs.lock.Unlock() - - fs.closed = true - fs.input.Close() - fs.cond.Signal() -} diff --git a/les/vflux/client/fillset_test.go b/les/vflux/client/fillset_test.go deleted file mode 100644 index 652dcf9f62..0000000000 --- a/les/vflux/client/fillset_test.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "crypto/rand" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -type testIter struct { - waitCh chan struct{} - nodeCh chan *enode.Node - node *enode.Node -} - -func (i *testIter) Next() bool { - if _, ok := <-i.waitCh; !ok { - return false - } - i.node = <-i.nodeCh - return true -} - -func (i *testIter) Node() *enode.Node { - return i.node -} - -func (i *testIter) Close() { - close(i.waitCh) -} - -func (i *testIter) push() { - var id enode.ID - rand.Read(id[:]) - i.nodeCh <- enode.SignNull(new(enr.Record), id) -} - -func (i *testIter) waiting(timeout time.Duration) bool { - select { - case i.waitCh <- struct{}{}: - return true - case <-time.After(timeout): - return false - } -} - -func TestFillSet(t *testing.T) { - ns := nodestate.NewNodeStateMachine(nil, nil, &mclock.Simulated{}, testSetup) - iter := &testIter{ - waitCh: make(chan struct{}), - nodeCh: make(chan *enode.Node), - } - fs := NewFillSet(ns, iter, sfTest1) - ns.Start() - - expWaiting := func(i int, push bool) { - for ; i > 0; i-- { - if !iter.waiting(time.Second * 10) { - t.Fatalf("FillSet not waiting for new nodes") - } - if push { - iter.push() - } - } - } - - expNotWaiting := func() { - if iter.waiting(time.Millisecond * 100) { - t.Fatalf("FillSet unexpectedly waiting for new nodes") - } - } - - expNotWaiting() - fs.SetTarget(3) - expWaiting(3, true) - expNotWaiting() - fs.SetTarget(100) - expWaiting(2, true) - expWaiting(1, false) - // lower the target before the previous one has been filled up - fs.SetTarget(0) - iter.push() - expNotWaiting() - fs.SetTarget(10) - expWaiting(4, true) - expNotWaiting() - // remove all previously set flags - ns.ForEach(sfTest1, nodestate.Flags{}, func(node *enode.Node, state nodestate.Flags) { - ns.SetState(node, nodestate.Flags{}, sfTest1, 0) - }) - // now expect FillSet to fill the set up again with 10 new nodes - expWaiting(10, true) - expNotWaiting() - - fs.Close() - ns.Stop() -} diff --git a/les/vflux/client/queueiterator.go b/les/vflux/client/queueiterator.go deleted file mode 100644 index ad3f8df5bb..0000000000 --- a/les/vflux/client/queueiterator.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "sync" - - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -// QueueIterator returns nodes from the specified selectable set in the same order as -// they entered the set. -type QueueIterator struct { - lock sync.Mutex - cond *sync.Cond - - ns *nodestate.NodeStateMachine - queue []*enode.Node - nextNode *enode.Node - waitCallback func(bool) - fifo, closed bool -} - -// NewQueueIterator creates a new QueueIterator. Nodes are selectable if they have all the required -// and none of the disabled flags set. When a node is selected the selectedFlag is set which also -// disables further selectability until it is removed or times out. -func NewQueueIterator(ns *nodestate.NodeStateMachine, requireFlags, disableFlags nodestate.Flags, fifo bool, waitCallback func(bool)) *QueueIterator { - qi := &QueueIterator{ - ns: ns, - fifo: fifo, - waitCallback: waitCallback, - } - qi.cond = sync.NewCond(&qi.lock) - - ns.SubscribeState(requireFlags.Or(disableFlags), func(n *enode.Node, oldState, newState nodestate.Flags) { - oldMatch := oldState.HasAll(requireFlags) && oldState.HasNone(disableFlags) - newMatch := newState.HasAll(requireFlags) && newState.HasNone(disableFlags) - if newMatch == oldMatch { - return - } - - qi.lock.Lock() - defer qi.lock.Unlock() - - if newMatch { - qi.queue = append(qi.queue, n) - } else { - id := n.ID() - for i, qn := range qi.queue { - if qn.ID() == id { - copy(qi.queue[i:len(qi.queue)-1], qi.queue[i+1:]) - qi.queue = qi.queue[:len(qi.queue)-1] - break - } - } - } - qi.cond.Signal() - }) - return qi -} - -// Next moves to the next selectable node. -func (qi *QueueIterator) Next() bool { - qi.lock.Lock() - if !qi.closed && len(qi.queue) == 0 { - if qi.waitCallback != nil { - qi.waitCallback(true) - } - for !qi.closed && len(qi.queue) == 0 { - qi.cond.Wait() - } - if qi.waitCallback != nil { - qi.waitCallback(false) - } - } - if qi.closed { - qi.nextNode = nil - qi.lock.Unlock() - return false - } - // Move to the next node in queue. - if qi.fifo { - qi.nextNode = qi.queue[0] - copy(qi.queue[:len(qi.queue)-1], qi.queue[1:]) - qi.queue = qi.queue[:len(qi.queue)-1] - } else { - qi.nextNode = qi.queue[len(qi.queue)-1] - qi.queue = qi.queue[:len(qi.queue)-1] - } - qi.lock.Unlock() - return true -} - -// Close ends the iterator. -func (qi *QueueIterator) Close() { - qi.lock.Lock() - qi.closed = true - qi.lock.Unlock() - qi.cond.Signal() -} - -// Node returns the current node. -func (qi *QueueIterator) Node() *enode.Node { - qi.lock.Lock() - defer qi.lock.Unlock() - - return qi.nextNode -} diff --git a/les/vflux/client/queueiterator_test.go b/les/vflux/client/queueiterator_test.go deleted file mode 100644 index 400d978e19..0000000000 --- a/les/vflux/client/queueiterator_test.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -func testNode(i int) *enode.Node { - return enode.SignNull(new(enr.Record), testNodeID(i)) -} - -func TestQueueIteratorFIFO(t *testing.T) { - testQueueIterator(t, true) -} - -func TestQueueIteratorLIFO(t *testing.T) { - testQueueIterator(t, false) -} - -func testQueueIterator(t *testing.T, fifo bool) { - ns := nodestate.NewNodeStateMachine(nil, nil, &mclock.Simulated{}, testSetup) - qi := NewQueueIterator(ns, sfTest2, sfTest3.Or(sfTest4), fifo, nil) - ns.Start() - for i := 1; i <= iterTestNodeCount; i++ { - ns.SetState(testNode(i), sfTest1, nodestate.Flags{}, 0) - } - next := func() int { - ch := make(chan struct{}) - go func() { - qi.Next() - close(ch) - }() - select { - case <-ch: - case <-time.After(time.Second * 5): - t.Fatalf("Iterator.Next() timeout") - } - node := qi.Node() - ns.SetState(node, sfTest4, nodestate.Flags{}, 0) - return testNodeIndex(node.ID()) - } - exp := func(i int) { - n := next() - if n != i { - t.Errorf("Wrong item returned by iterator (expected %d, got %d)", i, n) - } - } - explist := func(list []int) { - for i := range list { - if fifo { - exp(list[i]) - } else { - exp(list[len(list)-1-i]) - } - } - } - - ns.SetState(testNode(1), sfTest2, nodestate.Flags{}, 0) - ns.SetState(testNode(2), sfTest2, nodestate.Flags{}, 0) - ns.SetState(testNode(3), sfTest2, nodestate.Flags{}, 0) - explist([]int{1, 2, 3}) - ns.SetState(testNode(4), sfTest2, nodestate.Flags{}, 0) - ns.SetState(testNode(5), sfTest2, nodestate.Flags{}, 0) - ns.SetState(testNode(6), sfTest2, nodestate.Flags{}, 0) - ns.SetState(testNode(5), sfTest3, nodestate.Flags{}, 0) - explist([]int{4, 6}) - ns.SetState(testNode(1), nodestate.Flags{}, sfTest4, 0) - ns.SetState(testNode(2), nodestate.Flags{}, sfTest4, 0) - ns.SetState(testNode(3), nodestate.Flags{}, sfTest4, 0) - ns.SetState(testNode(2), sfTest3, nodestate.Flags{}, 0) - ns.SetState(testNode(2), nodestate.Flags{}, sfTest3, 0) - explist([]int{1, 3, 2}) - ns.Stop() -} diff --git a/les/vflux/client/requestbasket.go b/les/vflux/client/requestbasket.go deleted file mode 100644 index 55d4b165df..0000000000 --- a/les/vflux/client/requestbasket.go +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "io" - - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/rlp" -) - -const basketFactor = 1000000 // reference basket amount and value scale factor - -// referenceBasket keeps track of global request usage statistics and the usual prices -// of each used request type relative to each other. The amounts in the basket are scaled -// up by basketFactor because of the exponential expiration of long-term statistical data. -// Values are scaled so that the sum of all amounts and the sum of all values are equal. -// -// reqValues represent the internal relative value estimates for each request type and are -// calculated as value / amount. The average reqValue of all used requests is 1. -// In other words: SUM(refBasket[type].amount * reqValue[type]) = SUM(refBasket[type].amount) -type referenceBasket struct { - basket requestBasket - reqValues []float64 // contents are read only, new slice is created for each update -} - -// serverBasket collects served request amount and value statistics for a single server. -// -// Values are gradually transferred to the global reference basket with a long time -// constant so that each server basket represents long term usage and price statistics. -// When the transferred part is added to the reference basket the values are scaled so -// that their sum equals the total value calculated according to the previous reqValues. -// The ratio of request values coming from the server basket represent the pricing of -// the specific server and modify the global estimates with a weight proportional to -// the amount of service provided by the server. -type serverBasket struct { - basket requestBasket - rvFactor float64 -} - -type ( - // requestBasket holds amounts and values for each request type. - // These values are exponentially expired (see utils.ExpiredValue). The power of 2 - // exponent is applicable to all values within. - requestBasket struct { - items []basketItem - exp uint64 - } - // basketItem holds amount and value for a single request type. Value is the total - // relative request value accumulated for served requests while amount is the counter - // for each request type. - // Note that these values are both scaled up by basketFactor because of the exponential - // expiration. - basketItem struct { - amount, value uint64 - } -) - -// setExp sets the power of 2 exponent of the structure, scaling base values (the amounts -// and request values) up or down if necessary. -func (b *requestBasket) setExp(exp uint64) { - if exp > b.exp { - shift := exp - b.exp - for i, item := range b.items { - item.amount >>= shift - item.value >>= shift - b.items[i] = item - } - b.exp = exp - } - if exp < b.exp { - shift := b.exp - exp - for i, item := range b.items { - item.amount <<= shift - item.value <<= shift - b.items[i] = item - } - b.exp = exp - } -} - -// init initializes a new server basket with the given service vector size (number of -// different request types) -func (s *serverBasket) init(size int) { - if s.basket.items == nil { - s.basket.items = make([]basketItem, size) - } -} - -// add adds the give type and amount of requests to the basket. Cost is calculated -// according to the server's own cost table. -func (s *serverBasket) add(reqType, reqAmount uint32, reqCost uint64, expFactor utils.ExpirationFactor) { - s.basket.setExp(expFactor.Exp) - i := &s.basket.items[reqType] - i.amount += uint64(float64(uint64(reqAmount)*basketFactor) * expFactor.Factor) - i.value += uint64(float64(reqCost) * s.rvFactor * expFactor.Factor) -} - -// updateRvFactor updates the request value factor that scales server costs into the -// local value dimensions. -func (s *serverBasket) updateRvFactor(rvFactor float64) { - s.rvFactor = rvFactor -} - -// transfer decreases amounts and values in the basket with the given ratio and -// moves the removed amounts into a new basket which is returned and can be added -// to the global reference basket. -func (s *serverBasket) transfer(ratio float64) requestBasket { - res := requestBasket{ - items: make([]basketItem, len(s.basket.items)), - exp: s.basket.exp, - } - for i, v := range s.basket.items { - ta := uint64(float64(v.amount) * ratio) - tv := uint64(float64(v.value) * ratio) - if ta > v.amount { - ta = v.amount - } - if tv > v.value { - tv = v.value - } - s.basket.items[i] = basketItem{v.amount - ta, v.value - tv} - res.items[i] = basketItem{ta, tv} - } - return res -} - -// init initializes the reference basket with the given service vector size (number of -// different request types) -func (r *referenceBasket) init(size int) { - r.reqValues = make([]float64, size) - r.normalize() - r.updateReqValues() -} - -// add adds the transferred part of a server basket to the reference basket while scaling -// value amounts so that their sum equals the total value calculated according to the -// previous reqValues. -func (r *referenceBasket) add(newBasket requestBasket) { - r.basket.setExp(newBasket.exp) - // scale newBasket to match service unit value - var ( - totalCost uint64 - totalValue float64 - ) - for i, v := range newBasket.items { - totalCost += v.value - totalValue += float64(v.amount) * r.reqValues[i] - } - if totalCost > 0 { - // add to reference with scaled values - scaleValues := totalValue / float64(totalCost) - for i, v := range newBasket.items { - r.basket.items[i].amount += v.amount - r.basket.items[i].value += uint64(float64(v.value) * scaleValues) - } - } - r.updateReqValues() -} - -// updateReqValues recalculates reqValues after adding transferred baskets. Note that -// values should be normalized first. -func (r *referenceBasket) updateReqValues() { - r.reqValues = make([]float64, len(r.reqValues)) - for i, b := range r.basket.items { - if b.amount > 0 { - r.reqValues[i] = float64(b.value) / float64(b.amount) - } else { - r.reqValues[i] = 0 - } - } -} - -// normalize ensures that the sum of values equal the sum of amounts in the basket. -func (r *referenceBasket) normalize() { - var sumAmount, sumValue uint64 - for _, b := range r.basket.items { - sumAmount += b.amount - sumValue += b.value - } - add := float64(int64(sumAmount-sumValue)) / float64(sumValue) - for i, b := range r.basket.items { - b.value += uint64(int64(float64(b.value) * add)) - r.basket.items[i] = b - } -} - -// reqValueFactor calculates the request value factor applicable to the server with -// the given announced request cost list -func (r *referenceBasket) reqValueFactor(costList []uint64) float64 { - var ( - totalCost float64 - totalValue uint64 - ) - for i, b := range r.basket.items { - totalCost += float64(costList[i]) * float64(b.amount) // use floats to avoid overflow - totalValue += b.value - } - if totalCost < 1 { - return 0 - } - return float64(totalValue) * basketFactor / totalCost -} - -// EncodeRLP implements rlp.Encoder -func (b *basketItem) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, []interface{}{b.amount, b.value}) -} - -// DecodeRLP implements rlp.Decoder -func (b *basketItem) DecodeRLP(s *rlp.Stream) error { - var item struct { - Amount, Value uint64 - } - if err := s.Decode(&item); err != nil { - return err - } - b.amount, b.value = item.Amount, item.Value - return nil -} - -// EncodeRLP implements rlp.Encoder -func (r *requestBasket) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, []interface{}{r.items, r.exp}) -} - -// DecodeRLP implements rlp.Decoder -func (r *requestBasket) DecodeRLP(s *rlp.Stream) error { - var enc struct { - Items []basketItem - Exp uint64 - } - if err := s.Decode(&enc); err != nil { - return err - } - r.items, r.exp = enc.Items, enc.Exp - return nil -} - -// convertMapping converts a basket loaded from the database into the current format. -// If the available request types and their mapping into the service vector differ from -// the one used when saving the basket then this function reorders old fields and fills -// in previously unknown fields by scaling up amounts and values taken from the -// initialization basket. -func (r requestBasket) convertMapping(oldMapping, newMapping []string, initBasket requestBasket) requestBasket { - nameMap := make(map[string]int) - for i, name := range oldMapping { - nameMap[name] = i - } - rc := requestBasket{items: make([]basketItem, len(newMapping))} - var scale, oldScale, newScale float64 - for i, name := range newMapping { - if ii, ok := nameMap[name]; ok { - rc.items[i] = r.items[ii] - oldScale += float64(initBasket.items[i].amount) * float64(initBasket.items[i].amount) - newScale += float64(rc.items[i].amount) * float64(initBasket.items[i].amount) - } - } - if oldScale > 1e-10 { - scale = newScale / oldScale - } else { - scale = 1 - } - for i, name := range newMapping { - if _, ok := nameMap[name]; !ok { - rc.items[i].amount = uint64(float64(initBasket.items[i].amount) * scale) - rc.items[i].value = uint64(float64(initBasket.items[i].value) * scale) - } - } - return rc -} diff --git a/les/vflux/client/requestbasket_test.go b/les/vflux/client/requestbasket_test.go deleted file mode 100644 index 7c5f87c618..0000000000 --- a/les/vflux/client/requestbasket_test.go +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "math/rand" - "testing" - - "github.com/ethereum/go-ethereum/les/utils" -) - -func checkU64(t *testing.T, name string, value, exp uint64) { - if value != exp { - t.Errorf("Incorrect value for %s: got %d, expected %d", name, value, exp) - } -} - -func checkF64(t *testing.T, name string, value, exp, tol float64) { - if value < exp-tol || value > exp+tol { - t.Errorf("Incorrect value for %s: got %f, expected %f", name, value, exp) - } -} - -func TestServerBasket(t *testing.T) { - var s serverBasket - s.init(2) - // add some requests with different request value factors - s.updateRvFactor(1) - noexp := utils.ExpirationFactor{Factor: 1} - s.add(0, 1000, 10000, noexp) - s.add(1, 3000, 60000, noexp) - s.updateRvFactor(10) - s.add(0, 4000, 4000, noexp) - s.add(1, 2000, 4000, noexp) - s.updateRvFactor(10) - // check basket contents directly - checkU64(t, "s.basket[0].amount", s.basket.items[0].amount, 5000*basketFactor) - checkU64(t, "s.basket[0].value", s.basket.items[0].value, 50000) - checkU64(t, "s.basket[1].amount", s.basket.items[1].amount, 5000*basketFactor) - checkU64(t, "s.basket[1].value", s.basket.items[1].value, 100000) - // transfer 50% of the contents of the basket - transfer1 := s.transfer(0.5) - checkU64(t, "transfer1[0].amount", transfer1.items[0].amount, 2500*basketFactor) - checkU64(t, "transfer1[0].value", transfer1.items[0].value, 25000) - checkU64(t, "transfer1[1].amount", transfer1.items[1].amount, 2500*basketFactor) - checkU64(t, "transfer1[1].value", transfer1.items[1].value, 50000) - // add more requests - s.updateRvFactor(100) - s.add(0, 1000, 100, noexp) - // transfer 25% of the contents of the basket - transfer2 := s.transfer(0.25) - checkU64(t, "transfer2[0].amount", transfer2.items[0].amount, (2500+1000)/4*basketFactor) - checkU64(t, "transfer2[0].value", transfer2.items[0].value, (25000+10000)/4) - checkU64(t, "transfer2[1].amount", transfer2.items[1].amount, 2500/4*basketFactor) - checkU64(t, "transfer2[1].value", transfer2.items[1].value, 50000/4) -} - -func TestConvertMapping(t *testing.T) { - b := requestBasket{items: []basketItem{{3, 3}, {1, 1}, {2, 2}}} - oldMap := []string{"req3", "req1", "req2"} - newMap := []string{"req1", "req2", "req3", "req4"} - init := requestBasket{items: []basketItem{{2, 2}, {4, 4}, {6, 6}, {8, 8}}} - bc := b.convertMapping(oldMap, newMap, init) - checkU64(t, "bc[0].amount", bc.items[0].amount, 1) - checkU64(t, "bc[1].amount", bc.items[1].amount, 2) - checkU64(t, "bc[2].amount", bc.items[2].amount, 3) - checkU64(t, "bc[3].amount", bc.items[3].amount, 4) // 8 should be scaled down to 4 -} - -func TestReqValueFactor(t *testing.T) { - var ref referenceBasket - ref.basket = requestBasket{items: make([]basketItem, 4)} - for i := range ref.basket.items { - ref.basket.items[i].amount = uint64(i+1) * basketFactor - ref.basket.items[i].value = uint64(i+1) * basketFactor - } - ref.init(4) - rvf := ref.reqValueFactor([]uint64{1000, 2000, 3000, 4000}) - // expected value is (1000000+2000000+3000000+4000000) / (1*1000+2*2000+3*3000+4*4000) = 10000000/30000 = 333.333 - checkF64(t, "reqValueFactor", rvf, 333.333, 1) -} - -func TestNormalize(t *testing.T) { - for cycle := 0; cycle < 100; cycle += 1 { - // Initialize data for testing - valueRange, lower := 1000000, 1000000 - ref := referenceBasket{basket: requestBasket{items: make([]basketItem, 10)}} - for i := 0; i < 10; i++ { - ref.basket.items[i].amount = uint64(rand.Intn(valueRange) + lower) - ref.basket.items[i].value = uint64(rand.Intn(valueRange) + lower) - } - ref.normalize() - - // Check whether SUM(amount) ~= SUM(value) - var sumAmount, sumValue uint64 - for i := 0; i < 10; i++ { - sumAmount += ref.basket.items[i].amount - sumValue += ref.basket.items[i].value - } - var epsilon = 0.01 - if float64(sumAmount)*(1+epsilon) < float64(sumValue) || float64(sumAmount)*(1-epsilon) > float64(sumValue) { - t.Fatalf("Failed to normalize sumAmount: %d sumValue: %d", sumAmount, sumValue) - } - } -} - -func TestReqValueAdjustment(t *testing.T) { - var s1, s2 serverBasket - s1.init(3) - s2.init(3) - cost1 := []uint64{30000, 60000, 90000} - cost2 := []uint64{100000, 200000, 300000} - var ref referenceBasket - ref.basket = requestBasket{items: make([]basketItem, 3)} - for i := range ref.basket.items { - ref.basket.items[i].amount = 123 * basketFactor - ref.basket.items[i].value = 123 * basketFactor - } - ref.init(3) - // initial reqValues are expected to be {1, 1, 1} - checkF64(t, "reqValues[0]", ref.reqValues[0], 1, 0.01) - checkF64(t, "reqValues[1]", ref.reqValues[1], 1, 0.01) - checkF64(t, "reqValues[2]", ref.reqValues[2], 1, 0.01) - var logOffset utils.Fixed64 - for period := 0; period < 1000; period++ { - exp := utils.ExpFactor(logOffset) - s1.updateRvFactor(ref.reqValueFactor(cost1)) - s2.updateRvFactor(ref.reqValueFactor(cost2)) - // throw in random requests into each basket using their internal pricing - for i := 0; i < 1000; i++ { - reqType, reqAmount := uint32(rand.Intn(3)), uint32(rand.Intn(10)+1) - reqCost := uint64(reqAmount) * cost1[reqType] - s1.add(reqType, reqAmount, reqCost, exp) - reqType, reqAmount = uint32(rand.Intn(3)), uint32(rand.Intn(10)+1) - reqCost = uint64(reqAmount) * cost2[reqType] - s2.add(reqType, reqAmount, reqCost, exp) - } - ref.add(s1.transfer(0.1)) - ref.add(s2.transfer(0.1)) - ref.normalize() - ref.updateReqValues() - logOffset += utils.Float64ToFixed64(0.1) - } - checkF64(t, "reqValues[0]", ref.reqValues[0], 0.5, 0.01) - checkF64(t, "reqValues[1]", ref.reqValues[1], 1, 0.01) - checkF64(t, "reqValues[2]", ref.reqValues[2], 1.5, 0.01) -} diff --git a/les/vflux/client/serverpool.go b/les/vflux/client/serverpool.go deleted file mode 100644 index 271d6e0224..0000000000 --- a/les/vflux/client/serverpool.go +++ /dev/null @@ -1,605 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "errors" - "math/rand" - "reflect" - "sync" - "sync/atomic" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/p2p/nodestate" - "github.com/ethereum/go-ethereum/rlp" -) - -const ( - minTimeout = time.Millisecond * 500 // minimum request timeout suggested by the server pool - timeoutRefresh = time.Second * 5 // recalculate timeout if older than this - dialCost = 10000 // cost of a TCP dial (used for known node selection weight calculation) - dialWaitStep = 1.5 // exponential multiplier of redial wait time when no value was provided by the server - queryCost = 500 // cost of a UDP pre-negotiation query - queryWaitStep = 1.02 // exponential multiplier of redial wait time when no value was provided by the server - waitThreshold = time.Hour * 2000 // drop node if waiting time is over the threshold - nodeWeightMul = 1000000 // multiplier constant for node weight calculation - nodeWeightThreshold = 100 // minimum weight for keeping a node in the known (valuable) set - minRedialWait = 10 // minimum redial wait time in seconds - preNegLimit = 5 // maximum number of simultaneous pre-negotiation queries - warnQueryFails = 20 // number of consecutive UDP query failures before we print a warning - maxQueryFails = 100 // number of consecutive UDP query failures when then chance of skipping a query reaches 50% -) - -// ServerPool provides a node iterator for dial candidates. The output is a mix of newly discovered -// nodes, a weighted random selection of known (previously valuable) nodes and trusted/paid nodes. -type ServerPool struct { - clock mclock.Clock - unixTime func() int64 - db ethdb.KeyValueStore - - ns *nodestate.NodeStateMachine - vt *ValueTracker - mixer *enode.FairMix - mixSources []enode.Iterator - dialIterator enode.Iterator - validSchemes enr.IdentityScheme - trustedURLs []string - fillSet *FillSet - started, queryFails uint32 - - timeoutLock sync.RWMutex - timeout time.Duration - timeWeights ResponseTimeWeights - timeoutRefreshed mclock.AbsTime - - suggestedTimeoutGauge, totalValueGauge metrics.Gauge - sessionValueMeter metrics.Meter -} - -// nodeHistory keeps track of dial costs which determine node weight together with the -// service value calculated by ValueTracker. -type nodeHistory struct { - dialCost utils.ExpiredValue - redialWaitStart, redialWaitEnd int64 // unix time (seconds) -} - -type nodeHistoryEnc struct { - DialCost utils.ExpiredValue - RedialWaitStart, RedialWaitEnd uint64 -} - -// QueryFunc sends a pre-negotiation query and blocks until a response arrives or timeout occurs. -// It returns 1 if the remote node has confirmed that connection is possible, 0 if not -// possible and -1 if no response arrived (timeout). -type QueryFunc func(*enode.Node) int - -var ( - clientSetup = &nodestate.Setup{Version: 2} - sfHasValue = clientSetup.NewPersistentFlag("hasValue") - sfQuery = clientSetup.NewFlag("query") - sfCanDial = clientSetup.NewFlag("canDial") - sfDialing = clientSetup.NewFlag("dialed") - sfWaitDialTimeout = clientSetup.NewFlag("dialTimeout") - sfConnected = clientSetup.NewFlag("connected") - sfRedialWait = clientSetup.NewFlag("redialWait") - sfAlwaysConnect = clientSetup.NewFlag("alwaysConnect") - sfDialProcess = nodestate.MergeFlags(sfQuery, sfCanDial, sfDialing, sfConnected, sfRedialWait) - - sfiNodeHistory = clientSetup.NewPersistentField("nodeHistory", reflect.TypeOf(nodeHistory{}), - func(field interface{}) ([]byte, error) { - if n, ok := field.(nodeHistory); ok { - ne := nodeHistoryEnc{ - DialCost: n.dialCost, - RedialWaitStart: uint64(n.redialWaitStart), - RedialWaitEnd: uint64(n.redialWaitEnd), - } - enc, err := rlp.EncodeToBytes(&ne) - return enc, err - } - return nil, errors.New("invalid field type") - }, - func(enc []byte) (interface{}, error) { - var ne nodeHistoryEnc - err := rlp.DecodeBytes(enc, &ne) - n := nodeHistory{ - dialCost: ne.DialCost, - redialWaitStart: int64(ne.RedialWaitStart), - redialWaitEnd: int64(ne.RedialWaitEnd), - } - return n, err - }, - ) - sfiNodeWeight = clientSetup.NewField("nodeWeight", reflect.TypeOf(uint64(0))) - sfiConnectedStats = clientSetup.NewField("connectedStats", reflect.TypeOf(ResponseTimeStats{})) - sfiLocalAddress = clientSetup.NewPersistentField("localAddress", reflect.TypeOf(&enr.Record{}), - func(field interface{}) ([]byte, error) { - if enr, ok := field.(*enr.Record); ok { - enc, err := rlp.EncodeToBytes(enr) - return enc, err - } - return nil, errors.New("invalid field type") - }, - func(enc []byte) (interface{}, error) { - var enr enr.Record - if err := rlp.DecodeBytes(enc, &enr); err != nil { - return nil, err - } - return &enr, nil - }, - ) -) - -// NewServerPool creates a new server pool -func NewServerPool(db ethdb.KeyValueStore, dbKey []byte, mixTimeout time.Duration, query QueryFunc, clock mclock.Clock, trustedURLs []string, requestList []RequestInfo) (*ServerPool, enode.Iterator) { - s := &ServerPool{ - db: db, - clock: clock, - unixTime: func() int64 { return time.Now().Unix() }, - validSchemes: enode.ValidSchemes, - trustedURLs: trustedURLs, - vt: NewValueTracker(db, &mclock.System{}, requestList, time.Minute, 1/float64(time.Hour), 1/float64(time.Hour*100), 1/float64(time.Hour*1000)), - ns: nodestate.NewNodeStateMachine(db, []byte(string(dbKey)+"ns:"), clock, clientSetup), - } - s.recalTimeout() - s.mixer = enode.NewFairMix(mixTimeout) - knownSelector := NewWrsIterator(s.ns, sfHasValue, sfDialProcess, sfiNodeWeight) - alwaysConnect := NewQueueIterator(s.ns, sfAlwaysConnect, sfDialProcess, true, nil) - s.mixSources = append(s.mixSources, knownSelector) - s.mixSources = append(s.mixSources, alwaysConnect) - - s.dialIterator = s.mixer - if query != nil { - s.dialIterator = s.addPreNegFilter(s.dialIterator, query) - } - - s.ns.SubscribeState(nodestate.MergeFlags(sfWaitDialTimeout, sfConnected), func(n *enode.Node, oldState, newState nodestate.Flags) { - if oldState.Equals(sfWaitDialTimeout) && newState.IsEmpty() { - // dial timeout, no connection - s.setRedialWait(n, dialCost, dialWaitStep) - s.ns.SetStateSub(n, nodestate.Flags{}, sfDialing, 0) - } - }) - - return s, &serverPoolIterator{ - dialIterator: s.dialIterator, - nextFn: func(node *enode.Node) { - s.ns.Operation(func() { - s.ns.SetStateSub(node, sfDialing, sfCanDial, 0) - s.ns.SetStateSub(node, sfWaitDialTimeout, nodestate.Flags{}, time.Second*10) - }) - }, - nodeFn: s.DialNode, - } -} - -type serverPoolIterator struct { - dialIterator enode.Iterator - nextFn func(*enode.Node) - nodeFn func(*enode.Node) *enode.Node -} - -// Next implements enode.Iterator -func (s *serverPoolIterator) Next() bool { - if s.dialIterator.Next() { - s.nextFn(s.dialIterator.Node()) - return true - } - return false -} - -// Node implements enode.Iterator -func (s *serverPoolIterator) Node() *enode.Node { - return s.nodeFn(s.dialIterator.Node()) -} - -// Close implements enode.Iterator -func (s *serverPoolIterator) Close() { - s.dialIterator.Close() -} - -// AddMetrics adds metrics to the server pool. Should be called before Start(). -func (s *ServerPool) AddMetrics( - suggestedTimeoutGauge, totalValueGauge, serverSelectableGauge, serverConnectedGauge metrics.Gauge, - sessionValueMeter, serverDialedMeter metrics.Meter) { - s.suggestedTimeoutGauge = suggestedTimeoutGauge - s.totalValueGauge = totalValueGauge - s.sessionValueMeter = sessionValueMeter - if serverSelectableGauge != nil { - s.ns.AddLogMetrics(sfHasValue, sfDialProcess, "selectable", nil, nil, serverSelectableGauge) - } - if serverDialedMeter != nil { - s.ns.AddLogMetrics(sfDialing, nodestate.Flags{}, "dialed", serverDialedMeter, nil, nil) - } - if serverConnectedGauge != nil { - s.ns.AddLogMetrics(sfConnected, nodestate.Flags{}, "connected", nil, nil, serverConnectedGauge) - } -} - -// AddSource adds a node discovery source to the server pool (should be called before start) -func (s *ServerPool) AddSource(source enode.Iterator) { - if source != nil { - s.mixSources = append(s.mixSources, source) - } -} - -// addPreNegFilter installs a node filter mechanism that performs a pre-negotiation query. -// Nodes that are filtered out and does not appear on the output iterator are put back -// into redialWait state. -func (s *ServerPool) addPreNegFilter(input enode.Iterator, query QueryFunc) enode.Iterator { - s.fillSet = NewFillSet(s.ns, input, sfQuery) - s.ns.SubscribeState(sfDialProcess, func(n *enode.Node, oldState, newState nodestate.Flags) { - if !newState.Equals(sfQuery) { - if newState.HasAll(sfQuery) { - // remove query flag if the node is already somewhere in the dial process - s.ns.SetStateSub(n, nodestate.Flags{}, sfQuery, 0) - } - return - } - fails := atomic.LoadUint32(&s.queryFails) - failMax := fails - if failMax > maxQueryFails { - failMax = maxQueryFails - } - if rand.Intn(maxQueryFails*2) < int(failMax) { - // skip pre-negotiation with increasing chance, max 50% - // this ensures that the client can operate even if UDP is not working at all - s.ns.SetStateSub(n, sfCanDial, nodestate.Flags{}, time.Second*10) - // set canDial before resetting queried so that FillSet will not read more - // candidates unnecessarily - s.ns.SetStateSub(n, nodestate.Flags{}, sfQuery, 0) - return - } - go func() { - q := query(n) - if q == -1 { - atomic.AddUint32(&s.queryFails, 1) - fails++ - if fails%warnQueryFails == 0 { - // warn if a large number of consecutive queries have failed - log.Warn("UDP connection queries failed", "count", fails) - } - } else { - atomic.StoreUint32(&s.queryFails, 0) - } - s.ns.Operation(func() { - // we are no longer running in the operation that the callback belongs to, start a new one because of setRedialWait - if q == 1 { - s.ns.SetStateSub(n, sfCanDial, nodestate.Flags{}, time.Second*10) - } else { - s.setRedialWait(n, queryCost, queryWaitStep) - } - s.ns.SetStateSub(n, nodestate.Flags{}, sfQuery, 0) - }) - }() - }) - return NewQueueIterator(s.ns, sfCanDial, nodestate.Flags{}, false, func(waiting bool) { - if waiting { - s.fillSet.SetTarget(preNegLimit) - } else { - s.fillSet.SetTarget(0) - } - }) -} - -// Start starts the server pool. Note that NodeStateMachine should be started first. -func (s *ServerPool) Start() { - s.ns.Start() - for _, iter := range s.mixSources { - // add sources to mixer at startup because the mixer instantly tries to read them - // which should only happen after NodeStateMachine has been started - s.mixer.AddSource(iter) - } - for _, url := range s.trustedURLs { - if node, err := enode.Parse(s.validSchemes, url); err == nil { - s.ns.SetState(node, sfAlwaysConnect, nodestate.Flags{}, 0) - } else { - log.Error("Invalid trusted server URL", "url", url, "error", err) - } - } - unixTime := s.unixTime() - s.ns.Operation(func() { - s.ns.ForEach(sfHasValue, nodestate.Flags{}, func(node *enode.Node, state nodestate.Flags) { - s.calculateWeight(node) - if n, ok := s.ns.GetField(node, sfiNodeHistory).(nodeHistory); ok && n.redialWaitEnd > unixTime { - wait := n.redialWaitEnd - unixTime - lastWait := n.redialWaitEnd - n.redialWaitStart - if wait > lastWait { - // if the time until expiration is larger than the last suggested - // waiting time then the system clock was probably adjusted - wait = lastWait - } - s.ns.SetStateSub(node, sfRedialWait, nodestate.Flags{}, time.Duration(wait)*time.Second) - } - }) - }) - atomic.StoreUint32(&s.started, 1) -} - -// Stop stops the server pool -func (s *ServerPool) Stop() { - if s.fillSet != nil { - s.fillSet.Close() - } - s.ns.Operation(func() { - s.ns.ForEach(sfConnected, nodestate.Flags{}, func(n *enode.Node, state nodestate.Flags) { - // recalculate weight of connected nodes in order to update hasValue flag if necessary - s.calculateWeight(n) - }) - }) - s.ns.Stop() - s.vt.Stop() -} - -// RegisterNode implements serverPeerSubscriber -func (s *ServerPool) RegisterNode(node *enode.Node) (*NodeValueTracker, error) { - if atomic.LoadUint32(&s.started) == 0 { - return nil, errors.New("server pool not started yet") - } - nvt := s.vt.Register(node.ID()) - s.ns.Operation(func() { - s.ns.SetStateSub(node, sfConnected, sfDialing.Or(sfWaitDialTimeout), 0) - s.ns.SetFieldSub(node, sfiConnectedStats, nvt.RtStats()) - if node.IP().IsLoopback() { - s.ns.SetFieldSub(node, sfiLocalAddress, node.Record()) - } - }) - return nvt, nil -} - -// UnregisterNode implements serverPeerSubscriber -func (s *ServerPool) UnregisterNode(node *enode.Node) { - s.ns.Operation(func() { - s.setRedialWait(node, dialCost, dialWaitStep) - s.ns.SetStateSub(node, nodestate.Flags{}, sfConnected, 0) - s.ns.SetFieldSub(node, sfiConnectedStats, nil) - }) - s.vt.Unregister(node.ID()) -} - -// recalTimeout calculates the current recommended timeout. This value is used by -// the client as a "soft timeout" value. It also affects the service value calculation -// of individual nodes. -func (s *ServerPool) recalTimeout() { - // Use cached result if possible, avoid recalculating too frequently. - s.timeoutLock.RLock() - refreshed := s.timeoutRefreshed - s.timeoutLock.RUnlock() - now := s.clock.Now() - if refreshed != 0 && time.Duration(now-refreshed) < timeoutRefresh { - return - } - // Cached result is stale, recalculate a new one. - rts := s.vt.RtStats() - - // Add a fake statistic here. It is an easy way to initialize with some - // conservative values when the database is new. As soon as we have a - // considerable amount of real stats this small value won't matter. - rts.Add(time.Second*2, 10, s.vt.StatsExpFactor()) - - // Use either 10% failure rate timeout or twice the median response time - // as the recommended timeout. - timeout := minTimeout - if t := rts.Timeout(0.1); t > timeout { - timeout = t - } - if t := rts.Timeout(0.5) * 2; t > timeout { - timeout = t - } - s.timeoutLock.Lock() - if s.timeout != timeout { - s.timeout = timeout - s.timeWeights = TimeoutWeights(s.timeout) - - if s.suggestedTimeoutGauge != nil { - s.suggestedTimeoutGauge.Update(int64(s.timeout / time.Millisecond)) - } - if s.totalValueGauge != nil { - s.totalValueGauge.Update(int64(rts.Value(s.timeWeights, s.vt.StatsExpFactor()))) - } - } - s.timeoutRefreshed = now - s.timeoutLock.Unlock() -} - -// GetTimeout returns the recommended request timeout. -func (s *ServerPool) GetTimeout() time.Duration { - s.recalTimeout() - s.timeoutLock.RLock() - defer s.timeoutLock.RUnlock() - return s.timeout -} - -// getTimeoutAndWeight returns the recommended request timeout as well as the -// response time weight which is necessary to calculate service value. -func (s *ServerPool) getTimeoutAndWeight() (time.Duration, ResponseTimeWeights) { - s.recalTimeout() - s.timeoutLock.RLock() - defer s.timeoutLock.RUnlock() - return s.timeout, s.timeWeights -} - -// addDialCost adds the given amount of dial cost to the node history and returns the current -// amount of total dial cost -func (s *ServerPool) addDialCost(n *nodeHistory, amount int64) uint64 { - logOffset := s.vt.StatsExpirer().LogOffset(s.clock.Now()) - if amount > 0 { - n.dialCost.Add(amount, logOffset) - } - totalDialCost := n.dialCost.Value(logOffset) - if totalDialCost < dialCost { - totalDialCost = dialCost - } - return totalDialCost -} - -// serviceValue returns the service value accumulated in this session and in total -func (s *ServerPool) serviceValue(node *enode.Node) (sessionValue, totalValue float64) { - nvt := s.vt.GetNode(node.ID()) - if nvt == nil { - return 0, 0 - } - currentStats := nvt.RtStats() - _, timeWeights := s.getTimeoutAndWeight() - expFactor := s.vt.StatsExpFactor() - - totalValue = currentStats.Value(timeWeights, expFactor) - if connStats, ok := s.ns.GetField(node, sfiConnectedStats).(ResponseTimeStats); ok { - diff := currentStats - diff.SubStats(&connStats) - sessionValue = diff.Value(timeWeights, expFactor) - if s.sessionValueMeter != nil { - s.sessionValueMeter.Mark(int64(sessionValue)) - } - } - return -} - -// updateWeight calculates the node weight and updates the nodeWeight field and the -// hasValue flag. It also saves the node state if necessary. -// Note: this function should run inside a NodeStateMachine operation -func (s *ServerPool) updateWeight(node *enode.Node, totalValue float64, totalDialCost uint64) { - weight := uint64(totalValue * nodeWeightMul / float64(totalDialCost)) - if weight >= nodeWeightThreshold { - s.ns.SetStateSub(node, sfHasValue, nodestate.Flags{}, 0) - s.ns.SetFieldSub(node, sfiNodeWeight, weight) - } else { - s.ns.SetStateSub(node, nodestate.Flags{}, sfHasValue, 0) - s.ns.SetFieldSub(node, sfiNodeWeight, nil) - s.ns.SetFieldSub(node, sfiNodeHistory, nil) - s.ns.SetFieldSub(node, sfiLocalAddress, nil) - } - s.ns.Persist(node) // saved if node history or hasValue changed -} - -// setRedialWait calculates and sets the redialWait timeout based on the service value -// and dial cost accumulated during the last session/attempt and in total. -// The waiting time is raised exponentially if no service value has been received in order -// to prevent dialing an unresponsive node frequently for a very long time just because it -// was useful in the past. It can still be occasionally dialed though and once it provides -// a significant amount of service value again its waiting time is quickly reduced or reset -// to the minimum. -// Note: node weight is also recalculated and updated by this function. -// Note 2: this function should run inside a NodeStateMachine operation -func (s *ServerPool) setRedialWait(node *enode.Node, addDialCost int64, waitStep float64) { - n, _ := s.ns.GetField(node, sfiNodeHistory).(nodeHistory) - sessionValue, totalValue := s.serviceValue(node) - totalDialCost := s.addDialCost(&n, addDialCost) - - // if the current dial session has yielded at least the average value/dial cost ratio - // then the waiting time should be reset to the minimum. If the session value - // is below average but still positive then timeout is limited to the ratio of - // average / current service value multiplied by the minimum timeout. If the attempt - // was unsuccessful then timeout is raised exponentially without limitation. - // Note: dialCost is used in the formula below even if dial was not attempted at all - // because the pre-negotiation query did not return a positive result. In this case - // the ratio has no meaning anyway and waitFactor is always raised, though in smaller - // steps because queries are cheaper and therefore we can allow more failed attempts. - unixTime := s.unixTime() - plannedTimeout := float64(n.redialWaitEnd - n.redialWaitStart) // last planned redialWait timeout - var actualWait float64 // actual waiting time elapsed - if unixTime > n.redialWaitEnd { - // the planned timeout has elapsed - actualWait = plannedTimeout - } else { - // if the node was redialed earlier then we do not raise the planned timeout - // exponentially because that could lead to the timeout rising very high in - // a short amount of time - // Note that in case of an early redial actualWait also includes the dial - // timeout or connection time of the last attempt but it still serves its - // purpose of preventing the timeout rising quicker than linearly as a function - // of total time elapsed without a successful connection. - actualWait = float64(unixTime - n.redialWaitStart) - } - // raise timeout exponentially if the last planned timeout has elapsed - // (use at least the last planned timeout otherwise) - nextTimeout := actualWait * waitStep - if plannedTimeout > nextTimeout { - nextTimeout = plannedTimeout - } - // we reduce the waiting time if the server has provided service value during the - // connection (but never under the minimum) - a := totalValue * dialCost * float64(minRedialWait) - b := float64(totalDialCost) * sessionValue - if a < b*nextTimeout { - nextTimeout = a / b - } - if nextTimeout < minRedialWait { - nextTimeout = minRedialWait - } - wait := time.Duration(float64(time.Second) * nextTimeout) - if wait < waitThreshold { - n.redialWaitStart = unixTime - n.redialWaitEnd = unixTime + int64(nextTimeout) - s.ns.SetFieldSub(node, sfiNodeHistory, n) - s.ns.SetStateSub(node, sfRedialWait, nodestate.Flags{}, wait) - s.updateWeight(node, totalValue, totalDialCost) - } else { - // discard known node statistics if waiting time is very long because the node - // hasn't been responsive for a very long time - s.ns.SetFieldSub(node, sfiNodeHistory, nil) - s.ns.SetFieldSub(node, sfiNodeWeight, nil) - s.ns.SetStateSub(node, nodestate.Flags{}, sfHasValue, 0) - } -} - -// calculateWeight calculates and sets the node weight without altering the node history. -// This function should be called during startup and shutdown only, otherwise setRedialWait -// will keep the weights updated as the underlying statistics are adjusted. -// Note: this function should run inside a NodeStateMachine operation -func (s *ServerPool) calculateWeight(node *enode.Node) { - n, _ := s.ns.GetField(node, sfiNodeHistory).(nodeHistory) - _, totalValue := s.serviceValue(node) - totalDialCost := s.addDialCost(&n, 0) - s.updateWeight(node, totalValue, totalDialCost) -} - -// API returns the vflux client API -func (s *ServerPool) API() *PrivateClientAPI { - return NewPrivateClientAPI(s.vt) -} - -type dummyIdentity enode.ID - -func (id dummyIdentity) Verify(r *enr.Record, sig []byte) error { return nil } -func (id dummyIdentity) NodeAddr(r *enr.Record) []byte { return id[:] } - -// DialNode replaces the given enode with a locally generated one containing the ENR -// stored in the sfiLocalAddress field if present. This workaround ensures that nodes -// on the local network can be dialed at the local address if a connection has been -// successfully established previously. -// Note that NodeStateMachine always remembers the enode with the latest version of -// the remote signed ENR. ENR filtering should be performed on that version while -// dialNode should be used for dialing the node over TCP or UDP. -func (s *ServerPool) DialNode(n *enode.Node) *enode.Node { - if enr, ok := s.ns.GetField(n, sfiLocalAddress).(*enr.Record); ok { - n, _ := enode.New(dummyIdentity(n.ID()), enr) - return n - } - return n -} - -// Persist immediately stores the state of a node in the node database -func (s *ServerPool) Persist(n *enode.Node) { - s.ns.Persist(n) -} diff --git a/les/vflux/client/serverpool_test.go b/les/vflux/client/serverpool_test.go deleted file mode 100644 index f1fd987d7e..0000000000 --- a/les/vflux/client/serverpool_test.go +++ /dev/null @@ -1,392 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "math/rand" - "strconv" - "sync" - "sync/atomic" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/ethdb/memorydb" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" -) - -const ( - spTestNodes = 1000 - spTestTarget = 5 - spTestLength = 10000 - spMinTotal = 40000 - spMaxTotal = 50000 -) - -func testNodeID(i int) enode.ID { - return enode.ID{42, byte(i % 256), byte(i / 256)} -} - -func testNodeIndex(id enode.ID) int { - if id[0] != 42 { - return -1 - } - return int(id[1]) + int(id[2])*256 -} - -type ServerPoolTest struct { - db ethdb.KeyValueStore - clock *mclock.Simulated - quit chan chan struct{} - preNeg, preNegFail bool - sp *ServerPool - spi enode.Iterator - input enode.Iterator - testNodes []spTestNode - trusted []string - waitCount, waitEnded int32 - - // preNegLock protects the cycle counter, testNodes list and its connected field - // (accessed from both the main thread and the preNeg callback) - preNegLock sync.Mutex - queryWg *sync.WaitGroup // a new wait group is created each time the simulation is started - stopping bool // stopping avoid calling queryWg.Add after queryWg.Wait - - cycle, conn, servedConn int - serviceCycles, dialCount int - disconnect map[int][]int -} - -type spTestNode struct { - connectCycles, waitCycles int - nextConnCycle, totalConn int - connected, service bool - node *enode.Node -} - -func newServerPoolTest(preNeg, preNegFail bool) *ServerPoolTest { - nodes := make([]*enode.Node, spTestNodes) - for i := range nodes { - nodes[i] = enode.SignNull(&enr.Record{}, testNodeID(i)) - } - return &ServerPoolTest{ - clock: &mclock.Simulated{}, - db: memorydb.New(), - input: enode.CycleNodes(nodes), - testNodes: make([]spTestNode, spTestNodes), - preNeg: preNeg, - preNegFail: preNegFail, - } -} - -func (s *ServerPoolTest) beginWait() { - // ensure that dialIterator and the maximal number of pre-neg queries are not all stuck in a waiting state - for atomic.AddInt32(&s.waitCount, 1) > preNegLimit { - atomic.AddInt32(&s.waitCount, -1) - s.clock.Run(time.Second) - } -} - -func (s *ServerPoolTest) endWait() { - atomic.AddInt32(&s.waitCount, -1) - atomic.AddInt32(&s.waitEnded, 1) -} - -func (s *ServerPoolTest) addTrusted(i int) { - s.trusted = append(s.trusted, enode.SignNull(&enr.Record{}, testNodeID(i)).String()) -} - -func (s *ServerPoolTest) start() { - var testQuery QueryFunc - s.queryWg = new(sync.WaitGroup) - if s.preNeg { - testQuery = func(node *enode.Node) int { - s.preNegLock.Lock() - if s.stopping { - s.preNegLock.Unlock() - return 0 - } - s.queryWg.Add(1) - idx := testNodeIndex(node.ID()) - n := &s.testNodes[idx] - canConnect := !n.connected && n.connectCycles != 0 && s.cycle >= n.nextConnCycle - s.preNegLock.Unlock() - defer s.queryWg.Done() - - if s.preNegFail { - // simulate a scenario where UDP queries never work - s.beginWait() - s.clock.Sleep(time.Second * 5) - s.endWait() - return -1 - } - switch idx % 3 { - case 0: - // pre-neg returns true only if connection is possible - if canConnect { - return 1 - } - return 0 - case 1: - // pre-neg returns true but connection might still fail - return 1 - case 2: - // pre-neg returns true if connection is possible, otherwise timeout (node unresponsive) - if canConnect { - return 1 - } - s.beginWait() - s.clock.Sleep(time.Second * 5) - s.endWait() - return -1 - } - return -1 - } - } - - requestList := make([]RequestInfo, testReqTypes) - for i := range requestList { - requestList[i] = RequestInfo{Name: "testreq" + strconv.Itoa(i), InitAmount: 1, InitValue: 1} - } - - s.sp, s.spi = NewServerPool(s.db, []byte("sp:"), 0, testQuery, s.clock, s.trusted, requestList) - s.sp.AddSource(s.input) - s.sp.validSchemes = enode.ValidSchemesForTesting - s.sp.unixTime = func() int64 { return int64(s.clock.Now()) / int64(time.Second) } - s.disconnect = make(map[int][]int) - s.sp.Start() - s.quit = make(chan chan struct{}) - go func() { - last := int32(-1) - for { - select { - case <-time.After(time.Millisecond * 100): - c := atomic.LoadInt32(&s.waitEnded) - if c == last { - // advance clock if test is stuck (might happen in rare cases) - s.clock.Run(time.Second) - } - last = c - case quit := <-s.quit: - close(quit) - return - } - } - }() -} - -func (s *ServerPoolTest) stop() { - // disable further queries and wait if one is currently running - s.preNegLock.Lock() - s.stopping = true - s.preNegLock.Unlock() - s.queryWg.Wait() - - quit := make(chan struct{}) - s.quit <- quit - <-quit - s.sp.Stop() - s.spi.Close() - s.preNegLock.Lock() - s.stopping = false - s.preNegLock.Unlock() - for i := range s.testNodes { - n := &s.testNodes[i] - if n.connected { - n.totalConn += s.cycle - } - n.connected = false - n.node = nil - n.nextConnCycle = 0 - } - s.conn, s.servedConn = 0, 0 -} - -func (s *ServerPoolTest) run() { - for count := spTestLength; count > 0; count-- { - if dcList := s.disconnect[s.cycle]; dcList != nil { - for _, idx := range dcList { - n := &s.testNodes[idx] - s.sp.UnregisterNode(n.node) - n.totalConn += s.cycle - s.preNegLock.Lock() - n.connected = false - s.preNegLock.Unlock() - n.node = nil - s.conn-- - if n.service { - s.servedConn-- - } - n.nextConnCycle = s.cycle + n.waitCycles - } - delete(s.disconnect, s.cycle) - } - if s.conn < spTestTarget { - s.dialCount++ - s.beginWait() - s.spi.Next() - s.endWait() - dial := s.spi.Node() - id := dial.ID() - idx := testNodeIndex(id) - n := &s.testNodes[idx] - if !n.connected && n.connectCycles != 0 && s.cycle >= n.nextConnCycle { - s.conn++ - if n.service { - s.servedConn++ - } - n.totalConn -= s.cycle - s.preNegLock.Lock() - n.connected = true - s.preNegLock.Unlock() - dc := s.cycle + n.connectCycles - s.disconnect[dc] = append(s.disconnect[dc], idx) - n.node = dial - nv, _ := s.sp.RegisterNode(n.node) - if n.service { - nv.Served([]ServedRequest{{ReqType: 0, Amount: 100}}, 0) - } - } - } - s.serviceCycles += s.servedConn - s.clock.Run(time.Second) - s.preNegLock.Lock() - s.cycle++ - s.preNegLock.Unlock() - } -} - -func (s *ServerPoolTest) setNodes(count, conn, wait int, service, trusted bool) (res []int) { - for ; count > 0; count-- { - idx := rand.Intn(spTestNodes) - for s.testNodes[idx].connectCycles != 0 || s.testNodes[idx].connected { - idx = rand.Intn(spTestNodes) - } - res = append(res, idx) - s.preNegLock.Lock() - s.testNodes[idx] = spTestNode{ - connectCycles: conn, - waitCycles: wait, - service: service, - } - s.preNegLock.Unlock() - if trusted { - s.addTrusted(idx) - } - } - return -} - -func (s *ServerPoolTest) resetNodes() { - for i, n := range s.testNodes { - if n.connected { - n.totalConn += s.cycle - s.sp.UnregisterNode(n.node) - } - s.preNegLock.Lock() - s.testNodes[i] = spTestNode{totalConn: n.totalConn} - s.preNegLock.Unlock() - } - s.conn, s.servedConn = 0, 0 - s.disconnect = make(map[int][]int) - s.trusted = nil -} - -func (s *ServerPoolTest) checkNodes(t *testing.T, nodes []int) { - var sum int - for _, idx := range nodes { - n := &s.testNodes[idx] - if n.connected { - n.totalConn += s.cycle - } - sum += n.totalConn - n.totalConn = 0 - if n.connected { - n.totalConn -= s.cycle - } - } - if sum < spMinTotal || sum > spMaxTotal { - t.Errorf("Total connection amount %d outside expected range %d to %d", sum, spMinTotal, spMaxTotal) - } -} - -func TestServerPool(t *testing.T) { testServerPool(t, false, false) } -func TestServerPoolWithPreNeg(t *testing.T) { testServerPool(t, true, false) } -func TestServerPoolWithPreNegFail(t *testing.T) { testServerPool(t, true, true) } -func testServerPool(t *testing.T, preNeg, fail bool) { - s := newServerPoolTest(preNeg, fail) - nodes := s.setNodes(100, 200, 200, true, false) - s.setNodes(100, 20, 20, false, false) - s.start() - s.run() - s.stop() - s.checkNodes(t, nodes) -} - -func TestServerPoolChangedNodes(t *testing.T) { testServerPoolChangedNodes(t, false) } -func TestServerPoolChangedNodesWithPreNeg(t *testing.T) { testServerPoolChangedNodes(t, true) } -func testServerPoolChangedNodes(t *testing.T, preNeg bool) { - s := newServerPoolTest(preNeg, false) - nodes := s.setNodes(100, 200, 200, true, false) - s.setNodes(100, 20, 20, false, false) - s.start() - s.run() - s.checkNodes(t, nodes) - for i := 0; i < 3; i++ { - s.resetNodes() - nodes := s.setNodes(100, 200, 200, true, false) - s.setNodes(100, 20, 20, false, false) - s.run() - s.checkNodes(t, nodes) - } - s.stop() -} - -func TestServerPoolRestartNoDiscovery(t *testing.T) { testServerPoolRestartNoDiscovery(t, false) } -func TestServerPoolRestartNoDiscoveryWithPreNeg(t *testing.T) { - testServerPoolRestartNoDiscovery(t, true) -} -func testServerPoolRestartNoDiscovery(t *testing.T, preNeg bool) { - s := newServerPoolTest(preNeg, false) - nodes := s.setNodes(100, 200, 200, true, false) - s.setNodes(100, 20, 20, false, false) - s.start() - s.run() - s.stop() - s.checkNodes(t, nodes) - s.input = nil - s.start() - s.run() - s.stop() - s.checkNodes(t, nodes) -} - -func TestServerPoolTrustedNoDiscovery(t *testing.T) { testServerPoolTrustedNoDiscovery(t, false) } -func TestServerPoolTrustedNoDiscoveryWithPreNeg(t *testing.T) { - testServerPoolTrustedNoDiscovery(t, true) -} -func testServerPoolTrustedNoDiscovery(t *testing.T, preNeg bool) { - s := newServerPoolTest(preNeg, false) - trusted := s.setNodes(200, 200, 200, true, true) - s.input = nil - s.start() - s.run() - s.stop() - s.checkNodes(t, trusted) -} diff --git a/les/vflux/client/timestats.go b/les/vflux/client/timestats.go deleted file mode 100644 index 7f1ffdbe26..0000000000 --- a/les/vflux/client/timestats.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "io" - "math" - "time" - - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/rlp" -) - -const ( - minResponseTime = time.Millisecond * 50 - maxResponseTime = time.Second * 10 - timeStatLength = 32 - weightScaleFactor = 1000000 -) - -// ResponseTimeStats is the response time distribution of a set of answered requests, -// weighted with request value, either served by a single server or aggregated for -// multiple servers. -// It it a fixed length (timeStatLength) distribution vector with linear interpolation. -// The X axis (the time values) are not linear, they should be transformed with -// TimeToStatScale and StatScaleToTime. -type ( - ResponseTimeStats struct { - stats [timeStatLength]uint64 - exp uint64 - } - ResponseTimeWeights [timeStatLength]float64 -) - -var timeStatsLogFactor = (timeStatLength - 1) / (math.Log(float64(maxResponseTime)/float64(minResponseTime)) + 1) - -// TimeToStatScale converts a response time to a distribution vector index. The index -// is represented by a float64 so that linear interpolation can be applied. -func TimeToStatScale(d time.Duration) float64 { - if d < 0 { - return 0 - } - r := float64(d) / float64(minResponseTime) - if r > 1 { - r = math.Log(r) + 1 - } - r *= timeStatsLogFactor - if r > timeStatLength-1 { - return timeStatLength - 1 - } - return r -} - -// StatScaleToTime converts a distribution vector index to a response time. The index -// is represented by a float64 so that linear interpolation can be applied. -func StatScaleToTime(r float64) time.Duration { - r /= timeStatsLogFactor - if r > 1 { - r = math.Exp(r - 1) - } - return time.Duration(r * float64(minResponseTime)) -} - -// TimeoutWeights calculates the weight function used for calculating service value -// based on the response time distribution of the received service. -// It is based on the request timeout value of the system. It consists of a half cosine -// function starting with 1, crossing zero at timeout and reaching -1 at 2*timeout. -// After 2*timeout the weight is constant -1. -func TimeoutWeights(timeout time.Duration) (res ResponseTimeWeights) { - for i := range res { - t := StatScaleToTime(float64(i)) - if t < 2*timeout { - res[i] = math.Cos(math.Pi / 2 * float64(t) / float64(timeout)) - } else { - res[i] = -1 - } - } - return -} - -// EncodeRLP implements rlp.Encoder -func (rt *ResponseTimeStats) EncodeRLP(w io.Writer) error { - enc := struct { - Stats [timeStatLength]uint64 - Exp uint64 - }{rt.stats, rt.exp} - return rlp.Encode(w, &enc) -} - -// DecodeRLP implements rlp.Decoder -func (rt *ResponseTimeStats) DecodeRLP(s *rlp.Stream) error { - var enc struct { - Stats [timeStatLength]uint64 - Exp uint64 - } - if err := s.Decode(&enc); err != nil { - return err - } - rt.stats, rt.exp = enc.Stats, enc.Exp - return nil -} - -// Add adds a new response time with the given weight to the distribution. -func (rt *ResponseTimeStats) Add(respTime time.Duration, weight float64, expFactor utils.ExpirationFactor) { - rt.setExp(expFactor.Exp) - weight *= expFactor.Factor * weightScaleFactor - r := TimeToStatScale(respTime) - i := int(r) - r -= float64(i) - rt.stats[i] += uint64(weight * (1 - r)) - if i < timeStatLength-1 { - rt.stats[i+1] += uint64(weight * r) - } -} - -// setExp sets the power of 2 exponent of the structure, scaling base values (the vector -// itself) up or down if necessary. -func (rt *ResponseTimeStats) setExp(exp uint64) { - if exp > rt.exp { - shift := exp - rt.exp - for i, v := range rt.stats { - rt.stats[i] = v >> shift - } - rt.exp = exp - } - if exp < rt.exp { - shift := rt.exp - exp - for i, v := range rt.stats { - rt.stats[i] = v << shift - } - rt.exp = exp - } -} - -// Value calculates the total service value based on the given distribution, using the -// specified weight function. -func (rt ResponseTimeStats) Value(weights ResponseTimeWeights, expFactor utils.ExpirationFactor) float64 { - var v float64 - for i, s := range rt.stats { - v += float64(s) * weights[i] - } - if v < 0 { - return 0 - } - return expFactor.Value(v, rt.exp) / weightScaleFactor -} - -// AddStats adds the given ResponseTimeStats to the current one. -func (rt *ResponseTimeStats) AddStats(s *ResponseTimeStats) { - rt.setExp(s.exp) - for i, v := range s.stats { - rt.stats[i] += v - } -} - -// SubStats subtracts the given ResponseTimeStats from the current one. -func (rt *ResponseTimeStats) SubStats(s *ResponseTimeStats) { - rt.setExp(s.exp) - for i, v := range s.stats { - if v < rt.stats[i] { - rt.stats[i] -= v - } else { - rt.stats[i] = 0 - } - } -} - -// Timeout suggests a timeout value based on the previous distribution. The parameter -// is the desired rate of timeouts assuming a similar distribution in the future. -// Note that the actual timeout should have a sensible minimum bound so that operating -// under ideal working conditions for a long time (for example, using a local server -// with very low response times) will not make it very hard for the system to accommodate -// longer response times in the future. -func (rt ResponseTimeStats) Timeout(failRatio float64) time.Duration { - var sum uint64 - for _, v := range rt.stats { - sum += v - } - s := uint64(float64(sum) * failRatio) - i := timeStatLength - 1 - for i > 0 && s >= rt.stats[i] { - s -= rt.stats[i] - i-- - } - r := float64(i) + 0.5 - if rt.stats[i] > 0 { - r -= float64(s) / float64(rt.stats[i]) - } - if r < 0 { - r = 0 - } - th := StatScaleToTime(r) - if th > maxResponseTime { - th = maxResponseTime - } - return th -} - -// RtDistribution represents a distribution as a series of (X, Y) chart coordinates, -// where the X axis is the response time in seconds while the Y axis is the amount of -// service value received with a response time close to the X coordinate. -type RtDistribution [timeStatLength][2]float64 - -// Distribution returns a RtDistribution, optionally normalized to a sum of 1. -func (rt ResponseTimeStats) Distribution(normalized bool, expFactor utils.ExpirationFactor) (res RtDistribution) { - var mul float64 - if normalized { - var sum uint64 - for _, v := range rt.stats { - sum += v - } - if sum > 0 { - mul = 1 / float64(sum) - } - } else { - mul = expFactor.Value(float64(1)/weightScaleFactor, rt.exp) - } - for i, v := range rt.stats { - res[i][0] = float64(StatScaleToTime(float64(i))) / float64(time.Second) - res[i][1] = float64(v) * mul - } - return -} diff --git a/les/vflux/client/timestats_test.go b/les/vflux/client/timestats_test.go deleted file mode 100644 index a28460171e..0000000000 --- a/les/vflux/client/timestats_test.go +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "math" - "math/rand" - "testing" - "time" - - "github.com/ethereum/go-ethereum/les/utils" -) - -func TestTransition(t *testing.T) { - var epsilon = 0.01 - var cases = []time.Duration{ - time.Millisecond, minResponseTime, - time.Second, time.Second * 5, maxResponseTime, - } - for _, c := range cases { - got := StatScaleToTime(TimeToStatScale(c)) - if float64(got)*(1+epsilon) < float64(c) || float64(got)*(1-epsilon) > float64(c) { - t.Fatalf("Failed to transition back") - } - } - // If the time is too large(exceeds the max response time. - got := StatScaleToTime(TimeToStatScale(2 * maxResponseTime)) - if float64(got)*(1+epsilon) < float64(maxResponseTime) || float64(got)*(1-epsilon) > float64(maxResponseTime) { - t.Fatalf("Failed to transition back") - } -} - -var maxResponseWeights = TimeoutWeights(maxResponseTime) - -func TestValue(t *testing.T) { - noexp := utils.ExpirationFactor{Factor: 1} - for i := 0; i < 1000; i++ { - max := minResponseTime + time.Duration(rand.Int63n(int64(maxResponseTime-minResponseTime))) - min := minResponseTime + time.Duration(rand.Int63n(int64(max-minResponseTime))) - timeout := max/2 + time.Duration(rand.Int63n(int64(maxResponseTime-max/2))) - s := makeRangeStats(min, max, 1000, noexp) - value := s.Value(TimeoutWeights(timeout), noexp) - // calculate the average weight (the average of the given range of the half cosine - // weight function). - minx := math.Pi / 2 * float64(min) / float64(timeout) - maxx := math.Pi / 2 * float64(max) / float64(timeout) - avgWeight := (math.Sin(maxx) - math.Sin(minx)) / (maxx - minx) - expv := 1000 * avgWeight - if expv < 0 { - expv = 0 - } - if value < expv-10 || value > expv+10 { - t.Errorf("Value failed (expected %v, got %v)", expv, value) - } - } -} - -func TestAddSubExpire(t *testing.T) { - var ( - sum1, sum2 ResponseTimeStats - sum1ValueExp, sum2ValueExp float64 - logOffset utils.Fixed64 - ) - for i := 0; i < 1000; i++ { - exp := utils.ExpFactor(logOffset) - max := minResponseTime + time.Duration(rand.Int63n(int64(maxResponseTime-minResponseTime))) - min := minResponseTime + time.Duration(rand.Int63n(int64(max-minResponseTime))) - s := makeRangeStats(min, max, 1000, exp) - value := s.Value(maxResponseWeights, exp) - sum1.AddStats(&s) - sum1ValueExp += value - if rand.Intn(2) == 1 { - sum2.AddStats(&s) - sum2ValueExp += value - } - logOffset += utils.Float64ToFixed64(0.001 / math.Log(2)) - sum1ValueExp -= sum1ValueExp * 0.001 - sum2ValueExp -= sum2ValueExp * 0.001 - } - exp := utils.ExpFactor(logOffset) - sum1Value := sum1.Value(maxResponseWeights, exp) - if sum1Value < sum1ValueExp*0.99 || sum1Value > sum1ValueExp*1.01 { - t.Errorf("sum1Value failed (expected %v, got %v)", sum1ValueExp, sum1Value) - } - sum2Value := sum2.Value(maxResponseWeights, exp) - if sum2Value < sum2ValueExp*0.99 || sum2Value > sum2ValueExp*1.01 { - t.Errorf("sum2Value failed (expected %v, got %v)", sum2ValueExp, sum2Value) - } - diff := sum1 - diff.SubStats(&sum2) - diffValue := diff.Value(maxResponseWeights, exp) - diffValueExp := sum1ValueExp - sum2ValueExp - if diffValue < diffValueExp*0.99 || diffValue > diffValueExp*1.01 { - t.Errorf("diffValue failed (expected %v, got %v)", diffValueExp, diffValue) - } -} - -func TestTimeout(t *testing.T) { - testTimeoutRange(t, 0, time.Second) - testTimeoutRange(t, time.Second, time.Second*2) - testTimeoutRange(t, time.Second, maxResponseTime) -} - -func testTimeoutRange(t *testing.T, min, max time.Duration) { - s := makeRangeStats(min, max, 1000, utils.ExpirationFactor{Factor: 1}) - for i := 2; i < 9; i++ { - to := s.Timeout(float64(i) / 10) - exp := max - (max-min)*time.Duration(i)/10 - tol := (max - min) / 50 - if to < exp-tol || to > exp+tol { - t.Errorf("Timeout failed (expected %v, got %v)", exp, to) - } - } -} - -func makeRangeStats(min, max time.Duration, amount float64, exp utils.ExpirationFactor) ResponseTimeStats { - var s ResponseTimeStats - amount /= 1000 - for i := 0; i < 1000; i++ { - s.Add(min+(max-min)*time.Duration(i)/999, amount, exp) - } - return s -} diff --git a/les/vflux/client/valuetracker.go b/les/vflux/client/valuetracker.go deleted file mode 100644 index 806d0c7d75..0000000000 --- a/les/vflux/client/valuetracker.go +++ /dev/null @@ -1,506 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "bytes" - "fmt" - "math" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/rlp" -) - -const ( - vtVersion = 1 // database encoding format for ValueTracker - nvtVersion = 1 // database encoding format for NodeValueTracker -) - -var ( - vtKey = []byte("vt:") - vtNodeKey = []byte("vtNode:") -) - -// NodeValueTracker collects service value statistics for a specific server node -type NodeValueTracker struct { - lock sync.Mutex - - vt *ValueTracker - rtStats, lastRtStats ResponseTimeStats - lastTransfer mclock.AbsTime - basket serverBasket - reqCosts []uint64 - reqValues []float64 -} - -// UpdateCosts updates the node value tracker's request cost table -func (nv *NodeValueTracker) UpdateCosts(reqCosts []uint64) { - nv.vt.lock.Lock() - defer nv.vt.lock.Unlock() - - nv.updateCosts(reqCosts, nv.vt.refBasket.reqValues, nv.vt.refBasket.reqValueFactor(reqCosts)) -} - -// updateCosts updates the request cost table of the server. The request value factor -// is also updated based on the given cost table and the current reference basket. -// Note that the contents of the referenced reqValues slice will not change; a new -// reference is passed if the values are updated by ValueTracker. -func (nv *NodeValueTracker) updateCosts(reqCosts []uint64, reqValues []float64, rvFactor float64) { - nv.lock.Lock() - defer nv.lock.Unlock() - - nv.reqCosts = reqCosts - nv.reqValues = reqValues - nv.basket.updateRvFactor(rvFactor) -} - -// transferStats returns request basket and response time statistics that should be -// added to the global statistics. The contents of the server's own request basket are -// gradually transferred to the main reference basket and removed from the server basket -// with the specified transfer rate. -// The response time statistics are retained at both places and therefore the global -// distribution is always the sum of the individual server distributions. -func (nv *NodeValueTracker) transferStats(now mclock.AbsTime, transferRate float64) (requestBasket, ResponseTimeStats) { - nv.lock.Lock() - defer nv.lock.Unlock() - - dt := now - nv.lastTransfer - nv.lastTransfer = now - if dt < 0 { - dt = 0 - } - recentRtStats := nv.rtStats - recentRtStats.SubStats(&nv.lastRtStats) - nv.lastRtStats = nv.rtStats - return nv.basket.transfer(-math.Expm1(-transferRate * float64(dt))), recentRtStats -} - -type ServedRequest struct { - ReqType, Amount uint32 -} - -// Served adds a served request to the node's statistics. An actual request may be composed -// of one or more request types (service vector indices). -func (nv *NodeValueTracker) Served(reqs []ServedRequest, respTime time.Duration) { - nv.vt.statsExpLock.RLock() - expFactor := nv.vt.statsExpFactor - nv.vt.statsExpLock.RUnlock() - - nv.lock.Lock() - defer nv.lock.Unlock() - - var value float64 - for _, r := range reqs { - nv.basket.add(r.ReqType, r.Amount, nv.reqCosts[r.ReqType]*uint64(r.Amount), expFactor) - value += nv.reqValues[r.ReqType] * float64(r.Amount) - } - nv.rtStats.Add(respTime, value, expFactor) -} - -// RtStats returns the node's own response time distribution statistics -func (nv *NodeValueTracker) RtStats() ResponseTimeStats { - nv.lock.Lock() - defer nv.lock.Unlock() - - return nv.rtStats -} - -// ValueTracker coordinates service value calculation for individual servers and updates -// global statistics -type ValueTracker struct { - clock mclock.Clock - lock sync.Mutex - quit chan chan struct{} - db ethdb.KeyValueStore - connected map[enode.ID]*NodeValueTracker - reqTypeCount int - - refBasket referenceBasket - mappings [][]string - currentMapping int - initRefBasket requestBasket - rtStats ResponseTimeStats - - transferRate float64 - statsExpLock sync.RWMutex - statsExpRate, offlineExpRate float64 - statsExpirer utils.Expirer - statsExpFactor utils.ExpirationFactor -} - -type valueTrackerEncV1 struct { - Mappings [][]string - RefBasketMapping uint - RefBasket requestBasket - RtStats ResponseTimeStats - ExpOffset, SavedAt uint64 -} - -type nodeValueTrackerEncV1 struct { - RtStats ResponseTimeStats - ServerBasketMapping uint - ServerBasket requestBasket -} - -// RequestInfo is an initializer structure for the service vector. -type RequestInfo struct { - // Name identifies the request type and is used for re-mapping the service vector if necessary - Name string - // InitAmount and InitValue are used to initialize the reference basket - InitAmount, InitValue float64 -} - -// NewValueTracker creates a new ValueTracker and loads its previously saved state from -// the database if possible. -func NewValueTracker(db ethdb.KeyValueStore, clock mclock.Clock, reqInfo []RequestInfo, updatePeriod time.Duration, transferRate, statsExpRate, offlineExpRate float64) *ValueTracker { - now := clock.Now() - - initRefBasket := requestBasket{items: make([]basketItem, len(reqInfo))} - mapping := make([]string, len(reqInfo)) - - var sumAmount, sumValue float64 - for _, req := range reqInfo { - sumAmount += req.InitAmount - sumValue += req.InitAmount * req.InitValue - } - scaleValues := sumAmount * basketFactor / sumValue - for i, req := range reqInfo { - mapping[i] = req.Name - initRefBasket.items[i].amount = uint64(req.InitAmount * basketFactor) - initRefBasket.items[i].value = uint64(req.InitAmount * req.InitValue * scaleValues) - } - - vt := &ValueTracker{ - clock: clock, - connected: make(map[enode.ID]*NodeValueTracker), - quit: make(chan chan struct{}), - db: db, - reqTypeCount: len(initRefBasket.items), - initRefBasket: initRefBasket, - transferRate: transferRate, - statsExpRate: statsExpRate, - offlineExpRate: offlineExpRate, - } - if vt.loadFromDb(mapping) != nil { - // previous state not saved or invalid, init with default values - vt.refBasket.basket = initRefBasket - vt.mappings = [][]string{mapping} - vt.currentMapping = 0 - } - vt.statsExpirer.SetRate(now, statsExpRate) - vt.refBasket.init(vt.reqTypeCount) - vt.periodicUpdate() - - go func() { - for { - select { - case <-clock.After(updatePeriod): - vt.lock.Lock() - vt.periodicUpdate() - vt.lock.Unlock() - case quit := <-vt.quit: - close(quit) - return - } - } - }() - return vt -} - -// StatsExpirer returns the statistics expirer so that other values can be expired -// with the same rate as the service value statistics. -func (vt *ValueTracker) StatsExpirer() *utils.Expirer { - return &vt.statsExpirer -} - -// StatsExpFactor returns the current expiration factor so that other values can be expired -// with the same rate as the service value statistics. -func (vt *ValueTracker) StatsExpFactor() utils.ExpirationFactor { - vt.statsExpLock.RLock() - defer vt.statsExpLock.RUnlock() - - return vt.statsExpFactor -} - -// loadFromDb loads the value tracker's state from the database and converts saved -// request basket index mapping if it does not match the specified index to name mapping. -func (vt *ValueTracker) loadFromDb(mapping []string) error { - enc, err := vt.db.Get(vtKey) - if err != nil { - return err - } - r := bytes.NewReader(enc) - var version uint - if err := rlp.Decode(r, &version); err != nil { - log.Error("Decoding value tracker state failed", "err", err) - return err - } - if version != vtVersion { - log.Error("Unknown ValueTracker version", "stored", version, "current", nvtVersion) - return fmt.Errorf("Unknown ValueTracker version %d (current version is %d)", version, vtVersion) - } - var vte valueTrackerEncV1 - if err := rlp.Decode(r, &vte); err != nil { - log.Error("Decoding value tracker state failed", "err", err) - return err - } - logOffset := utils.Fixed64(vte.ExpOffset) - dt := time.Now().UnixNano() - int64(vte.SavedAt) - if dt > 0 { - logOffset += utils.Float64ToFixed64(float64(dt) * vt.offlineExpRate / math.Log(2)) - } - vt.statsExpirer.SetLogOffset(vt.clock.Now(), logOffset) - vt.rtStats = vte.RtStats - vt.mappings = vte.Mappings - vt.currentMapping = -1 -loop: - for i, m := range vt.mappings { - if len(m) != len(mapping) { - continue loop - } - for j, s := range mapping { - if m[j] != s { - continue loop - } - } - vt.currentMapping = i - break - } - if vt.currentMapping == -1 { - vt.currentMapping = len(vt.mappings) - vt.mappings = append(vt.mappings, mapping) - } - if int(vte.RefBasketMapping) == vt.currentMapping { - vt.refBasket.basket = vte.RefBasket - } else { - if vte.RefBasketMapping >= uint(len(vt.mappings)) { - log.Error("Unknown request basket mapping", "stored", vte.RefBasketMapping, "current", vt.currentMapping) - return fmt.Errorf("Unknown request basket mapping %d (current version is %d)", vte.RefBasketMapping, vt.currentMapping) - } - vt.refBasket.basket = vte.RefBasket.convertMapping(vt.mappings[vte.RefBasketMapping], mapping, vt.initRefBasket) - } - return nil -} - -// saveToDb saves the value tracker's state to the database -func (vt *ValueTracker) saveToDb() { - vte := valueTrackerEncV1{ - Mappings: vt.mappings, - RefBasketMapping: uint(vt.currentMapping), - RefBasket: vt.refBasket.basket, - RtStats: vt.rtStats, - ExpOffset: uint64(vt.statsExpirer.LogOffset(vt.clock.Now())), - SavedAt: uint64(time.Now().UnixNano()), - } - enc1, err := rlp.EncodeToBytes(uint(vtVersion)) - if err != nil { - log.Error("Encoding value tracker state failed", "err", err) - return - } - enc2, err := rlp.EncodeToBytes(&vte) - if err != nil { - log.Error("Encoding value tracker state failed", "err", err) - return - } - if err := vt.db.Put(vtKey, append(enc1, enc2...)); err != nil { - log.Error("Saving value tracker state failed", "err", err) - } -} - -// Stop saves the value tracker's state and each loaded node's individual state and -// returns after shutting the internal goroutines down. -func (vt *ValueTracker) Stop() { - quit := make(chan struct{}) - vt.quit <- quit - <-quit - vt.lock.Lock() - vt.periodicUpdate() - for id, nv := range vt.connected { - vt.saveNode(id, nv) - } - vt.connected = nil - vt.saveToDb() - vt.lock.Unlock() -} - -// Register adds a server node to the value tracker -func (vt *ValueTracker) Register(id enode.ID) *NodeValueTracker { - vt.lock.Lock() - defer vt.lock.Unlock() - - if vt.connected == nil { - // ValueTracker has already been stopped - return nil - } - nv := vt.loadOrNewNode(id) - reqTypeCount := len(vt.refBasket.reqValues) - nv.reqCosts = make([]uint64, reqTypeCount) - nv.lastTransfer = vt.clock.Now() - nv.reqValues = vt.refBasket.reqValues - nv.basket.init(reqTypeCount) - - vt.connected[id] = nv - return nv -} - -// Unregister removes a server node from the value tracker -func (vt *ValueTracker) Unregister(id enode.ID) { - vt.lock.Lock() - defer vt.lock.Unlock() - - if nv := vt.connected[id]; nv != nil { - vt.saveNode(id, nv) - delete(vt.connected, id) - } -} - -// GetNode returns an individual server node's value tracker. If it did not exist before -// then a new node is created. -func (vt *ValueTracker) GetNode(id enode.ID) *NodeValueTracker { - vt.lock.Lock() - defer vt.lock.Unlock() - - return vt.loadOrNewNode(id) -} - -// loadOrNewNode returns an individual server node's value tracker. If it did not exist before -// then a new node is created. -func (vt *ValueTracker) loadOrNewNode(id enode.ID) *NodeValueTracker { - if nv, ok := vt.connected[id]; ok { - return nv - } - nv := &NodeValueTracker{vt: vt, lastTransfer: vt.clock.Now()} - enc, err := vt.db.Get(append(vtNodeKey, id[:]...)) - if err != nil { - return nv - } - r := bytes.NewReader(enc) - var version uint - if err := rlp.Decode(r, &version); err != nil { - log.Error("Failed to decode node value tracker", "id", id, "err", err) - return nv - } - if version != nvtVersion { - log.Error("Unknown NodeValueTracker version", "stored", version, "current", nvtVersion) - return nv - } - var nve nodeValueTrackerEncV1 - if err := rlp.Decode(r, &nve); err != nil { - log.Error("Failed to decode node value tracker", "id", id, "err", err) - return nv - } - nv.rtStats = nve.RtStats - nv.lastRtStats = nve.RtStats - if int(nve.ServerBasketMapping) == vt.currentMapping { - nv.basket.basket = nve.ServerBasket - } else { - if nve.ServerBasketMapping >= uint(len(vt.mappings)) { - log.Error("Unknown request basket mapping", "stored", nve.ServerBasketMapping, "current", vt.currentMapping) - return nv - } - nv.basket.basket = nve.ServerBasket.convertMapping(vt.mappings[nve.ServerBasketMapping], vt.mappings[vt.currentMapping], vt.initRefBasket) - } - return nv -} - -// saveNode saves a server node's value tracker to the database -func (vt *ValueTracker) saveNode(id enode.ID, nv *NodeValueTracker) { - recentRtStats := nv.rtStats - recentRtStats.SubStats(&nv.lastRtStats) - vt.rtStats.AddStats(&recentRtStats) - nv.lastRtStats = nv.rtStats - - nve := nodeValueTrackerEncV1{ - RtStats: nv.rtStats, - ServerBasketMapping: uint(vt.currentMapping), - ServerBasket: nv.basket.basket, - } - enc1, err := rlp.EncodeToBytes(uint(nvtVersion)) - if err != nil { - log.Error("Failed to encode service value information", "id", id, "err", err) - return - } - enc2, err := rlp.EncodeToBytes(&nve) - if err != nil { - log.Error("Failed to encode service value information", "id", id, "err", err) - return - } - if err := vt.db.Put(append(vtNodeKey, id[:]...), append(enc1, enc2...)); err != nil { - log.Error("Failed to save service value information", "id", id, "err", err) - } -} - -// RtStats returns the global response time distribution statistics -func (vt *ValueTracker) RtStats() ResponseTimeStats { - vt.lock.Lock() - defer vt.lock.Unlock() - - vt.periodicUpdate() - return vt.rtStats -} - -// periodicUpdate transfers individual node data to the global statistics, normalizes -// the reference basket and updates request values. The global state is also saved to -// the database with each update. -func (vt *ValueTracker) periodicUpdate() { - now := vt.clock.Now() - vt.statsExpLock.Lock() - vt.statsExpFactor = utils.ExpFactor(vt.statsExpirer.LogOffset(now)) - vt.statsExpLock.Unlock() - - for _, nv := range vt.connected { - basket, rtStats := nv.transferStats(now, vt.transferRate) - vt.refBasket.add(basket) - vt.rtStats.AddStats(&rtStats) - } - vt.refBasket.normalize() - vt.refBasket.updateReqValues() - for _, nv := range vt.connected { - nv.updateCosts(nv.reqCosts, vt.refBasket.reqValues, vt.refBasket.reqValueFactor(nv.reqCosts)) - } - vt.saveToDb() -} - -type RequestStatsItem struct { - Name string - ReqAmount, ReqValue float64 -} - -// RequestStats returns the current contents of the reference request basket, with -// request values meaning average per request rather than total. -func (vt *ValueTracker) RequestStats() []RequestStatsItem { - vt.statsExpLock.RLock() - expFactor := vt.statsExpFactor - vt.statsExpLock.RUnlock() - vt.lock.Lock() - defer vt.lock.Unlock() - - vt.periodicUpdate() - res := make([]RequestStatsItem, len(vt.refBasket.basket.items)) - for i, item := range vt.refBasket.basket.items { - res[i].Name = vt.mappings[vt.currentMapping][i] - res[i].ReqAmount = expFactor.Value(float64(item.amount)/basketFactor, vt.refBasket.basket.exp) - res[i].ReqValue = vt.refBasket.reqValues[i] - } - return res -} diff --git a/les/vflux/client/valuetracker_test.go b/les/vflux/client/valuetracker_test.go deleted file mode 100644 index 87a337be8d..0000000000 --- a/les/vflux/client/valuetracker_test.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "math" - "math/rand" - "strconv" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb/memorydb" - "github.com/ethereum/go-ethereum/p2p/enode" - - "github.com/ethereum/go-ethereum/les/utils" -) - -const ( - testReqTypes = 3 - testNodeCount = 5 - testReqCount = 10000 - testRounds = 10 -) - -func TestValueTracker(t *testing.T) { - db := memorydb.New() - clock := &mclock.Simulated{} - requestList := make([]RequestInfo, testReqTypes) - relPrices := make([]float64, testReqTypes) - totalAmount := make([]uint64, testReqTypes) - for i := range requestList { - requestList[i] = RequestInfo{Name: "testreq" + strconv.Itoa(i), InitAmount: 1, InitValue: 1} - totalAmount[i] = 1 - relPrices[i] = rand.Float64() + 0.1 - } - nodes := make([]*NodeValueTracker, testNodeCount) - for round := 0; round < testRounds; round++ { - makeRequests := round < testRounds-2 - useExpiration := round == testRounds-1 - var expRate float64 - if useExpiration { - expRate = math.Log(2) / float64(time.Hour*100) - } - - vt := NewValueTracker(db, clock, requestList, time.Minute, 1/float64(time.Hour), expRate, expRate) - updateCosts := func(i int) { - costList := make([]uint64, testReqTypes) - baseCost := rand.Float64()*10000000 + 100000 - for j := range costList { - costList[j] = uint64(baseCost * relPrices[j]) - } - nodes[i].UpdateCosts(costList) - } - for i := range nodes { - nodes[i] = vt.Register(enode.ID{byte(i)}) - updateCosts(i) - } - if makeRequests { - for i := 0; i < testReqCount; i++ { - reqType := rand.Intn(testReqTypes) - reqAmount := rand.Intn(10) + 1 - node := rand.Intn(testNodeCount) - respTime := time.Duration((rand.Float64() + 1) * float64(time.Second) * float64(node+1) / testNodeCount) - totalAmount[reqType] += uint64(reqAmount) - nodes[node].Served([]ServedRequest{{uint32(reqType), uint32(reqAmount)}}, respTime) - clock.Run(time.Second) - } - } else { - clock.Run(time.Hour * 100) - if useExpiration { - for i, a := range totalAmount { - totalAmount[i] = a / 2 - } - } - } - vt.Stop() - var sumrp, sumrv float64 - for i, rp := range relPrices { - sumrp += rp - sumrv += vt.refBasket.reqValues[i] - } - for i, rp := range relPrices { - ratio := vt.refBasket.reqValues[i] * sumrp / (rp * sumrv) - if ratio < 0.99 || ratio > 1.01 { - t.Errorf("reqValues (%v) does not match relPrices (%v)", vt.refBasket.reqValues, relPrices) - break - } - } - exp := utils.ExpFactor(vt.StatsExpirer().LogOffset(clock.Now())) - basketAmount := make([]uint64, testReqTypes) - for i, bi := range vt.refBasket.basket.items { - basketAmount[i] += uint64(exp.Value(float64(bi.amount), vt.refBasket.basket.exp)) - } - if makeRequests { - // if we did not make requests in this round then we expect all amounts to be - // in the reference basket - for _, node := range nodes { - for i, bi := range node.basket.basket.items { - basketAmount[i] += uint64(exp.Value(float64(bi.amount), node.basket.basket.exp)) - } - } - } - for i, a := range basketAmount { - amount := a / basketFactor - if amount+10 < totalAmount[i] || amount > totalAmount[i]+10 { - t.Errorf("totalAmount[%d] mismatch in round %d (expected %d, got %d)", i, round, totalAmount[i], amount) - } - } - var sumValue float64 - for _, node := range nodes { - s := node.RtStats() - sumValue += s.Value(maxResponseWeights, exp) - } - s := vt.RtStats() - mainValue := s.Value(maxResponseWeights, exp) - if sumValue < mainValue-10 || sumValue > mainValue+10 { - t.Errorf("Main rtStats value does not match sum of node rtStats values in round %d (main %v, sum %v)", round, mainValue, sumValue) - } - } -} diff --git a/les/vflux/client/wrsiterator.go b/les/vflux/client/wrsiterator.go deleted file mode 100644 index 1b37cba6e5..0000000000 --- a/les/vflux/client/wrsiterator.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "sync" - - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -// WrsIterator returns nodes from the specified selectable set with a weighted random -// selection. Selection weights are provided by a callback function. -type WrsIterator struct { - lock sync.Mutex - cond *sync.Cond - - ns *nodestate.NodeStateMachine - wrs *utils.WeightedRandomSelect - nextNode *enode.Node - closed bool -} - -// NewWrsIterator creates a new WrsIterator. Nodes are selectable if they have all the required -// and none of the disabled flags set. When a node is selected the selectedFlag is set which also -// disables further selectability until it is removed or times out. -func NewWrsIterator(ns *nodestate.NodeStateMachine, requireFlags, disableFlags nodestate.Flags, weightField nodestate.Field) *WrsIterator { - wfn := func(i interface{}) uint64 { - n := ns.GetNode(i.(enode.ID)) - if n == nil { - return 0 - } - wt, _ := ns.GetField(n, weightField).(uint64) - return wt - } - - w := &WrsIterator{ - ns: ns, - wrs: utils.NewWeightedRandomSelect(wfn), - } - w.cond = sync.NewCond(&w.lock) - - ns.SubscribeField(weightField, func(n *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { - if state.HasAll(requireFlags) && state.HasNone(disableFlags) { - w.lock.Lock() - w.wrs.Update(n.ID()) - w.lock.Unlock() - w.cond.Signal() - } - }) - - ns.SubscribeState(requireFlags.Or(disableFlags), func(n *enode.Node, oldState, newState nodestate.Flags) { - oldMatch := oldState.HasAll(requireFlags) && oldState.HasNone(disableFlags) - newMatch := newState.HasAll(requireFlags) && newState.HasNone(disableFlags) - if newMatch == oldMatch { - return - } - - w.lock.Lock() - if newMatch { - w.wrs.Update(n.ID()) - } else { - w.wrs.Remove(n.ID()) - } - w.lock.Unlock() - w.cond.Signal() - }) - return w -} - -// Next selects the next node. -func (w *WrsIterator) Next() bool { - w.nextNode = w.chooseNode() - return w.nextNode != nil -} - -func (w *WrsIterator) chooseNode() *enode.Node { - w.lock.Lock() - defer w.lock.Unlock() - - for { - for !w.closed && w.wrs.IsEmpty() { - w.cond.Wait() - } - if w.closed { - return nil - } - // Choose the next node at random. Even though w.wrs is guaranteed - // non-empty here, Choose might return nil if all items have weight - // zero. - if c := w.wrs.Choose(); c != nil { - id := c.(enode.ID) - w.wrs.Remove(id) - return w.ns.GetNode(id) - } - } -} - -// Close ends the iterator. -func (w *WrsIterator) Close() { - w.lock.Lock() - w.closed = true - w.lock.Unlock() - w.cond.Signal() -} - -// Node returns the current node. -func (w *WrsIterator) Node() *enode.Node { - w.lock.Lock() - defer w.lock.Unlock() - return w.nextNode -} diff --git a/les/vflux/client/wrsiterator_test.go b/les/vflux/client/wrsiterator_test.go deleted file mode 100644 index 77bb5ee0ca..0000000000 --- a/les/vflux/client/wrsiterator_test.go +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "reflect" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -var ( - testSetup = &nodestate.Setup{} - sfTest1 = testSetup.NewFlag("test1") - sfTest2 = testSetup.NewFlag("test2") - sfTest3 = testSetup.NewFlag("test3") - sfTest4 = testSetup.NewFlag("test4") - sfiTestWeight = testSetup.NewField("nodeWeight", reflect.TypeOf(uint64(0))) -) - -const iterTestNodeCount = 6 - -func TestWrsIterator(t *testing.T) { - ns := nodestate.NewNodeStateMachine(nil, nil, &mclock.Simulated{}, testSetup) - w := NewWrsIterator(ns, sfTest2, sfTest3.Or(sfTest4), sfiTestWeight) - ns.Start() - for i := 1; i <= iterTestNodeCount; i++ { - ns.SetState(testNode(i), sfTest1, nodestate.Flags{}, 0) - ns.SetField(testNode(i), sfiTestWeight, uint64(1)) - } - next := func() int { - ch := make(chan struct{}) - go func() { - w.Next() - close(ch) - }() - select { - case <-ch: - case <-time.After(time.Second * 5): - t.Fatalf("Iterator.Next() timeout") - } - node := w.Node() - ns.SetState(node, sfTest4, nodestate.Flags{}, 0) - return testNodeIndex(node.ID()) - } - set := make(map[int]bool) - expset := func() { - for len(set) > 0 { - n := next() - if !set[n] { - t.Errorf("Item returned by iterator not in the expected set (got %d)", n) - } - delete(set, n) - } - } - - ns.SetState(testNode(1), sfTest2, nodestate.Flags{}, 0) - ns.SetState(testNode(2), sfTest2, nodestate.Flags{}, 0) - ns.SetState(testNode(3), sfTest2, nodestate.Flags{}, 0) - set[1] = true - set[2] = true - set[3] = true - expset() - ns.SetState(testNode(4), sfTest2, nodestate.Flags{}, 0) - ns.SetState(testNode(5), sfTest2.Or(sfTest3), nodestate.Flags{}, 0) - ns.SetState(testNode(6), sfTest2, nodestate.Flags{}, 0) - set[4] = true - set[6] = true - expset() - ns.SetField(testNode(2), sfiTestWeight, uint64(0)) - ns.SetState(testNode(1), nodestate.Flags{}, sfTest4, 0) - ns.SetState(testNode(2), nodestate.Flags{}, sfTest4, 0) - ns.SetState(testNode(3), nodestate.Flags{}, sfTest4, 0) - set[1] = true - set[3] = true - expset() - ns.SetField(testNode(2), sfiTestWeight, uint64(1)) - ns.SetState(testNode(2), nodestate.Flags{}, sfTest2, 0) - ns.SetState(testNode(1), nodestate.Flags{}, sfTest4, 0) - ns.SetState(testNode(2), sfTest2, sfTest4, 0) - ns.SetState(testNode(3), nodestate.Flags{}, sfTest4, 0) - set[1] = true - set[2] = true - set[3] = true - expset() - ns.Stop() -} diff --git a/les/vflux/requests.go b/les/vflux/requests.go deleted file mode 100644 index 5abae2f537..0000000000 --- a/les/vflux/requests.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package vflux - -import ( - "errors" - "math" - "math/big" - - "github.com/ethereum/go-ethereum/rlp" -) - -var ErrNoReply = errors.New("no reply for given request") - -const ( - MaxRequestLength = 16 // max number of individual requests in a batch - CapacityQueryName = "cq" - CapacityQueryMaxLen = 16 -) - -type ( - // Request describes a single vflux request inside a batch. Service and request - // type are identified by strings, parameters are RLP encoded. - Request struct { - Service, Name string - Params []byte - } - // Requests are a batch of vflux requests - Requests []Request - - // Replies are the replies to a batch of requests - Replies [][]byte - - // CapacityQueryReq is the encoding format of the capacity query - CapacityQueryReq struct { - Bias uint64 // seconds - AddTokens []IntOrInf - } - // CapacityQueryReply is the encoding format of the response to the capacity query - CapacityQueryReply []uint64 -) - -// Add encodes and adds a new request to the batch -func (r *Requests) Add(service, name string, val interface{}) (int, error) { - enc, err := rlp.EncodeToBytes(val) - if err != nil { - return -1, err - } - *r = append(*r, Request{ - Service: service, - Name: name, - Params: enc, - }) - return len(*r) - 1, nil -} - -// Get decodes the reply to the i-th request in the batch -func (r Replies) Get(i int, val interface{}) error { - if i < 0 || i >= len(r) { - return ErrNoReply - } - return rlp.DecodeBytes(r[i], val) -} - -const ( - IntNonNegative = iota - IntNegative - IntPlusInf - IntMinusInf -) - -// IntOrInf is the encoding format for arbitrary length signed integers that can also -// hold the values of +Inf or -Inf -type IntOrInf struct { - Type uint8 - Value big.Int -} - -// BigInt returns the value as a big.Int or panics if the value is infinity -func (i *IntOrInf) BigInt() *big.Int { - switch i.Type { - case IntNonNegative: - return new(big.Int).Set(&i.Value) - case IntNegative: - return new(big.Int).Neg(&i.Value) - case IntPlusInf: - panic(nil) // caller should check Inf() before trying to convert to big.Int - case IntMinusInf: - panic(nil) - } - return &big.Int{} // invalid type decodes to 0 value -} - -// Inf returns 1 if the value is +Inf, -1 if it is -Inf, 0 otherwise -func (i *IntOrInf) Inf() int { - switch i.Type { - case IntPlusInf: - return 1 - case IntMinusInf: - return -1 - } - return 0 // invalid type decodes to 0 value -} - -// Int64 limits the value between MinInt64 and MaxInt64 (even if it is +-Inf) and returns an int64 type -func (i *IntOrInf) Int64() int64 { - switch i.Type { - case IntNonNegative: - if i.Value.IsInt64() { - return i.Value.Int64() - } else { - return math.MaxInt64 - } - case IntNegative: - if i.Value.IsInt64() { - return -i.Value.Int64() - } else { - return math.MinInt64 - } - case IntPlusInf: - return math.MaxInt64 - case IntMinusInf: - return math.MinInt64 - } - return 0 // invalid type decodes to 0 value -} - -// SetBigInt sets the value to the given big.Int -func (i *IntOrInf) SetBigInt(v *big.Int) { - if v.Sign() >= 0 { - i.Type = IntNonNegative - i.Value.Set(v) - } else { - i.Type = IntNegative - i.Value.Neg(v) - } -} - -// SetInt64 sets the value to the given int64. Note that MaxInt64 translates to +Inf -// while MinInt64 translates to -Inf. -func (i *IntOrInf) SetInt64(v int64) { - if v >= 0 { - if v == math.MaxInt64 { - i.Type = IntPlusInf - } else { - i.Type = IntNonNegative - i.Value.SetInt64(v) - } - } else { - if v == math.MinInt64 { - i.Type = IntMinusInf - } else { - i.Type = IntNegative - i.Value.SetInt64(-v) - } - } -} - -// SetInf sets the value to +Inf or -Inf -func (i *IntOrInf) SetInf(sign int) { - if sign == 1 { - i.Type = IntPlusInf - } else { - i.Type = IntMinusInf - } -} diff --git a/les/vflux/server/balance.go b/les/vflux/server/balance.go deleted file mode 100644 index b09f7bb501..0000000000 --- a/les/vflux/server/balance.go +++ /dev/null @@ -1,693 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "errors" - "math" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -var errBalanceOverflow = errors.New("balance overflow") - -const maxBalance = math.MaxInt64 // maximum allowed balance value - -const ( - balanceCallbackUpdate = iota // called when priority drops below the last minimum estimate - balanceCallbackZero // called when priority drops to zero (positive balance exhausted) - balanceCallbackCount // total number of balance callbacks -) - -// PriceFactors determine the pricing policy (may apply either to positive or -// negative balances which may have different factors). -// - TimeFactor is cost unit per nanosecond of connection time -// - CapacityFactor is cost unit per nanosecond of connection time per 1000000 capacity -// - RequestFactor is cost unit per request "realCost" unit -type PriceFactors struct { - TimeFactor, CapacityFactor, RequestFactor float64 -} - -// connectionPrice returns the price of connection per nanosecond at the given capacity -// and the estimated average request cost. -func (p PriceFactors) connectionPrice(cap uint64, avgReqCost float64) float64 { - return p.TimeFactor + float64(cap)*p.CapacityFactor/1000000 + p.RequestFactor*avgReqCost -} - -type ( - // nodePriority interface provides current and estimated future priorities on demand - nodePriority interface { - // priority should return the current priority of the node (higher is better) - priority(cap uint64) int64 - // estimatePriority should return a lower estimate for the minimum of the node priority - // value starting from the current moment until the given time. If the priority goes - // under the returned estimate before the specified moment then it is the caller's - // responsibility to signal with updateFlag. - estimatePriority(cap uint64, addBalance int64, future, bias time.Duration, update bool) int64 - } - - // ReadOnlyBalance provides read-only operations on the node balance - ReadOnlyBalance interface { - nodePriority - GetBalance() (uint64, uint64) - GetRawBalance() (utils.ExpiredValue, utils.ExpiredValue) - GetPriceFactors() (posFactor, negFactor PriceFactors) - } - - // ConnectedBalance provides operations permitted on connected nodes (non-read-only - // operations are not permitted inside a BalanceOperation) - ConnectedBalance interface { - ReadOnlyBalance - SetPriceFactors(posFactor, negFactor PriceFactors) - RequestServed(cost uint64) uint64 - } - - // AtomicBalanceOperator provides operations permitted in an atomic BalanceOperation - AtomicBalanceOperator interface { - ReadOnlyBalance - AddBalance(amount int64) (uint64, uint64, error) - SetBalance(pos, neg uint64) error - } -) - -// nodeBalance keeps track of the positive and negative balances of a connected -// client and calculates actual and projected future priority values. -// Implements nodePriority interface. -type nodeBalance struct { - bt *balanceTracker - lock sync.RWMutex - node *enode.Node - connAddress string - active, hasPriority, setFlags bool - capacity uint64 - balance balance - posFactor, negFactor PriceFactors - sumReqCost uint64 - lastUpdate, nextUpdate, initTime mclock.AbsTime - updateEvent mclock.Timer - // since only a limited and fixed number of callbacks are needed, they are - // stored in a fixed size array ordered by priority threshold. - callbacks [balanceCallbackCount]balanceCallback - // callbackIndex maps balanceCallback constants to callbacks array indexes (-1 if not active) - callbackIndex [balanceCallbackCount]int - callbackCount int // number of active callbacks -} - -// balance represents a pair of positive and negative balances -type balance struct { - pos, neg utils.ExpiredValue - posExp, negExp utils.ValueExpirer -} - -// posValue returns the value of positive balance at a given timestamp. -func (b balance) posValue(now mclock.AbsTime) uint64 { - return b.pos.Value(b.posExp.LogOffset(now)) -} - -// negValue returns the value of negative balance at a given timestamp. -func (b balance) negValue(now mclock.AbsTime) uint64 { - return b.neg.Value(b.negExp.LogOffset(now)) -} - -// addValue adds the value of a given amount to the balance. The original value and -// updated value will also be returned if the addition is successful. -// Returns the error if the given value is too large and the value overflows. -func (b *balance) addValue(now mclock.AbsTime, amount int64, pos bool, force bool) (uint64, uint64, int64, error) { - var ( - val utils.ExpiredValue - offset utils.Fixed64 - ) - if pos { - offset, val = b.posExp.LogOffset(now), b.pos - } else { - offset, val = b.negExp.LogOffset(now), b.neg - } - old := val.Value(offset) - if amount > 0 && (amount > maxBalance || old > maxBalance-uint64(amount)) { - if !force { - return old, 0, 0, errBalanceOverflow - } - val = utils.ExpiredValue{} - amount = maxBalance - } - net := val.Add(amount, offset) - if pos { - b.pos = val - } else { - b.neg = val - } - return old, val.Value(offset), net, nil -} - -// setValue sets the internal balance amount to the given values. Returns the -// error if the given value is too large. -func (b *balance) setValue(now mclock.AbsTime, pos uint64, neg uint64) error { - if pos > maxBalance || neg > maxBalance { - return errBalanceOverflow - } - var pb, nb utils.ExpiredValue - pb.Add(int64(pos), b.posExp.LogOffset(now)) - nb.Add(int64(neg), b.negExp.LogOffset(now)) - b.pos = pb - b.neg = nb - return nil -} - -// balanceCallback represents a single callback that is activated when client priority -// reaches the given threshold -type balanceCallback struct { - id int - threshold int64 - callback func() -} - -// GetBalance returns the current positive and negative balance. -func (n *nodeBalance) GetBalance() (uint64, uint64) { - n.lock.Lock() - defer n.lock.Unlock() - - now := n.bt.clock.Now() - n.updateBalance(now) - return n.balance.posValue(now), n.balance.negValue(now) -} - -// GetRawBalance returns the current positive and negative balance -// but in the raw(expired value) format. -func (n *nodeBalance) GetRawBalance() (utils.ExpiredValue, utils.ExpiredValue) { - n.lock.Lock() - defer n.lock.Unlock() - - now := n.bt.clock.Now() - n.updateBalance(now) - return n.balance.pos, n.balance.neg -} - -// AddBalance adds the given amount to the positive balance and returns the balance -// before and after the operation. Exceeding maxBalance results in an error (balance is -// unchanged) while adding a negative amount higher than the current balance results in -// zero balance. -// Note: this function should run inside a NodeStateMachine operation -func (n *nodeBalance) AddBalance(amount int64) (uint64, uint64, error) { - var ( - err error - old, new uint64 - now = n.bt.clock.Now() - callbacks []func() - setPriority bool - ) - // Operation with holding the lock - n.bt.updateTotalBalance(n, func() bool { - n.updateBalance(now) - if old, new, _, err = n.balance.addValue(now, amount, true, false); err != nil { - return false - } - callbacks, setPriority = n.checkCallbacks(now), n.checkPriorityStatus() - n.storeBalance(true, false) - return true - }) - if err != nil { - return old, old, err - } - // Operation without holding the lock - for _, cb := range callbacks { - cb() - } - if n.setFlags { - if setPriority { - n.bt.ns.SetStateSub(n.node, n.bt.setup.priorityFlag, nodestate.Flags{}, 0) - } - // Note: priority flag is automatically removed by the zero priority callback if necessary - n.signalPriorityUpdate() - } - return old, new, nil -} - -// SetBalance sets the positive and negative balance to the given values -// Note: this function should run inside a NodeStateMachine operation -func (n *nodeBalance) SetBalance(pos, neg uint64) error { - var ( - now = n.bt.clock.Now() - callbacks []func() - setPriority bool - ) - // Operation with holding the lock - n.bt.updateTotalBalance(n, func() bool { - n.updateBalance(now) - if err := n.balance.setValue(now, pos, neg); err != nil { - return false - } - callbacks, setPriority = n.checkCallbacks(now), n.checkPriorityStatus() - n.storeBalance(true, true) - return true - }) - // Operation without holding the lock - for _, cb := range callbacks { - cb() - } - if n.setFlags { - if setPriority { - n.bt.ns.SetStateSub(n.node, n.bt.setup.priorityFlag, nodestate.Flags{}, 0) - } - // Note: priority flag is automatically removed by the zero priority callback if necessary - n.signalPriorityUpdate() - } - return nil -} - -// RequestServed should be called after serving a request for the given peer -func (n *nodeBalance) RequestServed(cost uint64) (newBalance uint64) { - n.lock.Lock() - - var ( - check bool - fcost = float64(cost) - now = n.bt.clock.Now() - ) - n.updateBalance(now) - if !n.balance.pos.IsZero() { - posCost := -int64(fcost * n.posFactor.RequestFactor) - if posCost == 0 { - fcost = 0 - newBalance = n.balance.posValue(now) - } else { - var net int64 - _, newBalance, net, _ = n.balance.addValue(now, posCost, true, false) - if posCost == net { - fcost = 0 - } else { - fcost *= 1 - float64(net)/float64(posCost) - } - check = true - } - } - if fcost > 0 && n.negFactor.RequestFactor != 0 { - n.balance.addValue(now, int64(fcost*n.negFactor.RequestFactor), false, false) - check = true - } - n.sumReqCost += cost - - var callbacks []func() - if check { - callbacks = n.checkCallbacks(now) - } - n.lock.Unlock() - - if callbacks != nil { - n.bt.ns.Operation(func() { - for _, cb := range callbacks { - cb() - } - }) - } - return -} - -// priority returns the actual priority based on the current balance -func (n *nodeBalance) priority(capacity uint64) int64 { - n.lock.Lock() - defer n.lock.Unlock() - - now := n.bt.clock.Now() - n.updateBalance(now) - return n.balanceToPriority(now, n.balance, capacity) -} - -// EstMinPriority gives a lower estimate for the priority at a given time in the future. -// An average request cost per time is assumed that is twice the average cost per time -// in the current session. -// If update is true then a priority callback is added that turns updateFlag on and off -// in case the priority goes below the estimated minimum. -func (n *nodeBalance) estimatePriority(capacity uint64, addBalance int64, future, bias time.Duration, update bool) int64 { - n.lock.Lock() - defer n.lock.Unlock() - - now := n.bt.clock.Now() - n.updateBalance(now) - - b := n.balance // copy the balance - if addBalance != 0 { - b.addValue(now, addBalance, true, true) - } - if future > 0 { - var avgReqCost float64 - dt := time.Duration(n.lastUpdate - n.initTime) - if dt > time.Second { - avgReqCost = float64(n.sumReqCost) * 2 / float64(dt) - } - b = n.reducedBalance(b, now, future, capacity, avgReqCost) - } - if bias > 0 { - b = n.reducedBalance(b, now.Add(future), bias, capacity, 0) - } - pri := n.balanceToPriority(now, b, capacity) - // Ensure that biased estimates are always lower than actual priorities, even if - // the bias is very small. - // This ensures that two nodes will not ping-pong update signals forever if both of - // them have zero estimated priority drop in the projected future. - current := n.balanceToPriority(now, n.balance, capacity) - if pri >= current { - pri = current - 1 - } - if update { - n.addCallback(balanceCallbackUpdate, pri, n.signalPriorityUpdate) - } - return pri -} - -// SetPriceFactors sets the price factors. TimeFactor is the price of a nanosecond of -// connection while RequestFactor is the price of a request cost unit. -func (n *nodeBalance) SetPriceFactors(posFactor, negFactor PriceFactors) { - n.lock.Lock() - now := n.bt.clock.Now() - n.updateBalance(now) - n.posFactor, n.negFactor = posFactor, negFactor - callbacks := n.checkCallbacks(now) - n.lock.Unlock() - if callbacks != nil { - n.bt.ns.Operation(func() { - for _, cb := range callbacks { - cb() - } - }) - } -} - -// GetPriceFactors returns the price factors -func (n *nodeBalance) GetPriceFactors() (posFactor, negFactor PriceFactors) { - n.lock.Lock() - defer n.lock.Unlock() - - return n.posFactor, n.negFactor -} - -// activate starts time/capacity cost deduction. -func (n *nodeBalance) activate() { - n.bt.updateTotalBalance(n, func() bool { - if n.active { - return false - } - n.active = true - n.lastUpdate = n.bt.clock.Now() - return true - }) -} - -// deactivate stops time/capacity cost deduction and saves the balances in the database -func (n *nodeBalance) deactivate() { - n.bt.updateTotalBalance(n, func() bool { - if !n.active { - return false - } - n.updateBalance(n.bt.clock.Now()) - if n.updateEvent != nil { - n.updateEvent.Stop() - n.updateEvent = nil - } - n.storeBalance(true, true) - n.active = false - return true - }) -} - -// updateBalance updates balance based on the time factor -func (n *nodeBalance) updateBalance(now mclock.AbsTime) { - if n.active && now > n.lastUpdate { - n.balance = n.reducedBalance(n.balance, n.lastUpdate, time.Duration(now-n.lastUpdate), n.capacity, 0) - n.lastUpdate = now - } -} - -// storeBalance stores the positive and/or negative balance of the node in the database -func (n *nodeBalance) storeBalance(pos, neg bool) { - if pos { - n.bt.storeBalance(n.node.ID().Bytes(), false, n.balance.pos) - } - if neg { - n.bt.storeBalance([]byte(n.connAddress), true, n.balance.neg) - } -} - -// addCallback sets up a one-time callback to be called when priority reaches -// the threshold. If it has already reached the threshold the callback is called -// immediately. -// Note: should be called while n.lock is held -// Note 2: the callback function runs inside a NodeStateMachine operation -func (n *nodeBalance) addCallback(id int, threshold int64, callback func()) { - n.removeCallback(id) - idx := 0 - for idx < n.callbackCount && threshold > n.callbacks[idx].threshold { - idx++ - } - for i := n.callbackCount - 1; i >= idx; i-- { - n.callbackIndex[n.callbacks[i].id]++ - n.callbacks[i+1] = n.callbacks[i] - } - n.callbackCount++ - n.callbackIndex[id] = idx - n.callbacks[idx] = balanceCallback{id, threshold, callback} - now := n.bt.clock.Now() - n.updateBalance(now) - n.scheduleCheck(now) -} - -// removeCallback removes the given callback and returns true if it was active -// Note: should be called while n.lock is held -func (n *nodeBalance) removeCallback(id int) bool { - idx := n.callbackIndex[id] - if idx == -1 { - return false - } - n.callbackIndex[id] = -1 - for i := idx; i < n.callbackCount-1; i++ { - n.callbackIndex[n.callbacks[i+1].id]-- - n.callbacks[i] = n.callbacks[i+1] - } - n.callbackCount-- - return true -} - -// checkCallbacks checks whether the threshold of any of the active callbacks -// have been reached and returns triggered callbacks. -// Note: checkCallbacks assumes that the balance has been recently updated. -func (n *nodeBalance) checkCallbacks(now mclock.AbsTime) (callbacks []func()) { - if n.callbackCount == 0 || n.capacity == 0 { - return - } - pri := n.balanceToPriority(now, n.balance, n.capacity) - for n.callbackCount != 0 && n.callbacks[n.callbackCount-1].threshold >= pri { - n.callbackCount-- - n.callbackIndex[n.callbacks[n.callbackCount].id] = -1 - callbacks = append(callbacks, n.callbacks[n.callbackCount].callback) - } - n.scheduleCheck(now) - return -} - -// scheduleCheck sets up or updates a scheduled event to ensure that it will be called -// again just after the next threshold has been reached. -func (n *nodeBalance) scheduleCheck(now mclock.AbsTime) { - if n.callbackCount != 0 { - d, ok := n.timeUntil(n.callbacks[n.callbackCount-1].threshold) - if !ok { - n.nextUpdate = 0 - n.updateAfter(0) - return - } - if n.nextUpdate == 0 || n.nextUpdate > now.Add(d) { - if d > time.Second { - // Note: if the scheduled update is not in the very near future then we - // schedule the update a bit earlier. This way we do need to update a few - // extra times but don't need to reschedule every time a processed request - // brings the expected firing time a little bit closer. - d = ((d - time.Second) * 7 / 8) + time.Second - } - n.nextUpdate = now.Add(d) - n.updateAfter(d) - } - } else { - n.nextUpdate = 0 - n.updateAfter(0) - } -} - -// updateAfter schedules a balance update and callback check in the future -func (n *nodeBalance) updateAfter(dt time.Duration) { - if n.updateEvent == nil || n.updateEvent.Stop() { - if dt == 0 { - n.updateEvent = nil - } else { - n.updateEvent = n.bt.clock.AfterFunc(dt, func() { - var callbacks []func() - n.lock.Lock() - if n.callbackCount != 0 { - now := n.bt.clock.Now() - n.updateBalance(now) - callbacks = n.checkCallbacks(now) - } - n.lock.Unlock() - if callbacks != nil { - n.bt.ns.Operation(func() { - for _, cb := range callbacks { - cb() - } - }) - } - }) - } - } -} - -// balanceExhausted should be called when the positive balance is exhausted (priority goes to zero/negative) -// Note: this function should run inside a NodeStateMachine operation -func (n *nodeBalance) balanceExhausted() { - n.lock.Lock() - n.storeBalance(true, false) - n.hasPriority = false - n.lock.Unlock() - if n.setFlags { - n.bt.ns.SetStateSub(n.node, nodestate.Flags{}, n.bt.setup.priorityFlag, 0) - } -} - -// checkPriorityStatus checks whether the node has gained priority status and sets the priority -// callback and flag if necessary. It assumes that the balance has been recently updated. -// Note that the priority flag has to be set by the caller after the mutex has been released. -func (n *nodeBalance) checkPriorityStatus() bool { - if !n.hasPriority && !n.balance.pos.IsZero() { - n.hasPriority = true - n.addCallback(balanceCallbackZero, 0, func() { n.balanceExhausted() }) - return true - } - return false -} - -// signalPriorityUpdate signals that the priority fell below the previous minimum estimate -// Note: this function should run inside a NodeStateMachine operation -func (n *nodeBalance) signalPriorityUpdate() { - n.bt.ns.SetStateSub(n.node, n.bt.setup.updateFlag, nodestate.Flags{}, 0) - n.bt.ns.SetStateSub(n.node, nodestate.Flags{}, n.bt.setup.updateFlag, 0) -} - -// setCapacity updates the capacity value used for priority calculation -// Note: capacity should never be zero -// Note 2: this function should run inside a NodeStateMachine operation -func (n *nodeBalance) setCapacity(capacity uint64) { - n.lock.Lock() - now := n.bt.clock.Now() - n.updateBalance(now) - n.capacity = capacity - callbacks := n.checkCallbacks(now) - n.lock.Unlock() - for _, cb := range callbacks { - cb() - } -} - -// balanceToPriority converts a balance to a priority value. Lower priority means -// first to disconnect. Positive balance translates to positive priority. If positive -// balance is zero then negative balance translates to a negative priority. -func (n *nodeBalance) balanceToPriority(now mclock.AbsTime, b balance, capacity uint64) int64 { - pos := b.posValue(now) - if pos > 0 { - return int64(pos / capacity) - } - return -int64(b.negValue(now)) -} - -// priorityToBalance converts a target priority to a requested balance value. -// If the priority is negative, then minimal negative balance is returned; -// otherwise the minimal positive balance is returned. -func (n *nodeBalance) priorityToBalance(priority int64, capacity uint64) (uint64, uint64) { - if priority > 0 { - return uint64(priority) * n.capacity, 0 - } - return 0, uint64(-priority) -} - -// reducedBalance estimates the reduced balance at a given time in the future based -// on the given balance, the time factor and an estimated average request cost per time ratio -func (n *nodeBalance) reducedBalance(b balance, start mclock.AbsTime, dt time.Duration, capacity uint64, avgReqCost float64) balance { - // since the costs are applied continuously during the dt time period we calculate - // the expiration offset at the middle of the period - var ( - at = start.Add(dt / 2) - dtf = float64(dt) - ) - if !b.pos.IsZero() { - factor := n.posFactor.connectionPrice(capacity, avgReqCost) - diff := -int64(dtf * factor) - _, _, net, _ := b.addValue(at, diff, true, false) - if net == diff { - dtf = 0 - } else { - dtf += float64(net) / factor - } - } - if dtf > 0 { - factor := n.negFactor.connectionPrice(capacity, avgReqCost) - b.addValue(at, int64(dtf*factor), false, false) - } - return b -} - -// timeUntil calculates the remaining time needed to reach a given priority level -// assuming that no requests are processed until then. If the given level is never -// reached then (0, false) is returned. If it has already been reached then (0, true) -// is returned. -// Note: the function assumes that the balance has been recently updated and -// calculates the time starting from the last update. -func (n *nodeBalance) timeUntil(priority int64) (time.Duration, bool) { - var ( - now = n.bt.clock.Now() - pos = n.balance.posValue(now) - targetPos, targetNeg = n.priorityToBalance(priority, n.capacity) - diffTime float64 - ) - if pos > 0 { - timePrice := n.posFactor.connectionPrice(n.capacity, 0) - if timePrice < 1e-100 { - return 0, false - } - if targetPos > 0 { - if targetPos > pos { - return 0, true - } - diffTime = float64(pos-targetPos) / timePrice - return time.Duration(diffTime), true - } else { - diffTime = float64(pos) / timePrice - } - } else { - if targetPos > 0 { - return 0, true - } - } - neg := n.balance.negValue(now) - if targetNeg > neg { - timePrice := n.negFactor.connectionPrice(n.capacity, 0) - if timePrice < 1e-100 { - return 0, false - } - diffTime += float64(targetNeg-neg) / timePrice - } - return time.Duration(diffTime), true -} diff --git a/les/vflux/server/balance_test.go b/les/vflux/server/balance_test.go deleted file mode 100644 index 7c100aab50..0000000000 --- a/les/vflux/server/balance_test.go +++ /dev/null @@ -1,439 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "math" - "math/rand" - "reflect" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/ethdb/memorydb" - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -type zeroExpirer struct{} - -func (z zeroExpirer) SetRate(now mclock.AbsTime, rate float64) {} -func (z zeroExpirer) SetLogOffset(now mclock.AbsTime, logOffset utils.Fixed64) {} -func (z zeroExpirer) LogOffset(now mclock.AbsTime) utils.Fixed64 { return 0 } - -type balanceTestClient struct{} - -func (client balanceTestClient) FreeClientId() string { return "" } - -type balanceTestSetup struct { - clock *mclock.Simulated - db ethdb.KeyValueStore - ns *nodestate.NodeStateMachine - setup *serverSetup - bt *balanceTracker -} - -func newBalanceTestSetup(db ethdb.KeyValueStore, posExp, negExp utils.ValueExpirer) *balanceTestSetup { - // Initialize and customize the setup for the balance testing - clock := &mclock.Simulated{} - setup := newServerSetup() - setup.clientField = setup.setup.NewField("balanceTestClient", reflect.TypeOf(balanceTestClient{})) - - ns := nodestate.NewNodeStateMachine(nil, nil, clock, setup.setup) - if posExp == nil { - posExp = zeroExpirer{} - } - if negExp == nil { - negExp = zeroExpirer{} - } - if db == nil { - db = memorydb.New() - } - bt := newBalanceTracker(ns, setup, db, clock, posExp, negExp) - ns.Start() - return &balanceTestSetup{ - clock: clock, - db: db, - ns: ns, - setup: setup, - bt: bt, - } -} - -func (b *balanceTestSetup) newNode(capacity uint64) *nodeBalance { - node := enode.SignNull(&enr.Record{}, enode.ID{}) - b.ns.SetField(node, b.setup.clientField, balanceTestClient{}) - if capacity != 0 { - b.ns.SetField(node, b.setup.capacityField, capacity) - } - n, _ := b.ns.GetField(node, b.setup.balanceField).(*nodeBalance) - return n -} - -func (b *balanceTestSetup) setBalance(node *nodeBalance, pos, neg uint64) (err error) { - b.bt.BalanceOperation(node.node.ID(), node.connAddress, func(balance AtomicBalanceOperator) { - err = balance.SetBalance(pos, neg) - }) - return -} - -func (b *balanceTestSetup) addBalance(node *nodeBalance, add int64) (old, new uint64, err error) { - b.bt.BalanceOperation(node.node.ID(), node.connAddress, func(balance AtomicBalanceOperator) { - old, new, err = balance.AddBalance(add) - }) - return -} - -func (b *balanceTestSetup) stop() { - b.bt.stop() - b.ns.Stop() -} - -func TestAddBalance(t *testing.T) { - b := newBalanceTestSetup(nil, nil, nil) - defer b.stop() - - node := b.newNode(1000) - var inputs = []struct { - delta int64 - expect [2]uint64 - total uint64 - expectErr bool - }{ - {100, [2]uint64{0, 100}, 100, false}, - {-100, [2]uint64{100, 0}, 0, false}, - {-100, [2]uint64{0, 0}, 0, false}, - {1, [2]uint64{0, 1}, 1, false}, - {maxBalance, [2]uint64{0, 0}, 0, true}, - } - for _, i := range inputs { - old, new, err := b.addBalance(node, i.delta) - if i.expectErr { - if err == nil { - t.Fatalf("Expect get error but nil") - } - continue - } else if err != nil { - t.Fatalf("Expect get no error but %v", err) - } - if old != i.expect[0] || new != i.expect[1] { - t.Fatalf("Positive balance mismatch, got %v -> %v", old, new) - } - if b.bt.TotalTokenAmount() != i.total { - t.Fatalf("Total positive balance mismatch, want %v, got %v", i.total, b.bt.TotalTokenAmount()) - } - } -} - -func TestSetBalance(t *testing.T) { - b := newBalanceTestSetup(nil, nil, nil) - defer b.stop() - node := b.newNode(1000) - - var inputs = []struct { - pos, neg uint64 - }{ - {1000, 0}, - {0, 1000}, - {1000, 1000}, - } - for _, i := range inputs { - b.setBalance(node, i.pos, i.neg) - pos, neg := node.GetBalance() - if pos != i.pos { - t.Fatalf("Positive balance mismatch, want %v, got %v", i.pos, pos) - } - if neg != i.neg { - t.Fatalf("Negative balance mismatch, want %v, got %v", i.neg, neg) - } - } -} - -func TestBalanceTimeCost(t *testing.T) { - b := newBalanceTestSetup(nil, nil, nil) - defer b.stop() - node := b.newNode(1000) - - node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) - b.setBalance(node, uint64(time.Minute), 0) // 1 minute time allowance - - var inputs = []struct { - runTime time.Duration - expPos uint64 - expNeg uint64 - }{ - {time.Second, uint64(time.Second * 59), 0}, - {0, uint64(time.Second * 59), 0}, - {time.Second * 59, 0, 0}, - {time.Second, 0, uint64(time.Second)}, - } - for _, i := range inputs { - b.clock.Run(i.runTime) - if pos, _ := node.GetBalance(); pos != i.expPos { - t.Fatalf("Positive balance mismatch, want %v, got %v", i.expPos, pos) - } - if _, neg := node.GetBalance(); neg != i.expNeg { - t.Fatalf("Negative balance mismatch, want %v, got %v", i.expNeg, neg) - } - } - - b.setBalance(node, uint64(time.Minute), 0) // Refill 1 minute time allowance - for _, i := range inputs { - b.clock.Run(i.runTime) - if pos, _ := node.GetBalance(); pos != i.expPos { - t.Fatalf("Positive balance mismatch, want %v, got %v", i.expPos, pos) - } - if _, neg := node.GetBalance(); neg != i.expNeg { - t.Fatalf("Negative balance mismatch, want %v, got %v", i.expNeg, neg) - } - } -} - -func TestBalanceReqCost(t *testing.T) { - b := newBalanceTestSetup(nil, nil, nil) - defer b.stop() - node := b.newNode(1000) - node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) - - b.setBalance(node, uint64(time.Minute), 0) // 1 minute time serving time allowance - var inputs = []struct { - reqCost uint64 - expPos uint64 - expNeg uint64 - }{ - {uint64(time.Second), uint64(time.Second * 59), 0}, - {0, uint64(time.Second * 59), 0}, - {uint64(time.Second * 59), 0, 0}, - {uint64(time.Second), 0, uint64(time.Second)}, - } - for _, i := range inputs { - node.RequestServed(i.reqCost) - if pos, _ := node.GetBalance(); pos != i.expPos { - t.Fatalf("Positive balance mismatch, want %v, got %v", i.expPos, pos) - } - if _, neg := node.GetBalance(); neg != i.expNeg { - t.Fatalf("Negative balance mismatch, want %v, got %v", i.expNeg, neg) - } - } -} - -func TestBalanceToPriority(t *testing.T) { - b := newBalanceTestSetup(nil, nil, nil) - defer b.stop() - node := b.newNode(1000) - node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) - - var inputs = []struct { - pos uint64 - neg uint64 - priority int64 - }{ - {1000, 0, 1}, - {2000, 0, 2}, // Higher balance, higher priority value - {0, 0, 0}, - {0, 1000, -1000}, - } - for _, i := range inputs { - b.setBalance(node, i.pos, i.neg) - priority := node.priority(1000) - if priority != i.priority { - t.Fatalf("priority mismatch, want %v, got %v", i.priority, priority) - } - } -} - -func TestEstimatedPriority(t *testing.T) { - b := newBalanceTestSetup(nil, nil, nil) - defer b.stop() - node := b.newNode(1000000000) - node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) - b.setBalance(node, uint64(time.Minute), 0) - var inputs = []struct { - runTime time.Duration // time cost - futureTime time.Duration // diff of future time - reqCost uint64 // single request cost - priority int64 // expected estimated priority - }{ - {time.Second, time.Second, 0, 58}, - {0, time.Second, 0, 58}, - - // 2 seconds time cost, 1 second estimated time cost, 10^9 request cost, - // 10^9 estimated request cost per second. - {time.Second, time.Second, 1000000000, 55}, - - // 3 seconds time cost, 3 second estimated time cost, 10^9*2 request cost, - // 4*10^9 estimated request cost. - {time.Second, 3 * time.Second, 1000000000, 48}, - - // All positive balance is used up - {time.Second * 55, 0, 0, -1}, - - // 1 minute estimated time cost, 4/58 * 10^9 estimated request cost per sec. - {0, time.Minute, 0, -int64(time.Minute) - int64(time.Second)*120/29}, - } - for _, i := range inputs { - b.clock.Run(i.runTime) - node.RequestServed(i.reqCost) - priority := node.estimatePriority(1000000000, 0, i.futureTime, 0, false) - if priority != i.priority { - t.Fatalf("Estimated priority mismatch, want %v, got %v", i.priority, priority) - } - } -} - -func TestPositiveBalanceCounting(t *testing.T) { - b := newBalanceTestSetup(nil, nil, nil) - defer b.stop() - - var nodes []*nodeBalance - for i := 0; i < 100; i += 1 { - node := b.newNode(1000000) - node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) - nodes = append(nodes, node) - } - - // Allocate service token - var sum uint64 - for i := 0; i < 100; i += 1 { - amount := int64(rand.Intn(100) + 100) - b.addBalance(nodes[i], amount) - sum += uint64(amount) - } - if b.bt.TotalTokenAmount() != sum { - t.Fatalf("Invalid token amount") - } - - // Change client status - for i := 0; i < 100; i += 1 { - if rand.Intn(2) == 0 { - b.ns.SetField(nodes[i].node, b.setup.capacityField, uint64(1)) - } - } - if b.bt.TotalTokenAmount() != sum { - t.Fatalf("Invalid token amount") - } - for i := 0; i < 100; i += 1 { - if rand.Intn(2) == 0 { - b.ns.SetField(nodes[i].node, b.setup.capacityField, uint64(1)) - } - } - if b.bt.TotalTokenAmount() != sum { - t.Fatalf("Invalid token amount") - } -} - -func TestCallbackChecking(t *testing.T) { - b := newBalanceTestSetup(nil, nil, nil) - defer b.stop() - node := b.newNode(1000000) - node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) - - var inputs = []struct { - priority int64 - expDiff time.Duration - }{ - {500, time.Millisecond * 500}, - {0, time.Second}, - {-int64(time.Second), 2 * time.Second}, - } - b.setBalance(node, uint64(time.Second), 0) - for _, i := range inputs { - diff, _ := node.timeUntil(i.priority) - if diff != i.expDiff { - t.Fatalf("Time difference mismatch, want %v, got %v", i.expDiff, diff) - } - } -} - -func TestCallback(t *testing.T) { - b := newBalanceTestSetup(nil, nil, nil) - defer b.stop() - node := b.newNode(1000) - node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1}) - - callCh := make(chan struct{}, 1) - b.setBalance(node, uint64(time.Minute), 0) - node.addCallback(balanceCallbackZero, 0, func() { callCh <- struct{}{} }) - - b.clock.Run(time.Minute) - select { - case <-callCh: - case <-time.NewTimer(time.Second).C: - t.Fatalf("Callback hasn't been called yet") - } - - b.setBalance(node, uint64(time.Minute), 0) - node.addCallback(balanceCallbackZero, 0, func() { callCh <- struct{}{} }) - node.removeCallback(balanceCallbackZero) - - b.clock.Run(time.Minute) - select { - case <-callCh: - t.Fatalf("Callback shouldn't be called") - case <-time.NewTimer(time.Millisecond * 100).C: - } -} - -func TestBalancePersistence(t *testing.T) { - posExp := &utils.Expirer{} - negExp := &utils.Expirer{} - posExp.SetRate(0, math.Log(2)/float64(time.Hour*2)) // halves every two hours - negExp.SetRate(0, math.Log(2)/float64(time.Hour)) // halves every hour - setup := newBalanceTestSetup(nil, posExp, negExp) - - exp := func(balance *nodeBalance, expPos, expNeg uint64) { - pos, neg := balance.GetBalance() - if pos != expPos { - t.Fatalf("Positive balance incorrect, want %v, got %v", expPos, pos) - } - if neg != expNeg { - t.Fatalf("Positive balance incorrect, want %v, got %v", expPos, pos) - } - } - expTotal := func(expTotal uint64) { - total := setup.bt.TotalTokenAmount() - if total != expTotal { - t.Fatalf("Total token amount incorrect, want %v, got %v", expTotal, total) - } - } - - expTotal(0) - balance := setup.newNode(0) - expTotal(0) - setup.setBalance(balance, 16000000000, 16000000000) - exp(balance, 16000000000, 16000000000) - expTotal(16000000000) - - setup.clock.Run(time.Hour * 2) - exp(balance, 8000000000, 4000000000) - expTotal(8000000000) - setup.stop() - - // Test the functionalities after restart - setup = newBalanceTestSetup(setup.db, posExp, negExp) - expTotal(8000000000) - balance = setup.newNode(0) - exp(balance, 8000000000, 4000000000) - expTotal(8000000000) - setup.clock.Run(time.Hour * 2) - exp(balance, 4000000000, 1000000000) - expTotal(4000000000) - setup.stop() -} diff --git a/les/vflux/server/balance_tracker.go b/les/vflux/server/balance_tracker.go deleted file mode 100644 index 9695e79638..0000000000 --- a/les/vflux/server/balance_tracker.go +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -const ( - posThreshold = 1000000 // minimum positive balance that is persisted in the database - negThreshold = 1000000 // minimum negative balance that is persisted in the database - persistExpirationRefresh = time.Minute * 5 // refresh period of the token expiration persistence -) - -// balanceTracker tracks positive and negative balances for connected nodes. -// After clientField is set externally, a nodeBalance is created and previous -// balance values are loaded from the database. Both balances are exponentially expired -// values. Costs are deducted from the positive balance if present, otherwise added to -// the negative balance. If the capacity is non-zero then a time cost is applied -// continuously while individual request costs are applied immediately. -// The two balances are translated into a single priority value that also depends -// on the actual capacity. -type balanceTracker struct { - setup *serverSetup - clock mclock.Clock - lock sync.Mutex - ns *nodestate.NodeStateMachine - ndb *nodeDB - posExp, negExp utils.ValueExpirer - - posExpTC, negExpTC uint64 - defaultPosFactors, defaultNegFactors PriceFactors - - active, inactive utils.ExpiredValue - balanceTimer *utils.UpdateTimer - quit chan struct{} -} - -// newBalanceTracker creates a new balanceTracker -func newBalanceTracker(ns *nodestate.NodeStateMachine, setup *serverSetup, db ethdb.KeyValueStore, clock mclock.Clock, posExp, negExp utils.ValueExpirer) *balanceTracker { - ndb := newNodeDB(db, clock) - bt := &balanceTracker{ - ns: ns, - setup: setup, - ndb: ndb, - clock: clock, - posExp: posExp, - negExp: negExp, - balanceTimer: utils.NewUpdateTimer(clock, time.Second*10), - quit: make(chan struct{}), - } - posOffset, negOffset := bt.ndb.getExpiration() - posExp.SetLogOffset(clock.Now(), posOffset) - negExp.SetLogOffset(clock.Now(), negOffset) - - // Load all persisted balance entries of priority nodes, - // calculate the total number of issued service tokens. - bt.ndb.forEachBalance(false, func(id enode.ID, balance utils.ExpiredValue) bool { - bt.inactive.AddExp(balance) - return true - }) - - ns.SubscribeField(bt.setup.capacityField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { - n, _ := ns.GetField(node, bt.setup.balanceField).(*nodeBalance) - if n == nil { - return - } - - ov, _ := oldValue.(uint64) - nv, _ := newValue.(uint64) - if ov == 0 && nv != 0 { - n.activate() - } - if nv != 0 { - n.setCapacity(nv) - } - if ov != 0 && nv == 0 { - n.deactivate() - } - }) - ns.SubscribeField(bt.setup.clientField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { - type peer interface { - FreeClientId() string - } - if newValue != nil { - n := bt.newNodeBalance(node, newValue.(peer).FreeClientId(), true) - bt.lock.Lock() - n.SetPriceFactors(bt.defaultPosFactors, bt.defaultNegFactors) - bt.lock.Unlock() - ns.SetFieldSub(node, bt.setup.balanceField, n) - } else { - ns.SetStateSub(node, nodestate.Flags{}, bt.setup.priorityFlag, 0) - if b, _ := ns.GetField(node, bt.setup.balanceField).(*nodeBalance); b != nil { - b.deactivate() - } - ns.SetFieldSub(node, bt.setup.balanceField, nil) - } - }) - - // The positive and negative balances of clients are stored in database - // and both of these decay exponentially over time. Delete them if the - // value is small enough. - bt.ndb.evictCallBack = bt.canDropBalance - - go func() { - for { - select { - case <-clock.After(persistExpirationRefresh): - now := clock.Now() - bt.ndb.setExpiration(posExp.LogOffset(now), negExp.LogOffset(now)) - case <-bt.quit: - return - } - } - }() - return bt -} - -// Stop saves expiration offset and unsaved node balances and shuts balanceTracker down -func (bt *balanceTracker) stop() { - now := bt.clock.Now() - bt.ndb.setExpiration(bt.posExp.LogOffset(now), bt.negExp.LogOffset(now)) - close(bt.quit) - bt.ns.ForEach(nodestate.Flags{}, nodestate.Flags{}, func(node *enode.Node, state nodestate.Flags) { - if n, ok := bt.ns.GetField(node, bt.setup.balanceField).(*nodeBalance); ok { - n.lock.Lock() - n.storeBalance(true, true) - n.lock.Unlock() - bt.ns.SetField(node, bt.setup.balanceField, nil) - } - }) - bt.ndb.close() -} - -// TotalTokenAmount returns the current total amount of service tokens in existence -func (bt *balanceTracker) TotalTokenAmount() uint64 { - bt.lock.Lock() - defer bt.lock.Unlock() - - bt.balanceTimer.Update(func(_ time.Duration) bool { - bt.active = utils.ExpiredValue{} - bt.ns.ForEach(nodestate.Flags{}, nodestate.Flags{}, func(node *enode.Node, state nodestate.Flags) { - if n, ok := bt.ns.GetField(node, bt.setup.balanceField).(*nodeBalance); ok && n.active { - pos, _ := n.GetRawBalance() - bt.active.AddExp(pos) - } - }) - return true - }) - total := bt.active - total.AddExp(bt.inactive) - return total.Value(bt.posExp.LogOffset(bt.clock.Now())) -} - -// GetPosBalanceIDs lists node IDs with an associated positive balance -func (bt *balanceTracker) GetPosBalanceIDs(start, stop enode.ID, maxCount int) (result []enode.ID) { - return bt.ndb.getPosBalanceIDs(start, stop, maxCount) -} - -// SetDefaultFactors sets the default price factors applied to subsequently connected clients -func (bt *balanceTracker) SetDefaultFactors(posFactors, negFactors PriceFactors) { - bt.lock.Lock() - bt.defaultPosFactors = posFactors - bt.defaultNegFactors = negFactors - bt.lock.Unlock() -} - -// SetExpirationTCs sets positive and negative token expiration time constants. -// Specified in seconds, 0 means infinite (no expiration). -func (bt *balanceTracker) SetExpirationTCs(pos, neg uint64) { - bt.lock.Lock() - defer bt.lock.Unlock() - - bt.posExpTC, bt.negExpTC = pos, neg - now := bt.clock.Now() - if pos > 0 { - bt.posExp.SetRate(now, 1/float64(pos*uint64(time.Second))) - } else { - bt.posExp.SetRate(now, 0) - } - if neg > 0 { - bt.negExp.SetRate(now, 1/float64(neg*uint64(time.Second))) - } else { - bt.negExp.SetRate(now, 0) - } -} - -// GetExpirationTCs returns the current positive and negative token expiration -// time constants -func (bt *balanceTracker) GetExpirationTCs() (pos, neg uint64) { - bt.lock.Lock() - defer bt.lock.Unlock() - - return bt.posExpTC, bt.negExpTC -} - -// BalanceOperation allows atomic operations on the balance of a node regardless of whether -// it is currently connected or not -func (bt *balanceTracker) BalanceOperation(id enode.ID, connAddress string, cb func(AtomicBalanceOperator)) { - bt.ns.Operation(func() { - var nb *nodeBalance - if node := bt.ns.GetNode(id); node != nil { - nb, _ = bt.ns.GetField(node, bt.setup.balanceField).(*nodeBalance) - } - if nb == nil { - node := enode.SignNull(&enr.Record{}, id) - nb = bt.newNodeBalance(node, connAddress, false) - } - cb(nb) - }) -} - -// newNodeBalance loads balances from the database and creates a nodeBalance instance -// for the given node. It also sets the priorityFlag and adds balanceCallbackZero if -// the node has a positive balance. -// Note: this function should run inside a NodeStateMachine operation -func (bt *balanceTracker) newNodeBalance(node *enode.Node, connAddress string, setFlags bool) *nodeBalance { - pb := bt.ndb.getOrNewBalance(node.ID().Bytes(), false) - nb := bt.ndb.getOrNewBalance([]byte(connAddress), true) - n := &nodeBalance{ - bt: bt, - node: node, - setFlags: setFlags, - connAddress: connAddress, - balance: balance{pos: pb, neg: nb, posExp: bt.posExp, negExp: bt.negExp}, - initTime: bt.clock.Now(), - lastUpdate: bt.clock.Now(), - } - for i := range n.callbackIndex { - n.callbackIndex[i] = -1 - } - if setFlags && n.checkPriorityStatus() { - n.bt.ns.SetStateSub(n.node, n.bt.setup.priorityFlag, nodestate.Flags{}, 0) - } - return n -} - -// storeBalance stores either a positive or a negative balance in the database -func (bt *balanceTracker) storeBalance(id []byte, neg bool, value utils.ExpiredValue) { - if bt.canDropBalance(bt.clock.Now(), neg, value) { - bt.ndb.delBalance(id, neg) // balance is small enough, drop it directly. - } else { - bt.ndb.setBalance(id, neg, value) - } -} - -// canDropBalance tells whether a positive or negative balance is below the threshold -// and therefore can be dropped from the database -func (bt *balanceTracker) canDropBalance(now mclock.AbsTime, neg bool, b utils.ExpiredValue) bool { - if neg { - return b.Value(bt.negExp.LogOffset(now)) <= negThreshold - } - return b.Value(bt.posExp.LogOffset(now)) <= posThreshold -} - -// updateTotalBalance adjusts the total balance after executing given callback. -func (bt *balanceTracker) updateTotalBalance(n *nodeBalance, callback func() bool) { - bt.lock.Lock() - defer bt.lock.Unlock() - - n.lock.Lock() - defer n.lock.Unlock() - - original, active := n.balance.pos, n.active - if !callback() { - return - } - if active { - bt.active.SubExp(original) - } else { - bt.inactive.SubExp(original) - } - if n.active { - bt.active.AddExp(n.balance.pos) - } else { - bt.inactive.AddExp(n.balance.pos) - } -} diff --git a/les/vflux/server/clientdb.go b/les/vflux/server/clientdb.go deleted file mode 100644 index a39cbec36a..0000000000 --- a/les/vflux/server/clientdb.go +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "bytes" - "encoding/binary" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/lru" - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/rlp" -) - -const ( - balanceCacheLimit = 8192 // the maximum number of cached items in service token balance queue - - // nodeDBVersion is the version identifier of the node data in db - // - // Changelog: - // Version 0 => 1 - // * Replace `lastTotal` with `meta` in positive balance: version 0=>1 - // - // Version 1 => 2 - // * Positive Balance and negative balance is changed: - // * Cumulative time is replaced with expiration - nodeDBVersion = 2 - - // dbCleanupCycle is the cycle of db for useless data cleanup - dbCleanupCycle = time.Hour -) - -var ( - positiveBalancePrefix = []byte("pb:") // dbVersion(uint16 big endian) + positiveBalancePrefix + id -> balance - negativeBalancePrefix = []byte("nb:") // dbVersion(uint16 big endian) + negativeBalancePrefix + ip -> balance - expirationKey = []byte("expiration:") // dbVersion(uint16 big endian) + expirationKey -> posExp, negExp -) - -type nodeDB struct { - db ethdb.KeyValueStore - cache *lru.Cache[string, utils.ExpiredValue] - auxbuf []byte // 37-byte auxiliary buffer for key encoding - verbuf [2]byte // 2-byte auxiliary buffer for db version - evictCallBack func(mclock.AbsTime, bool, utils.ExpiredValue) bool // Callback to determine whether the balance can be evicted. - clock mclock.Clock - closeCh chan struct{} - cleanupHook func() // Test hook used for testing -} - -func newNodeDB(db ethdb.KeyValueStore, clock mclock.Clock) *nodeDB { - ndb := &nodeDB{ - db: db, - cache: lru.NewCache[string, utils.ExpiredValue](balanceCacheLimit), - auxbuf: make([]byte, 37), - clock: clock, - closeCh: make(chan struct{}), - } - binary.BigEndian.PutUint16(ndb.verbuf[:], uint16(nodeDBVersion)) - go ndb.expirer() - return ndb -} - -func (db *nodeDB) close() { - close(db.closeCh) -} - -func (db *nodeDB) getPrefix(neg bool) []byte { - prefix := positiveBalancePrefix - if neg { - prefix = negativeBalancePrefix - } - return append(db.verbuf[:], prefix...) -} - -func (db *nodeDB) key(id []byte, neg bool) []byte { - prefix := positiveBalancePrefix - if neg { - prefix = negativeBalancePrefix - } - if len(prefix)+len(db.verbuf)+len(id) > len(db.auxbuf) { - db.auxbuf = append(db.auxbuf, make([]byte, len(prefix)+len(db.verbuf)+len(id)-len(db.auxbuf))...) - } - copy(db.auxbuf[:len(db.verbuf)], db.verbuf[:]) - copy(db.auxbuf[len(db.verbuf):len(db.verbuf)+len(prefix)], prefix) - copy(db.auxbuf[len(prefix)+len(db.verbuf):len(prefix)+len(db.verbuf)+len(id)], id) - return db.auxbuf[:len(prefix)+len(db.verbuf)+len(id)] -} - -func (db *nodeDB) getExpiration() (utils.Fixed64, utils.Fixed64) { - blob, err := db.db.Get(append(db.verbuf[:], expirationKey...)) - if err != nil || len(blob) != 16 { - return 0, 0 - } - return utils.Fixed64(binary.BigEndian.Uint64(blob[:8])), utils.Fixed64(binary.BigEndian.Uint64(blob[8:16])) -} - -func (db *nodeDB) setExpiration(pos, neg utils.Fixed64) { - var buff [16]byte - binary.BigEndian.PutUint64(buff[:8], uint64(pos)) - binary.BigEndian.PutUint64(buff[8:16], uint64(neg)) - db.db.Put(append(db.verbuf[:], expirationKey...), buff[:16]) -} - -func (db *nodeDB) getOrNewBalance(id []byte, neg bool) utils.ExpiredValue { - key := db.key(id, neg) - item, exist := db.cache.Get(string(key)) - if exist { - return item - } - - var b utils.ExpiredValue - enc, err := db.db.Get(key) - if err != nil || len(enc) == 0 { - return b - } - if err := rlp.DecodeBytes(enc, &b); err != nil { - log.Crit("Failed to decode positive balance", "err", err) - } - db.cache.Add(string(key), b) - return b -} - -func (db *nodeDB) setBalance(id []byte, neg bool, b utils.ExpiredValue) { - key := db.key(id, neg) - enc, err := rlp.EncodeToBytes(&(b)) - if err != nil { - log.Crit("Failed to encode positive balance", "err", err) - } - db.db.Put(key, enc) - db.cache.Add(string(key), b) -} - -func (db *nodeDB) delBalance(id []byte, neg bool) { - key := db.key(id, neg) - db.db.Delete(key) - db.cache.Remove(string(key)) -} - -// getPosBalanceIDs returns a lexicographically ordered list of IDs of accounts -// with a positive balance -func (db *nodeDB) getPosBalanceIDs(start, stop enode.ID, maxCount int) (result []enode.ID) { - if maxCount <= 0 { - return - } - prefix := db.getPrefix(false) - keylen := len(prefix) + len(enode.ID{}) - - it := db.db.NewIterator(prefix, start.Bytes()) - defer it.Release() - - for it.Next() { - var id enode.ID - if len(it.Key()) != keylen { - return - } - copy(id[:], it.Key()[keylen-len(id):]) - if bytes.Compare(id.Bytes(), stop.Bytes()) >= 0 { - return - } - result = append(result, id) - if len(result) == maxCount { - return - } - } - return -} - -// forEachBalance iterates all balances and passes values to callback. -func (db *nodeDB) forEachBalance(neg bool, callback func(id enode.ID, balance utils.ExpiredValue) bool) { - prefix := db.getPrefix(neg) - keylen := len(prefix) + len(enode.ID{}) - - it := db.db.NewIterator(prefix, nil) - defer it.Release() - - for it.Next() { - var id enode.ID - if len(it.Key()) != keylen { - return - } - copy(id[:], it.Key()[keylen-len(id):]) - - var b utils.ExpiredValue - if err := rlp.DecodeBytes(it.Value(), &b); err != nil { - continue - } - if !callback(id, b) { - return - } - } -} - -func (db *nodeDB) expirer() { - for { - select { - case <-db.clock.After(dbCleanupCycle): - db.expireNodes() - case <-db.closeCh: - return - } - } -} - -// expireNodes iterates the whole node db and checks whether the -// token balances can be deleted. -func (db *nodeDB) expireNodes() { - var ( - visited int - deleted int - start = time.Now() - ) - for _, neg := range []bool{false, true} { - iter := db.db.NewIterator(db.getPrefix(neg), nil) - for iter.Next() { - visited++ - var balance utils.ExpiredValue - if err := rlp.DecodeBytes(iter.Value(), &balance); err != nil { - log.Crit("Failed to decode negative balance", "err", err) - } - if db.evictCallBack != nil && db.evictCallBack(db.clock.Now(), neg, balance) { - deleted++ - db.db.Delete(iter.Key()) - } - } - } - // Invoke testing hook if it's not nil. - if db.cleanupHook != nil { - db.cleanupHook() - } - log.Debug("Expire nodes", "visited", visited, "deleted", deleted, "elapsed", common.PrettyDuration(time.Since(start))) -} diff --git a/les/vflux/server/clientdb_test.go b/les/vflux/server/clientdb_test.go deleted file mode 100644 index 353d84aead..0000000000 --- a/les/vflux/server/clientdb_test.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "reflect" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/p2p/enode" -) - -func expval(v uint64) utils.ExpiredValue { - return utils.ExpiredValue{Base: v} -} - -func TestNodeDB(t *testing.T) { - ndb := newNodeDB(rawdb.NewMemoryDatabase(), mclock.System{}) - defer ndb.close() - - var cases = []struct { - id enode.ID - ip string - balance utils.ExpiredValue - positive bool - }{ - {enode.ID{0x00, 0x01, 0x02}, "", expval(100), true}, - {enode.ID{0x00, 0x01, 0x02}, "", expval(200), true}, - {enode.ID{}, "127.0.0.1", expval(100), false}, - {enode.ID{}, "127.0.0.1", expval(200), false}, - } - for _, c := range cases { - if c.positive { - ndb.setBalance(c.id.Bytes(), false, c.balance) - if pb := ndb.getOrNewBalance(c.id.Bytes(), false); !reflect.DeepEqual(pb, c.balance) { - t.Fatalf("Positive balance mismatch, want %v, got %v", c.balance, pb) - } - } else { - ndb.setBalance([]byte(c.ip), true, c.balance) - if nb := ndb.getOrNewBalance([]byte(c.ip), true); !reflect.DeepEqual(nb, c.balance) { - t.Fatalf("Negative balance mismatch, want %v, got %v", c.balance, nb) - } - } - } - for _, c := range cases { - if c.positive { - ndb.delBalance(c.id.Bytes(), false) - if pb := ndb.getOrNewBalance(c.id.Bytes(), false); !reflect.DeepEqual(pb, utils.ExpiredValue{}) { - t.Fatalf("Positive balance mismatch, want %v, got %v", utils.ExpiredValue{}, pb) - } - } else { - ndb.delBalance([]byte(c.ip), true) - if nb := ndb.getOrNewBalance([]byte(c.ip), true); !reflect.DeepEqual(nb, utils.ExpiredValue{}) { - t.Fatalf("Negative balance mismatch, want %v, got %v", utils.ExpiredValue{}, nb) - } - } - } - posExp, negExp := utils.Fixed64(1000), utils.Fixed64(2000) - ndb.setExpiration(posExp, negExp) - if pos, neg := ndb.getExpiration(); pos != posExp || neg != negExp { - t.Fatalf("Expiration mismatch, want %v / %v, got %v / %v", posExp, negExp, pos, neg) - } - /* curBalance := currencyBalance{typ: "ETH", amount: 10000} - ndb.setCurrencyBalance(enode.ID{0x01, 0x02}, curBalance) - if got := ndb.getCurrencyBalance(enode.ID{0x01, 0x02}); !reflect.DeepEqual(got, curBalance) { - t.Fatalf("Currency balance mismatch, want %v, got %v", curBalance, got) - }*/ -} - -func TestNodeDBExpiration(t *testing.T) { - var ( - iterated int - done = make(chan struct{}, 1) - ) - callback := func(now mclock.AbsTime, neg bool, b utils.ExpiredValue) bool { - iterated += 1 - return true - } - clock := &mclock.Simulated{} - ndb := newNodeDB(rawdb.NewMemoryDatabase(), clock) - defer ndb.close() - ndb.evictCallBack = callback - ndb.cleanupHook = func() { done <- struct{}{} } - - var cases = []struct { - id []byte - neg bool - balance utils.ExpiredValue - }{ - {[]byte{0x01, 0x02}, false, expval(1)}, - {[]byte{0x03, 0x04}, false, expval(1)}, - {[]byte{0x05, 0x06}, false, expval(1)}, - {[]byte{0x07, 0x08}, false, expval(1)}, - - {[]byte("127.0.0.1"), true, expval(1)}, - {[]byte("127.0.0.2"), true, expval(1)}, - {[]byte("127.0.0.3"), true, expval(1)}, - {[]byte("127.0.0.4"), true, expval(1)}, - } - for _, c := range cases { - ndb.setBalance(c.id, c.neg, c.balance) - } - clock.WaitForTimers(1) - clock.Run(time.Hour + time.Minute) - select { - case <-done: - case <-time.NewTimer(time.Second).C: - t.Fatalf("timeout") - } - if iterated != 8 { - t.Fatalf("Failed to evict useless balances, want %v, got %d", 8, iterated) - } - - for _, c := range cases { - ndb.setBalance(c.id, c.neg, c.balance) - } - clock.WaitForTimers(1) - clock.Run(time.Hour + time.Minute) - select { - case <-done: - case <-time.NewTimer(time.Second).C: - t.Fatalf("timeout") - } - if iterated != 16 { - t.Fatalf("Failed to evict useless balances, want %v, got %d", 16, iterated) - } -} diff --git a/les/vflux/server/clientpool.go b/les/vflux/server/clientpool.go deleted file mode 100644 index a525f86368..0000000000 --- a/les/vflux/server/clientpool.go +++ /dev/null @@ -1,328 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "errors" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/les/vflux" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/nodestate" - "github.com/ethereum/go-ethereum/rlp" -) - -var ( - ErrNotConnected = errors.New("client not connected") - ErrNoPriority = errors.New("priority too low to raise capacity") - ErrCantFindMaximum = errors.New("unable to find maximum allowed capacity") -) - -// ClientPool implements a client database that assigns a priority to each client -// based on a positive and negative balance. Positive balance is externally assigned -// to prioritized clients and is decreased with connection time and processed -// requests (unless the price factors are zero). If the positive balance is zero -// then negative balance is accumulated. -// -// Balance tracking and priority calculation for connected clients is done by -// balanceTracker. PriorityQueue ensures that clients with the lowest positive or -// highest negative balance get evicted when the total capacity allowance is full -// and new clients with a better balance want to connect. -// -// Already connected nodes receive a small bias in their favor in order to avoid -// accepting and instantly kicking out clients. In theory, we try to ensure that -// each client can have several minutes of connection time. -// -// Balances of disconnected clients are stored in nodeDB including positive balance -// and negative balance. Both positive balance and negative balance will decrease -// exponentially. If the balance is low enough, then the record will be dropped. -type ClientPool struct { - *priorityPool - *balanceTracker - - setup *serverSetup - clock mclock.Clock - ns *nodestate.NodeStateMachine - synced func() bool - - lock sync.RWMutex - connectedBias time.Duration - - minCap uint64 // the minimal capacity value allowed for any client - capReqNode *enode.Node // node that is requesting capacity change; only used inside NSM operation -} - -// clientPeer represents a peer in the client pool. None of the callbacks should block. -type clientPeer interface { - Node() *enode.Node - FreeClientId() string // unique id for non-priority clients (typically a prefix of the network address) - InactiveAllowance() time.Duration // disconnection timeout for inactive non-priority peers - UpdateCapacity(newCap uint64, requested bool) // signals a capacity update (requested is true if it is a result of a SetCapacity call on the given peer - Disconnect() // initiates disconnection (Unregister should always be called) -} - -// NewClientPool creates a new client pool -func NewClientPool(balanceDb ethdb.KeyValueStore, minCap uint64, connectedBias time.Duration, clock mclock.Clock, synced func() bool) *ClientPool { - setup := newServerSetup() - ns := nodestate.NewNodeStateMachine(nil, nil, clock, setup.setup) - cp := &ClientPool{ - priorityPool: newPriorityPool(ns, setup, clock, minCap, connectedBias, 4, 100), - balanceTracker: newBalanceTracker(ns, setup, balanceDb, clock, &utils.Expirer{}, &utils.Expirer{}), - setup: setup, - ns: ns, - clock: clock, - minCap: minCap, - connectedBias: connectedBias, - synced: synced, - } - - ns.SubscribeState(nodestate.MergeFlags(setup.activeFlag, setup.inactiveFlag, setup.priorityFlag), func(node *enode.Node, oldState, newState nodestate.Flags) { - if newState.Equals(setup.inactiveFlag) { - // set timeout for non-priority inactive client - var timeout time.Duration - if c, ok := ns.GetField(node, setup.clientField).(clientPeer); ok { - timeout = c.InactiveAllowance() - } - ns.AddTimeout(node, setup.inactiveFlag, timeout) - } - if oldState.Equals(setup.inactiveFlag) && newState.Equals(setup.inactiveFlag.Or(setup.priorityFlag)) { - ns.SetStateSub(node, setup.inactiveFlag, nodestate.Flags{}, 0) // priority gained; remove timeout - } - if newState.Equals(setup.activeFlag) { - // active with no priority; limit capacity to minCap - cap, _ := ns.GetField(node, setup.capacityField).(uint64) - if cap > minCap { - cp.requestCapacity(node, minCap, minCap, 0) - } - } - if newState.Equals(nodestate.Flags{}) { - if c, ok := ns.GetField(node, setup.clientField).(clientPeer); ok { - c.Disconnect() - } - } - }) - - ns.SubscribeField(setup.capacityField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { - if c, ok := ns.GetField(node, setup.clientField).(clientPeer); ok { - newCap, _ := newValue.(uint64) - c.UpdateCapacity(newCap, node == cp.capReqNode) - } - }) - - // add metrics - cp.ns.SubscribeState(nodestate.MergeFlags(cp.setup.activeFlag, cp.setup.inactiveFlag), func(node *enode.Node, oldState, newState nodestate.Flags) { - if oldState.IsEmpty() && !newState.IsEmpty() { - clientConnectedMeter.Mark(1) - } - if !oldState.IsEmpty() && newState.IsEmpty() { - clientDisconnectedMeter.Mark(1) - } - if oldState.HasNone(cp.setup.activeFlag) && oldState.HasAll(cp.setup.activeFlag) { - clientActivatedMeter.Mark(1) - } - if oldState.HasAll(cp.setup.activeFlag) && oldState.HasNone(cp.setup.activeFlag) { - clientDeactivatedMeter.Mark(1) - } - activeCount, activeCap := cp.Active() - totalActiveCountGauge.Update(int64(activeCount)) - totalActiveCapacityGauge.Update(int64(activeCap)) - totalInactiveCountGauge.Update(int64(cp.Inactive())) - }) - return cp -} - -// Start starts the client pool. Should be called before Register/Unregister. -func (cp *ClientPool) Start() { - cp.ns.Start() -} - -// Stop shuts the client pool down. The clientPeer interface callbacks will not be called -// after Stop. Register calls will return nil. -func (cp *ClientPool) Stop() { - cp.balanceTracker.stop() - cp.ns.Stop() -} - -// Register registers the peer into the client pool. If the peer has insufficient -// priority and remains inactive for longer than the allowed timeout then it will be -// disconnected by calling the Disconnect function of the clientPeer interface. -func (cp *ClientPool) Register(peer clientPeer) ConnectedBalance { - cp.ns.SetField(peer.Node(), cp.setup.clientField, peerWrapper{peer}) - balance, _ := cp.ns.GetField(peer.Node(), cp.setup.balanceField).(*nodeBalance) - return balance -} - -// Unregister removes the peer from the client pool -func (cp *ClientPool) Unregister(peer clientPeer) { - cp.ns.SetField(peer.Node(), cp.setup.clientField, nil) -} - -// SetConnectedBias sets the connection bias, which is applied to already connected clients -// So that already connected client won't be kicked out very soon and we can ensure all -// connected clients can have enough time to request or sync some data. -func (cp *ClientPool) SetConnectedBias(bias time.Duration) { - cp.lock.Lock() - cp.connectedBias = bias - cp.setActiveBias(bias) - cp.lock.Unlock() -} - -// SetCapacity sets the assigned capacity of a connected client -func (cp *ClientPool) SetCapacity(node *enode.Node, reqCap uint64, bias time.Duration, requested bool) (capacity uint64, err error) { - cp.lock.RLock() - if cp.connectedBias > bias { - bias = cp.connectedBias - } - cp.lock.RUnlock() - - cp.ns.Operation(func() { - balance, _ := cp.ns.GetField(node, cp.setup.balanceField).(*nodeBalance) - if balance == nil { - err = ErrNotConnected - return - } - capacity, _ = cp.ns.GetField(node, cp.setup.capacityField).(uint64) - if capacity == 0 { - // if the client is inactive then it has insufficient priority for the minimal capacity - // (will be activated automatically with minCap when possible) - return - } - if reqCap < cp.minCap { - // can't request less than minCap; switching between 0 (inactive state) and minCap is - // performed by the server automatically as soon as necessary/possible - reqCap = cp.minCap - } - if reqCap > cp.minCap && cp.ns.GetState(node).HasNone(cp.setup.priorityFlag) { - err = ErrNoPriority - return - } - if reqCap == capacity { - return - } - if requested { - // mark the requested node so that the UpdateCapacity callback can signal - // whether the update is the direct result of a SetCapacity call on the given node - cp.capReqNode = node - defer func() { - cp.capReqNode = nil - }() - } - - var minTarget, maxTarget uint64 - if reqCap > capacity { - // Estimate maximum available capacity at the current priority level and request - // the estimated amount. - // Note: requestCapacity could find the highest available capacity between the - // current and the requested capacity but it could cost a lot of iterations with - // fine step adjustment if the requested capacity is very high. By doing a quick - // estimation of the maximum available capacity based on the capacity curve we - // can limit the number of required iterations. - curve := cp.getCapacityCurve().exclude(node.ID()) - maxTarget = curve.maxCapacity(func(capacity uint64) int64 { - return balance.estimatePriority(capacity, 0, 0, bias, false) - }) - if maxTarget < reqCap { - return - } - maxTarget = reqCap - - // Specify a narrow target range that allows a limited number of fine step - // iterations - minTarget = maxTarget - maxTarget/20 - if minTarget < capacity { - minTarget = capacity - } - } else { - minTarget, maxTarget = reqCap, reqCap - } - if newCap := cp.requestCapacity(node, minTarget, maxTarget, bias); newCap >= minTarget && newCap <= maxTarget { - capacity = newCap - return - } - // we should be able to find the maximum allowed capacity in a few iterations - log.Error("Unable to find maximum allowed capacity") - err = ErrCantFindMaximum - }) - return -} - -// serveCapQuery serves a vflux capacity query. It receives multiple token amount values -// and a bias time value. For each given token amount it calculates the maximum achievable -// capacity in case the amount is added to the balance. -func (cp *ClientPool) serveCapQuery(id enode.ID, freeID string, data []byte) []byte { - var req vflux.CapacityQueryReq - if rlp.DecodeBytes(data, &req) != nil { - return nil - } - if l := len(req.AddTokens); l == 0 || l > vflux.CapacityQueryMaxLen { - return nil - } - result := make(vflux.CapacityQueryReply, len(req.AddTokens)) - if !cp.synced() { - capacityQueryZeroMeter.Mark(1) - reply, _ := rlp.EncodeToBytes(&result) - return reply - } - - bias := time.Second * time.Duration(req.Bias) - cp.lock.RLock() - if cp.connectedBias > bias { - bias = cp.connectedBias - } - cp.lock.RUnlock() - - // use capacityCurve to answer request for multiple newly bought token amounts - curve := cp.getCapacityCurve().exclude(id) - cp.BalanceOperation(id, freeID, func(balance AtomicBalanceOperator) { - pb, _ := balance.GetBalance() - for i, addTokens := range req.AddTokens { - add := addTokens.Int64() - result[i] = curve.maxCapacity(func(capacity uint64) int64 { - return balance.estimatePriority(capacity, add, 0, bias, false) / int64(capacity) - }) - if add <= 0 && uint64(-add) >= pb && result[i] > cp.minCap { - result[i] = cp.minCap - } - if result[i] < cp.minCap { - result[i] = 0 - } - } - }) - // add first result to metrics (don't care about priority client multi-queries yet) - if result[0] == 0 { - capacityQueryZeroMeter.Mark(1) - } else { - capacityQueryNonZeroMeter.Mark(1) - } - reply, _ := rlp.EncodeToBytes(&result) - return reply -} - -// Handle implements Service -func (cp *ClientPool) Handle(id enode.ID, address string, name string, data []byte) []byte { - switch name { - case vflux.CapacityQueryName: - return cp.serveCapQuery(id, address, data) - default: - return nil - } -} diff --git a/les/vflux/server/clientpool_test.go b/les/vflux/server/clientpool_test.go deleted file mode 100644 index f75c70afca..0000000000 --- a/les/vflux/server/clientpool_test.go +++ /dev/null @@ -1,606 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "fmt" - "math/rand" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -const defaultConnectedBias = time.Minute * 3 - -func TestClientPoolL10C100Free(t *testing.T) { - testClientPool(t, 10, 100, 0, true) -} - -func TestClientPoolL40C200Free(t *testing.T) { - testClientPool(t, 40, 200, 0, true) -} - -func TestClientPoolL100C300Free(t *testing.T) { - testClientPool(t, 100, 300, 0, true) -} - -func TestClientPoolL10C100P4(t *testing.T) { - testClientPool(t, 10, 100, 4, false) -} - -func TestClientPoolL40C200P30(t *testing.T) { - testClientPool(t, 40, 200, 30, false) -} - -func TestClientPoolL100C300P20(t *testing.T) { - testClientPool(t, 100, 300, 20, false) -} - -const testClientPoolTicks = 100000 - -type poolTestPeer struct { - node *enode.Node - index int - disconnCh chan int - cap uint64 - inactiveAllowed bool -} - -func newPoolTestPeer(i int, disconnCh chan int) *poolTestPeer { - return &poolTestPeer{ - index: i, - disconnCh: disconnCh, - node: enode.SignNull(&enr.Record{}, enode.ID{byte(i % 256), byte(i >> 8)}), - } -} - -func (i *poolTestPeer) Node() *enode.Node { - return i.node -} - -func (i *poolTestPeer) FreeClientId() string { - return fmt.Sprintf("addr #%d", i.index) -} - -func (i *poolTestPeer) InactiveAllowance() time.Duration { - if i.inactiveAllowed { - return time.Second * 10 - } - return 0 -} - -func (i *poolTestPeer) UpdateCapacity(capacity uint64, requested bool) { - i.cap = capacity -} - -func (i *poolTestPeer) Disconnect() { - if i.disconnCh == nil { - return - } - id := i.node.ID() - i.disconnCh <- int(id[0]) + int(id[1])<<8 -} - -func getBalance(pool *ClientPool, p *poolTestPeer) (pos, neg uint64) { - pool.BalanceOperation(p.node.ID(), p.FreeClientId(), func(nb AtomicBalanceOperator) { - pos, neg = nb.GetBalance() - }) - return -} - -func addBalance(pool *ClientPool, id enode.ID, amount int64) { - pool.BalanceOperation(id, "", func(nb AtomicBalanceOperator) { - nb.AddBalance(amount) - }) -} - -func checkDiff(a, b uint64) bool { - maxDiff := (a + b) / 2000 - if maxDiff < 1 { - maxDiff = 1 - } - return a > b+maxDiff || b > a+maxDiff -} - -func connect(pool *ClientPool, peer *poolTestPeer) uint64 { - pool.Register(peer) - return peer.cap -} - -func disconnect(pool *ClientPool, peer *poolTestPeer) { - pool.Unregister(peer) -} - -func alwaysTrueFn() bool { - return true -} - -func testClientPool(t *testing.T, activeLimit, clientCount, paidCount int, randomDisconnect bool) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - connected = make([]bool, clientCount) - connTicks = make([]int, clientCount) - disconnCh = make(chan int, clientCount) - pool = NewClientPool(db, 1, 0, &clock, alwaysTrueFn) - ) - pool.Start() - pool.SetExpirationTCs(0, 1000) - - pool.SetLimits(uint64(activeLimit), uint64(activeLimit)) - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - - // pool should accept new peers up to its connected limit - for i := 0; i < activeLimit; i++ { - if cap := connect(pool, newPoolTestPeer(i, disconnCh)); cap != 0 { - connected[i] = true - } else { - t.Fatalf("Test peer #%d rejected", i) - } - } - // randomly connect and disconnect peers, expect to have a similar total connection time at the end - for tickCounter := 0; tickCounter < testClientPoolTicks; tickCounter++ { - clock.Run(1 * time.Second) - - if tickCounter == testClientPoolTicks/4 { - // give a positive balance to some of the peers - amount := testClientPoolTicks / 2 * int64(time.Second) // enough for half of the simulation period - for i := 0; i < paidCount; i++ { - addBalance(pool, newPoolTestPeer(i, disconnCh).node.ID(), amount) - } - } - - i := rand.Intn(clientCount) - if connected[i] { - if randomDisconnect { - disconnect(pool, newPoolTestPeer(i, disconnCh)) - connected[i] = false - connTicks[i] += tickCounter - } - } else { - if cap := connect(pool, newPoolTestPeer(i, disconnCh)); cap != 0 { - connected[i] = true - connTicks[i] -= tickCounter - } else { - disconnect(pool, newPoolTestPeer(i, disconnCh)) - } - } - pollDisconnects: - for { - select { - case i := <-disconnCh: - disconnect(pool, newPoolTestPeer(i, disconnCh)) - if connected[i] { - connTicks[i] += tickCounter - connected[i] = false - } - default: - break pollDisconnects - } - } - } - - expTicks := testClientPoolTicks/2*activeLimit/clientCount + testClientPoolTicks/2*(activeLimit-paidCount)/(clientCount-paidCount) - expMin := expTicks - expTicks/5 - expMax := expTicks + expTicks/5 - paidTicks := testClientPoolTicks/2*activeLimit/clientCount + testClientPoolTicks/2 - paidMin := paidTicks - paidTicks/5 - paidMax := paidTicks + paidTicks/5 - - // check if the total connected time of peers are all in the expected range - for i, c := range connected { - if c { - connTicks[i] += testClientPoolTicks - } - min, max := expMin, expMax - if i < paidCount { - // expect a higher amount for clients with a positive balance - min, max = paidMin, paidMax - } - if connTicks[i] < min || connTicks[i] > max { - t.Errorf("Total connected time of test node #%d (%d) outside expected range (%d to %d)", i, connTicks[i], min, max) - } - } - pool.Stop() -} - -func testPriorityConnect(t *testing.T, pool *ClientPool, p *poolTestPeer, cap uint64, expSuccess bool) { - if cap := connect(pool, p); cap == 0 { - if expSuccess { - t.Fatalf("Failed to connect paid client") - } else { - return - } - } - if newCap, _ := pool.SetCapacity(p.node, cap, defaultConnectedBias, true); newCap != cap { - if expSuccess { - t.Fatalf("Failed to raise capacity of paid client") - } else { - return - } - } - if !expSuccess { - t.Fatalf("Should reject high capacity paid client") - } -} - -func TestConnectPaidClient(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetLimits(10, uint64(10)) - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - - // Add balance for an external client and mark it as paid client - addBalance(pool, newPoolTestPeer(0, nil).node.ID(), int64(time.Minute)) - testPriorityConnect(t, pool, newPoolTestPeer(0, nil), 10, true) -} - -func TestConnectPaidClientToSmallPool(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - - // Add balance for an external client and mark it as paid client - addBalance(pool, newPoolTestPeer(0, nil).node.ID(), int64(time.Minute)) - - // connect a fat paid client to pool, should reject it. - testPriorityConnect(t, pool, newPoolTestPeer(0, nil), 100, false) -} - -func TestConnectPaidClientToFullPool(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - - for i := 0; i < 10; i++ { - addBalance(pool, newPoolTestPeer(i, nil).node.ID(), int64(time.Second*20)) - connect(pool, newPoolTestPeer(i, nil)) - } - addBalance(pool, newPoolTestPeer(11, nil).node.ID(), int64(time.Second*2)) // Add low balance to new paid client - if cap := connect(pool, newPoolTestPeer(11, nil)); cap != 0 { - t.Fatalf("Low balance paid client should be rejected") - } - clock.Run(time.Second) - addBalance(pool, newPoolTestPeer(12, nil).node.ID(), int64(time.Minute*5)) // Add high balance to new paid client - if cap := connect(pool, newPoolTestPeer(12, nil)); cap == 0 { - t.Fatalf("High balance paid client should be accepted") - } -} - -func TestPaidClientKickedOut(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - kickedCh = make(chan int, 100) - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - pool.SetExpirationTCs(0, 0) - defer pool.Stop() - pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - - for i := 0; i < 10; i++ { - addBalance(pool, newPoolTestPeer(i, kickedCh).node.ID(), 10000000000) // 10 second allowance - connect(pool, newPoolTestPeer(i, kickedCh)) - clock.Run(time.Millisecond) - } - clock.Run(defaultConnectedBias + time.Second*11) - if cap := connect(pool, newPoolTestPeer(11, kickedCh)); cap == 0 { - t.Fatalf("Free client should be accepted") - } - clock.Run(0) - select { - case id := <-kickedCh: - if id != 0 { - t.Fatalf("Kicked client mismatch, want %v, got %v", 0, id) - } - default: - t.Fatalf("timeout") - } -} - -func TestConnectFreeClient(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetLimits(10, uint64(10)) - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - if cap := connect(pool, newPoolTestPeer(0, nil)); cap == 0 { - t.Fatalf("Failed to connect free client") - } - testPriorityConnect(t, pool, newPoolTestPeer(0, nil), 2, false) -} - -func TestConnectFreeClientToFullPool(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - - for i := 0; i < 10; i++ { - connect(pool, newPoolTestPeer(i, nil)) - } - if cap := connect(pool, newPoolTestPeer(11, nil)); cap != 0 { - t.Fatalf("New free client should be rejected") - } - clock.Run(time.Minute) - if cap := connect(pool, newPoolTestPeer(12, nil)); cap != 0 { - t.Fatalf("New free client should be rejected") - } - clock.Run(time.Millisecond) - clock.Run(4 * time.Minute) - if cap := connect(pool, newPoolTestPeer(13, nil)); cap == 0 { - t.Fatalf("Old client connects more than 5min should be kicked") - } -} - -func TestFreeClientKickedOut(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - kicked = make(chan int, 100) - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - - for i := 0; i < 10; i++ { - connect(pool, newPoolTestPeer(i, kicked)) - clock.Run(time.Millisecond) - } - if cap := connect(pool, newPoolTestPeer(10, kicked)); cap != 0 { - t.Fatalf("New free client should be rejected") - } - clock.Run(0) - select { - case <-kicked: - default: - t.Fatalf("timeout") - } - disconnect(pool, newPoolTestPeer(10, kicked)) - clock.Run(5 * time.Minute) - for i := 0; i < 10; i++ { - connect(pool, newPoolTestPeer(i+10, kicked)) - } - clock.Run(0) - - for i := 0; i < 10; i++ { - select { - case id := <-kicked: - if id >= 10 { - t.Fatalf("Old client should be kicked, now got: %d", id) - } - default: - t.Fatalf("timeout") - } - } -} - -func TestPositiveBalanceCalculation(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - kicked = make(chan int, 10) - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - - addBalance(pool, newPoolTestPeer(0, kicked).node.ID(), int64(time.Minute*3)) - testPriorityConnect(t, pool, newPoolTestPeer(0, kicked), 10, true) - clock.Run(time.Minute) - - disconnect(pool, newPoolTestPeer(0, kicked)) - pb, _ := getBalance(pool, newPoolTestPeer(0, kicked)) - if checkDiff(pb, uint64(time.Minute*2)) { - t.Fatalf("Positive balance mismatch, want %v, got %v", uint64(time.Minute*2), pb) - } -} - -func TestDowngradePriorityClient(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - kicked = make(chan int, 10) - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 1}) - - p := newPoolTestPeer(0, kicked) - addBalance(pool, p.node.ID(), int64(time.Minute)) - testPriorityConnect(t, pool, p, 10, true) - if p.cap != 10 { - t.Fatalf("The capacity of priority peer hasn't been updated, got: %d", p.cap) - } - - clock.Run(time.Minute) // All positive balance should be used up. - time.Sleep(300 * time.Millisecond) // Ensure the callback is called - if p.cap != 1 { - t.Fatalf("The capcacity of peer should be downgraded, got: %d", p.cap) - } - pb, _ := getBalance(pool, newPoolTestPeer(0, kicked)) - if pb != 0 { - t.Fatalf("Positive balance mismatch, want %v, got %v", 0, pb) - } - - addBalance(pool, newPoolTestPeer(0, kicked).node.ID(), int64(time.Minute)) - pb, _ = getBalance(pool, newPoolTestPeer(0, kicked)) - if checkDiff(pb, uint64(time.Minute)) { - t.Fatalf("Positive balance mismatch, want %v, got %v", uint64(time.Minute), pb) - } -} - -func TestNegativeBalanceCalculation(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetExpirationTCs(0, 3600) - pool.SetLimits(10, uint64(10)) // Total capacity limit is 10 - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1e-3, CapacityFactor: 0, RequestFactor: 1}, PriceFactors{TimeFactor: 1e-3, CapacityFactor: 0, RequestFactor: 1}) - - for i := 0; i < 10; i++ { - connect(pool, newPoolTestPeer(i, nil)) - } - clock.Run(time.Second) - - for i := 0; i < 10; i++ { - disconnect(pool, newPoolTestPeer(i, nil)) - _, nb := getBalance(pool, newPoolTestPeer(i, nil)) - if nb != 0 { - t.Fatalf("Short connection shouldn't be recorded") - } - } - for i := 0; i < 10; i++ { - connect(pool, newPoolTestPeer(i, nil)) - } - clock.Run(time.Minute) - for i := 0; i < 10; i++ { - disconnect(pool, newPoolTestPeer(i, nil)) - _, nb := getBalance(pool, newPoolTestPeer(i, nil)) - exp := uint64(time.Minute) / 1000 - exp -= exp / 120 // correct for negative balance expiration - if checkDiff(nb, exp) { - t.Fatalf("Negative balance mismatch, want %v, got %v", exp, nb) - } - } -} - -func TestInactiveClient(t *testing.T) { - var ( - clock mclock.Simulated - db = rawdb.NewMemoryDatabase() - ) - pool := NewClientPool(db, 1, defaultConnectedBias, &clock, alwaysTrueFn) - pool.Start() - defer pool.Stop() - pool.SetLimits(2, uint64(2)) - - p1 := newPoolTestPeer(1, nil) - p1.inactiveAllowed = true - p2 := newPoolTestPeer(2, nil) - p2.inactiveAllowed = true - p3 := newPoolTestPeer(3, nil) - p3.inactiveAllowed = true - addBalance(pool, p1.node.ID(), 1000*int64(time.Second)) - addBalance(pool, p3.node.ID(), 2000*int64(time.Second)) - // p1: 1000 p2: 0 p3: 2000 - p1.cap = connect(pool, p1) - if p1.cap != 1 { - t.Fatalf("Failed to connect peer #1") - } - p2.cap = connect(pool, p2) - if p2.cap != 1 { - t.Fatalf("Failed to connect peer #2") - } - p3.cap = connect(pool, p3) - if p3.cap != 1 { - t.Fatalf("Failed to connect peer #3") - } - if p2.cap != 0 { - t.Fatalf("Failed to deactivate peer #2") - } - addBalance(pool, p2.node.ID(), 3000*int64(time.Second)) - // p1: 1000 p2: 3000 p3: 2000 - if p2.cap != 1 { - t.Fatalf("Failed to activate peer #2") - } - if p1.cap != 0 { - t.Fatalf("Failed to deactivate peer #1") - } - addBalance(pool, p2.node.ID(), -2500*int64(time.Second)) - // p1: 1000 p2: 500 p3: 2000 - if p1.cap != 1 { - t.Fatalf("Failed to activate peer #1") - } - if p2.cap != 0 { - t.Fatalf("Failed to deactivate peer #2") - } - pool.SetDefaultFactors(PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 0}, PriceFactors{TimeFactor: 1, CapacityFactor: 0, RequestFactor: 0}) - p4 := newPoolTestPeer(4, nil) - addBalance(pool, p4.node.ID(), 1500*int64(time.Second)) - // p1: 1000 p2: 500 p3: 2000 p4: 1500 - p4.cap = connect(pool, p4) - if p4.cap != 1 { - t.Fatalf("Failed to activate peer #4") - } - if p1.cap != 0 { - t.Fatalf("Failed to deactivate peer #1") - } - clock.Run(time.Second * 600) - // manually trigger a check to avoid a long real-time wait - pool.ns.SetState(p1.node, pool.setup.updateFlag, nodestate.Flags{}, 0) - pool.ns.SetState(p1.node, nodestate.Flags{}, pool.setup.updateFlag, 0) - // p1: 1000 p2: 500 p3: 2000 p4: 900 - if p1.cap != 1 { - t.Fatalf("Failed to activate peer #1") - } - if p4.cap != 0 { - t.Fatalf("Failed to deactivate peer #4") - } - disconnect(pool, p2) - disconnect(pool, p4) - addBalance(pool, p1.node.ID(), -1000*int64(time.Second)) - if p1.cap != 1 { - t.Fatalf("Should not deactivate peer #1") - } - if p2.cap != 0 { - t.Fatalf("Should not activate peer #2") - } -} diff --git a/les/vflux/server/metrics.go b/les/vflux/server/metrics.go deleted file mode 100644 index 680aebe2ea..0000000000 --- a/les/vflux/server/metrics.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "github.com/ethereum/go-ethereum/metrics" -) - -var ( - totalActiveCapacityGauge = metrics.NewRegisteredGauge("vflux/server/active/capacity", nil) - totalActiveCountGauge = metrics.NewRegisteredGauge("vflux/server/active/count", nil) - totalInactiveCountGauge = metrics.NewRegisteredGauge("vflux/server/inactive/count", nil) - - clientConnectedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/connected", nil) - clientActivatedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/activated", nil) - clientDeactivatedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/deactivated", nil) - clientDisconnectedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/disconnected", nil) - - capacityQueryZeroMeter = metrics.NewRegisteredMeter("vflux/server/capQueryZero", nil) - capacityQueryNonZeroMeter = metrics.NewRegisteredMeter("vflux/server/capQueryNonZero", nil) -) diff --git a/les/vflux/server/prioritypool.go b/les/vflux/server/prioritypool.go deleted file mode 100644 index 766026a808..0000000000 --- a/les/vflux/server/prioritypool.go +++ /dev/null @@ -1,695 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "math" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/common/prque" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -const ( - lazyQueueRefresh = time.Second * 10 // refresh period of the active queue -) - -// priorityPool handles a set of nodes where each node has a capacity (a scalar value) -// and a priority (which can change over time and can also depend on the capacity). -// A node is active if it has at least the necessary minimal amount of capacity while -// inactive nodes have 0 capacity (values between 0 and the minimum are not allowed). -// The pool ensures that the number and total capacity of all active nodes are limited -// and the highest priority nodes are active at all times (limits can be changed -// during operation with immediate effect). -// -// When activating clients a priority bias is applied in favor of the already active -// nodes in order to avoid nodes quickly alternating between active and inactive states -// when their priorities are close to each other. The bias is specified in terms of -// duration (time) because priorities are expected to usually get lower over time and -// therefore a future minimum prediction (see EstMinPriority) should monotonously -// decrease with the specified time parameter. -// This time bias can be interpreted as minimum expected active time at the given -// capacity (if the threshold priority stays the same). -// -// Nodes in the pool always have either inactiveFlag or activeFlag set. A new node is -// added to the pool by externally setting inactiveFlag. priorityPool can switch a node -// between inactiveFlag and activeFlag at any time. Nodes can be removed from the pool -// by externally resetting both flags. activeFlag should not be set externally. -// -// The highest priority nodes in "inactive" state are moved to "active" state as soon as -// the minimum capacity can be granted for them. The capacity of lower priority active -// nodes is reduced or they are demoted to "inactive" state if their priority is -// insufficient even at minimal capacity. -type priorityPool struct { - setup *serverSetup - ns *nodestate.NodeStateMachine - clock mclock.Clock - lock sync.Mutex - maxCount, maxCap uint64 - minCap uint64 - activeBias time.Duration - capacityStepDiv, fineStepDiv uint64 - - // The snapshot of priority pool for query. - cachedCurve *capacityCurve - ccUpdatedAt mclock.AbsTime - ccUpdateForced bool - - // Runtime status of prioritypool, represents the - // temporary state if tempState is not empty - tempState []*ppNodeInfo - activeCount, activeCap uint64 - activeQueue *prque.LazyQueue[int64, *ppNodeInfo] - inactiveQueue *prque.Prque[int64, *ppNodeInfo] -} - -// ppNodeInfo is the internal node descriptor of priorityPool -type ppNodeInfo struct { - nodePriority nodePriority - node *enode.Node - connected bool - capacity uint64 // only changed when temporary state is committed - activeIndex, inactiveIndex int - - tempState bool // should only be true while the priorityPool lock is held - tempCapacity uint64 // equals capacity when tempState is false - - // the following fields only affect the temporary state and they are set to their - // default value when leaving the temp state - minTarget, stepDiv uint64 - bias time.Duration -} - -// newPriorityPool creates a new priorityPool -func newPriorityPool(ns *nodestate.NodeStateMachine, setup *serverSetup, clock mclock.Clock, minCap uint64, activeBias time.Duration, capacityStepDiv, fineStepDiv uint64) *priorityPool { - pp := &priorityPool{ - setup: setup, - ns: ns, - clock: clock, - inactiveQueue: prque.New[int64, *ppNodeInfo](inactiveSetIndex), - minCap: minCap, - activeBias: activeBias, - capacityStepDiv: capacityStepDiv, - fineStepDiv: fineStepDiv, - } - if pp.activeBias < time.Duration(1) { - pp.activeBias = time.Duration(1) - } - pp.activeQueue = prque.NewLazyQueue(activeSetIndex, activePriority, pp.activeMaxPriority, clock, lazyQueueRefresh) - - ns.SubscribeField(pp.setup.balanceField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { - if newValue != nil { - c := &ppNodeInfo{ - node: node, - nodePriority: newValue.(nodePriority), - activeIndex: -1, - inactiveIndex: -1, - } - ns.SetFieldSub(node, pp.setup.queueField, c) - ns.SetStateSub(node, setup.inactiveFlag, nodestate.Flags{}, 0) - } else { - ns.SetStateSub(node, nodestate.Flags{}, pp.setup.activeFlag.Or(pp.setup.inactiveFlag), 0) - if n, _ := pp.ns.GetField(node, pp.setup.queueField).(*ppNodeInfo); n != nil { - pp.disconnectNode(n) - } - ns.SetFieldSub(node, pp.setup.capacityField, nil) - ns.SetFieldSub(node, pp.setup.queueField, nil) - } - }) - ns.SubscribeState(pp.setup.activeFlag.Or(pp.setup.inactiveFlag), func(node *enode.Node, oldState, newState nodestate.Flags) { - if c, _ := pp.ns.GetField(node, pp.setup.queueField).(*ppNodeInfo); c != nil { - if oldState.IsEmpty() { - pp.connectNode(c) - } - if newState.IsEmpty() { - pp.disconnectNode(c) - } - } - }) - ns.SubscribeState(pp.setup.updateFlag, func(node *enode.Node, oldState, newState nodestate.Flags) { - if !newState.IsEmpty() { - pp.updatePriority(node) - } - }) - return pp -} - -// requestCapacity tries to set the capacity of a connected node to the highest possible -// value inside the given target range. If maxTarget is not reachable then the capacity is -// iteratively reduced in fine steps based on the fineStepDiv parameter until minTarget is reached. -// The function returns the new capacity if successful and the original capacity otherwise. -// Note: this function should run inside a NodeStateMachine operation -func (pp *priorityPool) requestCapacity(node *enode.Node, minTarget, maxTarget uint64, bias time.Duration) uint64 { - pp.lock.Lock() - pp.activeQueue.Refresh() - - if minTarget < pp.minCap { - minTarget = pp.minCap - } - if maxTarget < minTarget { - maxTarget = minTarget - } - if bias < pp.activeBias { - bias = pp.activeBias - } - c, _ := pp.ns.GetField(node, pp.setup.queueField).(*ppNodeInfo) - if c == nil { - log.Error("requestCapacity called for unknown node", "id", node.ID()) - pp.lock.Unlock() - return 0 - } - pp.setTempState(c) - if maxTarget > c.capacity { - pp.setTempStepDiv(c, pp.fineStepDiv) - pp.setTempBias(c, bias) - } - pp.setTempCapacity(c, maxTarget) - c.minTarget = minTarget - pp.removeFromQueues(c) - pp.activeQueue.Push(c) - pp.enforceLimits() - updates := pp.finalizeChanges(c.tempCapacity >= minTarget && c.tempCapacity <= maxTarget && c.tempCapacity != c.capacity) - pp.lock.Unlock() - pp.updateFlags(updates) - return c.capacity -} - -// SetLimits sets the maximum number and total capacity of simultaneously active nodes -func (pp *priorityPool) SetLimits(maxCount, maxCap uint64) { - pp.lock.Lock() - pp.activeQueue.Refresh() - inc := (maxCount > pp.maxCount) || (maxCap > pp.maxCap) - dec := (maxCount < pp.maxCount) || (maxCap < pp.maxCap) - pp.maxCount, pp.maxCap = maxCount, maxCap - - var updates []capUpdate - if dec { - pp.enforceLimits() - updates = pp.finalizeChanges(true) - } - if inc { - updates = append(updates, pp.tryActivate(false)...) - } - pp.lock.Unlock() - pp.ns.Operation(func() { pp.updateFlags(updates) }) -} - -// setActiveBias sets the bias applied when trying to activate inactive nodes -func (pp *priorityPool) setActiveBias(bias time.Duration) { - pp.lock.Lock() - pp.activeBias = bias - if pp.activeBias < time.Duration(1) { - pp.activeBias = time.Duration(1) - } - updates := pp.tryActivate(false) - pp.lock.Unlock() - pp.ns.Operation(func() { pp.updateFlags(updates) }) -} - -// Active returns the number and total capacity of currently active nodes -func (pp *priorityPool) Active() (uint64, uint64) { - pp.lock.Lock() - defer pp.lock.Unlock() - - return pp.activeCount, pp.activeCap -} - -// Inactive returns the number of currently inactive nodes -func (pp *priorityPool) Inactive() int { - pp.lock.Lock() - defer pp.lock.Unlock() - - return pp.inactiveQueue.Size() -} - -// Limits returns the maximum allowed number and total capacity of active nodes -func (pp *priorityPool) Limits() (uint64, uint64) { - pp.lock.Lock() - defer pp.lock.Unlock() - - return pp.maxCount, pp.maxCap -} - -// inactiveSetIndex callback updates ppNodeInfo item index in inactiveQueue -func inactiveSetIndex(a *ppNodeInfo, index int) { - a.inactiveIndex = index -} - -// activeSetIndex callback updates ppNodeInfo item index in activeQueue -func activeSetIndex(a *ppNodeInfo, index int) { - a.activeIndex = index -} - -// invertPriority inverts a priority value. The active queue uses inverted priorities -// because the node on the top is the first to be deactivated. -func invertPriority(p int64) int64 { - if p == math.MinInt64 { - return math.MaxInt64 - } - return -p -} - -// activePriority callback returns actual priority of ppNodeInfo item in activeQueue -func activePriority(c *ppNodeInfo) int64 { - if c.bias == 0 { - return invertPriority(c.nodePriority.priority(c.tempCapacity)) - } else { - return invertPriority(c.nodePriority.estimatePriority(c.tempCapacity, 0, 0, c.bias, true)) - } -} - -// activeMaxPriority callback returns estimated maximum priority of ppNodeInfo item in activeQueue -func (pp *priorityPool) activeMaxPriority(c *ppNodeInfo, until mclock.AbsTime) int64 { - future := time.Duration(until - pp.clock.Now()) - if future < 0 { - future = 0 - } - return invertPriority(c.nodePriority.estimatePriority(c.tempCapacity, 0, future, c.bias, false)) -} - -// inactivePriority callback returns actual priority of ppNodeInfo item in inactiveQueue -func (pp *priorityPool) inactivePriority(p *ppNodeInfo) int64 { - return p.nodePriority.priority(pp.minCap) -} - -// removeFromQueues removes the node from the active/inactive queues -func (pp *priorityPool) removeFromQueues(c *ppNodeInfo) { - if c.activeIndex >= 0 { - pp.activeQueue.Remove(c.activeIndex) - } - if c.inactiveIndex >= 0 { - pp.inactiveQueue.Remove(c.inactiveIndex) - } -} - -// connectNode is called when a new node has been added to the pool (inactiveFlag set) -// Note: this function should run inside a NodeStateMachine operation -func (pp *priorityPool) connectNode(c *ppNodeInfo) { - pp.lock.Lock() - pp.activeQueue.Refresh() - if c.connected { - pp.lock.Unlock() - return - } - c.connected = true - pp.inactiveQueue.Push(c, pp.inactivePriority(c)) - updates := pp.tryActivate(false) - pp.lock.Unlock() - pp.updateFlags(updates) -} - -// disconnectNode is called when a node has been removed from the pool (both inactiveFlag -// and activeFlag reset) -// Note: this function should run inside a NodeStateMachine operation -func (pp *priorityPool) disconnectNode(c *ppNodeInfo) { - pp.lock.Lock() - pp.activeQueue.Refresh() - if !c.connected { - pp.lock.Unlock() - return - } - c.connected = false - pp.removeFromQueues(c) - - var updates []capUpdate - if c.capacity != 0 { - pp.setTempState(c) - pp.setTempCapacity(c, 0) - updates = pp.tryActivate(true) - } - pp.lock.Unlock() - pp.updateFlags(updates) -} - -// setTempState internally puts a node in a temporary state that can either be reverted -// or confirmed later. This temporary state allows changing the capacity of a node and -// moving it between the active and inactive queue. activeFlag/inactiveFlag and -// capacityField are not changed while the changes are still temporary. -func (pp *priorityPool) setTempState(c *ppNodeInfo) { - if c.tempState { - return - } - c.tempState = true - if c.tempCapacity != c.capacity { // should never happen - log.Error("tempCapacity != capacity when entering tempState") - } - // Assign all the defaults to the temp state. - c.minTarget = pp.minCap - c.stepDiv = pp.capacityStepDiv - c.bias = 0 - pp.tempState = append(pp.tempState, c) -} - -// unsetTempState revokes the temp status of the node and reset all internal -// fields to the default value. -func (pp *priorityPool) unsetTempState(c *ppNodeInfo) { - if !c.tempState { - return - } - c.tempState = false - if c.tempCapacity != c.capacity { // should never happen - log.Error("tempCapacity != capacity when leaving tempState") - } - c.minTarget = pp.minCap - c.stepDiv = pp.capacityStepDiv - c.bias = 0 -} - -// setTempCapacity changes the capacity of a node in the temporary state and adjusts -// activeCap and activeCount accordingly. Since this change is performed in the temporary -// state it should be called after setTempState and before finalizeChanges. -func (pp *priorityPool) setTempCapacity(c *ppNodeInfo, cap uint64) { - if !c.tempState { // should never happen - log.Error("Node is not in temporary state") - return - } - pp.activeCap += cap - c.tempCapacity - if c.tempCapacity == 0 { - pp.activeCount++ - } - if cap == 0 { - pp.activeCount-- - } - c.tempCapacity = cap -} - -// setTempBias changes the connection bias of a node in the temporary state. -func (pp *priorityPool) setTempBias(c *ppNodeInfo, bias time.Duration) { - if !c.tempState { // should never happen - log.Error("Node is not in temporary state") - return - } - c.bias = bias -} - -// setTempStepDiv changes the capacity divisor of a node in the temporary state. -func (pp *priorityPool) setTempStepDiv(c *ppNodeInfo, stepDiv uint64) { - if !c.tempState { // should never happen - log.Error("Node is not in temporary state") - return - } - c.stepDiv = stepDiv -} - -// enforceLimits enforces active node count and total capacity limits. It returns the -// lowest active node priority. Note that this function is performed on the temporary -// internal state. -func (pp *priorityPool) enforceLimits() (*ppNodeInfo, int64) { - if pp.activeCap <= pp.maxCap && pp.activeCount <= pp.maxCount { - return nil, math.MinInt64 - } - var ( - lastNode *ppNodeInfo - maxActivePriority int64 - ) - pp.activeQueue.MultiPop(func(c *ppNodeInfo, priority int64) bool { - lastNode = c - pp.setTempState(c) - maxActivePriority = priority - if c.tempCapacity == c.minTarget || pp.activeCount > pp.maxCount { - pp.setTempCapacity(c, 0) - } else { - sub := c.tempCapacity / c.stepDiv - if sub == 0 { - sub = 1 - } - if c.tempCapacity-sub < c.minTarget { - sub = c.tempCapacity - c.minTarget - } - pp.setTempCapacity(c, c.tempCapacity-sub) - pp.activeQueue.Push(c) - } - return pp.activeCap > pp.maxCap || pp.activeCount > pp.maxCount - }) - return lastNode, invertPriority(maxActivePriority) -} - -// finalizeChanges either commits or reverts temporary changes. The necessary capacity -// field and according flag updates are not performed here but returned in a list because -// they should be performed while the mutex is not held. -func (pp *priorityPool) finalizeChanges(commit bool) (updates []capUpdate) { - for _, c := range pp.tempState { - // always remove and push back in order to update biased priority - pp.removeFromQueues(c) - oldCapacity := c.capacity - if commit { - c.capacity = c.tempCapacity - } else { - pp.setTempCapacity(c, c.capacity) // revert activeCount/activeCap - } - pp.unsetTempState(c) - - if c.connected { - if c.capacity != 0 { - pp.activeQueue.Push(c) - } else { - pp.inactiveQueue.Push(c, pp.inactivePriority(c)) - } - if c.capacity != oldCapacity { - updates = append(updates, capUpdate{c.node, oldCapacity, c.capacity}) - } - } - } - pp.tempState = nil - if commit { - pp.ccUpdateForced = true - } - return -} - -// capUpdate describes a capacityField and activeFlag/inactiveFlag update -type capUpdate struct { - node *enode.Node - oldCap, newCap uint64 -} - -// updateFlags performs capacityField and activeFlag/inactiveFlag updates while the -// pool mutex is not held -// Note: this function should run inside a NodeStateMachine operation -func (pp *priorityPool) updateFlags(updates []capUpdate) { - for _, f := range updates { - if f.oldCap == 0 { - pp.ns.SetStateSub(f.node, pp.setup.activeFlag, pp.setup.inactiveFlag, 0) - } - if f.newCap == 0 { - pp.ns.SetStateSub(f.node, pp.setup.inactiveFlag, pp.setup.activeFlag, 0) - pp.ns.SetFieldSub(f.node, pp.setup.capacityField, nil) - } else { - pp.ns.SetFieldSub(f.node, pp.setup.capacityField, f.newCap) - } - } -} - -// tryActivate tries to activate inactive nodes if possible -func (pp *priorityPool) tryActivate(commit bool) []capUpdate { - for pp.inactiveQueue.Size() > 0 { - c := pp.inactiveQueue.PopItem() - pp.setTempState(c) - pp.setTempBias(c, pp.activeBias) - pp.setTempCapacity(c, pp.minCap) - pp.activeQueue.Push(c) - pp.enforceLimits() - if c.tempCapacity > 0 { - commit = true - pp.setTempBias(c, 0) - } else { - break - } - } - pp.ccUpdateForced = true - return pp.finalizeChanges(commit) -} - -// updatePriority gets the current priority value of the given node from the nodePriority -// interface and performs the necessary changes. It is triggered by updateFlag. -// Note: this function should run inside a NodeStateMachine operation -func (pp *priorityPool) updatePriority(node *enode.Node) { - pp.lock.Lock() - pp.activeQueue.Refresh() - c, _ := pp.ns.GetField(node, pp.setup.queueField).(*ppNodeInfo) - if c == nil || !c.connected { - pp.lock.Unlock() - return - } - pp.removeFromQueues(c) - if c.capacity != 0 { - pp.activeQueue.Push(c) - } else { - pp.inactiveQueue.Push(c, pp.inactivePriority(c)) - } - updates := pp.tryActivate(false) - pp.lock.Unlock() - pp.updateFlags(updates) -} - -// capacityCurve is a snapshot of the priority pool contents in a format that can efficiently -// estimate how much capacity could be granted to a given node at a given priority level. -type capacityCurve struct { - points []curvePoint // curve points sorted in descending order of priority - index map[enode.ID][]int // curve point indexes belonging to each node - excludeList []int // curve point indexes of excluded node - excludeFirst bool // true if activeCount == maxCount -} - -type curvePoint struct { - freeCap uint64 // available capacity and node count at the current priority level - nextPri int64 // next priority level where more capacity will be available -} - -// getCapacityCurve returns a new or recently cached capacityCurve based on the contents of the pool -func (pp *priorityPool) getCapacityCurve() *capacityCurve { - pp.lock.Lock() - defer pp.lock.Unlock() - - now := pp.clock.Now() - dt := time.Duration(now - pp.ccUpdatedAt) - if !pp.ccUpdateForced && pp.cachedCurve != nil && dt < time.Second*10 { - return pp.cachedCurve - } - - pp.ccUpdateForced = false - pp.ccUpdatedAt = now - curve := &capacityCurve{ - index: make(map[enode.ID][]int), - } - pp.cachedCurve = curve - - var excludeID enode.ID - excludeFirst := pp.maxCount == pp.activeCount - // reduce node capacities or remove nodes until nothing is left in the queue; - // record the available capacity and the necessary priority after each step - lastPri := int64(math.MinInt64) - for pp.activeCap > 0 { - cp := curvePoint{} - if pp.activeCap > pp.maxCap { - log.Error("Active capacity is greater than allowed maximum", "active", pp.activeCap, "maximum", pp.maxCap) - } else { - cp.freeCap = pp.maxCap - pp.activeCap - } - // temporarily increase activeCap to enforce reducing or removing a node capacity - tempCap := cp.freeCap + 1 - pp.activeCap += tempCap - var next *ppNodeInfo - // enforceLimits removes the lowest priority node if it has minimal capacity, - // otherwise reduces its capacity - next, cp.nextPri = pp.enforceLimits() - if cp.nextPri < lastPri { - // enforce monotonicity which may be broken by continuously changing priorities - cp.nextPri = lastPri - } else { - lastPri = cp.nextPri - } - pp.activeCap -= tempCap - if next == nil { - log.Error("getCapacityCurve: cannot remove next element from the priority queue") - break - } - id := next.node.ID() - if excludeFirst { - // if the node count limit is already reached then mark the node with the - // lowest priority for exclusion - curve.excludeFirst = true - excludeID = id - excludeFirst = false - } - // multiple curve points and therefore multiple indexes may belong to a node - // if it was removed in multiple steps (if its capacity was more than the minimum) - curve.index[id] = append(curve.index[id], len(curve.points)) - curve.points = append(curve.points, cp) - } - // restore original state of the queue - pp.finalizeChanges(false) - curve.points = append(curve.points, curvePoint{ - freeCap: pp.maxCap, - nextPri: math.MaxInt64, - }) - if curve.excludeFirst { - curve.excludeList = curve.index[excludeID] - } - return curve -} - -// exclude returns a capacityCurve with the given node excluded from the original curve -func (cc *capacityCurve) exclude(id enode.ID) *capacityCurve { - if excludeList, ok := cc.index[id]; ok { - // return a new version of the curve (only one excluded node can be selected) - // Note: if the first node was excluded by default (excludeFirst == true) then - // we can forget about that and exclude the node with the given id instead. - return &capacityCurve{ - points: cc.points, - index: cc.index, - excludeList: excludeList, - } - } - return cc -} - -func (cc *capacityCurve) getPoint(i int) curvePoint { - cp := cc.points[i] - if i == 0 && cc.excludeFirst { - cp.freeCap = 0 - return cp - } - for ii := len(cc.excludeList) - 1; ii >= 0; ii-- { - ei := cc.excludeList[ii] - if ei < i { - break - } - e1, e2 := cc.points[ei], cc.points[ei+1] - cp.freeCap += e2.freeCap - e1.freeCap - } - return cp -} - -// maxCapacity calculates the maximum capacity available for a node with a given -// (monotonically decreasing) priority vs. capacity function. Note that if the requesting -// node is already in the pool then it should be excluded from the curve in order to get -// the correct result. -func (cc *capacityCurve) maxCapacity(priority func(cap uint64) int64) uint64 { - min, max := 0, len(cc.points)-1 // the curve always has at least one point - for min < max { - mid := (min + max) / 2 - cp := cc.getPoint(mid) - if cp.freeCap == 0 || priority(cp.freeCap) > cp.nextPri { - min = mid + 1 - } else { - max = mid - } - } - cp2 := cc.getPoint(min) - if cp2.freeCap == 0 || min == 0 { - return cp2.freeCap - } - cp1 := cc.getPoint(min - 1) - if priority(cp2.freeCap) > cp1.nextPri { - return cp2.freeCap - } - minc, maxc := cp1.freeCap, cp2.freeCap-1 - for minc < maxc { - midc := (minc + maxc + 1) / 2 - if midc == 0 || priority(midc) > cp1.nextPri { - minc = midc - } else { - maxc = midc - 1 - } - } - return maxc -} diff --git a/les/vflux/server/prioritypool_test.go b/les/vflux/server/prioritypool_test.go deleted file mode 100644 index 5152312116..0000000000 --- a/les/vflux/server/prioritypool_test.go +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "math/rand" - "reflect" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -const ( - testCapacityStepDiv = 100 - testCapacityToleranceDiv = 10 - testMinCap = 100 -) - -type ppTestClient struct { - node *enode.Node - balance, cap uint64 -} - -func (c *ppTestClient) priority(cap uint64) int64 { - return int64(c.balance / cap) -} - -func (c *ppTestClient) estimatePriority(cap uint64, addBalance int64, future, bias time.Duration, update bool) int64 { - return int64(c.balance / cap) -} - -func TestPriorityPool(t *testing.T) { - clock := &mclock.Simulated{} - setup := newServerSetup() - setup.balanceField = setup.setup.NewField("ppTestClient", reflect.TypeOf(&ppTestClient{})) - ns := nodestate.NewNodeStateMachine(nil, nil, clock, setup.setup) - - ns.SubscribeField(setup.capacityField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) { - if n := ns.GetField(node, setup.balanceField); n != nil { - c := n.(*ppTestClient) - c.cap = newValue.(uint64) - } - }) - pp := newPriorityPool(ns, setup, clock, testMinCap, 0, testCapacityStepDiv, testCapacityStepDiv) - ns.Start() - pp.SetLimits(100, 1000000) - clients := make([]*ppTestClient, 100) - raise := func(c *ppTestClient) { - for { - var ok bool - ns.Operation(func() { - newCap := c.cap + c.cap/testCapacityStepDiv - ok = pp.requestCapacity(c.node, newCap, newCap, 0) == newCap - }) - if !ok { - return - } - } - } - var sumBalance uint64 - check := func(c *ppTestClient) { - expCap := 1000000 * c.balance / sumBalance - capTol := expCap / testCapacityToleranceDiv - if c.cap < expCap-capTol || c.cap > expCap+capTol { - t.Errorf("Wrong node capacity (expected %d, got %d)", expCap, c.cap) - } - } - - for i := range clients { - c := &ppTestClient{ - node: enode.SignNull(&enr.Record{}, enode.ID{byte(i)}), - balance: 100000000000, - cap: 1000, - } - sumBalance += c.balance - clients[i] = c - ns.SetField(c.node, setup.balanceField, c) - ns.SetState(c.node, setup.inactiveFlag, nodestate.Flags{}, 0) - raise(c) - check(c) - } - - for count := 0; count < 100; count++ { - c := clients[rand.Intn(len(clients))] - oldBalance := c.balance - c.balance = uint64(rand.Int63n(100000000000) + 100000000000) - sumBalance += c.balance - oldBalance - pp.ns.SetState(c.node, setup.updateFlag, nodestate.Flags{}, 0) - pp.ns.SetState(c.node, nodestate.Flags{}, setup.updateFlag, 0) - if c.balance > oldBalance { - raise(c) - } else { - for _, c := range clients { - raise(c) - } - } - // check whether capacities are proportional to balances - for _, c := range clients { - check(c) - } - if count%10 == 0 { - // test available capacity calculation with capacity curve - c = clients[rand.Intn(len(clients))] - curve := pp.getCapacityCurve().exclude(c.node.ID()) - - add := uint64(rand.Int63n(10000000000000)) - c.balance += add - sumBalance += add - expCap := curve.maxCapacity(func(cap uint64) int64 { - return int64(c.balance / cap) - }) - var ok bool - expFail := expCap + 10 - if expFail < testMinCap { - expFail = testMinCap - } - ns.Operation(func() { - ok = pp.requestCapacity(c.node, expFail, expFail, 0) == expFail - }) - if ok { - t.Errorf("Request for more than expected available capacity succeeded") - } - if expCap >= testMinCap { - ns.Operation(func() { - ok = pp.requestCapacity(c.node, expCap, expCap, 0) == expCap - }) - if !ok { - t.Errorf("Request for expected available capacity failed") - } - } - c.balance -= add - sumBalance -= add - pp.ns.SetState(c.node, setup.updateFlag, nodestate.Flags{}, 0) - pp.ns.SetState(c.node, nodestate.Flags{}, setup.updateFlag, 0) - for _, c := range clients { - raise(c) - } - } - } - - ns.Stop() -} - -func TestCapacityCurve(t *testing.T) { - clock := &mclock.Simulated{} - setup := newServerSetup() - setup.balanceField = setup.setup.NewField("ppTestClient", reflect.TypeOf(&ppTestClient{})) - ns := nodestate.NewNodeStateMachine(nil, nil, clock, setup.setup) - - pp := newPriorityPool(ns, setup, clock, 400000, 0, 2, 2) - ns.Start() - pp.SetLimits(10, 10000000) - clients := make([]*ppTestClient, 10) - - for i := range clients { - c := &ppTestClient{ - node: enode.SignNull(&enr.Record{}, enode.ID{byte(i)}), - balance: 100000000000 * uint64(i+1), - cap: 1000000, - } - clients[i] = c - ns.SetField(c.node, setup.balanceField, c) - ns.SetState(c.node, setup.inactiveFlag, nodestate.Flags{}, 0) - ns.Operation(func() { - pp.requestCapacity(c.node, c.cap, c.cap, 0) - }) - } - - curve := pp.getCapacityCurve() - check := func(balance, expCap uint64) { - cap := curve.maxCapacity(func(cap uint64) int64 { - return int64(balance / cap) - }) - var fail bool - if cap == 0 || expCap == 0 { - fail = cap != expCap - } else { - pri := balance / cap - expPri := balance / expCap - fail = pri != expPri && pri != expPri+1 - } - if fail { - t.Errorf("Incorrect capacity for %d balance (got %d, expected %d)", balance, cap, expCap) - } - } - - check(0, 0) - check(10000000000, 100000) - check(50000000000, 500000) - check(100000000000, 1000000) - check(200000000000, 1000000) - check(300000000000, 1500000) - check(450000000000, 1500000) - check(600000000000, 2000000) - check(800000000000, 2000000) - check(1000000000000, 2500000) - - pp.SetLimits(11, 10000000) - curve = pp.getCapacityCurve() - - check(0, 0) - check(10000000000, 100000) - check(50000000000, 500000) - check(150000000000, 750000) - check(200000000000, 1000000) - check(220000000000, 1100000) - check(275000000000, 1100000) - check(375000000000, 1500000) - check(450000000000, 1500000) - check(600000000000, 2000000) - check(800000000000, 2000000) - check(1000000000000, 2500000) - - ns.Stop() -} diff --git a/les/vflux/server/service.go b/les/vflux/server/service.go deleted file mode 100644 index 40515f072e..0000000000 --- a/les/vflux/server/service.go +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "net" - "strings" - "sync" - "time" - - "github.com/ethereum/go-ethereum/les/utils" - "github.com/ethereum/go-ethereum/les/vflux" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/rlp" -) - -type ( - // Server serves vflux requests - Server struct { - limiter *utils.Limiter - lock sync.Mutex - services map[string]*serviceEntry - delayPerRequest time.Duration - } - - // Service is a service registered at the Server and identified by a string id - Service interface { - Handle(id enode.ID, address string, name string, data []byte) []byte // never called concurrently - } - - serviceEntry struct { - id, desc string - backend Service - } -) - -// NewServer creates a new Server -func NewServer(delayPerRequest time.Duration) *Server { - return &Server{ - limiter: utils.NewLimiter(1000), - delayPerRequest: delayPerRequest, - services: make(map[string]*serviceEntry), - } -} - -// Register registers a Service -func (s *Server) Register(b Service, id, desc string) { - srv := &serviceEntry{backend: b, id: id, desc: desc} - if strings.Contains(srv.id, ":") { - // srv.id + ":" will be used as a service database prefix - log.Error("Service ID contains ':'", "id", srv.id) - return - } - s.lock.Lock() - s.services[srv.id] = srv - s.lock.Unlock() -} - -// Serve serves a vflux request batch -// Note: requests are served by the Handle functions of the registered services. Serve -// may be called concurrently but the Handle functions are called sequentially and -// therefore thread safety is guaranteed. -func (s *Server) Serve(id enode.ID, address string, requests vflux.Requests) vflux.Replies { - reqLen := uint(len(requests)) - if reqLen == 0 || reqLen > vflux.MaxRequestLength { - return nil - } - // Note: the value parameter will be supplied by the token sale module (total amount paid) - ch := <-s.limiter.Add(id, address, 0, reqLen) - if ch == nil { - return nil - } - // Note: the limiter ensures that the following section is not running concurrently, - // the lock only protects against contention caused by new service registration - s.lock.Lock() - results := make(vflux.Replies, len(requests)) - for i, req := range requests { - if service := s.services[req.Service]; service != nil { - results[i] = service.backend.Handle(id, address, req.Name, req.Params) - } - } - s.lock.Unlock() - time.Sleep(s.delayPerRequest * time.Duration(reqLen)) - close(ch) - return results -} - -// ServeEncoded serves an encoded vflux request batch and returns the encoded replies -func (s *Server) ServeEncoded(id enode.ID, addr *net.UDPAddr, req []byte) []byte { - var requests vflux.Requests - if err := rlp.DecodeBytes(req, &requests); err != nil { - return nil - } - results := s.Serve(id, addr.String(), requests) - if results == nil { - return nil - } - res, _ := rlp.EncodeToBytes(&results) - return res -} - -// Stop shuts down the server -func (s *Server) Stop() { - s.limiter.Stop() -} diff --git a/les/vflux/server/status.go b/les/vflux/server/status.go deleted file mode 100644 index 2d7e25b684..0000000000 --- a/les/vflux/server/status.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package server - -import ( - "reflect" - - "github.com/ethereum/go-ethereum/p2p/nodestate" -) - -type peerWrapper struct{ clientPeer } // the NodeStateMachine type system needs this wrapper - -// serverSetup is a wrapper of the node state machine setup, which contains -// all the created flags and fields used in the vflux server side. -type serverSetup struct { - setup *nodestate.Setup - clientField nodestate.Field // Field contains the client peer handler - - // Flags and fields controlled by balance tracker. BalanceTracker - // is responsible for setting/deleting these flags or fields. - priorityFlag nodestate.Flags // Flag is set if the node has a positive balance - updateFlag nodestate.Flags // Flag is set whenever the node balance is changed(priority changed) - balanceField nodestate.Field // Field contains the client balance for priority calculation - - // Flags and fields controlled by priority queue. Priority queue - // is responsible for setting/deleting these flags or fields. - activeFlag nodestate.Flags // Flag is set if the node is active - inactiveFlag nodestate.Flags // Flag is set if the node is inactive - capacityField nodestate.Field // Field contains the capacity of the node - queueField nodestate.Field // Field contains the information in the priority queue -} - -// newServerSetup initializes the setup for state machine and returns the flags/fields group. -func newServerSetup() *serverSetup { - setup := &serverSetup{setup: &nodestate.Setup{}} - setup.clientField = setup.setup.NewField("client", reflect.TypeOf(peerWrapper{})) - setup.priorityFlag = setup.setup.NewFlag("priority") - setup.updateFlag = setup.setup.NewFlag("update") - setup.balanceField = setup.setup.NewField("balance", reflect.TypeOf(&nodeBalance{})) - setup.activeFlag = setup.setup.NewFlag("active") - setup.inactiveFlag = setup.setup.NewFlag("inactive") - setup.capacityField = setup.setup.NewField("capacity", reflect.TypeOf(uint64(0))) - setup.queueField = setup.setup.NewField("queue", reflect.TypeOf(&ppNodeInfo{})) - return setup -} diff --git a/light/lightchain.go b/light/lightchain.go deleted file mode 100644 index 617658b85b..0000000000 --- a/light/lightchain.go +++ /dev/null @@ -1,531 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. -package light - -import ( - "context" - "errors" - "math/big" - "sync" - "sync/atomic" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/lru" - "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/event" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" -) - -var ( - bodyCacheLimit = 256 - blockCacheLimit = 256 -) - -// LightChain represents a canonical chain that by default only handles block -// headers, downloading block bodies and receipts on demand through an ODR -// interface. It only does header validation during chain insertion. -type LightChain struct { - hc *core.HeaderChain - indexerConfig *IndexerConfig - chainDb ethdb.Database - engine consensus.Engine - odr OdrBackend - chainFeed event.Feed - chainSideFeed event.Feed - chainHeadFeed event.Feed - scope event.SubscriptionScope - genesisBlock *types.Block - forker *core.ForkChoice - - bodyCache *lru.Cache[common.Hash, *types.Body] - bodyRLPCache *lru.Cache[common.Hash, rlp.RawValue] - blockCache *lru.Cache[common.Hash, *types.Block] - - chainmu sync.RWMutex // protects header inserts - quit chan struct{} - wg sync.WaitGroup - - // Atomic boolean switches: - stopped atomic.Bool // whether LightChain is stopped or running - procInterrupt atomic.Bool // interrupts chain insert -} - -// NewLightChain returns a fully initialised light chain using information -// available in the database. It initialises the default Ethereum header -// validator. -func NewLightChain(odr OdrBackend, config *params.ChainConfig, engine consensus.Engine) (*LightChain, error) { - bc := &LightChain{ - chainDb: odr.Database(), - indexerConfig: odr.IndexerConfig(), - odr: odr, - quit: make(chan struct{}), - bodyCache: lru.NewCache[common.Hash, *types.Body](bodyCacheLimit), - bodyRLPCache: lru.NewCache[common.Hash, rlp.RawValue](bodyCacheLimit), - blockCache: lru.NewCache[common.Hash, *types.Block](blockCacheLimit), - engine: engine, - } - bc.forker = core.NewForkChoice(bc, nil) - var err error - bc.hc, err = core.NewHeaderChain(odr.Database(), config, bc.engine, bc.getProcInterrupt) - if err != nil { - return nil, err - } - bc.genesisBlock, _ = bc.GetBlockByNumber(NoOdr, 0) - if bc.genesisBlock == nil { - return nil, core.ErrNoGenesis - } - if err := bc.loadLastState(); err != nil { - return nil, err - } - // Check the current state of the block hashes and make sure that we do not have any of the bad blocks in our chain - for hash := range core.BadHashes { - if header := bc.GetHeaderByHash(hash); header != nil { - log.Error("Found bad hash, rewinding chain", "number", header.Number, "hash", header.ParentHash) - bc.SetHead(header.Number.Uint64() - 1) - log.Info("Chain rewind was successful, resuming normal operation") - } - } - return bc, nil -} - -func (lc *LightChain) getProcInterrupt() bool { - return lc.procInterrupt.Load() -} - -// Odr returns the ODR backend of the chain -func (lc *LightChain) Odr() OdrBackend { - return lc.odr -} - -// HeaderChain returns the underlying header chain. -func (lc *LightChain) HeaderChain() *core.HeaderChain { - return lc.hc -} - -// loadLastState loads the last known chain state from the database. This method -// assumes that the chain manager mutex is held. -func (lc *LightChain) loadLastState() error { - if head := rawdb.ReadHeadHeaderHash(lc.chainDb); head == (common.Hash{}) { - // Corrupt or empty database, init from scratch - lc.Reset() - } else { - header := lc.GetHeaderByHash(head) - if header == nil { - // Corrupt or empty database, init from scratch - lc.Reset() - } else { - lc.hc.SetCurrentHeader(header) - } - } - // Issue a status log and return - header := lc.hc.CurrentHeader() - headerTd := lc.GetTd(header.Hash(), header.Number.Uint64()) - log.Info("Loaded most recent local header", "number", header.Number, "hash", header.Hash(), "td", headerTd, "age", common.PrettyAge(time.Unix(int64(header.Time), 0))) - return nil -} - -// SetHead rewinds the local chain to a new head. Everything above the new -// head will be deleted and the new one set. -func (lc *LightChain) SetHead(head uint64) error { - lc.chainmu.Lock() - defer lc.chainmu.Unlock() - - lc.hc.SetHead(head, nil, nil) - return lc.loadLastState() -} - -// SetHeadWithTimestamp rewinds the local chain to a new head that has at max -// the given timestamp. Everything above the new head will be deleted and the -// new one set. -func (lc *LightChain) SetHeadWithTimestamp(timestamp uint64) error { - lc.chainmu.Lock() - defer lc.chainmu.Unlock() - - lc.hc.SetHeadWithTimestamp(timestamp, nil, nil) - return lc.loadLastState() -} - -// GasLimit returns the gas limit of the current HEAD block. -func (lc *LightChain) GasLimit() uint64 { - return lc.hc.CurrentHeader().GasLimit -} - -// Reset purges the entire blockchain, restoring it to its genesis state. -func (lc *LightChain) Reset() { - lc.ResetWithGenesisBlock(lc.genesisBlock) -} - -// ResetWithGenesisBlock purges the entire blockchain, restoring it to the -// specified genesis state. -func (lc *LightChain) ResetWithGenesisBlock(genesis *types.Block) { - // Dump the entire block chain and purge the caches - lc.SetHead(0) - - lc.chainmu.Lock() - defer lc.chainmu.Unlock() - - // Prepare the genesis block and reinitialise the chain - batch := lc.chainDb.NewBatch() - rawdb.WriteTd(batch, genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()) - rawdb.WriteBlock(batch, genesis) - rawdb.WriteHeadHeaderHash(batch, genesis.Hash()) - if err := batch.Write(); err != nil { - log.Crit("Failed to reset genesis block", "err", err) - } - lc.genesisBlock = genesis - lc.hc.SetGenesis(lc.genesisBlock.Header()) - lc.hc.SetCurrentHeader(lc.genesisBlock.Header()) -} - -// Accessors - -// Engine retrieves the light chain's consensus engine. -func (lc *LightChain) Engine() consensus.Engine { return lc.engine } - -// Genesis returns the genesis block -func (lc *LightChain) Genesis() *types.Block { - return lc.genesisBlock -} - -func (lc *LightChain) StateCache() state.Database { - panic("not implemented") -} - -// GetBody retrieves a block body (transactions and uncles) from the database -// or ODR service by hash, caching it if found. -func (lc *LightChain) GetBody(ctx context.Context, hash common.Hash) (*types.Body, error) { - // Short circuit if the body's already in the cache, retrieve otherwise - if cached, ok := lc.bodyCache.Get(hash); ok { - return cached, nil - } - number := lc.hc.GetBlockNumber(hash) - if number == nil { - return nil, errors.New("unknown block") - } - body, err := GetBody(ctx, lc.odr, hash, *number) - if err != nil { - return nil, err - } - // Cache the found body for next time and return - lc.bodyCache.Add(hash, body) - return body, nil -} - -// GetBodyRLP retrieves a block body in RLP encoding from the database or -// ODR service by hash, caching it if found. -func (lc *LightChain) GetBodyRLP(ctx context.Context, hash common.Hash) (rlp.RawValue, error) { - // Short circuit if the body's already in the cache, retrieve otherwise - if cached, ok := lc.bodyRLPCache.Get(hash); ok { - return cached, nil - } - number := lc.hc.GetBlockNumber(hash) - if number == nil { - return nil, errors.New("unknown block") - } - body, err := GetBodyRLP(ctx, lc.odr, hash, *number) - if err != nil { - return nil, err - } - // Cache the found body for next time and return - lc.bodyRLPCache.Add(hash, body) - return body, nil -} - -// HasBlock checks if a block is fully present in the database or not, caching -// it if present. -func (lc *LightChain) HasBlock(hash common.Hash, number uint64) bool { - blk, _ := lc.GetBlock(NoOdr, hash, number) - return blk != nil -} - -// GetBlock retrieves a block from the database or ODR service by hash and number, -// caching it if found. -func (lc *LightChain) GetBlock(ctx context.Context, hash common.Hash, number uint64) (*types.Block, error) { - // Short circuit if the block's already in the cache, retrieve otherwise - if block, ok := lc.blockCache.Get(hash); ok { - return block, nil - } - block, err := GetBlock(ctx, lc.odr, hash, number) - if err != nil { - return nil, err - } - // Cache the found block for next time and return - lc.blockCache.Add(block.Hash(), block) - return block, nil -} - -// GetBlockByHash retrieves a block from the database or ODR service by hash, -// caching it if found. -func (lc *LightChain) GetBlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { - number := lc.hc.GetBlockNumber(hash) - if number == nil { - return nil, errors.New("unknown block") - } - return lc.GetBlock(ctx, hash, *number) -} - -// GetBlockByNumber retrieves a block from the database or ODR service by -// number, caching it (associated with its hash) if found. -func (lc *LightChain) GetBlockByNumber(ctx context.Context, number uint64) (*types.Block, error) { - hash, err := GetCanonicalHash(ctx, lc.odr, number) - if hash == (common.Hash{}) || err != nil { - return nil, err - } - return lc.GetBlock(ctx, hash, number) -} - -// Stop stops the blockchain service. If any imports are currently in progress -// it will abort them using the procInterrupt. -func (lc *LightChain) Stop() { - if !lc.stopped.CompareAndSwap(false, true) { - return - } - close(lc.quit) - lc.StopInsert() - lc.wg.Wait() - log.Info("Blockchain stopped") -} - -// StopInsert interrupts all insertion methods, causing them to return -// errInsertionInterrupted as soon as possible. Insertion is permanently disabled after -// calling this method. -func (lc *LightChain) StopInsert() { - lc.procInterrupt.Store(true) -} - -// Rollback is designed to remove a chain of links from the database that aren't -// certain enough to be valid. -func (lc *LightChain) Rollback(chain []common.Hash) { - lc.chainmu.Lock() - defer lc.chainmu.Unlock() - - batch := lc.chainDb.NewBatch() - for i := len(chain) - 1; i >= 0; i-- { - hash := chain[i] - - // Degrade the chain markers if they are explicitly reverted. - // In theory we should update all in-memory markers in the - // last step, however the direction of rollback is from high - // to low, so it's safe the update in-memory markers directly. - if head := lc.hc.CurrentHeader(); head.Hash() == hash { - rawdb.WriteHeadHeaderHash(batch, head.ParentHash) - lc.hc.SetCurrentHeader(lc.GetHeader(head.ParentHash, head.Number.Uint64()-1)) - } - } - if err := batch.Write(); err != nil { - log.Crit("Failed to rollback light chain", "error", err) - } -} - -func (lc *LightChain) InsertHeader(header *types.Header) error { - // Verify the header first before obtaining the lock - headers := []*types.Header{header} - if _, err := lc.hc.ValidateHeaderChain(headers); err != nil { - return err - } - // Make sure only one thread manipulates the chain at once - lc.chainmu.Lock() - defer lc.chainmu.Unlock() - - lc.wg.Add(1) - defer lc.wg.Done() - - _, err := lc.hc.WriteHeaders(headers) - log.Info("Inserted header", "number", header.Number, "hash", header.Hash()) - return err -} - -func (lc *LightChain) SetCanonical(header *types.Header) error { - lc.chainmu.Lock() - defer lc.chainmu.Unlock() - - lc.wg.Add(1) - defer lc.wg.Done() - - if err := lc.hc.Reorg([]*types.Header{header}); err != nil { - return err - } - // Emit events - block := types.NewBlockWithHeader(header) - lc.chainFeed.Send(core.ChainEvent{Block: block, Hash: block.Hash()}) - lc.chainHeadFeed.Send(core.ChainHeadEvent{Block: block}) - log.Info("Set the chain head", "number", block.Number(), "hash", block.Hash()) - return nil -} - -// InsertHeaderChain attempts to insert the given header chain in to the local -// chain, possibly creating a reorg. If an error is returned, it will return the -// index number of the failing header as well an error describing what went wrong. - -// In the case of a light chain, InsertHeaderChain also creates and posts light -// chain events when necessary. -func (lc *LightChain) InsertHeaderChain(chain []*types.Header) (int, error) { - if len(chain) == 0 { - return 0, nil - } - start := time.Now() - if i, err := lc.hc.ValidateHeaderChain(chain); err != nil { - return i, err - } - - // Make sure only one thread manipulates the chain at once - lc.chainmu.Lock() - defer lc.chainmu.Unlock() - - lc.wg.Add(1) - defer lc.wg.Done() - - status, err := lc.hc.InsertHeaderChain(chain, start, lc.forker) - if err != nil || len(chain) == 0 { - return 0, err - } - - // Create chain event for the new head block of this insertion. - var ( - lastHeader = chain[len(chain)-1] - block = types.NewBlockWithHeader(lastHeader) - ) - switch status { - case core.CanonStatTy: - lc.chainFeed.Send(core.ChainEvent{Block: block, Hash: block.Hash()}) - lc.chainHeadFeed.Send(core.ChainHeadEvent{Block: block}) - case core.SideStatTy: - lc.chainSideFeed.Send(core.ChainSideEvent{Block: block}) - } - return 0, err -} - -// CurrentHeader retrieves the current head header of the canonical chain. The -// header is retrieved from the HeaderChain's internal cache. -func (lc *LightChain) CurrentHeader() *types.Header { - return lc.hc.CurrentHeader() -} - -// GetTd retrieves a block's total difficulty in the canonical chain from the -// database by hash and number, caching it if found. -func (lc *LightChain) GetTd(hash common.Hash, number uint64) *big.Int { - return lc.hc.GetTd(hash, number) -} - -// GetTdOdr retrieves the total difficult from the database or -// network by hash and number, caching it (associated with its hash) if found. -func (lc *LightChain) GetTdOdr(ctx context.Context, hash common.Hash, number uint64) *big.Int { - td := lc.GetTd(hash, number) - if td != nil { - return td - } - td, _ = GetTd(ctx, lc.odr, hash, number) - return td -} - -// GetHeader retrieves a block header from the database by hash and number, -// caching it if found. -func (lc *LightChain) GetHeader(hash common.Hash, number uint64) *types.Header { - return lc.hc.GetHeader(hash, number) -} - -// GetHeaderByHash retrieves a block header from the database by hash, caching it if -// found. -func (lc *LightChain) GetHeaderByHash(hash common.Hash) *types.Header { - return lc.hc.GetHeaderByHash(hash) -} - -// HasHeader checks if a block header is present in the database or not, caching -// it if present. -func (lc *LightChain) HasHeader(hash common.Hash, number uint64) bool { - return lc.hc.HasHeader(hash, number) -} - -// GetCanonicalHash returns the canonical hash for a given block number -func (bc *LightChain) GetCanonicalHash(number uint64) common.Hash { - return bc.hc.GetCanonicalHash(number) -} - -// GetAncestor retrieves the Nth ancestor of a given block. It assumes that either the given block or -// a close ancestor of it is canonical. maxNonCanonical points to a downwards counter limiting the -// number of blocks to be individually checked before we reach the canonical chain. -// -// Note: ancestor == 0 returns the same block, 1 returns its parent and so on. -func (lc *LightChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { - return lc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical) -} - -// GetHeaderByNumber retrieves a block header from the database by number, -// caching it (associated with its hash) if found. -func (lc *LightChain) GetHeaderByNumber(number uint64) *types.Header { - return lc.hc.GetHeaderByNumber(number) -} - -// GetHeaderByNumberOdr retrieves a block header from the database or network -// by number, caching it (associated with its hash) if found. -func (lc *LightChain) GetHeaderByNumberOdr(ctx context.Context, number uint64) (*types.Header, error) { - if header := lc.hc.GetHeaderByNumber(number); header != nil { - return header, nil - } - return GetHeaderByNumber(ctx, lc.odr, number) -} - -// Config retrieves the header chain's chain configuration. -func (lc *LightChain) Config() *params.ChainConfig { return lc.hc.Config() } - -// LockChain locks the chain mutex for reading so that multiple canonical hashes can be -// retrieved while it is guaranteed that they belong to the same version of the chain -func (lc *LightChain) LockChain() { - lc.chainmu.RLock() -} - -// UnlockChain unlocks the chain mutex -func (lc *LightChain) UnlockChain() { - lc.chainmu.RUnlock() -} - -// SubscribeChainEvent registers a subscription of ChainEvent. -func (lc *LightChain) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { - return lc.scope.Track(lc.chainFeed.Subscribe(ch)) -} - -// SubscribeChainHeadEvent registers a subscription of ChainHeadEvent. -func (lc *LightChain) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { - return lc.scope.Track(lc.chainHeadFeed.Subscribe(ch)) -} - -// SubscribeChainSideEvent registers a subscription of ChainSideEvent. -func (lc *LightChain) SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription { - return lc.scope.Track(lc.chainSideFeed.Subscribe(ch)) -} - -// SubscribeLogsEvent implements the interface of filters.Backend -// LightChain does not send logs events, so return an empty subscription. -func (lc *LightChain) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { - return lc.scope.Track(new(event.Feed).Subscribe(ch)) -} - -// SubscribeRemovedLogsEvent implements the interface of filters.Backend -// LightChain does not send core.RemovedLogsEvent, so return an empty subscription. -func (lc *LightChain) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { - return lc.scope.Track(new(event.Feed).Subscribe(ch)) -} diff --git a/light/lightchain_test.go b/light/lightchain_test.go deleted file mode 100644 index 5694ca72c2..0000000000 --- a/light/lightchain_test.go +++ /dev/null @@ -1,358 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package light - -import ( - "context" - "errors" - "math/big" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/trie" -) - -// So we can deterministically seed different blockchains -var ( - canonicalSeed = 1 - forkSeed = 2 -) - -// makeHeaderChain creates a deterministic chain of headers rooted at parent. -func makeHeaderChain(parent *types.Header, n int, db ethdb.Database, seed int) []*types.Header { - blocks, _ := core.GenerateChain(params.TestChainConfig, types.NewBlockWithHeader(parent), ethash.NewFaker(), db, n, func(i int, b *core.BlockGen) { - b.SetCoinbase(common.Address{0: byte(seed), 19: byte(i)}) - }) - headers := make([]*types.Header, len(blocks)) - for i, block := range blocks { - headers[i] = block.Header() - } - return headers -} - -// newCanonical creates a chain database, and injects a deterministic canonical -// chain. Depending on the full flag, if creates either a full block chain or a -// header only chain. -func newCanonical(n int) (ethdb.Database, *LightChain, error) { - db := rawdb.NewMemoryDatabase() - gspec := core.Genesis{Config: params.TestChainConfig} - genesis := gspec.MustCommit(db, trie.NewDatabase(db, trie.HashDefaults)) - blockchain, _ := NewLightChain(&dummyOdr{db: db, indexerConfig: TestClientIndexerConfig}, gspec.Config, ethash.NewFaker()) - - // Create and inject the requested chain - if n == 0 { - return db, blockchain, nil - } - // Header-only chain requested - headers := makeHeaderChain(genesis.Header(), n, db, canonicalSeed) - _, err := blockchain.InsertHeaderChain(headers) - return db, blockchain, err -} - -// newTestLightChain creates a LightChain that doesn't validate anything. -func newTestLightChain() *LightChain { - db := rawdb.NewMemoryDatabase() - gspec := &core.Genesis{ - Difficulty: big.NewInt(1), - Config: params.TestChainConfig, - } - gspec.MustCommit(db, trie.NewDatabase(db, trie.HashDefaults)) - lc, err := NewLightChain(&dummyOdr{db: db}, gspec.Config, ethash.NewFullFaker()) - if err != nil { - panic(err) - } - return lc -} - -// Test fork of length N starting from block i -func testFork(t *testing.T, LightChain *LightChain, i, n int, comparator func(td1, td2 *big.Int)) { - // Copy old chain up to #i into a new db - db, LightChain2, err := newCanonical(i) - if err != nil { - t.Fatal("could not make new canonical in testFork", err) - } - // Assert the chains have the same header/block at #i - var hash1, hash2 common.Hash - hash1 = LightChain.GetHeaderByNumber(uint64(i)).Hash() - hash2 = LightChain2.GetHeaderByNumber(uint64(i)).Hash() - if hash1 != hash2 { - t.Errorf("chain content mismatch at %d: have hash %v, want hash %v", i, hash2, hash1) - } - // Extend the newly created chain - headerChainB := makeHeaderChain(LightChain2.CurrentHeader(), n, db, forkSeed) - if _, err := LightChain2.InsertHeaderChain(headerChainB); err != nil { - t.Fatalf("failed to insert forking chain: %v", err) - } - // Sanity check that the forked chain can be imported into the original - var tdPre, tdPost *big.Int - cur := LightChain.CurrentHeader() - tdPre = LightChain.GetTd(cur.Hash(), cur.Number.Uint64()) - if err := testHeaderChainImport(headerChainB, LightChain); err != nil { - t.Fatalf("failed to import forked header chain: %v", err) - } - last := headerChainB[len(headerChainB)-1] - tdPost = LightChain.GetTd(last.Hash(), last.Number.Uint64()) - // Compare the total difficulties of the chains - comparator(tdPre, tdPost) -} - -// testHeaderChainImport tries to process a chain of header, writing them into -// the database if successful. -func testHeaderChainImport(chain []*types.Header, lightchain *LightChain) error { - for _, header := range chain { - // Try and validate the header - if err := lightchain.engine.VerifyHeader(lightchain.hc, header); err != nil { - return err - } - // Manually insert the header into the database, but don't reorganize (allows subsequent testing) - lightchain.chainmu.Lock() - rawdb.WriteTd(lightchain.chainDb, header.Hash(), header.Number.Uint64(), - new(big.Int).Add(header.Difficulty, lightchain.GetTd(header.ParentHash, header.Number.Uint64()-1))) - rawdb.WriteHeader(lightchain.chainDb, header) - lightchain.chainmu.Unlock() - } - return nil -} - -// Tests that given a starting canonical chain of a given size, it can be extended -// with various length chains. -func TestExtendCanonicalHeaders(t *testing.T) { - length := 5 - - // Make first chain starting from genesis - _, processor, err := newCanonical(length) - if err != nil { - t.Fatalf("failed to make new canonical chain: %v", err) - } - // Define the difficulty comparator - better := func(td1, td2 *big.Int) { - if td2.Cmp(td1) <= 0 { - t.Errorf("total difficulty mismatch: have %v, expected more than %v", td2, td1) - } - } - // Start fork from current height - testFork(t, processor, length, 1, better) - testFork(t, processor, length, 2, better) - testFork(t, processor, length, 5, better) - testFork(t, processor, length, 10, better) -} - -// Tests that given a starting canonical chain of a given size, creating shorter -// forks do not take canonical ownership. -func TestShorterForkHeaders(t *testing.T) { - length := 10 - - // Make first chain starting from genesis - _, processor, err := newCanonical(length) - if err != nil { - t.Fatalf("failed to make new canonical chain: %v", err) - } - // Define the difficulty comparator - worse := func(td1, td2 *big.Int) { - if td2.Cmp(td1) >= 0 { - t.Errorf("total difficulty mismatch: have %v, expected less than %v", td2, td1) - } - } - // Sum of numbers must be less than `length` for this to be a shorter fork - testFork(t, processor, 0, 3, worse) - testFork(t, processor, 0, 7, worse) - testFork(t, processor, 1, 1, worse) - testFork(t, processor, 1, 7, worse) - testFork(t, processor, 5, 3, worse) - testFork(t, processor, 5, 4, worse) -} - -// Tests that given a starting canonical chain of a given size, creating longer -// forks do take canonical ownership. -func TestLongerForkHeaders(t *testing.T) { - length := 10 - - // Make first chain starting from genesis - _, processor, err := newCanonical(length) - if err != nil { - t.Fatalf("failed to make new canonical chain: %v", err) - } - // Define the difficulty comparator - better := func(td1, td2 *big.Int) { - if td2.Cmp(td1) <= 0 { - t.Errorf("total difficulty mismatch: have %v, expected more than %v", td2, td1) - } - } - // Sum of numbers must be greater than `length` for this to be a longer fork - testFork(t, processor, 0, 11, better) - testFork(t, processor, 0, 15, better) - testFork(t, processor, 1, 10, better) - testFork(t, processor, 1, 12, better) - testFork(t, processor, 5, 6, better) - testFork(t, processor, 5, 8, better) -} - -// Tests that given a starting canonical chain of a given size, creating equal -// forks do take canonical ownership. -func TestEqualForkHeaders(t *testing.T) { - length := 10 - - // Make first chain starting from genesis - _, processor, err := newCanonical(length) - if err != nil { - t.Fatalf("failed to make new canonical chain: %v", err) - } - // Define the difficulty comparator - equal := func(td1, td2 *big.Int) { - if td2.Cmp(td1) != 0 { - t.Errorf("total difficulty mismatch: have %v, want %v", td2, td1) - } - } - // Sum of numbers must be equal to `length` for this to be an equal fork - testFork(t, processor, 0, 10, equal) - testFork(t, processor, 1, 9, equal) - testFork(t, processor, 2, 8, equal) - testFork(t, processor, 5, 5, equal) - testFork(t, processor, 6, 4, equal) - testFork(t, processor, 9, 1, equal) -} - -// Tests that chains missing links do not get accepted by the processor. -func TestBrokenHeaderChain(t *testing.T) { - // Make chain starting from genesis - db, LightChain, err := newCanonical(10) - if err != nil { - t.Fatalf("failed to make new canonical chain: %v", err) - } - // Create a forked chain, and try to insert with a missing link - chain := makeHeaderChain(LightChain.CurrentHeader(), 5, db, forkSeed)[1:] - if err := testHeaderChainImport(chain, LightChain); err == nil { - t.Errorf("broken header chain not reported") - } -} - -func makeHeaderChainWithDiff(genesis *types.Block, d []int, seed byte) []*types.Header { - var chain []*types.Header - for i, difficulty := range d { - header := &types.Header{ - Coinbase: common.Address{seed}, - Number: big.NewInt(int64(i + 1)), - Difficulty: big.NewInt(int64(difficulty)), - UncleHash: types.EmptyUncleHash, - TxHash: types.EmptyTxsHash, - ReceiptHash: types.EmptyReceiptsHash, - } - if i == 0 { - header.ParentHash = genesis.Hash() - } else { - header.ParentHash = chain[i-1].Hash() - } - chain = append(chain, types.CopyHeader(header)) - } - return chain -} - -type dummyOdr struct { - OdrBackend - db ethdb.Database - indexerConfig *IndexerConfig -} - -func (odr *dummyOdr) Database() ethdb.Database { - return odr.db -} - -func (odr *dummyOdr) Retrieve(ctx context.Context, req OdrRequest) error { - return nil -} - -func (odr *dummyOdr) IndexerConfig() *IndexerConfig { - return odr.indexerConfig -} - -// Tests that reorganizing a long difficult chain after a short easy one -// overwrites the canonical numbers and links in the database. -func TestReorgLongHeaders(t *testing.T) { - testReorg(t, []int{1, 2, 4}, []int{1, 2, 3, 4}, 10) -} - -// Tests that reorganizing a short difficult chain after a long easy one -// overwrites the canonical numbers and links in the database. -func TestReorgShortHeaders(t *testing.T) { - testReorg(t, []int{1, 2, 3, 4}, []int{1, 10}, 11) -} - -func testReorg(t *testing.T, first, second []int, td int64) { - bc := newTestLightChain() - - // Insert an easy and a difficult chain afterwards - bc.InsertHeaderChain(makeHeaderChainWithDiff(bc.genesisBlock, first, 11)) - bc.InsertHeaderChain(makeHeaderChainWithDiff(bc.genesisBlock, second, 22)) - // Check that the chain is valid number and link wise - prev := bc.CurrentHeader() - for header := bc.GetHeaderByNumber(bc.CurrentHeader().Number.Uint64() - 1); header.Number.Uint64() != 0; prev, header = header, bc.GetHeaderByNumber(header.Number.Uint64()-1) { - if prev.ParentHash != header.Hash() { - t.Errorf("parent header hash mismatch: have %x, want %x", prev.ParentHash, header.Hash()) - } - } - // Make sure the chain total difficulty is the correct one - want := new(big.Int).Add(bc.genesisBlock.Difficulty(), big.NewInt(td)) - if have := bc.GetTd(bc.CurrentHeader().Hash(), bc.CurrentHeader().Number.Uint64()); have.Cmp(want) != 0 { - t.Errorf("total difficulty mismatch: have %v, want %v", have, want) - } -} - -// Tests that the insertion functions detect banned hashes. -func TestBadHeaderHashes(t *testing.T) { - bc := newTestLightChain() - - // Create a chain, ban a hash and try to import - var err error - headers := makeHeaderChainWithDiff(bc.genesisBlock, []int{1, 2, 4}, 10) - core.BadHashes[headers[2].Hash()] = true - if _, err = bc.InsertHeaderChain(headers); !errors.Is(err, core.ErrBannedHash) { - t.Errorf("error mismatch: have: %v, want %v", err, core.ErrBannedHash) - } -} - -// Tests that bad hashes are detected on boot, and the chan rolled back to a -// good state prior to the bad hash. -func TestReorgBadHeaderHashes(t *testing.T) { - bc := newTestLightChain() - - // Create a chain, import and ban afterwards - headers := makeHeaderChainWithDiff(bc.genesisBlock, []int{1, 2, 3, 4}, 10) - - if _, err := bc.InsertHeaderChain(headers); err != nil { - t.Fatalf("failed to import headers: %v", err) - } - if bc.CurrentHeader().Hash() != headers[3].Hash() { - t.Errorf("last header hash mismatch: have: %x, want %x", bc.CurrentHeader().Hash(), headers[3].Hash()) - } - core.BadHashes[headers[3].Hash()] = true - defer func() { delete(core.BadHashes, headers[3].Hash()) }() - - // Create a new LightChain and check that it rolled back the state. - ncm, err := NewLightChain(&dummyOdr{db: bc.chainDb}, params.TestChainConfig, ethash.NewFaker()) - if err != nil { - t.Fatalf("failed to create new chain manager: %v", err) - } - if ncm.CurrentHeader().Hash() != headers[2].Hash() { - t.Errorf("last header hash mismatch: have: %x, want %x", ncm.CurrentHeader().Hash(), headers[2].Hash()) - } -} diff --git a/light/odr.go b/light/odr.go deleted file mode 100644 index 39f626ee2c..0000000000 --- a/light/odr.go +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package light - -import ( - "context" - "errors" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -// NoOdr is the default context passed to an ODR capable function when the ODR -// service is not required. -var NoOdr = context.Background() - -// ErrNoPeers is returned if no peers capable of serving a queued request are available -var ErrNoPeers = errors.New("no suitable peers available") - -// OdrBackend is an interface to a backend service that handles ODR retrievals type -type OdrBackend interface { - Database() ethdb.Database - ChtIndexer() *core.ChainIndexer - BloomTrieIndexer() *core.ChainIndexer - BloomIndexer() *core.ChainIndexer - Retrieve(ctx context.Context, req OdrRequest) error - RetrieveTxStatus(ctx context.Context, req *TxStatusRequest) error - IndexerConfig() *IndexerConfig -} - -// OdrRequest is an interface for retrieval requests -type OdrRequest interface { - StoreResult(db ethdb.Database) -} - -// TrieID identifies a state or account storage trie -type TrieID struct { - BlockHash common.Hash - BlockNumber uint64 - StateRoot common.Hash - Root common.Hash - AccountAddress []byte -} - -// StateTrieID returns a TrieID for a state trie belonging to a certain block -// header. -func StateTrieID(header *types.Header) *TrieID { - return &TrieID{ - BlockHash: header.Hash(), - BlockNumber: header.Number.Uint64(), - StateRoot: header.Root, - Root: header.Root, - AccountAddress: nil, - } -} - -// StorageTrieID returns a TrieID for a contract storage trie at a given account -// of a given state trie. It also requires the root hash of the trie for -// checking Merkle proofs. -func StorageTrieID(state *TrieID, address common.Address, root common.Hash) *TrieID { - return &TrieID{ - BlockHash: state.BlockHash, - BlockNumber: state.BlockNumber, - StateRoot: state.StateRoot, - AccountAddress: address[:], - Root: root, - } -} - -// TrieRequest is the ODR request type for state/storage trie entries -type TrieRequest struct { - Id *TrieID - Key []byte - Proof *trienode.ProofSet -} - -// StoreResult stores the retrieved data in local database -func (req *TrieRequest) StoreResult(db ethdb.Database) { - req.Proof.Store(db) -} - -// CodeRequest is the ODR request type for retrieving contract code -type CodeRequest struct { - Id *TrieID // references storage trie of the account - Hash common.Hash - Data []byte -} - -// StoreResult stores the retrieved data in local database -func (req *CodeRequest) StoreResult(db ethdb.Database) { - rawdb.WriteCode(db, req.Hash, req.Data) -} - -// BlockRequest is the ODR request type for retrieving block bodies -type BlockRequest struct { - Hash common.Hash - Number uint64 - Header *types.Header - Rlp []byte -} - -// StoreResult stores the retrieved data in local database -func (req *BlockRequest) StoreResult(db ethdb.Database) { - rawdb.WriteBodyRLP(db, req.Hash, req.Number, req.Rlp) -} - -// ReceiptsRequest is the ODR request type for retrieving receipts. -type ReceiptsRequest struct { - Hash common.Hash - Number uint64 - Header *types.Header - Receipts types.Receipts -} - -// StoreResult stores the retrieved data in local database -func (req *ReceiptsRequest) StoreResult(db ethdb.Database) { - rawdb.WriteReceipts(db, req.Hash, req.Number, req.Receipts) -} - -// ChtRequest is the ODR request type for retrieving header by Canonical Hash Trie -type ChtRequest struct { - Config *IndexerConfig - ChtNum, BlockNum uint64 - ChtRoot common.Hash - Header *types.Header - Td *big.Int - Proof *trienode.ProofSet -} - -// StoreResult stores the retrieved data in local database -func (req *ChtRequest) StoreResult(db ethdb.Database) { - hash, num := req.Header.Hash(), req.Header.Number.Uint64() - rawdb.WriteHeader(db, req.Header) - rawdb.WriteTd(db, hash, num, req.Td) - rawdb.WriteCanonicalHash(db, hash, num) -} - -// BloomRequest is the ODR request type for retrieving bloom filters from a CHT structure -type BloomRequest struct { - OdrRequest - Config *IndexerConfig - BloomTrieNum uint64 - BitIdx uint - SectionIndexList []uint64 - BloomTrieRoot common.Hash - BloomBits [][]byte - Proofs *trienode.ProofSet -} - -// StoreResult stores the retrieved data in local database -func (req *BloomRequest) StoreResult(db ethdb.Database) { - for i, sectionIdx := range req.SectionIndexList { - sectionHead := rawdb.ReadCanonicalHash(db, (sectionIdx+1)*req.Config.BloomTrieSize-1) - // if we don't have the canonical hash stored for this section head number, we'll still store it under - // a key with a zero sectionHead. GetBloomBits will look there too if we still don't have the canonical - // hash. In the unlikely case we've retrieved the section head hash since then, we'll just retrieve the - // bit vector again from the network. - rawdb.WriteBloomBits(db, req.BitIdx, sectionIdx, sectionHead, req.BloomBits[i]) - } -} - -// TxStatus describes the status of a transaction -type TxStatus struct { - Status txpool.TxStatus - Lookup *rawdb.LegacyTxLookupEntry `rlp:"nil"` - Error string -} - -// TxStatusRequest is the ODR request type for retrieving transaction status -type TxStatusRequest struct { - Hashes []common.Hash - Status []TxStatus -} - -// StoreResult stores the retrieved data in local database -func (req *TxStatusRequest) StoreResult(db ethdb.Database) {} diff --git a/light/odr_test.go b/light/odr_test.go deleted file mode 100644 index 01cfc53260..0000000000 --- a/light/odr_test.go +++ /dev/null @@ -1,339 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package light - -import ( - "bytes" - "context" - "errors" - "math/big" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/math" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -var ( - testBankKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - testBankAddress = crypto.PubkeyToAddress(testBankKey.PublicKey) - testBankFunds = big.NewInt(1_000_000_000_000_000_000) - - acc1Key, _ = crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") - acc2Key, _ = crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") - acc1Addr = crypto.PubkeyToAddress(acc1Key.PublicKey) - acc2Addr = crypto.PubkeyToAddress(acc2Key.PublicKey) - - testContractCode = common.Hex2Bytes("606060405260cc8060106000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806360cd2685146041578063c16431b914606b57603f565b005b6055600480803590602001909190505060a9565b6040518082815260200191505060405180910390f35b60886004808035906020019091908035906020019091905050608a565b005b80600060005083606481101560025790900160005b50819055505b5050565b6000600060005082606481101560025790900160005b5054905060c7565b91905056") - testContractAddr common.Address -) - -type testOdr struct { - OdrBackend - indexerConfig *IndexerConfig - sdb, ldb ethdb.Database - serverState state.Database - disable bool -} - -func (odr *testOdr) Database() ethdb.Database { - return odr.ldb -} - -var ErrOdrDisabled = errors.New("ODR disabled") - -func (odr *testOdr) Retrieve(ctx context.Context, req OdrRequest) error { - if odr.disable { - return ErrOdrDisabled - } - switch req := req.(type) { - case *BlockRequest: - number := rawdb.ReadHeaderNumber(odr.sdb, req.Hash) - if number != nil { - req.Rlp = rawdb.ReadBodyRLP(odr.sdb, req.Hash, *number) - } - case *ReceiptsRequest: - number := rawdb.ReadHeaderNumber(odr.sdb, req.Hash) - if number != nil { - req.Receipts = rawdb.ReadRawReceipts(odr.sdb, req.Hash, *number) - } - case *TrieRequest: - var ( - err error - t state.Trie - ) - if len(req.Id.AccountAddress) > 0 { - t, err = odr.serverState.OpenStorageTrie(req.Id.StateRoot, common.BytesToAddress(req.Id.AccountAddress), req.Id.Root) - } else { - t, err = odr.serverState.OpenTrie(req.Id.Root) - } - if err != nil { - panic(err) - } - nodes := trienode.NewProofSet() - t.Prove(req.Key, nodes) - req.Proof = nodes - case *CodeRequest: - req.Data = rawdb.ReadCode(odr.sdb, req.Hash) - } - req.StoreResult(odr.ldb) - return nil -} - -func (odr *testOdr) IndexerConfig() *IndexerConfig { - return odr.indexerConfig -} - -type odrTestFn func(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc *LightChain, bhash common.Hash) ([]byte, error) - -func TestOdrGetBlockLes2(t *testing.T) { testChainOdr(t, 1, odrGetBlock) } - -func odrGetBlock(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc *LightChain, bhash common.Hash) ([]byte, error) { - var block *types.Block - if bc != nil { - block = bc.GetBlockByHash(bhash) - } else { - block, _ = lc.GetBlockByHash(ctx, bhash) - } - if block == nil { - return nil, nil - } - rlp, _ := rlp.EncodeToBytes(block) - return rlp, nil -} - -func TestOdrGetReceiptsLes2(t *testing.T) { testChainOdr(t, 1, odrGetReceipts) } - -func odrGetReceipts(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc *LightChain, bhash common.Hash) ([]byte, error) { - var receipts types.Receipts - if bc != nil { - if number := rawdb.ReadHeaderNumber(db, bhash); number != nil { - if header := rawdb.ReadHeader(db, bhash, *number); header != nil { - receipts = rawdb.ReadReceipts(db, bhash, *number, header.Time, bc.Config()) - } - } - } else { - number := rawdb.ReadHeaderNumber(db, bhash) - if number != nil { - receipts, _ = GetBlockReceipts(ctx, lc.Odr(), bhash, *number) - } - } - if receipts == nil { - return nil, nil - } - rlp, _ := rlp.EncodeToBytes(receipts) - return rlp, nil -} - -func TestOdrAccountsLes2(t *testing.T) { testChainOdr(t, 1, odrAccounts) } - -func odrAccounts(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc *LightChain, bhash common.Hash) ([]byte, error) { - dummyAddr := common.HexToAddress("1234567812345678123456781234567812345678") - acc := []common.Address{testBankAddress, acc1Addr, acc2Addr, dummyAddr} - - var st *state.StateDB - if bc == nil { - header := lc.GetHeaderByHash(bhash) - st = NewState(ctx, header, lc.Odr()) - } else { - header := bc.GetHeaderByHash(bhash) - st, _ = state.New(header.Root, bc.StateCache(), nil) - } - - var res []byte - for _, addr := range acc { - bal := st.GetBalance(addr) - rlp, _ := rlp.EncodeToBytes(bal) - res = append(res, rlp...) - } - return res, st.Error() -} - -func TestOdrContractCallLes2(t *testing.T) { testChainOdr(t, 1, odrContractCall) } - -func odrContractCall(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc *LightChain, bhash common.Hash) ([]byte, error) { - data := common.Hex2Bytes("60CD26850000000000000000000000000000000000000000000000000000000000000000") - config := params.TestChainConfig - - var res []byte - for i := 0; i < 3; i++ { - data[35] = byte(i) - - var ( - st *state.StateDB - header *types.Header - chain core.ChainContext - ) - if bc == nil { - chain = lc - header = lc.GetHeaderByHash(bhash) - st = NewState(ctx, header, lc.Odr()) - } else { - chain = bc - header = bc.GetHeaderByHash(bhash) - st, _ = state.New(header.Root, bc.StateCache(), nil) - } - - // Perform read-only call. - st.SetBalance(testBankAddress, math.MaxBig256) - msg := &core.Message{ - From: testBankAddress, - To: &testContractAddr, - Value: new(big.Int), - GasLimit: 1000000, - GasPrice: big.NewInt(params.InitialBaseFee), - GasFeeCap: big.NewInt(params.InitialBaseFee), - GasTipCap: new(big.Int), - Data: data, - SkipAccountChecks: true, - } - txContext := core.NewEVMTxContext(msg) - context := core.NewEVMBlockContext(header, chain, nil, config, st) - vmenv := vm.NewEVM(context, txContext, st, config, vm.Config{NoBaseFee: true}) - gp := new(core.GasPool).AddGas(math.MaxUint64) - result, _ := core.ApplyMessage(vmenv, msg, gp) - res = append(res, result.Return()...) - if st.Error() != nil { - return res, st.Error() - } - } - return res, nil -} - -func testChainGen(i int, block *core.BlockGen) { - signer := types.HomesteadSigner{} - switch i { - case 0: - // In block 1, the test bank sends account #1 some ether. - tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), acc1Addr, big.NewInt(10_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, testBankKey) - block.AddTx(tx) - case 1: - // In block 2, the test bank sends some more ether to account #1. - // acc1Addr passes it on to account #2. - // acc1Addr creates a test contract. - tx1, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), acc1Addr, big.NewInt(1_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, testBankKey) - nonce := block.TxNonce(acc1Addr) - tx2, _ := types.SignTx(types.NewTransaction(nonce, acc2Addr, big.NewInt(1_000_000_000_000_000), params.TxGas, block.BaseFee(), nil), signer, acc1Key) - nonce++ - tx3, _ := types.SignTx(types.NewContractCreation(nonce, big.NewInt(0), 1000000, block.BaseFee(), testContractCode), signer, acc1Key) - testContractAddr = crypto.CreateAddress(acc1Addr, nonce) - block.AddTx(tx1) - block.AddTx(tx2) - block.AddTx(tx3) - case 2: - // Block 3 is empty but was mined by account #2. - block.SetCoinbase(acc2Addr) - block.SetExtra([]byte("yeehaw")) - data := common.Hex2Bytes("C16431B900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001") - tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), testContractAddr, big.NewInt(0), 100000, block.BaseFee(), data), signer, testBankKey) - block.AddTx(tx) - case 3: - // Block 4 includes blocks 2 and 3 as uncle headers (with modified extra data). - b2 := block.PrevBlock(1).Header() - b2.Extra = []byte("foo") - block.AddUncle(b2) - b3 := block.PrevBlock(2).Header() - b3.Extra = []byte("foo") - block.AddUncle(b3) - data := common.Hex2Bytes("C16431B900000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002") - tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), testContractAddr, big.NewInt(0), 100000, block.BaseFee(), data), signer, testBankKey) - block.AddTx(tx) - } -} - -func testChainOdr(t *testing.T, protocol int, fn odrTestFn) { - var ( - sdb = rawdb.NewMemoryDatabase() - ldb = rawdb.NewMemoryDatabase() - gspec = &core.Genesis{ - Config: params.TestChainConfig, - Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, - BaseFee: big.NewInt(params.InitialBaseFee), - } - ) - // Assemble the test environment - blockchain, _ := core.NewBlockChain(sdb, nil, gspec, nil, ethash.NewFullFaker(), vm.Config{EnableParallelExec: true, ParallelTxNum: 1}, nil, nil) - _, gchain, _ := core.GenerateChainWithGenesis(gspec, ethash.NewFaker(), 4, testChainGen) - if _, err := blockchain.InsertChain(gchain); err != nil { - t.Fatal(err) - } - - gspec.MustCommit(ldb, trie.NewDatabase(ldb, trie.HashDefaults)) - odr := &testOdr{sdb: sdb, ldb: ldb, serverState: blockchain.StateCache(), indexerConfig: TestClientIndexerConfig} - lightchain, err := NewLightChain(odr, gspec.Config, ethash.NewFullFaker()) - if err != nil { - t.Fatal(err) - } - headers := make([]*types.Header, len(gchain)) - for i, block := range gchain { - headers[i] = block.Header() - } - if _, err := lightchain.InsertHeaderChain(headers); err != nil { - t.Fatal(err) - } - - test := func(expFail int) { - for i := uint64(0); i <= blockchain.CurrentHeader().Number.Uint64(); i++ { - bhash := rawdb.ReadCanonicalHash(sdb, i) - b1, err := fn(NoOdr, sdb, blockchain, nil, bhash) - if err != nil { - t.Fatalf("error in full-node test for block %d: %v", i, err) - } - - ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) - defer cancel() - - exp := i < uint64(expFail) - b2, err := fn(ctx, ldb, nil, lightchain, bhash) - if err != nil && exp { - t.Errorf("error in ODR test for block %d: %v", i, err) - } - - eq := bytes.Equal(b1, b2) - if exp && !eq { - t.Errorf("ODR test output for block %d doesn't match full node", i) - } - } - } - - // expect retrievals to fail (except genesis block) without a les peer - t.Log("checking without ODR") - odr.disable = true - test(1) - - // expect all retrievals to pass with ODR enabled - t.Log("checking with ODR") - odr.disable = false - test(len(gchain)) - - // still expect all retrievals to pass, now data should be cached locally - t.Log("checking without ODR, should be cached") - odr.disable = true - test(len(gchain)) -} diff --git a/light/odr_util.go b/light/odr_util.go deleted file mode 100644 index 9cac7df4fa..0000000000 --- a/light/odr_util.go +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package light - -import ( - "context" - "errors" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/consensus/misc/eip4844" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rlp" -) - -// errNonCanonicalHash is returned if the requested chain data doesn't belong -// to the canonical chain. ODR can only retrieve the canonical chain data covered -// by the CHT or Bloom trie for verification. -var errNonCanonicalHash = errors.New("hash is not currently canonical") - -// GetHeaderByNumber retrieves the canonical block header corresponding to the -// given number. The returned header is proven by local CHT. -func GetHeaderByNumber(ctx context.Context, odr OdrBackend, number uint64) (*types.Header, error) { - // Try to find it in the local database first. - db := odr.Database() - hash := rawdb.ReadCanonicalHash(db, number) - - // If there is a canonical hash, there should have a header too. - // But if it's pruned, re-fetch from network again. - if (hash != common.Hash{}) { - if header := rawdb.ReadHeader(db, hash, number); header != nil { - return header, nil - } - } - // Retrieve the header via ODR, ensure the requested header is covered - // by local trusted CHT. - chts, _, chtHead := odr.ChtIndexer().Sections() - if number >= chts*odr.IndexerConfig().ChtSize { - return nil, errNoTrustedCht - } - r := &ChtRequest{ - ChtRoot: GetChtRoot(db, chts-1, chtHead), - ChtNum: chts - 1, - BlockNum: number, - Config: odr.IndexerConfig(), - } - if err := odr.Retrieve(ctx, r); err != nil { - return nil, err - } - return r.Header, nil -} - -// GetCanonicalHash retrieves the canonical block hash corresponding to the number. -func GetCanonicalHash(ctx context.Context, odr OdrBackend, number uint64) (common.Hash, error) { - hash := rawdb.ReadCanonicalHash(odr.Database(), number) - if hash != (common.Hash{}) { - return hash, nil - } - header, err := GetHeaderByNumber(ctx, odr, number) - if err != nil { - return common.Hash{}, err - } - // number -> canonical mapping already be stored in db, get it. - return header.Hash(), nil -} - -// GetTd retrieves the total difficulty corresponding to the number and hash. -func GetTd(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (*big.Int, error) { - td := rawdb.ReadTd(odr.Database(), hash, number) - if td != nil { - return td, nil - } - header, err := GetHeaderByNumber(ctx, odr, number) - if err != nil { - return nil, err - } - if header.Hash() != hash { - return nil, errNonCanonicalHash - } - // -> td mapping already be stored in db, get it. - return rawdb.ReadTd(odr.Database(), hash, number), nil -} - -// GetBodyRLP retrieves the block body (transactions and uncles) in RLP encoding. -func GetBodyRLP(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (rlp.RawValue, error) { - if data := rawdb.ReadBodyRLP(odr.Database(), hash, number); data != nil { - return data, nil - } - // Retrieve the block header first and pass it for verification. - header, err := GetHeaderByNumber(ctx, odr, number) - if err != nil { - return nil, errNoHeader - } - if header.Hash() != hash { - return nil, errNonCanonicalHash - } - r := &BlockRequest{Hash: hash, Number: number, Header: header} - if err := odr.Retrieve(ctx, r); err != nil { - return nil, err - } - return r.Rlp, nil -} - -// GetBody retrieves the block body (transactions, uncles) corresponding to the -// hash. -func GetBody(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (*types.Body, error) { - data, err := GetBodyRLP(ctx, odr, hash, number) - if err != nil { - return nil, err - } - body := new(types.Body) - if err := rlp.DecodeBytes(data, body); err != nil { - return nil, err - } - return body, nil -} - -// GetBlock retrieves an entire block corresponding to the hash, assembling it -// back from the stored header and body. -func GetBlock(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (*types.Block, error) { - // Retrieve the block header and body contents - header, err := GetHeaderByNumber(ctx, odr, number) - if err != nil { - return nil, errNoHeader - } - body, err := GetBody(ctx, odr, hash, number) - if err != nil { - return nil, err - } - // Reassemble the block and return - return types.NewBlockWithHeader(header).WithBody(body.Transactions, body.Uncles), nil -} - -// GetBlockReceipts retrieves the receipts generated by the transactions included -// in a block given by its hash. Receipts will be filled in with context data. -func GetBlockReceipts(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (types.Receipts, error) { - // Assume receipts are already stored locally and attempt to retrieve. - receipts := rawdb.ReadRawReceipts(odr.Database(), hash, number) - if receipts == nil { - header, err := GetHeaderByNumber(ctx, odr, number) - if err != nil { - return nil, errNoHeader - } - if header.Hash() != hash { - return nil, errNonCanonicalHash - } - r := &ReceiptsRequest{Hash: hash, Number: number, Header: header} - if err := odr.Retrieve(ctx, r); err != nil { - return nil, err - } - receipts = r.Receipts - } - // If the receipts are incomplete, fill the derived fields - if len(receipts) > 0 && receipts[0].TxHash == (common.Hash{}) { - block, err := GetBlock(ctx, odr, hash, number) - if err != nil { - return nil, err - } - genesis := rawdb.ReadCanonicalHash(odr.Database(), 0) - config := rawdb.ReadChainConfig(odr.Database(), genesis) - - var blobGasPrice *big.Int - excessBlobGas := block.ExcessBlobGas() - if excessBlobGas != nil { - blobGasPrice = eip4844.CalcBlobFee(*excessBlobGas) - } - - if err := receipts.DeriveFields(config, block.Hash(), block.NumberU64(), block.Time(), block.BaseFee(), blobGasPrice, block.Transactions()); err != nil { - return nil, err - } - rawdb.WriteReceipts(odr.Database(), hash, number, receipts) - } - return receipts, nil -} - -// GetBlockLogs retrieves the logs generated by the transactions included in a -// block given by its hash. Logs will be filled in with context data. -func GetBlockLogs(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) ([][]*types.Log, error) { - receipts, err := GetBlockReceipts(ctx, odr, hash, number) - if err != nil { - return nil, err - } - logs := make([][]*types.Log, len(receipts)) - for i, receipt := range receipts { - logs[i] = receipt.Logs - } - return logs, nil -} - -// GetBloomBits retrieves a batch of compressed bloomBits vectors belonging to -// the given bit index and section indexes. -func GetBloomBits(ctx context.Context, odr OdrBackend, bit uint, sections []uint64) ([][]byte, error) { - var ( - reqIndex []int - reqSections []uint64 - db = odr.Database() - result = make([][]byte, len(sections)) - ) - blooms, _, sectionHead := odr.BloomTrieIndexer().Sections() - for i, section := range sections { - sectionHead := rawdb.ReadCanonicalHash(db, (section+1)*odr.IndexerConfig().BloomSize-1) - // If we don't have the canonical hash stored for this section head number, - // we'll still look for an entry with a zero sectionHead (we store it with - // zero section head too if we don't know it at the time of the retrieval) - if bloomBits, _ := rawdb.ReadBloomBits(db, bit, section, sectionHead); len(bloomBits) != 0 { - result[i] = bloomBits - continue - } - // TODO(rjl493456442) Convert sectionIndex to BloomTrie relative index - if section >= blooms { - return nil, errNoTrustedBloomTrie - } - reqSections = append(reqSections, section) - reqIndex = append(reqIndex, i) - } - // Find all bloombits in database, nothing to query via odr, return. - if reqSections == nil { - return result, nil - } - // Send odr request to retrieve missing bloombits. - r := &BloomRequest{ - BloomTrieRoot: GetBloomTrieRoot(db, blooms-1, sectionHead), - BloomTrieNum: blooms - 1, - BitIdx: bit, - SectionIndexList: reqSections, - Config: odr.IndexerConfig(), - } - if err := odr.Retrieve(ctx, r); err != nil { - return nil, err - } - for i, idx := range reqIndex { - result[idx] = r.BloomBits[i] - } - return result, nil -} - -// GetTransaction retrieves a canonical transaction by hash and also returns -// its position in the chain. There is no guarantee in the LES protocol that -// the mined transaction will be retrieved back for sure because of different -// reasons(the transaction is unindexed, the malicious server doesn't reply it -// deliberately, etc). Therefore, unretrieved transactions will receive a certain -// number of retries, thus giving a weak guarantee. -func GetTransaction(ctx context.Context, odr OdrBackend, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) { - r := &TxStatusRequest{Hashes: []common.Hash{txHash}} - if err := odr.RetrieveTxStatus(ctx, r); err != nil || r.Status[0].Status != txpool.TxStatusIncluded { - return nil, common.Hash{}, 0, 0, err - } - pos := r.Status[0].Lookup - // first ensure that we have the header, otherwise block body retrieval will fail - // also verify if this is a canonical block by getting the header by number and checking its hash - if header, err := GetHeaderByNumber(ctx, odr, pos.BlockIndex); err != nil || header.Hash() != pos.BlockHash { - return nil, common.Hash{}, 0, 0, err - } - body, err := GetBody(ctx, odr, pos.BlockHash, pos.BlockIndex) - if err != nil || uint64(len(body.Transactions)) <= pos.Index || body.Transactions[pos.Index].Hash() != txHash { - return nil, common.Hash{}, 0, 0, err - } - return body.Transactions[pos.Index], pos.BlockHash, pos.BlockIndex, pos.Index, nil -} diff --git a/light/postprocess.go b/light/postprocess.go deleted file mode 100644 index a317e30b90..0000000000 --- a/light/postprocess.go +++ /dev/null @@ -1,538 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package light - -import ( - "bytes" - "context" - "encoding/binary" - "errors" - "fmt" - "math/big" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/bitutil" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -// IndexerConfig includes a set of configs for chain indexers. -type IndexerConfig struct { - // The block frequency for creating CHTs. - ChtSize uint64 - - // The number of confirmations needed to generate/accept a canonical hash help trie. - ChtConfirms uint64 - - // The block frequency for creating new bloom bits. - BloomSize uint64 - - // The number of confirmation needed before a bloom section is considered probably final and its rotated bits - // are calculated. - BloomConfirms uint64 - - // The block frequency for creating BloomTrie. - BloomTrieSize uint64 - - // The number of confirmations needed to generate/accept a bloom trie. - BloomTrieConfirms uint64 -} - -var ( - // DefaultServerIndexerConfig wraps a set of configs as a default indexer config for server side. - DefaultServerIndexerConfig = &IndexerConfig{ - ChtSize: params.CHTFrequency, - ChtConfirms: params.HelperTrieProcessConfirmations, - BloomSize: params.BloomBitsBlocks, - BloomConfirms: params.BloomConfirms, - BloomTrieSize: params.BloomTrieFrequency, - BloomTrieConfirms: params.HelperTrieProcessConfirmations, - } - // DefaultClientIndexerConfig wraps a set of configs as a default indexer config for client side. - DefaultClientIndexerConfig = &IndexerConfig{ - ChtSize: params.CHTFrequency, - ChtConfirms: params.HelperTrieConfirmations, - BloomSize: params.BloomBitsBlocksClient, - BloomConfirms: params.HelperTrieConfirmations, - BloomTrieSize: params.BloomTrieFrequency, - BloomTrieConfirms: params.HelperTrieConfirmations, - } - // TestServerIndexerConfig wraps a set of configs as a test indexer config for server side. - TestServerIndexerConfig = &IndexerConfig{ - ChtSize: 128, - ChtConfirms: 1, - BloomSize: 16, - BloomConfirms: 1, - BloomTrieSize: 128, - BloomTrieConfirms: 1, - } - // TestClientIndexerConfig wraps a set of configs as a test indexer config for client side. - TestClientIndexerConfig = &IndexerConfig{ - ChtSize: 128, - ChtConfirms: 8, - BloomSize: 128, - BloomConfirms: 8, - BloomTrieSize: 128, - BloomTrieConfirms: 8, - } -) - -var ( - errNoTrustedCht = errors.New("no trusted canonical hash trie") - errNoTrustedBloomTrie = errors.New("no trusted bloom trie") - errNoHeader = errors.New("header not found") -) - -// ChtNode structures are stored in the Canonical Hash Trie in an RLP encoded format -type ChtNode struct { - Hash common.Hash - Td *big.Int -} - -// GetChtRoot reads the CHT root associated to the given section from the database -func GetChtRoot(db ethdb.Database, sectionIdx uint64, sectionHead common.Hash) common.Hash { - var encNumber [8]byte - binary.BigEndian.PutUint64(encNumber[:], sectionIdx) - data, _ := db.Get(append(append(rawdb.ChtPrefix, encNumber[:]...), sectionHead.Bytes()...)) - return common.BytesToHash(data) -} - -// StoreChtRoot writes the CHT root associated to the given section into the database -func StoreChtRoot(db ethdb.Database, sectionIdx uint64, sectionHead, root common.Hash) { - var encNumber [8]byte - binary.BigEndian.PutUint64(encNumber[:], sectionIdx) - db.Put(append(append(rawdb.ChtPrefix, encNumber[:]...), sectionHead.Bytes()...), root.Bytes()) -} - -// ChtIndexerBackend implements core.ChainIndexerBackend. -type ChtIndexerBackend struct { - disablePruning bool - diskdb, trieTable ethdb.Database - odr OdrBackend - triedb *trie.Database - section, sectionSize uint64 - lastHash common.Hash - trie *trie.Trie - originRoot common.Hash -} - -// NewChtIndexer creates a Cht chain indexer -func NewChtIndexer(db ethdb.Database, odr OdrBackend, size, confirms uint64, disablePruning bool) *core.ChainIndexer { - trieTable := rawdb.NewTable(db, string(rawdb.ChtTablePrefix)) - backend := &ChtIndexerBackend{ - diskdb: db, - odr: odr, - trieTable: trieTable, - triedb: trie.NewDatabase(trieTable, trie.HashDefaults), - sectionSize: size, - disablePruning: disablePruning, - } - return core.NewChainIndexer(db, rawdb.NewTable(db, string(rawdb.ChtIndexTablePrefix)), backend, size, confirms, time.Millisecond*100, "cht") -} - -// fetchMissingNodes tries to retrieve the last entry of the latest trusted CHT from the -// ODR backend in order to be able to add new entries and calculate subsequent root hashes -func (c *ChtIndexerBackend) fetchMissingNodes(ctx context.Context, section uint64, root common.Hash) error { - batch := c.trieTable.NewBatch() - r := &ChtRequest{ChtRoot: root, ChtNum: section - 1, BlockNum: section*c.sectionSize - 1, Config: c.odr.IndexerConfig()} - for { - err := c.odr.Retrieve(ctx, r) - switch err { - case nil: - r.Proof.Store(batch) - return batch.Write() - case ErrNoPeers: - // if there are no peers to serve, retry later - select { - case <-ctx.Done(): - return ctx.Err() - case <-time.After(time.Second * 10): - // stay in the loop and try again - } - default: - return err - } - } -} - -// Reset implements core.ChainIndexerBackend -func (c *ChtIndexerBackend) Reset(ctx context.Context, section uint64, lastSectionHead common.Hash) error { - root := types.EmptyRootHash - if section > 0 { - root = GetChtRoot(c.diskdb, section-1, lastSectionHead) - } - var err error - c.trie, err = trie.New(trie.TrieID(root), c.triedb) - - if err != nil && c.odr != nil { - err = c.fetchMissingNodes(ctx, section, root) - if err == nil { - c.trie, err = trie.New(trie.TrieID(root), c.triedb) - } - } - c.section = section - c.originRoot = root - return err -} - -// Process implements core.ChainIndexerBackend -func (c *ChtIndexerBackend) Process(ctx context.Context, header *types.Header) error { - hash, num := header.Hash(), header.Number.Uint64() - c.lastHash = hash - - td := rawdb.ReadTd(c.diskdb, hash, num) - if td == nil { - panic(nil) - } - var encNumber [8]byte - binary.BigEndian.PutUint64(encNumber[:], num) - data, _ := rlp.EncodeToBytes(ChtNode{hash, td}) - return c.trie.Update(encNumber[:], data) -} - -// Commit implements core.ChainIndexerBackend -func (c *ChtIndexerBackend) Commit() error { - root, nodes, err := c.trie.Commit(false) - if err != nil { - return err - } - // Commit trie changes into trie database in case it's not nil. - if nodes != nil { - if err := c.triedb.Update(root, c.originRoot, 0, trienode.NewWithNodeSet(nodes), nil); err != nil { - return err - } - if err := c.triedb.Commit(root, false); err != nil { - return err - } - } - // Re-create trie with newly generated root and updated database. - c.trie, err = trie.New(trie.TrieID(root), c.triedb) - if err != nil { - return err - } - // Pruning historical trie nodes if necessary. - if !c.disablePruning { - it := c.trieTable.NewIterator(nil, nil) - defer it.Release() - - var ( - deleted int - batch = c.trieTable.NewBatch() - t = time.Now() - ) - hashes := make(map[common.Hash]struct{}) - if nodes != nil { - for _, hash := range nodes.Hashes() { - hashes[hash] = struct{}{} - } - } - for it.Next() { - trimmed := bytes.TrimPrefix(it.Key(), rawdb.ChtTablePrefix) - if len(trimmed) == common.HashLength { - if _, ok := hashes[common.BytesToHash(trimmed)]; !ok { - batch.Delete(trimmed) - deleted += 1 - } - } - } - if err := batch.Write(); err != nil { - return err - } - log.Debug("Prune historical CHT trie nodes", "deleted", deleted, "remaining", len(hashes), "elapsed", common.PrettyDuration(time.Since(t))) - } - log.Info("Storing CHT", "section", c.section, "head", fmt.Sprintf("%064x", c.lastHash), "root", fmt.Sprintf("%064x", root)) - StoreChtRoot(c.diskdb, c.section, c.lastHash, root) - return nil -} - -// Prune implements core.ChainIndexerBackend which deletes all chain data -// (except hash<->number mappings) older than the specified threshold. -func (c *ChtIndexerBackend) Prune(threshold uint64) error { - // Short circuit if the light pruning is disabled. - if c.disablePruning { - return nil - } - t := time.Now() - // Always keep genesis header in database. - start, end := uint64(1), (threshold+1)*c.sectionSize - - var batch = c.diskdb.NewBatch() - for { - numbers, hashes := rawdb.ReadAllCanonicalHashes(c.diskdb, start, end, 10240) - if len(numbers) == 0 { - break - } - for i := 0; i < len(numbers); i++ { - // Keep hash<->number mapping in database otherwise the hash based - // API(e.g. GetReceipt, GetLogs) will be broken. - // - // Storage size wise, the size of a mapping is ~41bytes. For one - // section is about 1.3MB which is acceptable. - // - // In order to totally get rid of this index, we need an additional - // flag to specify how many historical data light client can serve. - rawdb.DeleteCanonicalHash(batch, numbers[i]) - rawdb.DeleteBlockWithoutNumber(batch, hashes[i], numbers[i]) - } - if batch.ValueSize() > ethdb.IdealBatchSize { - if err := batch.Write(); err != nil { - return err - } - batch.Reset() - } - start = numbers[len(numbers)-1] + 1 - } - if err := batch.Write(); err != nil { - return err - } - log.Debug("Prune history headers", "threshold", threshold, "elapsed", common.PrettyDuration(time.Since(t))) - return nil -} - -// GetBloomTrieRoot reads the BloomTrie root associated to the given section from the database -func GetBloomTrieRoot(db ethdb.Database, sectionIdx uint64, sectionHead common.Hash) common.Hash { - var encNumber [8]byte - binary.BigEndian.PutUint64(encNumber[:], sectionIdx) - data, _ := db.Get(append(append(rawdb.BloomTriePrefix, encNumber[:]...), sectionHead.Bytes()...)) - return common.BytesToHash(data) -} - -// StoreBloomTrieRoot writes the BloomTrie root associated to the given section into the database -func StoreBloomTrieRoot(db ethdb.Database, sectionIdx uint64, sectionHead, root common.Hash) { - var encNumber [8]byte - binary.BigEndian.PutUint64(encNumber[:], sectionIdx) - db.Put(append(append(rawdb.BloomTriePrefix, encNumber[:]...), sectionHead.Bytes()...), root.Bytes()) -} - -// BloomTrieIndexerBackend implements core.ChainIndexerBackend -type BloomTrieIndexerBackend struct { - disablePruning bool - diskdb, trieTable ethdb.Database - triedb *trie.Database - odr OdrBackend - section uint64 - parentSize uint64 - size uint64 - bloomTrieRatio uint64 - trie *trie.Trie - originRoot common.Hash - sectionHeads []common.Hash -} - -// NewBloomTrieIndexer creates a BloomTrie chain indexer -func NewBloomTrieIndexer(db ethdb.Database, odr OdrBackend, parentSize, size uint64, disablePruning bool) *core.ChainIndexer { - trieTable := rawdb.NewTable(db, string(rawdb.BloomTrieTablePrefix)) - backend := &BloomTrieIndexerBackend{ - diskdb: db, - odr: odr, - trieTable: trieTable, - triedb: trie.NewDatabase(trieTable, trie.HashDefaults), - parentSize: parentSize, - size: size, - disablePruning: disablePruning, - } - backend.bloomTrieRatio = size / parentSize - backend.sectionHeads = make([]common.Hash, backend.bloomTrieRatio) - return core.NewChainIndexer(db, rawdb.NewTable(db, string(rawdb.BloomTrieIndexPrefix)), backend, size, 0, time.Millisecond*100, "bloomtrie") -} - -// fetchMissingNodes tries to retrieve the last entries of the latest trusted bloom trie from the -// ODR backend in order to be able to add new entries and calculate subsequent root hashes -func (b *BloomTrieIndexerBackend) fetchMissingNodes(ctx context.Context, section uint64, root common.Hash) error { - indexCh := make(chan uint, types.BloomBitLength) - type res struct { - nodes *trienode.ProofSet - err error - } - resCh := make(chan res, types.BloomBitLength) - for i := 0; i < 20; i++ { - go func() { - for bitIndex := range indexCh { - r := &BloomRequest{BloomTrieRoot: root, BloomTrieNum: section - 1, BitIdx: bitIndex, SectionIndexList: []uint64{section - 1}, Config: b.odr.IndexerConfig()} - for { - if err := b.odr.Retrieve(ctx, r); err == ErrNoPeers { - // if there are no peers to serve, retry later - select { - case <-ctx.Done(): - resCh <- res{nil, ctx.Err()} - return - case <-time.After(time.Second * 10): - // stay in the loop and try again - } - } else { - resCh <- res{r.Proofs, err} - break - } - } - } - }() - } - for i := uint(0); i < types.BloomBitLength; i++ { - indexCh <- i - } - close(indexCh) - batch := b.trieTable.NewBatch() - for i := uint(0); i < types.BloomBitLength; i++ { - res := <-resCh - if res.err != nil { - return res.err - } - res.nodes.Store(batch) - } - return batch.Write() -} - -// Reset implements core.ChainIndexerBackend -func (b *BloomTrieIndexerBackend) Reset(ctx context.Context, section uint64, lastSectionHead common.Hash) error { - root := types.EmptyRootHash - if section > 0 { - root = GetBloomTrieRoot(b.diskdb, section-1, lastSectionHead) - } - var err error - b.trie, err = trie.New(trie.TrieID(root), b.triedb) - if err != nil && b.odr != nil { - err = b.fetchMissingNodes(ctx, section, root) - if err == nil { - b.trie, err = trie.New(trie.TrieID(root), b.triedb) - } - } - b.section = section - b.originRoot = root - return err -} - -// Process implements core.ChainIndexerBackend -func (b *BloomTrieIndexerBackend) Process(ctx context.Context, header *types.Header) error { - num := header.Number.Uint64() - b.section*b.size - if (num+1)%b.parentSize == 0 { - b.sectionHeads[num/b.parentSize] = header.Hash() - } - return nil -} - -// Commit implements core.ChainIndexerBackend -func (b *BloomTrieIndexerBackend) Commit() error { - var compSize, decompSize uint64 - - for i := uint(0); i < types.BloomBitLength; i++ { - var encKey [10]byte - binary.BigEndian.PutUint16(encKey[0:2], uint16(i)) - binary.BigEndian.PutUint64(encKey[2:10], b.section) - var decomp []byte - for j := uint64(0); j < b.bloomTrieRatio; j++ { - data, err := rawdb.ReadBloomBits(b.diskdb, i, b.section*b.bloomTrieRatio+j, b.sectionHeads[j]) - if err != nil { - return err - } - decompData, err2 := bitutil.DecompressBytes(data, int(b.parentSize/8)) - if err2 != nil { - return err2 - } - decomp = append(decomp, decompData...) - } - comp := bitutil.CompressBytes(decomp) - - decompSize += uint64(len(decomp)) - compSize += uint64(len(comp)) - - var terr error - if len(comp) > 0 { - terr = b.trie.Update(encKey[:], comp) - } else { - terr = b.trie.Delete(encKey[:]) - } - if terr != nil { - return terr - } - } - root, nodes, err := b.trie.Commit(false) - if err != nil { - return err - } - // Commit trie changes into trie database in case it's not nil. - if nodes != nil { - if err := b.triedb.Update(root, b.originRoot, 0, trienode.NewWithNodeSet(nodes), nil); err != nil { - return err - } - if err := b.triedb.Commit(root, false); err != nil { - return err - } - } - // Re-create trie with newly generated root and updated database. - b.trie, err = trie.New(trie.TrieID(root), b.triedb) - if err != nil { - return err - } - // Pruning historical trie nodes if necessary. - if !b.disablePruning { - it := b.trieTable.NewIterator(nil, nil) - defer it.Release() - - var ( - deleted int - batch = b.trieTable.NewBatch() - t = time.Now() - ) - hashes := make(map[common.Hash]struct{}) - if nodes != nil { - for _, hash := range nodes.Hashes() { - hashes[hash] = struct{}{} - } - } - for it.Next() { - trimmed := bytes.TrimPrefix(it.Key(), rawdb.BloomTrieTablePrefix) - if len(trimmed) == common.HashLength { - if _, ok := hashes[common.BytesToHash(trimmed)]; !ok { - batch.Delete(trimmed) - deleted += 1 - } - } - } - if err := batch.Write(); err != nil { - return err - } - log.Debug("Prune historical bloom trie nodes", "deleted", deleted, "remaining", len(hashes), "elapsed", common.PrettyDuration(time.Since(t))) - } - sectionHead := b.sectionHeads[b.bloomTrieRatio-1] - StoreBloomTrieRoot(b.diskdb, b.section, sectionHead, root) - log.Info("Storing bloom trie", "section", b.section, "head", fmt.Sprintf("%064x", sectionHead), "root", fmt.Sprintf("%064x", root), "compression", float64(compSize)/float64(decompSize)) - - return nil -} - -// Prune implements core.ChainIndexerBackend which deletes all -// bloombits which older than the specified threshold. -func (b *BloomTrieIndexerBackend) Prune(threshold uint64) error { - // Short circuit if the light pruning is disabled. - if b.disablePruning { - return nil - } - start := time.Now() - for i := uint(0); i < types.BloomBitLength; i++ { - rawdb.DeleteBloombits(b.diskdb, i, 0, threshold*b.bloomTrieRatio+b.bloomTrieRatio) - } - log.Debug("Prune history bloombits", "threshold", threshold, "elapsed", common.PrettyDuration(time.Since(start))) - return nil -} diff --git a/light/trie.go b/light/trie.go deleted file mode 100644 index 1847f1e71b..0000000000 --- a/light/trie.go +++ /dev/null @@ -1,319 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package light - -import ( - "context" - "errors" - "fmt" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -var ( - sha3Nil = crypto.Keccak256Hash(nil) -) - -func NewState(ctx context.Context, head *types.Header, odr OdrBackend) *state.StateDB { - state, _ := state.New(head.Root, NewStateDatabase(ctx, head, odr), nil) - return state -} - -func NewStateDatabase(ctx context.Context, head *types.Header, odr OdrBackend) state.Database { - return &odrDatabase{ctx, StateTrieID(head), odr} -} - -type odrDatabase struct { - ctx context.Context - id *TrieID - backend OdrBackend -} - -func (db *odrDatabase) OpenTrie(root common.Hash) (state.Trie, error) { - return &odrTrie{db: db, id: db.id}, nil -} - -func (db *odrDatabase) OpenStorageTrie(stateRoot common.Hash, address common.Address, root common.Hash) (state.Trie, error) { - return &odrTrie{db: db, id: StorageTrieID(db.id, address, root)}, nil -} - -func (db *odrDatabase) CopyTrie(t state.Trie) state.Trie { - switch t := t.(type) { - case *odrTrie: - cpy := &odrTrie{db: t.db, id: t.id} - if t.trie != nil { - cpy.trie = t.trie.Copy() - } - return cpy - default: - panic(fmt.Errorf("unknown trie type %T", t)) - } -} - -func (db *odrDatabase) ContractCode(addr common.Address, codeHash common.Hash) ([]byte, error) { - if codeHash == sha3Nil { - return nil, nil - } - code := rawdb.ReadCode(db.backend.Database(), codeHash) - if len(code) != 0 { - return code, nil - } - id := *db.id - id.AccountAddress = addr[:] - req := &CodeRequest{Id: &id, Hash: codeHash} - err := db.backend.Retrieve(db.ctx, req) - return req.Data, err -} - -func (db *odrDatabase) ContractCodeSize(addr common.Address, codeHash common.Hash) (int, error) { - code, err := db.ContractCode(addr, codeHash) - return len(code), err -} - -func (db *odrDatabase) TrieDB() *trie.Database { - return nil -} - -func (db *odrDatabase) DiskDB() ethdb.KeyValueStore { - panic("not implemented") -} - -type odrTrie struct { - db *odrDatabase - id *TrieID - trie *trie.Trie -} - -func (t *odrTrie) GetStorage(_ common.Address, key []byte) ([]byte, error) { - key = crypto.Keccak256(key) - var enc []byte - err := t.do(key, func() (err error) { - enc, err = t.trie.Get(key) - return err - }) - if err != nil || len(enc) == 0 { - return nil, err - } - _, content, _, err := rlp.Split(enc) - return content, err -} - -func (t *odrTrie) GetAccount(address common.Address) (*types.StateAccount, error) { - var ( - enc []byte - key = crypto.Keccak256(address.Bytes()) - ) - err := t.do(key, func() (err error) { - enc, err = t.trie.Get(key) - return err - }) - if err != nil || len(enc) == 0 { - return nil, err - } - acct := new(types.StateAccount) - if err := rlp.DecodeBytes(enc, acct); err != nil { - return nil, err - } - return acct, nil -} - -func (t *odrTrie) UpdateAccount(address common.Address, acc *types.StateAccount) error { - key := crypto.Keccak256(address.Bytes()) - value, err := rlp.EncodeToBytes(acc) - if err != nil { - return fmt.Errorf("decoding error in account update: %w", err) - } - return t.do(key, func() error { - return t.trie.Update(key, value) - }) -} - -func (t *odrTrie) UpdateContractCode(_ common.Address, _ common.Hash, _ []byte) error { - return nil -} - -func (t *odrTrie) UpdateStorage(_ common.Address, key, value []byte) error { - key = crypto.Keccak256(key) - v, _ := rlp.EncodeToBytes(value) - return t.do(key, func() error { - return t.trie.Update(key, v) - }) -} - -func (t *odrTrie) DeleteStorage(_ common.Address, key []byte) error { - key = crypto.Keccak256(key) - return t.do(key, func() error { - return t.trie.Delete(key) - }) -} - -// DeleteAccount abstracts an account deletion from the trie. -func (t *odrTrie) DeleteAccount(address common.Address) error { - key := crypto.Keccak256(address.Bytes()) - return t.do(key, func() error { - return t.trie.Delete(key) - }) -} - -func (t *odrTrie) Commit(collectLeaf bool) (common.Hash, *trienode.NodeSet, error) { - if t.trie == nil { - return t.id.Root, nil, nil - } - return t.trie.Commit(collectLeaf) -} - -func (t *odrTrie) Hash() common.Hash { - if t.trie == nil { - return t.id.Root - } - return t.trie.Hash() -} - -func (t *odrTrie) NodeIterator(startkey []byte) (trie.NodeIterator, error) { - return newNodeIterator(t, startkey), nil -} - -func (t *odrTrie) GetKey(sha []byte) []byte { - return nil -} - -func (t *odrTrie) Prove(key []byte, proofDb ethdb.KeyValueWriter) error { - return errors.New("not implemented, needs client/server interface split") -} - -// do tries and retries to execute a function until it returns with no error or -// an error type other than MissingNodeError -func (t *odrTrie) do(key []byte, fn func() error) error { - for { - var err error - if t.trie == nil { - var id *trie.ID - if len(t.id.AccountAddress) > 0 { - id = trie.StorageTrieID(t.id.StateRoot, crypto.Keccak256Hash(t.id.AccountAddress), t.id.Root) - } else { - id = trie.StateTrieID(t.id.StateRoot) - } - triedb := trie.NewDatabase(t.db.backend.Database(), trie.HashDefaults) - t.trie, err = trie.New(id, triedb) - } - if err == nil { - err = fn() - } - if _, ok := err.(*trie.MissingNodeError); !ok { - return err - } - r := &TrieRequest{Id: t.id, Key: key} - if err := t.db.backend.Retrieve(t.db.ctx, r); err != nil { - return err - } - } -} - -type nodeIterator struct { - trie.NodeIterator - t *odrTrie - err error -} - -func newNodeIterator(t *odrTrie, startkey []byte) trie.NodeIterator { - it := &nodeIterator{t: t} - // Open the actual non-ODR trie if that hasn't happened yet. - if t.trie == nil { - it.do(func() error { - var id *trie.ID - if len(t.id.AccountAddress) > 0 { - id = trie.StorageTrieID(t.id.StateRoot, crypto.Keccak256Hash(t.id.AccountAddress), t.id.Root) - } else { - id = trie.StateTrieID(t.id.StateRoot) - } - triedb := trie.NewDatabase(t.db.backend.Database(), trie.HashDefaults) - t, err := trie.New(id, triedb) - if err == nil { - it.t.trie = t - } - return err - }) - } - it.do(func() error { - var err error - it.NodeIterator, err = it.t.trie.NodeIterator(startkey) - if err != nil { - return err - } - return it.NodeIterator.Error() - }) - return it -} - -func (it *nodeIterator) Next(descend bool) bool { - var ok bool - it.do(func() error { - ok = it.NodeIterator.Next(descend) - return it.NodeIterator.Error() - }) - return ok -} - -// do runs fn and attempts to fill in missing nodes by retrieving. -func (it *nodeIterator) do(fn func() error) { - var lasthash common.Hash - for { - it.err = fn() - missing, ok := it.err.(*trie.MissingNodeError) - if !ok { - return - } - if missing.NodeHash == lasthash { - it.err = fmt.Errorf("retrieve loop for trie node %x", missing.NodeHash) - return - } - lasthash = missing.NodeHash - r := &TrieRequest{Id: it.t.id, Key: nibblesToKey(missing.Path)} - if it.err = it.t.db.backend.Retrieve(it.t.db.ctx, r); it.err != nil { - return - } - } -} - -func (it *nodeIterator) Error() error { - if it.err != nil { - return it.err - } - return it.NodeIterator.Error() -} - -func nibblesToKey(nib []byte) []byte { - if len(nib) > 0 && nib[len(nib)-1] == 0x10 { - nib = nib[:len(nib)-1] // drop terminator - } - if len(nib)&1 == 1 { - nib = append(nib, 0) // make even - } - key := make([]byte, len(nib)/2) - for bi, ni := 0, 0; ni < len(nib); bi, ni = bi+1, ni+2 { - key[bi] = nib[ni]<<4 | nib[ni+1] - } - return key -} diff --git a/light/trie_test.go b/light/trie_test.go deleted file mode 100644 index 351a57b4ce..0000000000 --- a/light/trie_test.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package light - -import ( - "bytes" - "context" - "errors" - "fmt" - "math/big" - "testing" - - "github.com/davecgh/go-spew/spew" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/trie" -) - -func TestNodeIterator(t *testing.T) { - var ( - fulldb = rawdb.NewMemoryDatabase() - lightdb = rawdb.NewMemoryDatabase() - gspec = &core.Genesis{ - Config: params.TestChainConfig, - Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, - BaseFee: big.NewInt(params.InitialBaseFee), - } - ) - blockchain, _ := core.NewBlockChain(fulldb, nil, gspec, nil, ethash.NewFullFaker(), vm.Config{EnableParallelExec: true, ParallelTxNum: 1}, nil, nil) - _, gchain, _ := core.GenerateChainWithGenesis(gspec, ethash.NewFaker(), 4, testChainGen) - if _, err := blockchain.InsertChain(gchain); err != nil { - panic(err) - } - - gspec.MustCommit(lightdb, trie.NewDatabase(lightdb, trie.HashDefaults)) - ctx := context.Background() - odr := &testOdr{sdb: fulldb, ldb: lightdb, serverState: blockchain.StateCache(), indexerConfig: TestClientIndexerConfig} - head := blockchain.CurrentHeader() - lightTrie, _ := NewStateDatabase(ctx, head, odr).OpenTrie(head.Root) - fullTrie, _ := blockchain.StateCache().OpenTrie(head.Root) - if err := diffTries(fullTrie, lightTrie); err != nil { - t.Fatal(err) - } -} - -func diffTries(t1, t2 state.Trie) error { - trieIt1, err := t1.NodeIterator(nil) - if err != nil { - return err - } - trieIt2, err := t2.NodeIterator(nil) - if err != nil { - return err - } - i1 := trie.NewIterator(trieIt1) - i2 := trie.NewIterator(trieIt2) - for i1.Next() && i2.Next() { - if !bytes.Equal(i1.Key, i2.Key) { - spew.Dump(i2) - return fmt.Errorf("tries have different keys %x, %x", i1.Key, i2.Key) - } - if !bytes.Equal(i1.Value, i2.Value) { - return fmt.Errorf("tries differ at key %x", i1.Key) - } - } - switch { - case i1.Err != nil: - return fmt.Errorf("full trie iterator error: %v", i1.Err) - case i2.Err != nil: - return fmt.Errorf("light trie iterator error: %v", i2.Err) - case i1.Next(): - return errors.New("full trie iterator has more k/v pairs") - case i2.Next(): - return errors.New("light trie iterator has more k/v pairs") - } - return nil -} diff --git a/light/txpool.go b/light/txpool.go deleted file mode 100644 index b792d70b14..0000000000 --- a/light/txpool.go +++ /dev/null @@ -1,556 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package light - -import ( - "context" - "fmt" - "math/big" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/event" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" -) - -const ( - // chainHeadChanSize is the size of channel listening to ChainHeadEvent. - chainHeadChanSize = 10 -) - -// txPermanent is the number of mined blocks after a mined transaction is -// considered permanent and no rollback is expected -var txPermanent = uint64(500) - -// TxPool implements the transaction pool for light clients, which keeps track -// of the status of locally created transactions, detecting if they are included -// in a block (mined) or rolled back. There are no queued transactions since we -// always receive all locally signed transactions in the same order as they are -// created. -type TxPool struct { - config *params.ChainConfig - signer types.Signer - quit chan bool - txFeed event.Feed - scope event.SubscriptionScope - chainHeadCh chan core.ChainHeadEvent - chainHeadSub event.Subscription - mu sync.RWMutex - chain *LightChain - odr OdrBackend - chainDb ethdb.Database - relay TxRelayBackend - head common.Hash - nonce map[common.Address]uint64 // "pending" nonce - pending map[common.Hash]*types.Transaction // pending transactions by tx hash - mined map[common.Hash][]*types.Transaction // mined transactions by block hash - clearIdx uint64 // earliest block nr that can contain mined tx info - - istanbul bool // Fork indicator whether we are in the istanbul stage. - eip2718 bool // Fork indicator whether we are in the eip2718 stage. - shanghai bool // Fork indicator whether we are in the shanghai stage. -} - -// TxRelayBackend provides an interface to the mechanism that forwards transactions to the -// ETH network. The implementations of the functions should be non-blocking. -// -// Send instructs backend to forward new transactions NewHead notifies backend about a new -// head after processed by the tx pool, including mined and rolled back transactions since -// the last event. -// -// Discard notifies backend about transactions that should be discarded either because -// they have been replaced by a re-send or because they have been mined long ago and no -// rollback is expected. -type TxRelayBackend interface { - Send(txs types.Transactions) - NewHead(head common.Hash, mined []common.Hash, rollback []common.Hash) - Discard(hashes []common.Hash) -} - -// NewTxPool creates a new light transaction pool -func NewTxPool(config *params.ChainConfig, chain *LightChain, relay TxRelayBackend) *TxPool { - pool := &TxPool{ - config: config, - signer: types.LatestSigner(config), - nonce: make(map[common.Address]uint64), - pending: make(map[common.Hash]*types.Transaction), - mined: make(map[common.Hash][]*types.Transaction), - quit: make(chan bool), - chainHeadCh: make(chan core.ChainHeadEvent, chainHeadChanSize), - chain: chain, - relay: relay, - odr: chain.Odr(), - chainDb: chain.Odr().Database(), - head: chain.CurrentHeader().Hash(), - clearIdx: chain.CurrentHeader().Number.Uint64(), - } - // Subscribe events from blockchain - pool.chainHeadSub = pool.chain.SubscribeChainHeadEvent(pool.chainHeadCh) - go pool.eventLoop() - - return pool -} - -// currentState returns the light state of the current head header -func (pool *TxPool) currentState(ctx context.Context) *state.StateDB { - return NewState(ctx, pool.chain.CurrentHeader(), pool.odr) -} - -// GetNonce returns the "pending" nonce of a given address. It always queries -// the nonce belonging to the latest header too in order to detect if another -// client using the same key sent a transaction. -func (pool *TxPool) GetNonce(ctx context.Context, addr common.Address) (uint64, error) { - state := pool.currentState(ctx) - nonce := state.GetNonce(addr) - if state.Error() != nil { - return 0, state.Error() - } - sn, ok := pool.nonce[addr] - if ok && sn > nonce { - nonce = sn - } - if !ok || sn < nonce { - pool.nonce[addr] = nonce - } - return nonce, nil -} - -// txStateChanges stores the recent changes between pending/mined states of -// transactions. True means mined, false means rolled back, no entry means no change -type txStateChanges map[common.Hash]bool - -// setState sets the status of a tx to either recently mined or recently rolled back -func (txc txStateChanges) setState(txHash common.Hash, mined bool) { - val, ent := txc[txHash] - if ent && (val != mined) { - delete(txc, txHash) - } else { - txc[txHash] = mined - } -} - -// getLists creates lists of mined and rolled back tx hashes -func (txc txStateChanges) getLists() (mined []common.Hash, rollback []common.Hash) { - for hash, val := range txc { - if val { - mined = append(mined, hash) - } else { - rollback = append(rollback, hash) - } - } - return -} - -// checkMinedTxs checks newly added blocks for the currently pending transactions -// and marks them as mined if necessary. It also stores block position in the db -// and adds them to the received txStateChanges map. -func (pool *TxPool) checkMinedTxs(ctx context.Context, hash common.Hash, number uint64, txc txStateChanges) error { - // If no transactions are pending, we don't care about anything - if len(pool.pending) == 0 { - return nil - } - block, err := GetBlock(ctx, pool.odr, hash, number) - if err != nil { - return err - } - // Gather all the local transaction mined in this block - list := pool.mined[hash] - for _, tx := range block.Transactions() { - if _, ok := pool.pending[tx.Hash()]; ok { - list = append(list, tx) - } - } - // If some transactions have been mined, write the needed data to disk and update - if list != nil { - // Retrieve all the receipts belonging to this block and write the lookup table - if _, err := GetBlockReceipts(ctx, pool.odr, hash, number); err != nil { // ODR caches, ignore results - return err - } - rawdb.WriteTxLookupEntriesByBlock(pool.chainDb, block) - - // Update the transaction pool's state - for _, tx := range list { - delete(pool.pending, tx.Hash()) - txc.setState(tx.Hash(), true) - } - pool.mined[hash] = list - } - return nil -} - -// rollbackTxs marks the transactions contained in recently rolled back blocks -// as rolled back. It also removes any positional lookup entries. -func (pool *TxPool) rollbackTxs(hash common.Hash, txc txStateChanges) { - batch := pool.chainDb.NewBatch() - if list, ok := pool.mined[hash]; ok { - for _, tx := range list { - txHash := tx.Hash() - rawdb.DeleteTxLookupEntry(batch, txHash) - pool.pending[txHash] = tx - txc.setState(txHash, false) - } - delete(pool.mined, hash) - } - batch.Write() -} - -// reorgOnNewHead sets a new head header, processing (and rolling back if necessary) -// the blocks since the last known head and returns a txStateChanges map containing -// the recently mined and rolled back transaction hashes. If an error (context -// timeout) occurs during checking new blocks, it leaves the locally known head -// at the latest checked block and still returns a valid txStateChanges, making it -// possible to continue checking the missing blocks at the next chain head event -func (pool *TxPool) reorgOnNewHead(ctx context.Context, newHeader *types.Header) (txStateChanges, error) { - txc := make(txStateChanges) - oldh := pool.chain.GetHeaderByHash(pool.head) - newh := newHeader - // find common ancestor, create list of rolled back and new block hashes - var oldHashes, newHashes []common.Hash - for oldh.Hash() != newh.Hash() { - if oldh.Number.Uint64() >= newh.Number.Uint64() { - oldHashes = append(oldHashes, oldh.Hash()) - oldh = pool.chain.GetHeader(oldh.ParentHash, oldh.Number.Uint64()-1) - } - if oldh.Number.Uint64() < newh.Number.Uint64() { - newHashes = append(newHashes, newh.Hash()) - newh = pool.chain.GetHeader(newh.ParentHash, newh.Number.Uint64()-1) - if newh == nil { - // happens when CHT syncing, nothing to do - newh = oldh - } - } - } - if oldh.Number.Uint64() < pool.clearIdx { - pool.clearIdx = oldh.Number.Uint64() - } - // roll back old blocks - for _, hash := range oldHashes { - pool.rollbackTxs(hash, txc) - } - pool.head = oldh.Hash() - // check mined txs of new blocks (array is in reversed order) - for i := len(newHashes) - 1; i >= 0; i-- { - hash := newHashes[i] - if err := pool.checkMinedTxs(ctx, hash, newHeader.Number.Uint64()-uint64(i), txc); err != nil { - return txc, err - } - pool.head = hash - } - - // clear old mined tx entries of old blocks - if idx := newHeader.Number.Uint64(); idx > pool.clearIdx+txPermanent { - idx2 := idx - txPermanent - if len(pool.mined) > 0 { - for i := pool.clearIdx; i < idx2; i++ { - hash := rawdb.ReadCanonicalHash(pool.chainDb, i) - if list, ok := pool.mined[hash]; ok { - hashes := make([]common.Hash, len(list)) - for i, tx := range list { - hashes[i] = tx.Hash() - } - pool.relay.Discard(hashes) - delete(pool.mined, hash) - } - } - } - pool.clearIdx = idx2 - } - - return txc, nil -} - -// blockCheckTimeout is the time limit for checking new blocks for mined -// transactions. Checking resumes at the next chain head event if timed out. -const blockCheckTimeout = time.Second * 3 - -// eventLoop processes chain head events and also notifies the tx relay backend -// about the new head hash and tx state changes -func (pool *TxPool) eventLoop() { - for { - select { - case ev := <-pool.chainHeadCh: - pool.setNewHead(ev.Block.Header()) - // hack in order to avoid hogging the lock; this part will - // be replaced by a subsequent PR. - time.Sleep(time.Millisecond) - - // System stopped - case <-pool.chainHeadSub.Err(): - return - } - } -} - -func (pool *TxPool) setNewHead(head *types.Header) { - pool.mu.Lock() - defer pool.mu.Unlock() - - ctx, cancel := context.WithTimeout(context.Background(), blockCheckTimeout) - defer cancel() - - txc, _ := pool.reorgOnNewHead(ctx, head) - m, r := txc.getLists() - pool.relay.NewHead(pool.head, m, r) - - // Update fork indicator by next pending block number - next := new(big.Int).Add(head.Number, big.NewInt(1)) - pool.istanbul = pool.config.IsIstanbul(next) - pool.eip2718 = pool.config.IsBerlin(next) - pool.shanghai = pool.config.IsShanghai(next, uint64(time.Now().Unix())) -} - -// Stop stops the light transaction pool -func (pool *TxPool) Stop() { - // Unsubscribe all subscriptions registered from txpool - pool.scope.Close() - // Unsubscribe subscriptions registered from blockchain - pool.chainHeadSub.Unsubscribe() - close(pool.quit) - log.Info("Transaction pool stopped") -} - -// SubscribeNewTxsEvent registers a subscription of core.NewTxsEvent and -// starts sending event to the given channel. -func (pool *TxPool) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription { - return pool.scope.Track(pool.txFeed.Subscribe(ch)) -} - -// Stats returns the number of currently pending (locally created) transactions -func (pool *TxPool) Stats() (pending int) { - pool.mu.RLock() - defer pool.mu.RUnlock() - - pending = len(pool.pending) - return -} - -// validateTx checks whether a transaction is valid according to the consensus rules. -func (pool *TxPool) validateTx(ctx context.Context, tx *types.Transaction) error { - // Validate sender - var ( - from common.Address - err error - ) - - // Validate the transaction sender and it's sig. Throw - // if the from fields is invalid. - if from, err = types.Sender(pool.signer, tx); err != nil { - return txpool.ErrInvalidSender - } - // Last but not least check for nonce errors - currentState := pool.currentState(ctx) - if n := currentState.GetNonce(from); n > tx.Nonce() { - return core.ErrNonceTooLow - } - - // Check the transaction doesn't exceed the current - // block limit gas. - header := pool.chain.GetHeaderByHash(pool.head) - if header.GasLimit < tx.Gas() { - return txpool.ErrGasLimit - } - - // Transactions can't be negative. This may never happen - // using RLP decoded transactions but may occur if you create - // a transaction using the RPC for example. - if tx.Value().Sign() < 0 { - return txpool.ErrNegativeValue - } - - // Transactor should have enough funds to cover the costs - // cost == V + GP * GL - if b := currentState.GetBalance(from); b.Cmp(tx.Cost()) < 0 { - return core.ErrInsufficientFunds - } - - // Should supply enough intrinsic gas - gas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil, true, pool.istanbul, pool.shanghai) - if err != nil { - return err - } - if tx.Gas() < gas { - return core.ErrIntrinsicGas - } - return currentState.Error() -} - -// add validates a new transaction and sets its state pending if processable. -// It also updates the locally stored nonce if necessary. -func (pool *TxPool) add(ctx context.Context, tx *types.Transaction) error { - hash := tx.Hash() - - if pool.pending[hash] != nil { - return fmt.Errorf("known transaction (%x)", hash[:4]) - } - err := pool.validateTx(ctx, tx) - if err != nil { - return err - } - - if _, ok := pool.pending[hash]; !ok { - pool.pending[hash] = tx - - nonce := tx.Nonce() + 1 - - addr, _ := types.Sender(pool.signer, tx) - if nonce > pool.nonce[addr] { - pool.nonce[addr] = nonce - } - - // Notify the subscribers. This event is posted in a goroutine - // because it's possible that somewhere during the post "Remove transaction" - // gets called which will then wait for the global tx pool lock and deadlock. - go pool.txFeed.Send(core.NewTxsEvent{Txs: types.Transactions{tx}}) - } - - // Print a log message if low enough level is set - log.Debug("Pooled new transaction", "hash", hash, "from", log.Lazy{Fn: func() common.Address { from, _ := types.Sender(pool.signer, tx); return from }}, "to", tx.To()) - return nil -} - -// Add adds a transaction to the pool if valid and passes it to the tx relay -// backend -func (pool *TxPool) Add(ctx context.Context, tx *types.Transaction) error { - pool.mu.Lock() - defer pool.mu.Unlock() - data, err := tx.MarshalBinary() - if err != nil { - return err - } - - if err := pool.add(ctx, tx); err != nil { - return err - } - //fmt.Println("Send", tx.Hash()) - pool.relay.Send(types.Transactions{tx}) - - pool.chainDb.Put(tx.Hash().Bytes(), data) - return nil -} - -// AddBatch adds all valid transactions to the pool and passes them to -// the tx relay backend -func (pool *TxPool) AddBatch(ctx context.Context, txs []*types.Transaction) { - pool.mu.Lock() - defer pool.mu.Unlock() - var sendTx types.Transactions - - for _, tx := range txs { - if err := pool.add(ctx, tx); err == nil { - sendTx = append(sendTx, tx) - } - } - if len(sendTx) > 0 { - pool.relay.Send(sendTx) - } -} - -// GetTransaction returns a transaction if it is contained in the pool -// and nil otherwise. -func (pool *TxPool) GetTransaction(hash common.Hash) *types.Transaction { - // check the txs first - if tx, ok := pool.pending[hash]; ok { - return tx - } - return nil -} - -// GetTransactions returns all currently processable transactions. -// The returned slice may be modified by the caller. -func (pool *TxPool) GetTransactions() (txs types.Transactions, err error) { - pool.mu.RLock() - defer pool.mu.RUnlock() - - txs = make(types.Transactions, len(pool.pending)) - i := 0 - for _, tx := range pool.pending { - txs[i] = tx - i++ - } - return txs, nil -} - -// Content retrieves the data content of the transaction pool, returning all the -// pending as well as queued transactions, grouped by account and nonce. -func (pool *TxPool) Content() (map[common.Address][]*types.Transaction, map[common.Address][]*types.Transaction) { - pool.mu.RLock() - defer pool.mu.RUnlock() - - // Retrieve all the pending transactions and sort by account and by nonce - pending := make(map[common.Address][]*types.Transaction) - for _, tx := range pool.pending { - account, _ := types.Sender(pool.signer, tx) - pending[account] = append(pending[account], tx) - } - // There are no queued transactions in a light pool, just return an empty map - queued := make(map[common.Address][]*types.Transaction) - return pending, queued -} - -// ContentFrom retrieves the data content of the transaction pool, returning the -// pending as well as queued transactions of this address, grouped by nonce. -func (pool *TxPool) ContentFrom(addr common.Address) ([]*types.Transaction, []*types.Transaction) { - pool.mu.RLock() - defer pool.mu.RUnlock() - - // Retrieve the pending transactions and sort by nonce - var pending []*types.Transaction - for _, tx := range pool.pending { - account, _ := types.Sender(pool.signer, tx) - if account != addr { - continue - } - pending = append(pending, tx) - } - // There are no queued transactions in a light pool, just return an empty map - return pending, []*types.Transaction{} -} - -// RemoveTransactions removes all given transactions from the pool. -func (pool *TxPool) RemoveTransactions(txs types.Transactions) { - pool.mu.Lock() - defer pool.mu.Unlock() - - var hashes []common.Hash - batch := pool.chainDb.NewBatch() - for _, tx := range txs { - hash := tx.Hash() - delete(pool.pending, hash) - batch.Delete(hash.Bytes()) - hashes = append(hashes, hash) - } - batch.Write() - pool.relay.Discard(hashes) -} - -// RemoveTx removes the transaction with the given hash from the pool. -func (pool *TxPool) RemoveTx(hash common.Hash) { - pool.mu.Lock() - defer pool.mu.Unlock() - // delete from pending pool - delete(pool.pending, hash) - pool.chainDb.Delete(hash[:]) - pool.relay.Discard([]common.Hash{hash}) -} diff --git a/light/txpool_test.go b/light/txpool_test.go deleted file mode 100644 index 6137b6eca2..0000000000 --- a/light/txpool_test.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package light - -import ( - "context" - "math" - "math/big" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/trie" -) - -type testTxRelay struct { - send, discard, mined chan int -} - -func (r *testTxRelay) Send(txs types.Transactions) { - r.send <- len(txs) -} - -func (r *testTxRelay) NewHead(head common.Hash, mined []common.Hash, rollback []common.Hash) { - m := len(mined) - if m != 0 { - r.mined <- m - } -} - -func (r *testTxRelay) Discard(hashes []common.Hash) { - r.discard <- len(hashes) -} - -const poolTestTxs = 1000 -const poolTestBlocks = 100 - -// test tx 0..n-1 -var testTx [poolTestTxs]*types.Transaction - -// txs sent before block i -func sentTx(i int) int { - return int(math.Pow(float64(i)/float64(poolTestBlocks), 0.9) * poolTestTxs) -} - -// txs included in block i or before that (minedTx(i) <= sentTx(i)) -func minedTx(i int) int { - return int(math.Pow(float64(i)/float64(poolTestBlocks), 1.1) * poolTestTxs) -} - -func txPoolTestChainGen(i int, block *core.BlockGen) { - s := minedTx(i) - e := minedTx(i + 1) - for i := s; i < e; i++ { - block.AddTx(testTx[i]) - } -} - -func TestTxPool(t *testing.T) { - for i := range testTx { - testTx[i], _ = types.SignTx(types.NewTransaction(uint64(i), acc1Addr, big.NewInt(10000), params.TxGas, big.NewInt(params.InitialBaseFee), nil), types.HomesteadSigner{}, testBankKey) - } - - var ( - sdb = rawdb.NewMemoryDatabase() - ldb = rawdb.NewMemoryDatabase() - gspec = &core.Genesis{ - Config: params.TestChainConfig, - Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, - BaseFee: big.NewInt(params.InitialBaseFee), - } - ) - // Assemble the test environment - blockchain, _ := core.NewBlockChain(sdb, nil, gspec, nil, ethash.NewFullFaker(), vm.Config{EnableParallelExec: true, ParallelTxNum: 1}, nil, nil) - _, gchain, _ := core.GenerateChainWithGenesis(gspec, ethash.NewFaker(), poolTestBlocks, txPoolTestChainGen) - if _, err := blockchain.InsertChain(gchain); err != nil { - panic(err) - } - - gspec.MustCommit(ldb, trie.NewDatabase(ldb, trie.HashDefaults)) - odr := &testOdr{sdb: sdb, ldb: ldb, serverState: blockchain.StateCache(), indexerConfig: TestClientIndexerConfig} - relay := &testTxRelay{ - send: make(chan int, 1), - discard: make(chan int, 1), - mined: make(chan int, 1), - } - lightchain, _ := NewLightChain(odr, params.TestChainConfig, ethash.NewFullFaker()) - txPermanent = 50 - pool := NewTxPool(params.TestChainConfig, lightchain, relay) - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - defer cancel() - - for ii, block := range gchain { - i := ii + 1 - s := sentTx(i - 1) - e := sentTx(i) - for i := s; i < e; i++ { - pool.Add(ctx, testTx[i]) - got := <-relay.send - exp := 1 - if got != exp { - t.Errorf("relay.Send expected len = %d, got %d", exp, got) - } - } - - if _, err := lightchain.InsertHeaderChain([]*types.Header{block.Header()}); err != nil { - panic(err) - } - - got := <-relay.mined - exp := minedTx(i) - minedTx(i-1) - if got != exp { - t.Errorf("relay.NewHead expected len(mined) = %d, got %d", exp, got) - } - - exp = 0 - if i > int(txPermanent)+1 { - exp = minedTx(i-int(txPermanent)-1) - minedTx(i-int(txPermanent)-2) - } - if exp != 0 { - got = <-relay.discard - if got != exp { - t.Errorf("relay.Discard expected len = %d, got %d", exp, got) - } - } - } -} diff --git a/log/CONTRIBUTORS b/log/CONTRIBUTORS deleted file mode 100644 index a0866713be..0000000000 --- a/log/CONTRIBUTORS +++ /dev/null @@ -1,11 +0,0 @@ -Contributors to log15: - -- Aaron L -- Alan Shreve -- Chris Hines -- Ciaran Downey -- Dmitry Chestnykh -- Evan Shaw -- Péter Szilágyi -- Trevor Gattis -- Vincent Vanackere diff --git a/log/LICENSE b/log/LICENSE deleted file mode 100644 index 5f0d1fb6a7..0000000000 --- a/log/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2014 Alan Shreve - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/log/README.md b/log/README.md deleted file mode 100644 index 47426806dd..0000000000 --- a/log/README.md +++ /dev/null @@ -1,77 +0,0 @@ -![obligatory xkcd](https://imgs.xkcd.com/comics/standards.png) - -# log15 [![godoc reference](https://godoc.org/github.com/inconshreveable/log15?status.png)](https://godoc.org/github.com/inconshreveable/log15) [![Build Status](https://travis-ci.org/inconshreveable/log15.svg?branch=master)](https://travis-ci.org/inconshreveable/log15) - -Package log15 provides an opinionated, simple toolkit for best-practice logging in Go (golang) that is both human and machine readable. It is modeled after the Go standard library's [`io`](https://golang.org/pkg/io/) and [`net/http`](https://golang.org/pkg/net/http/) packages and is an alternative to the standard library's [`log`](https://golang.org/pkg/log/) package. - -## Features -- A simple, easy-to-understand API -- Promotes structured logging by encouraging use of key/value pairs -- Child loggers which inherit and add their own private context -- Lazy evaluation of expensive operations -- Simple Handler interface allowing for construction of flexible, custom logging configurations with a tiny API. -- Color terminal support -- Built-in support for logging to files, streams, syslog, and the network -- Support for forking records to multiple handlers, buffering records for output, failing over from failed handler writes, + more - -## Versioning -The API of the master branch of log15 should always be considered unstable. If you want to rely on a stable API, -you must vendor the library. - -## Importing - -```go -import log "github.com/inconshreveable/log15" -``` - -## Examples - -```go -// all loggers can have key/value context -srvlog := log.New("module", "app/server") - -// all log messages can have key/value context -srvlog.Warn("abnormal conn rate", "rate", curRate, "low", lowRate, "high", highRate) - -// child loggers with inherited context -connlog := srvlog.New("raddr", c.RemoteAddr()) -connlog.Info("connection open") - -// lazy evaluation -connlog.Debug("ping remote", "latency", log.Lazy{pingRemote}) - -// flexible configuration -srvlog.SetHandler(log.MultiHandler( - log.StreamHandler(os.Stderr, log.LogfmtFormat()), - log.LvlFilterHandler( - log.LvlError, - log.Must.FileHandler("errors.json", log.JSONFormat())))) -``` - -Will result in output that looks like this: - -``` -WARN[06-17|21:58:10] abnormal conn rate module=app/server rate=0.500 low=0.100 high=0.800 -INFO[06-17|21:58:10] connection open module=app/server raddr=10.0.0.1 -``` - -## Breaking API Changes -The following commits broke API stability. This reference is intended to help you understand the consequences of updating to a newer version -of log15. - -- 57a084d014d4150152b19e4e531399a7145d1540 - Added a `Get()` method to the `Logger` interface to retrieve the current handler -- 93404652ee366648fa622b64d1e2b67d75a3094a - `Record` field `Call` changed to `stack.Call` with switch to `github.com/go-stack/stack` -- a5e7613673c73281f58e15a87d2cf0cf111e8152 - Restored `syslog.Priority` argument to the `SyslogXxx` handler constructors - -## FAQ - -### The varargs style is brittle and error prone! Can I have type safety please? -Yes. Use `log.Ctx`: - -```go -srvlog := log.New(log.Ctx{"module": "app/server"}) -srvlog.Warn("abnormal conn rate", log.Ctx{"rate": curRate, "low": lowRate, "high": highRate}) -``` - -## License -Apache diff --git a/log/README_ETHEREUM.md b/log/README_ETHEREUM.md deleted file mode 100644 index f6c42ccc03..0000000000 --- a/log/README_ETHEREUM.md +++ /dev/null @@ -1,5 +0,0 @@ -This package is a fork of https://github.com/inconshreveable/log15, with some -minor modifications required by the go-ethereum codebase: - - * Support for log level `trace` - * Modified behavior to exit on `critical` failure diff --git a/log/doc.go b/log/doc.go deleted file mode 100644 index d2e15140e4..0000000000 --- a/log/doc.go +++ /dev/null @@ -1,327 +0,0 @@ -/* -Package log15 provides an opinionated, simple toolkit for best-practice logging that is -both human and machine readable. It is modeled after the standard library's io and net/http -packages. - -This package enforces you to only log key/value pairs. Keys must be strings. Values may be -any type that you like. The default output format is logfmt, but you may also choose to use -JSON instead if that suits you. Here's how you log: - - log.Info("page accessed", "path", r.URL.Path, "user_id", user.id) - -This will output a line that looks like: - - lvl=info t=2014-05-02T16:07:23-0700 msg="page accessed" path=/org/71/profile user_id=9 - -# Getting Started - -To get started, you'll want to import the library: - - import log "github.com/inconshreveable/log15" - -Now you're ready to start logging: - - func main() { - log.Info("Program starting", "args", os.Args()) - } - -# Convention - -Because recording a human-meaningful message is common and good practice, the first argument to every -logging method is the value to the *implicit* key 'msg'. - -Additionally, the level you choose for a message will be automatically added with the key 'lvl', and so -will the current timestamp with key 't'. - -You may supply any additional context as a set of key/value pairs to the logging function. log15 allows -you to favor terseness, ordering, and speed over safety. This is a reasonable tradeoff for -logging functions. You don't need to explicitly state keys/values, log15 understands that they alternate -in the variadic argument list: - - log.Warn("size out of bounds", "low", lowBound, "high", highBound, "val", val) - -If you really do favor your type-safety, you may choose to pass a log.Ctx instead: - - log.Warn("size out of bounds", log.Ctx{"low": lowBound, "high": highBound, "val": val}) - -# Context loggers - -Frequently, you want to add context to a logger so that you can track actions associated with it. An http -request is a good example. You can easily create new loggers that have context that is automatically included -with each log line: - - requestlogger := log.New("path", r.URL.Path) - - // later - requestlogger.Debug("db txn commit", "duration", txnTimer.Finish()) - -This will output a log line that includes the path context that is attached to the logger: - - lvl=dbug t=2014-05-02T16:07:23-0700 path=/repo/12/add_hook msg="db txn commit" duration=0.12 - -# Handlers - -The Handler interface defines where log lines are printed to and how they are formatted. Handler is a -single interface that is inspired by net/http's handler interface: - - type Handler interface { - Log(r *Record) error - } - -Handlers can filter records, format them, or dispatch to multiple other Handlers. -This package implements a number of Handlers for common logging patterns that are -easily composed to create flexible, custom logging structures. - -Here's an example handler that prints logfmt output to Stdout: - - handler := log.StreamHandler(os.Stdout, log.LogfmtFormat()) - -Here's an example handler that defers to two other handlers. One handler only prints records -from the rpc package in logfmt to standard out. The other prints records at Error level -or above in JSON formatted output to the file /var/log/service.json - - handler := log.MultiHandler( - log.LvlFilterHandler(log.LvlError, log.Must.FileHandler("/var/log/service.json", log.JSONFormat())), - log.MatchFilterHandler("pkg", "app/rpc" log.StdoutHandler()) - ) - -# Logging File Names and Line Numbers - -This package implements three Handlers that add debugging information to the -context, CallerFileHandler, CallerFuncHandler and CallerStackHandler. Here's -an example that adds the source file and line number of each logging call to -the context. - - h := log.CallerFileHandler(log.StdoutHandler) - log.Root().SetHandler(h) - ... - log.Error("open file", "err", err) - -This will output a line that looks like: - - lvl=eror t=2014-05-02T16:07:23-0700 msg="open file" err="file not found" caller=data.go:42 - -Here's an example that logs the call stack rather than just the call site. - - h := log.CallerStackHandler("%+v", log.StdoutHandler) - log.Root().SetHandler(h) - ... - log.Error("open file", "err", err) - -This will output a line that looks like: - - lvl=eror t=2014-05-02T16:07:23-0700 msg="open file" err="file not found" stack="[pkg/data.go:42 pkg/cmd/main.go]" - -The "%+v" format instructs the handler to include the path of the source file -relative to the compile time GOPATH. The github.com/go-stack/stack package -documents the full list of formatting verbs and modifiers available. - -# Custom Handlers - -The Handler interface is so simple that it's also trivial to write your own. Let's create an -example handler which tries to write to one handler, but if that fails it falls back to -writing to another handler and includes the error that it encountered when trying to write -to the primary. This might be useful when trying to log over a network socket, but if that -fails you want to log those records to a file on disk. - - type BackupHandler struct { - Primary Handler - Secondary Handler - } - - func (h *BackupHandler) Log (r *Record) error { - err := h.Primary.Log(r) - if err != nil { - r.Ctx = append(ctx, "primary_err", err) - return h.Secondary.Log(r) - } - return nil - } - -This pattern is so useful that a generic version that handles an arbitrary number of Handlers -is included as part of this library called FailoverHandler. - -# Logging Expensive Operations - -Sometimes, you want to log values that are extremely expensive to compute, but you don't want to pay -the price of computing them if you haven't turned up your logging level to a high level of detail. - -This package provides a simple type to annotate a logging operation that you want to be evaluated -lazily, just when it is about to be logged, so that it would not be evaluated if an upstream Handler -filters it out. Just wrap any function which takes no arguments with the log.Lazy type. For example: - - func factorRSAKey() (factors []int) { - // return the factors of a very large number - } - - log.Debug("factors", log.Lazy{factorRSAKey}) - -If this message is not logged for any reason (like logging at the Error level), then -factorRSAKey is never evaluated. - -# Dynamic context values - -The same log.Lazy mechanism can be used to attach context to a logger which you want to be -evaluated when the message is logged, but not when the logger is created. For example, let's imagine -a game where you have Player objects: - - type Player struct { - name string - alive bool - log.Logger - } - -You always want to log a player's name and whether they're alive or dead, so when you create the player -object, you might do: - - p := &Player{name: name, alive: true} - p.Logger = log.New("name", p.name, "alive", p.alive) - -Only now, even after a player has died, the logger will still report they are alive because the logging -context is evaluated when the logger was created. By using the Lazy wrapper, we can defer the evaluation -of whether the player is alive or not to each log message, so that the log records will reflect the player's -current state no matter when the log message is written: - - p := &Player{name: name, alive: true} - isAlive := func() bool { return p.alive } - player.Logger = log.New("name", p.name, "alive", log.Lazy{isAlive}) - -# Terminal Format - -If log15 detects that stdout is a terminal, it will configure the default -handler for it (which is log.StdoutHandler) to use TerminalFormat. This format -logs records nicely for your terminal, including color-coded output based -on log level. - -# Error Handling - -Becasuse log15 allows you to step around the type system, there are a few ways you can specify -invalid arguments to the logging functions. You could, for example, wrap something that is not -a zero-argument function with log.Lazy or pass a context key that is not a string. Since logging libraries -are typically the mechanism by which errors are reported, it would be onerous for the logging functions -to return errors. Instead, log15 handles errors by making these guarantees to you: - -- Any log record containing an error will still be printed with the error explained to you as part of the log record. - -- Any log record containing an error will include the context key LOG15_ERROR, enabling you to easily -(and if you like, automatically) detect if any of your logging calls are passing bad values. - -Understanding this, you might wonder why the Handler interface can return an error value in its Log method. Handlers -are encouraged to return errors only if they fail to write their log records out to an external source like if the -syslog daemon is not responding. This allows the construction of useful handlers which cope with those failures -like the FailoverHandler. - -# Library Use - -log15 is intended to be useful for library authors as a way to provide configurable logging to -users of their library. Best practice for use in a library is to always disable all output for your logger -by default and to provide a public Logger instance that consumers of your library can configure. Like so: - - package yourlib - - import "github.com/inconshreveable/log15" - - var Log = log.New() - - func init() { - Log.SetHandler(log.DiscardHandler()) - } - -Users of your library may then enable it if they like: - - import "github.com/inconshreveable/log15" - import "example.com/yourlib" - - func main() { - handler := // custom handler setup - yourlib.Log.SetHandler(handler) - } - -# Best practices attaching logger context - -The ability to attach context to a logger is a powerful one. Where should you do it and why? -I favor embedding a Logger directly into any persistent object in my application and adding -unique, tracing context keys to it. For instance, imagine I am writing a web browser: - - type Tab struct { - url string - render *RenderingContext - // ... - - Logger - } - - func NewTab(url string) *Tab { - return &Tab { - // ... - url: url, - - Logger: log.New("url", url), - } - } - -When a new tab is created, I assign a logger to it with the url of -the tab as context so it can easily be traced through the logs. -Now, whenever we perform any operation with the tab, we'll log with its -embedded logger and it will include the tab title automatically: - - tab.Debug("moved position", "idx", tab.idx) - -There's only one problem. What if the tab url changes? We could -use log.Lazy to make sure the current url is always written, but that -would mean that we couldn't trace a tab's full lifetime through our -logs after the user navigate to a new URL. - -Instead, think about what values to attach to your loggers the -same way you think about what to use as a key in a SQL database schema. -If it's possible to use a natural key that is unique for the lifetime of the -object, do so. But otherwise, log15's ext package has a handy RandId -function to let you generate what you might call "surrogate keys" -They're just random hex identifiers to use for tracing. Back to our -Tab example, we would prefer to set up our Logger like so: - - import logext "github.com/inconshreveable/log15/ext" - - t := &Tab { - // ... - url: url, - } - - t.Logger = log.New("id", logext.RandId(8), "url", log.Lazy{t.getUrl}) - return t - -Now we'll have a unique traceable identifier even across loading new urls, but -we'll still be able to see the tab's current url in the log messages. - -# Must - -For all Handler functions which can return an error, there is a version of that -function which will return no error but panics on failure. They are all available -on the Must object. For example: - - log.Must.FileHandler("/path", log.JSONFormat) - log.Must.NetHandler("tcp", ":1234", log.JSONFormat) - -# Inspiration and Credit - -All of the following excellent projects inspired the design of this library: - -code.google.com/p/log4go - -github.com/op/go-logging - -github.com/technoweenie/grohl - -github.com/Sirupsen/logrus - -github.com/kr/logfmt - -github.com/spacemonkeygo/spacelog - -golang's stdlib, notably io and net/http - -# The Name - -https://xkcd.com/927/ -*/ -package log diff --git a/log/format.go b/log/format.go index 1adf79c17e..6447f3c1f1 100644 --- a/log/format.go +++ b/log/format.go @@ -2,77 +2,26 @@ package log import ( "bytes" - "encoding/json" "fmt" "math/big" "reflect" "strconv" - "strings" - "sync" - "sync/atomic" "time" "unicode/utf8" "github.com/holiman/uint256" + "golang.org/x/exp/slog" ) const ( timeFormat = "2006-01-02T15:04:05-0700" - termTimeFormat = "01-02|15:04:05.000" floatFormat = 'f' termMsgJust = 40 termCtxMaxPadding = 40 ) -// locationTrims are trimmed for display to avoid unwieldy log lines. -var locationTrims = []string{ - "github.com/ethereum/go-ethereum/", -} - -// PrintOrigins sets or unsets log location (file:line) printing for terminal -// format output. -func PrintOrigins(print bool) { - locationEnabled.Store(print) - if print { - stackEnabled.Store(true) - } -} - -// stackEnabled is an atomic flag controlling whether the log handler needs -// to store the callsite stack. This is needed in case any handler wants to -// print locations (locationEnabled), use vmodule, or print full stacks (BacktraceAt). -var stackEnabled atomic.Bool - -// locationEnabled is an atomic flag controlling whether the terminal formatter -// should append the log locations too when printing entries. -var locationEnabled atomic.Bool - -// locationLength is the maxmimum path length encountered, which all logs are -// padded to to aid in alignment. -var locationLength atomic.Uint32 - -// fieldPadding is a global map with maximum field value lengths seen until now -// to allow padding log contexts in a bit smarter way. -var fieldPadding = make(map[string]int) - -// fieldPaddingLock is a global mutex protecting the field padding map. -var fieldPaddingLock sync.RWMutex - -type Format interface { - Format(r *Record) []byte -} - -// FormatFunc returns a new Format object which uses -// the given function to perform record formatting. -func FormatFunc(f func(*Record) []byte) Format { - return formatFunc(f) -} - -type formatFunc func(*Record) []byte - -func (f formatFunc) Format(r *Record) []byte { - return f(r) -} +// 40 spaces +var spaces = []byte(" ") // TerminalStringer is an analogous interface to the stdlib stringer, allowing // own types to have custom shortened serialization formats when printed to the @@ -81,348 +30,172 @@ type TerminalStringer interface { TerminalString() string } -// TerminalFormat formats log records optimized for human readability on -// a terminal with color-coded level output and terser human friendly timestamp. -// This format should only be used for interactive programs or while developing. -// -// [LEVEL] [TIME] MESSAGE key=value key=value ... -// -// Example: -// -// [DBUG] [May 16 20:58:45] remove route ns=haproxy addr=127.0.0.1:50002 -func TerminalFormat(usecolor bool) Format { - return FormatFunc(func(r *Record) []byte { - msg := escapeMessage(r.Msg) - var color = 0 - if usecolor { - switch r.Lvl { - case LvlCrit: - color = 35 - case LvlError: - color = 31 - case LvlWarn: - color = 33 - case LvlInfo: - color = 32 - case LvlDebug: - color = 36 - case LvlTrace: - color = 34 - } - } - - b := &bytes.Buffer{} - lvl := r.Lvl.AlignedString() - if locationEnabled.Load() { - // Log origin printing was requested, format the location path and line number - location := fmt.Sprintf("%+v", r.Call) - for _, prefix := range locationTrims { - location = strings.TrimPrefix(location, prefix) - } - // Maintain the maximum location length for fancyer alignment - align := int(locationLength.Load()) - if align < len(location) { - align = len(location) - locationLength.Store(uint32(align)) - } - padding := strings.Repeat(" ", align-len(location)) - - // Assemble and print the log heading - if color > 0 { - fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s|%s]%s %s ", color, lvl, r.Time.Format(termTimeFormat), location, padding, msg) - } else { - fmt.Fprintf(b, "%s[%s|%s]%s %s ", lvl, r.Time.Format(termTimeFormat), location, padding, msg) - } - } else { - if color > 0 { - fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s] %s ", color, lvl, r.Time.Format(termTimeFormat), msg) - } else { - fmt.Fprintf(b, "%s[%s] %s ", lvl, r.Time.Format(termTimeFormat), msg) - } +func (h *TerminalHandler) format(buf []byte, r slog.Record, usecolor bool) []byte { + msg := escapeMessage(r.Message) + var color = "" + if usecolor { + switch r.Level { + case LevelCrit: + color = "\x1b[35m" + case slog.LevelError: + color = "\x1b[31m" + case slog.LevelWarn: + color = "\x1b[33m" + case slog.LevelInfo: + color = "\x1b[32m" + case slog.LevelDebug: + color = "\x1b[36m" + case LevelTrace: + color = "\x1b[34m" } - // try to justify the log output for short messages - length := utf8.RuneCountInString(msg) - if len(r.Ctx) > 0 && length < termMsgJust { - b.Write(bytes.Repeat([]byte{' '}, termMsgJust-length)) - } - // print the keys logfmt style - logfmt(b, r.Ctx, color, true) - return b.Bytes() - }) -} + } + if buf == nil { + buf = make([]byte, 0, 30+termMsgJust) + } + b := bytes.NewBuffer(buf) + + if color != "" { // Start color + b.WriteString(color) + b.WriteString(LevelAlignedString(r.Level)) + b.WriteString("\x1b[0m") + } else { + b.WriteString(LevelAlignedString(r.Level)) + } + b.WriteString("[") + writeTimeTermFormat(b, r.Time) + b.WriteString("] ") + b.WriteString(msg) + + // try to justify the log output for short messages + //length := utf8.RuneCountInString(msg) + length := len(msg) + if (r.NumAttrs()+len(h.attrs)) > 0 && length < termMsgJust { + b.Write(spaces[:termMsgJust-length]) + } + // print the attributes + h.formatAttributes(b, r, color) -// LogfmtFormat prints records in logfmt format, an easy machine-parseable but human-readable -// format for key/value pairs. -// -// For more details see: http://godoc.org/github.com/kr/logfmt -func LogfmtFormat() Format { - return FormatFunc(func(r *Record) []byte { - common := []interface{}{r.KeyNames.Time, r.Time, r.KeyNames.Lvl, r.Lvl, r.KeyNames.Msg, r.Msg} - buf := &bytes.Buffer{} - logfmt(buf, append(common, r.Ctx...), 0, false) - return buf.Bytes() - }) + return b.Bytes() } -func logfmt(buf *bytes.Buffer, ctx []interface{}, color int, term bool) { - for i := 0; i < len(ctx); i += 2 { - if i != 0 { - buf.WriteByte(' ') - } - - k, ok := ctx[i].(string) - v := formatLogfmtValue(ctx[i+1], term) - if !ok { - k, v = errorKey, fmt.Sprintf("%+T is not a string key", ctx[i]) +func (h *TerminalHandler) formatAttributes(buf *bytes.Buffer, r slog.Record, color string) { + // tmp is a temporary buffer we use, until bytes.Buffer.AvailableBuffer() (1.21) + // can be used. + var tmp = make([]byte, 40) + writeAttr := func(attr slog.Attr, first, last bool) { + buf.WriteByte(' ') + + if color != "" { + buf.WriteString(color) + //buf.Write(appendEscapeString(buf.AvailableBuffer(), attr.Key)) + buf.Write(appendEscapeString(tmp[:0], attr.Key)) + buf.WriteString("\x1b[0m=") } else { - k = escapeString(k) + //buf.Write(appendEscapeString(buf.AvailableBuffer(), attr.Key)) + buf.Write(appendEscapeString(tmp[:0], attr.Key)) + buf.WriteByte('=') } + //val := FormatSlogValue(attr.Value, true, buf.AvailableBuffer()) + val := FormatSlogValue(attr.Value, tmp[:0]) - // XXX: we should probably check that all of your key bytes aren't invalid - fieldPaddingLock.RLock() - padding := fieldPadding[k] - fieldPaddingLock.RUnlock() + padding := h.fieldPadding[attr.Key] - length := utf8.RuneCountInString(v) + length := utf8.RuneCount(val) if padding < length && length <= termCtxMaxPadding { padding = length - - fieldPaddingLock.Lock() - fieldPadding[k] = padding - fieldPaddingLock.Unlock() + h.fieldPadding[attr.Key] = padding } - if color > 0 { - fmt.Fprintf(buf, "\x1b[%dm%s\x1b[0m=", color, k) - } else { - buf.WriteString(k) - buf.WriteByte('=') - } - buf.WriteString(v) - if i < len(ctx)-2 && padding > length { - buf.Write(bytes.Repeat([]byte{' '}, padding-length)) - } - } - buf.WriteByte('\n') -} - -// JSONFormat formats log records as JSON objects separated by newlines. -// It is the equivalent of JSONFormatEx(false, true). -func JSONFormat() Format { - return JSONFormatEx(false, true) -} - -// JSONFormatOrderedEx formats log records as JSON arrays. If pretty is true, -// records will be pretty-printed. If lineSeparated is true, records -// will be logged with a new line between each record. -func JSONFormatOrderedEx(pretty, lineSeparated bool) Format { - jsonMarshal := json.Marshal - if pretty { - jsonMarshal = func(v interface{}) ([]byte, error) { - return json.MarshalIndent(v, "", " ") + buf.Write(val) + if !last && padding > length { + buf.Write(spaces[:padding-length]) } } - return FormatFunc(func(r *Record) []byte { - props := map[string]interface{}{ - r.KeyNames.Time: r.Time, - r.KeyNames.Lvl: r.Lvl.String(), - r.KeyNames.Msg: r.Msg, - } - - ctx := make([]string, len(r.Ctx)) - for i := 0; i < len(r.Ctx); i += 2 { - if k, ok := r.Ctx[i].(string); ok { - ctx[i] = k - ctx[i+1] = formatLogfmtValue(r.Ctx[i+1], true) - } else { - props[errorKey] = fmt.Sprintf("%+T is not a string key,", r.Ctx[i]) - } - } - props[r.KeyNames.Ctx] = ctx - - b, err := jsonMarshal(props) - if err != nil { - b, _ = jsonMarshal(map[string]string{ - errorKey: err.Error(), - }) - return b - } - if lineSeparated { - b = append(b, '\n') - } - return b - }) -} - -// JSONFormatEx formats log records as JSON objects. If pretty is true, -// records will be pretty-printed. If lineSeparated is true, records -// will be logged with a new line between each record. -func JSONFormatEx(pretty, lineSeparated bool) Format { - jsonMarshal := json.Marshal - if pretty { - jsonMarshal = func(v interface{}) ([]byte, error) { - return json.MarshalIndent(v, "", " ") - } + var n = 0 + var nAttrs = len(h.attrs) + r.NumAttrs() + for _, attr := range h.attrs { + writeAttr(attr, n == 0, n == nAttrs-1) + n++ } - - return FormatFunc(func(r *Record) []byte { - props := map[string]interface{}{ - r.KeyNames.Time: r.Time, - r.KeyNames.Lvl: r.Lvl.String(), - r.KeyNames.Msg: r.Msg, - } - - for i := 0; i < len(r.Ctx); i += 2 { - k, ok := r.Ctx[i].(string) - if !ok { - props[errorKey] = fmt.Sprintf("%+T is not a string key", r.Ctx[i]) - } else { - props[k] = formatJSONValue(r.Ctx[i+1]) - } - } - - b, err := jsonMarshal(props) - if err != nil { - b, _ = jsonMarshal(map[string]string{ - errorKey: err.Error(), - }) - return b - } - - if lineSeparated { - b = append(b, '\n') - } - - return b + r.Attrs(func(attr slog.Attr) bool { + writeAttr(attr, n == 0, n == nAttrs-1) + n++ + return true }) + buf.WriteByte('\n') } -func formatShared(value interface{}) (result interface{}) { +// FormatSlogValue formats a slog.Value for serialization to terminal. +func FormatSlogValue(v slog.Value, tmp []byte) (result []byte) { + var value any defer func() { if err := recover(); err != nil { if v := reflect.ValueOf(value); v.Kind() == reflect.Ptr && v.IsNil() { - result = "nil" + result = []byte("") } else { panic(err) } } }() - switch v := value.(type) { - case time.Time: - return v.Format(timeFormat) - - case error: - return v.Error() - - case fmt.Stringer: - return v.String() - - default: - return v - } -} - -func formatJSONValue(value interface{}) interface{} { - value = formatShared(value) - switch value.(type) { - case int, int8, int16, int32, int64, float32, float64, uint, uint8, uint16, uint32, uint64, string: - return value - default: - return fmt.Sprintf("%+v", value) - } -} - -// formatValue formats a value for serialization -func formatLogfmtValue(value interface{}, term bool) string { - if value == nil { - return "nil" - } - - switch v := value.(type) { - case time.Time: + switch v.Kind() { + case slog.KindString: + return appendEscapeString(tmp, v.String()) + case slog.KindInt64: // All int-types (int8, int16 etc) wind up here + return appendInt64(tmp, v.Int64()) + case slog.KindUint64: // All uint-types (uint8, uint16 etc) wind up here + return appendUint64(tmp, v.Uint64(), false) + case slog.KindFloat64: + return strconv.AppendFloat(tmp, v.Float64(), floatFormat, 3, 64) + case slog.KindBool: + return strconv.AppendBool(tmp, v.Bool()) + case slog.KindDuration: + value = v.Duration() + case slog.KindTime: // Performance optimization: No need for escaping since the provided // timeFormat doesn't have any escape characters, and escaping is // expensive. - return v.Format(timeFormat) - - case *big.Int: - // Big ints get consumed by the Stringer clause, so we need to handle - // them earlier on. - if v == nil { - return "" - } - return formatLogfmtBigInt(v) - - case *uint256.Int: - // Uint256s get consumed by the Stringer clause, so we need to handle - // them earlier on. - if v == nil { - return "" - } - return formatLogfmtUint256(v) + return v.Time().AppendFormat(tmp, timeFormat) + default: + value = v.Any() } - if term { - if s, ok := value.(TerminalStringer); ok { - // Custom terminal stringer provided, use that - return escapeString(s.TerminalString()) - } + if value == nil { + return []byte("") } - value = formatShared(value) switch v := value.(type) { - case bool: - return strconv.FormatBool(v) - case float32: - return strconv.FormatFloat(float64(v), floatFormat, 3, 64) - case float64: - return strconv.FormatFloat(v, floatFormat, 3, 64) - case int8: - return strconv.FormatInt(int64(v), 10) - case uint8: - return strconv.FormatInt(int64(v), 10) - case int16: - return strconv.FormatInt(int64(v), 10) - case uint16: - return strconv.FormatInt(int64(v), 10) - // Larger integers get thousands separators. - case int: - return FormatLogfmtInt64(int64(v)) - case int32: - return FormatLogfmtInt64(int64(v)) - case int64: - return FormatLogfmtInt64(v) - case uint: - return FormatLogfmtUint64(uint64(v)) - case uint32: - return FormatLogfmtUint64(uint64(v)) - case uint64: - return FormatLogfmtUint64(v) - case string: - return escapeString(v) - default: - return escapeString(fmt.Sprintf("%+v", value)) + case *big.Int: // Need to be before fmt.Stringer-clause + return appendBigInt(tmp, v) + case *uint256.Int: // Need to be before fmt.Stringer-clause + return appendU256(tmp, v) + case error: + return appendEscapeString(tmp, v.Error()) + case TerminalStringer: + return appendEscapeString(tmp, v.TerminalString()) + case fmt.Stringer: + return appendEscapeString(tmp, v.String()) } + + // We can use the 'tmp' as a scratch-buffer, to first format the + // value, and in a second step do escaping. + internal := fmt.Appendf(tmp, "%+v", value) + return appendEscapeString(tmp, string(internal)) } -// FormatLogfmtInt64 formats n with thousand separators. -func FormatLogfmtInt64(n int64) string { +// appendInt64 formats n with thousand separators and writes into buffer dst. +func appendInt64(dst []byte, n int64) []byte { if n < 0 { - return formatLogfmtUint64(uint64(-n), true) + return appendUint64(dst, uint64(-n), true) } - return formatLogfmtUint64(uint64(n), false) + return appendUint64(dst, uint64(n), false) } -// FormatLogfmtUint64 formats n with thousand separators. -func FormatLogfmtUint64(n uint64) string { - return formatLogfmtUint64(n, false) -} - -func formatLogfmtUint64(n uint64, neg bool) string { +// appendUint64 formats n with thousand separators and writes into buffer dst. +func appendUint64(dst []byte, n uint64, neg bool) []byte { // Small numbers are fine as is if n < 100000 { if neg { - return strconv.Itoa(-int(n)) + return strconv.AppendInt(dst, -int64(n), 10) } else { - return strconv.Itoa(int(n)) + return strconv.AppendInt(dst, int64(n), 10) } } // Large numbers should be split @@ -447,16 +220,21 @@ func formatLogfmtUint64(n uint64, neg bool) string { out[i] = '-' i-- } - return string(out[i+1:]) + return append(dst, out[i+1:]...) } -// formatLogfmtBigInt formats n with thousand separators. -func formatLogfmtBigInt(n *big.Int) string { +// FormatLogfmtUint64 formats n with thousand separators. +func FormatLogfmtUint64(n uint64) string { + return string(appendUint64(nil, n, false)) +} + +// appendBigInt formats n with thousand separators and writes to dst. +func appendBigInt(dst []byte, n *big.Int) []byte { if n.IsUint64() { - return FormatLogfmtUint64(n.Uint64()) + return appendUint64(dst, n.Uint64(), false) } if n.IsInt64() { - return FormatLogfmtInt64(n.Int64()) + return appendInt64(dst, n.Int64()) } var ( @@ -481,54 +259,48 @@ func formatLogfmtBigInt(n *big.Int) string { comma++ } } - return string(buf[i+1:]) + return append(dst, buf[i+1:]...) } -// formatLogfmtUint256 formats n with thousand separators. -func formatLogfmtUint256(n *uint256.Int) string { +// appendU256 formats n with thousand separators. +func appendU256(dst []byte, n *uint256.Int) []byte { if n.IsUint64() { - return FormatLogfmtUint64(n.Uint64()) + return appendUint64(dst, n.Uint64(), false) } - var ( - text = n.Dec() - buf = make([]byte, len(text)+len(text)/3) - comma = 0 - i = len(buf) - 1 - ) - for j := len(text) - 1; j >= 0; j, i = j-1, i-1 { - c := text[j] - - switch { - case c == '-': - buf[i] = c - case comma == 3: - buf[i] = ',' - i-- - comma = 0 - fallthrough - default: - buf[i] = c - comma++ - } - } - return string(buf[i+1:]) + res := []byte(n.PrettyDec(',')) + return append(dst, res...) } -// escapeString checks if the provided string needs escaping/quoting, and -// calls strconv.Quote if needed -func escapeString(s string) string { +// appendEscapeString writes the string s to the given writer, with +// escaping/quoting if needed. +func appendEscapeString(dst []byte, s string) []byte { needsQuoting := false + needsEscaping := false for _, r := range s { - // We quote everything below " (0x22) and above~ (0x7E), plus equal-sign - if r <= '"' || r > '~' || r == '=' { + // If it contains spaces or equal-sign, we need to quote it. + if r == ' ' || r == '=' { needsQuoting = true + continue + } + // We need to escape it, if it contains + // - character " (0x22) and lower (except space) + // - characters above ~ (0x7E), plus equal-sign + if r <= '"' || r > '~' { + needsEscaping = true break } } - if !needsQuoting { - return s + if needsEscaping { + return strconv.AppendQuote(dst, s) } - return strconv.Quote(s) + // No escaping needed, but we might have to place within quote-marks, in case + // it contained a space + if needsQuoting { + dst = append(dst, '"') + dst = append(dst, []byte(s)...) + return append(dst, '"') + } + return append(dst, []byte(s)...) } // escapeMessage checks if the provided string needs escaping/quoting, similarly @@ -553,3 +325,45 @@ func escapeMessage(s string) string { } return strconv.Quote(s) } + +// writeTimeTermFormat writes on the format "01-02|15:04:05.000" +func writeTimeTermFormat(buf *bytes.Buffer, t time.Time) { + _, month, day := t.Date() + writePosIntWidth(buf, int(month), 2) + buf.WriteByte('-') + writePosIntWidth(buf, day, 2) + buf.WriteByte('|') + hour, min, sec := t.Clock() + writePosIntWidth(buf, hour, 2) + buf.WriteByte(':') + writePosIntWidth(buf, min, 2) + buf.WriteByte(':') + writePosIntWidth(buf, sec, 2) + ns := t.Nanosecond() + buf.WriteByte('.') + writePosIntWidth(buf, ns/1e6, 3) +} + +// writePosIntWidth writes non-negative integer i to the buffer, padded on the left +// by zeroes to the given width. Use a width of 0 to omit padding. +// Adapted from golang.org/x/exp/slog/internal/buffer/buffer.go +func writePosIntWidth(b *bytes.Buffer, i, width int) { + // Cheap integer to fixed-width decimal ASCII. + // Copied from log/log.go. + if i < 0 { + panic("negative int") + } + // Assemble decimal in reverse order. + var bb [20]byte + bp := len(bb) - 1 + for i >= 10 || width > 1 { + width-- + q := i / 10 + bb[bp] = byte('0' + i - q*10) + bp-- + i = q + } + // i < 10 + bb[bp] = byte('0' + i) + b.Write(bb[bp:]) +} diff --git a/log/format_test.go b/log/format_test.go index e08c1d1a4a..d4c1df4abc 100644 --- a/log/format_test.go +++ b/log/format_test.go @@ -1,161 +1,24 @@ package log import ( - "fmt" - "math" - "math/big" "math/rand" - "strings" "testing" - - "github.com/holiman/uint256" ) -func TestPrettyInt64(t *testing.T) { - tests := []struct { - n int64 - s string - }{ - {0, "0"}, - {10, "10"}, - {-10, "-10"}, - {100, "100"}, - {-100, "-100"}, - {1000, "1000"}, - {-1000, "-1000"}, - {10000, "10000"}, - {-10000, "-10000"}, - {99999, "99999"}, - {-99999, "-99999"}, - {100000, "100,000"}, - {-100000, "-100,000"}, - {1000000, "1,000,000"}, - {-1000000, "-1,000,000"}, - {math.MaxInt64, "9,223,372,036,854,775,807"}, - {math.MinInt64, "-9,223,372,036,854,775,808"}, - } - for i, tt := range tests { - if have := FormatLogfmtInt64(tt.n); have != tt.s { - t.Errorf("test %d: format mismatch: have %s, want %s", i, have, tt.s) - } - } -} - -func TestPrettyUint64(t *testing.T) { - tests := []struct { - n uint64 - s string - }{ - {0, "0"}, - {10, "10"}, - {100, "100"}, - {1000, "1000"}, - {10000, "10000"}, - {99999, "99999"}, - {100000, "100,000"}, - {1000000, "1,000,000"}, - {math.MaxUint64, "18,446,744,073,709,551,615"}, - } - for i, tt := range tests { - if have := FormatLogfmtUint64(tt.n); have != tt.s { - t.Errorf("test %d: format mismatch: have %s, want %s", i, have, tt.s) - } - } -} - -func TestPrettyBigInt(t *testing.T) { - tests := []struct { - int string - s string - }{ - {"111222333444555678999", "111,222,333,444,555,678,999"}, - {"-111222333444555678999", "-111,222,333,444,555,678,999"}, - {"11122233344455567899900", "11,122,233,344,455,567,899,900"}, - {"-11122233344455567899900", "-11,122,233,344,455,567,899,900"}, - } - - for _, tt := range tests { - v, _ := new(big.Int).SetString(tt.int, 10) - if have := formatLogfmtBigInt(v); have != tt.s { - t.Errorf("invalid output %s, want %s", have, tt.s) - } - } -} - -func TestPrettyUint256(t *testing.T) { - tests := []struct { - int string - s string - }{ - {"111222333444555678999", "111,222,333,444,555,678,999"}, - {"11122233344455567899900", "11,122,233,344,455,567,899,900"}, - } - - for _, tt := range tests { - v := new(uint256.Int) - v.SetFromDecimal(tt.int) - if have := formatLogfmtUint256(v); have != tt.s { - t.Errorf("invalid output %s, want %s", have, tt.s) - } - } -} - -var sink string +var sink []byte func BenchmarkPrettyInt64Logfmt(b *testing.B) { + buf := make([]byte, 100) b.ReportAllocs() for i := 0; i < b.N; i++ { - sink = FormatLogfmtInt64(rand.Int63()) + sink = appendInt64(buf, rand.Int63()) } } func BenchmarkPrettyUint64Logfmt(b *testing.B) { + buf := make([]byte, 100) b.ReportAllocs() for i := 0; i < b.N; i++ { - sink = FormatLogfmtUint64(rand.Uint64()) - } -} - -func TestSanitation(t *testing.T) { - msg := "\u001b[1G\u001b[K\u001b[1A" - msg2 := "\u001b \u0000" - msg3 := "NiceMessage" - msg4 := "Space Message" - msg5 := "Enter\nMessage" - - for i, tt := range []struct { - msg string - want string - }{ - { - msg: msg, - want: fmt.Sprintf("] %q %q=%q\n", msg, msg, msg), - }, - { - msg: msg2, - want: fmt.Sprintf("] %q %q=%q\n", msg2, msg2, msg2), - }, - { - msg: msg3, - want: fmt.Sprintf("] %s %s=%s\n", msg3, msg3, msg3), - }, - { - msg: msg4, - want: fmt.Sprintf("] %s %q=%q\n", msg4, msg4, msg4), - }, - { - msg: msg5, - want: fmt.Sprintf("] %s %q=%q\n", msg5, msg5, msg5), - }, - } { - var ( - logger = New() - out = new(strings.Builder) - ) - logger.SetHandler(LvlFilterHandler(LvlInfo, StreamHandler(out, TerminalFormat(false)))) - logger.Info(tt.msg, tt.msg, tt.msg) - if have := out.String()[24:]; tt.want != have { - t.Fatalf("test %d: want / have: \n%v\n%v", i, tt.want, have) - } + sink = appendUint64(buf, rand.Uint64(), false) } } diff --git a/log/handler.go b/log/handler.go index 4a0cf578f6..7459aad891 100644 --- a/log/handler.go +++ b/log/handler.go @@ -1,375 +1,192 @@ package log import ( + "context" "fmt" "io" - "net" - "os" + "math/big" "reflect" "sync" - "sync/atomic" + "time" - "github.com/go-stack/stack" + "github.com/holiman/uint256" + "golang.org/x/exp/slog" ) -// Handler defines where and how log records are written. -// A Logger prints its log records by writing to a Handler. -// Handlers are composable, providing you great flexibility in combining -// them to achieve the logging structure that suits your applications. -type Handler interface { - Log(r *Record) error -} +type discardHandler struct{} -// FuncHandler returns a Handler that logs records with the given -// function. -func FuncHandler(fn func(r *Record) error) Handler { - return funcHandler(fn) +// DiscardHandler returns a no-op handler +func DiscardHandler() slog.Handler { + return &discardHandler{} } -type funcHandler func(r *Record) error - -func (h funcHandler) Log(r *Record) error { - return h(r) +func (h *discardHandler) Handle(_ context.Context, r slog.Record) error { + return nil } -// StreamHandler writes log records to an io.Writer -// with the given format. StreamHandler can be used -// to easily begin writing log records to other -// outputs. -// -// StreamHandler wraps itself with LazyHandler and SyncHandler -// to evaluate Lazy objects and perform safe concurrent writes. -func StreamHandler(wr io.Writer, fmtr Format) Handler { - h := FuncHandler(func(r *Record) error { - _, err := wr.Write(fmtr.Format(r)) - return err - }) - return LazyHandler(SyncHandler(h)) +func (h *discardHandler) Enabled(_ context.Context, level slog.Level) bool { + return false } -// SyncHandler can be wrapped around a handler to guarantee that -// only a single Log operation can proceed at a time. It's necessary -// for thread-safe concurrent writes. -func SyncHandler(h Handler) Handler { - var mu sync.Mutex - return FuncHandler(func(r *Record) error { - mu.Lock() - defer mu.Unlock() - - return h.Log(r) - }) +func (h *discardHandler) WithGroup(name string) slog.Handler { + panic("not implemented") } -// FileHandler returns a handler which writes log records to the give file -// using the given format. If the path -// already exists, FileHandler will append to the given file. If it does not, -// FileHandler will create the file with mode 0644. -func FileHandler(path string, fmtr Format) (Handler, error) { - f, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) - if err != nil { - return nil, err - } - return closingHandler{f, StreamHandler(f, fmtr)}, nil +func (h *discardHandler) WithAttrs(attrs []slog.Attr) slog.Handler { + return &discardHandler{} } -// NetHandler opens a socket to the given address and writes records -// over the connection. -func NetHandler(network, addr string, fmtr Format) (Handler, error) { - conn, err := net.Dial(network, addr) - if err != nil { - return nil, err - } - - return closingHandler{conn, StreamHandler(conn, fmtr)}, nil -} +type TerminalHandler struct { + mu sync.Mutex + wr io.Writer + lvl slog.Level + useColor bool + attrs []slog.Attr + // fieldPadding is a map with maximum field value lengths seen until now + // to allow padding log contexts in a bit smarter way. + fieldPadding map[string]int -// XXX: closingHandler is essentially unused at the moment -// it's meant for a future time when the Handler interface supports -// a possible Close() operation -type closingHandler struct { - io.WriteCloser - Handler + buf []byte } -func (h *closingHandler) Close() error { - return h.WriteCloser.Close() +// NewTerminalHandler returns a handler which formats log records at all levels optimized for human readability on +// a terminal with color-coded level output and terser human friendly timestamp. +// This format should only be used for interactive programs or while developing. +// +// [LEVEL] [TIME] MESSAGE key=value key=value ... +// +// Example: +// +// [DBUG] [May 16 20:58:45] remove route ns=haproxy addr=127.0.0.1:50002 +func NewTerminalHandler(wr io.Writer, useColor bool) *TerminalHandler { + return NewTerminalHandlerWithLevel(wr, levelMaxVerbosity, useColor) +} + +// NewTerminalHandlerWithLevel returns the same handler as NewTerminalHandler but only outputs +// records which are less than or equal to the specified verbosity level. +func NewTerminalHandlerWithLevel(wr io.Writer, lvl slog.Level, useColor bool) *TerminalHandler { + return &TerminalHandler{ + wr: wr, + lvl: lvl, + useColor: useColor, + fieldPadding: make(map[string]int), + } } -// CallerFileHandler returns a Handler that adds the line number and file of -// the calling function to the context with key "caller". -func CallerFileHandler(h Handler) Handler { - return FuncHandler(func(r *Record) error { - r.Ctx = append(r.Ctx, "caller", fmt.Sprint(r.Call)) - return h.Log(r) - }) +func (h *TerminalHandler) Handle(_ context.Context, r slog.Record) error { + h.mu.Lock() + defer h.mu.Unlock() + buf := h.format(h.buf, r, h.useColor) + h.wr.Write(buf) + h.buf = buf[:0] + return nil } -// CallerFuncHandler returns a Handler that adds the calling function name to -// the context with key "fn". -func CallerFuncHandler(h Handler) Handler { - return FuncHandler(func(r *Record) error { - r.Ctx = append(r.Ctx, "fn", formatCall("%+n", r.Call)) - return h.Log(r) - }) +func (h *TerminalHandler) Enabled(_ context.Context, level slog.Level) bool { + return level >= h.lvl } -// This function is here to please go vet on Go < 1.8. -func formatCall(format string, c stack.Call) string { - return fmt.Sprintf(format, c) +func (h *TerminalHandler) WithGroup(name string) slog.Handler { + panic("not implemented") } -// CallerStackHandler returns a Handler that adds a stack trace to the context -// with key "stack". The stack trace is formatted as a space separated list of -// call sites inside matching []'s. The most recent call site is listed first. -// Each call site is formatted according to format. See the documentation of -// package github.com/go-stack/stack for the list of supported formats. -func CallerStackHandler(format string, h Handler) Handler { - return FuncHandler(func(r *Record) error { - s := stack.Trace().TrimBelow(r.Call).TrimRuntime() - if len(s) > 0 { - r.Ctx = append(r.Ctx, "stack", fmt.Sprintf(format, s)) - } - return h.Log(r) - }) +func (h *TerminalHandler) WithAttrs(attrs []slog.Attr) slog.Handler { + return &TerminalHandler{ + wr: h.wr, + lvl: h.lvl, + useColor: h.useColor, + attrs: append(h.attrs, attrs...), + fieldPadding: make(map[string]int), + } } -// FilterHandler returns a Handler that only writes records to the -// wrapped Handler if the given function evaluates true. For example, -// to only log records where the 'err' key is not nil: -// -// logger.SetHandler(FilterHandler(func(r *Record) bool { -// for i := 0; i < len(r.Ctx); i += 2 { -// if r.Ctx[i] == "err" { -// return r.Ctx[i+1] != nil -// } -// } -// return false -// }, h)) -func FilterHandler(fn func(r *Record) bool, h Handler) Handler { - return FuncHandler(func(r *Record) error { - if fn(r) { - return h.Log(r) - } - return nil - }) +// ResetFieldPadding zeroes the field-padding for all attribute pairs. +func (t *TerminalHandler) ResetFieldPadding() { + t.mu.Lock() + t.fieldPadding = make(map[string]int) + t.mu.Unlock() } -// MatchFilterHandler returns a Handler that only writes records -// to the wrapped Handler if the given key in the logged -// context matches the value. For example, to only log records -// from your ui package: -// -// log.MatchFilterHandler("pkg", "app/ui", log.StdoutHandler) -func MatchFilterHandler(key string, value interface{}, h Handler) Handler { - return FilterHandler(func(r *Record) (pass bool) { - switch key { - case r.KeyNames.Lvl: - return r.Lvl == value - case r.KeyNames.Time: - return r.Time == value - case r.KeyNames.Msg: - return r.Msg == value - } +type leveler struct{ minLevel slog.Level } - for i := 0; i < len(r.Ctx); i += 2 { - if r.Ctx[i] == key { - return r.Ctx[i+1] == value - } - } - return false - }, h) +func (l *leveler) Level() slog.Level { + return l.minLevel } -// LvlFilterHandler returns a Handler that only writes -// records which are less than the given verbosity -// level to the wrapped Handler. For example, to only -// log Error/Crit records: -// -// log.LvlFilterHandler(log.LvlError, log.StdoutHandler) -func LvlFilterHandler(maxLvl Lvl, h Handler) Handler { - return FilterHandler(func(r *Record) (pass bool) { - return r.Lvl <= maxLvl - }, h) +// JSONHandler returns a handler which prints records in JSON format. +func JSONHandler(wr io.Writer) slog.Handler { + return slog.NewJSONHandler(wr, &slog.HandlerOptions{ + ReplaceAttr: builtinReplaceJSON, + }) } -// MultiHandler dispatches any write to each of its handlers. -// This is useful for writing different types of log information -// to different locations. For example, to log to a file and -// standard error: +// LogfmtHandler returns a handler which prints records in logfmt format, an easy machine-parseable but human-readable +// format for key/value pairs. // -// log.MultiHandler( -// log.Must.FileHandler("/var/log/app.log", log.LogfmtFormat()), -// log.StderrHandler) -func MultiHandler(hs ...Handler) Handler { - return FuncHandler(func(r *Record) error { - for _, h := range hs { - // what to do about failures? - h.Log(r) - } - return nil +// For more details see: http://godoc.org/github.com/kr/logfmt +func LogfmtHandler(wr io.Writer) slog.Handler { + return slog.NewTextHandler(wr, &slog.HandlerOptions{ + ReplaceAttr: builtinReplaceLogfmt, }) } -// FailoverHandler writes all log records to the first handler -// specified, but will failover and write to the second handler if -// the first handler has failed, and so on for all handlers specified. -// For example you might want to log to a network socket, but failover -// to writing to a file if the network fails, and then to -// standard out if the file write fails: -// -// log.FailoverHandler( -// log.Must.NetHandler("tcp", ":9090", log.JSONFormat()), -// log.Must.FileHandler("/var/log/app.log", log.LogfmtFormat()), -// log.StdoutHandler) -// -// All writes that do not go to the first handler will add context with keys of -// the form "failover_err_{idx}" which explain the error encountered while -// trying to write to the handlers before them in the list. -func FailoverHandler(hs ...Handler) Handler { - return FuncHandler(func(r *Record) error { - var err error - for i, h := range hs { - err = h.Log(r) - if err == nil { - return nil - } - r.Ctx = append(r.Ctx, fmt.Sprintf("failover_err_%d", i), err) - } - - return err +// LogfmtHandlerWithLevel returns the same handler as LogfmtHandler but it only outputs +// records which are less than or equal to the specified verbosity level. +func LogfmtHandlerWithLevel(wr io.Writer, level slog.Level) slog.Handler { + return slog.NewTextHandler(wr, &slog.HandlerOptions{ + ReplaceAttr: builtinReplaceLogfmt, + Level: &leveler{level}, }) } -// ChannelHandler writes all records to the given channel. -// It blocks if the channel is full. Useful for async processing -// of log messages, it's used by BufferedHandler. -func ChannelHandler(recs chan<- *Record) Handler { - return FuncHandler(func(r *Record) error { - recs <- r - return nil - }) +func builtinReplaceLogfmt(_ []string, attr slog.Attr) slog.Attr { + return builtinReplace(nil, attr, true) } -// BufferedHandler writes all records to a buffered -// channel of the given size which flushes into the wrapped -// handler whenever it is available for writing. Since these -// writes happen asynchronously, all writes to a BufferedHandler -// never return an error and any errors from the wrapped handler are ignored. -func BufferedHandler(bufSize int, h Handler) Handler { - recs := make(chan *Record, bufSize) - go func() { - for m := range recs { - _ = h.Log(m) - } - }() - return ChannelHandler(recs) +func builtinReplaceJSON(_ []string, attr slog.Attr) slog.Attr { + return builtinReplace(nil, attr, false) } -// LazyHandler writes all values to the wrapped handler after evaluating -// any lazy functions in the record's context. It is already wrapped -// around StreamHandler and SyslogHandler in this library, you'll only need -// it if you write your own Handler. -func LazyHandler(h Handler) Handler { - return FuncHandler(func(r *Record) error { - // go through the values (odd indices) and reassign - // the values of any lazy fn to the result of its execution - hadErr := false - for i := 1; i < len(r.Ctx); i += 2 { - lz, ok := r.Ctx[i].(Lazy) - if ok { - v, err := evaluateLazy(lz) - if err != nil { - hadErr = true - r.Ctx[i] = err - } else { - if cs, ok := v.(stack.CallStack); ok { - v = cs.TrimBelow(r.Call).TrimRuntime() - } - r.Ctx[i] = v - } +func builtinReplace(_ []string, attr slog.Attr, logfmt bool) slog.Attr { + switch attr.Key { + case slog.TimeKey: + if attr.Value.Kind() == slog.KindTime { + if logfmt { + return slog.String("t", attr.Value.Time().Format(timeFormat)) + } else { + return slog.Attr{Key: "t", Value: attr.Value} } } - - if hadErr { - r.Ctx = append(r.Ctx, errorKey, "bad lazy") + case slog.LevelKey: + if l, ok := attr.Value.Any().(slog.Level); ok { + attr = slog.Any("lvl", LevelString(l)) + return attr } - - return h.Log(r) - }) -} - -func evaluateLazy(lz Lazy) (interface{}, error) { - t := reflect.TypeOf(lz.Fn) - - if t.Kind() != reflect.Func { - return nil, fmt.Errorf("INVALID_LAZY, not func: %+v", lz.Fn) - } - - if t.NumIn() > 0 { - return nil, fmt.Errorf("INVALID_LAZY, func takes args: %+v", lz.Fn) - } - - if t.NumOut() == 0 { - return nil, fmt.Errorf("INVALID_LAZY, no func return val: %+v", lz.Fn) - } - - value := reflect.ValueOf(lz.Fn) - results := value.Call([]reflect.Value{}) - if len(results) == 1 { - return results[0].Interface(), nil } - values := make([]interface{}, len(results)) - for i, v := range results { - values[i] = v.Interface() - } - return values, nil -} - -// DiscardHandler reports success for all writes but does nothing. -// It is useful for dynamically disabling logging at runtime via -// a Logger's SetHandler method. -func DiscardHandler() Handler { - return FuncHandler(func(r *Record) error { - return nil - }) -} - -// Must provides the following Handler creation functions -// which instead of returning an error parameter only return a Handler -// and panic on failure: FileHandler, NetHandler, SyslogHandler, SyslogNetHandler -var Must muster -func must(h Handler, err error) Handler { - if err != nil { - panic(err) + switch v := attr.Value.Any().(type) { + case time.Time: + if logfmt { + attr = slog.String(attr.Key, v.Format(timeFormat)) + } + case *big.Int: + if v == nil { + attr.Value = slog.StringValue("") + } else { + attr.Value = slog.StringValue(v.String()) + } + case *uint256.Int: + if v == nil { + attr.Value = slog.StringValue("") + } else { + attr.Value = slog.StringValue(v.Dec()) + } + case fmt.Stringer: + if v == nil || (reflect.ValueOf(v).Kind() == reflect.Pointer && reflect.ValueOf(v).IsNil()) { + attr.Value = slog.StringValue("") + } else { + attr.Value = slog.StringValue(v.String()) + } } - return h -} - -type muster struct{} - -func (m muster) FileHandler(path string, fmtr Format) Handler { - return must(FileHandler(path, fmtr)) -} - -func (m muster) NetHandler(network, addr string, fmtr Format) Handler { - return must(NetHandler(network, addr, fmtr)) -} - -// swapHandler wraps another handler that may be swapped out -// dynamically at runtime in a thread-safe fashion. -type swapHandler struct { - handler atomic.Value -} - -func (h *swapHandler) Log(r *Record) error { - return (*h.handler.Load().(*Handler)).Log(r) -} - -func (h *swapHandler) Swap(newHandler Handler) { - h.handler.Store(&newHandler) -} - -func (h *swapHandler) Get() Handler { - return *h.handler.Load().(*Handler) + return attr } diff --git a/log/handler_glog.go b/log/handler_glog.go index afca0808b3..fb1e03c5b5 100644 --- a/log/handler_glog.go +++ b/log/handler_glog.go @@ -17,6 +17,7 @@ package log import ( + "context" "errors" "fmt" "regexp" @@ -25,54 +26,47 @@ import ( "strings" "sync" "sync/atomic" + + "golang.org/x/exp/slog" ) // errVmoduleSyntax is returned when a user vmodule pattern is invalid. var errVmoduleSyntax = errors.New("expect comma-separated list of filename=N") -// errTraceSyntax is returned when a user backtrace pattern is invalid. -var errTraceSyntax = errors.New("expect file.go:234") - // GlogHandler is a log handler that mimics the filtering features of Google's // glog logger: setting global log levels; overriding with callsite pattern // matches; and requesting backtraces at certain positions. type GlogHandler struct { - origin Handler // The origin handler this wraps + origin slog.Handler // The origin handler this wraps - level atomic.Uint32 // Current log level, atomically accessible - override atomic.Bool // Flag whether overrides are used, atomically accessible - backtrace atomic.Bool // Flag whether backtrace location is set + level atomic.Int32 // Current log level, atomically accessible + override atomic.Bool // Flag whether overrides are used, atomically accessible - patterns []pattern // Current list of patterns to override with - siteCache map[uintptr]Lvl // Cache of callsite pattern evaluations - location string // file:line location where to do a stackdump at - lock sync.RWMutex // Lock protecting the override pattern list + patterns []pattern // Current list of patterns to override with + siteCache map[uintptr]slog.Level // Cache of callsite pattern evaluations + location string // file:line location where to do a stackdump at + lock sync.RWMutex // Lock protecting the override pattern list } // NewGlogHandler creates a new log handler with filtering functionality similar // to Google's glog logger. The returned handler implements Handler. -func NewGlogHandler(h Handler) *GlogHandler { +func NewGlogHandler(h slog.Handler) *GlogHandler { return &GlogHandler{ origin: h, } } -// SetHandler updates the handler to write records to the specified sub-handler. -func (h *GlogHandler) SetHandler(nh Handler) { - h.origin = nh -} - // pattern contains a filter for the Vmodule option, holding a verbosity level // and a file pattern to match. type pattern struct { pattern *regexp.Regexp - level Lvl + level slog.Level } // Verbosity sets the glog verbosity ceiling. The verbosity of individual packages // and source files can be raised using Vmodule. -func (h *GlogHandler) Verbosity(level Lvl) { - h.level.Store(uint32(level)) +func (h *GlogHandler) Verbosity(level slog.Level) { + h.level.Store(int32(level)) } // Vmodule sets the glog verbosity pattern. @@ -108,11 +102,13 @@ func (h *GlogHandler) Vmodule(ruleset string) error { return errVmoduleSyntax } // Parse the level and if correct, assemble the filter rule - level, err := strconv.Atoi(parts[1]) + l, err := strconv.Atoi(parts[1]) if err != nil { return errVmoduleSyntax } - if level <= 0 { + level := FromLegacyLevel(l) + + if level == LevelCrit { continue // Ignore. It's harmless but no point in paying the overhead. } // Compile the rule pattern into a regular expression @@ -130,107 +126,84 @@ func (h *GlogHandler) Vmodule(ruleset string) error { matcher = matcher + "$" re, _ := regexp.Compile(matcher) - filter = append(filter, pattern{re, Lvl(level)}) + filter = append(filter, pattern{re, level}) } // Swap out the vmodule pattern for the new filter system h.lock.Lock() defer h.lock.Unlock() h.patterns = filter - h.siteCache = make(map[uintptr]Lvl) + h.siteCache = make(map[uintptr]slog.Level) h.override.Store(len(filter) != 0) - // Enable location storage (globally) - if len(h.patterns) > 0 { - stackEnabled.Store(true) - } + return nil } -// BacktraceAt sets the glog backtrace location. When set to a file and line -// number holding a logging statement, a stack trace will be written to the Info -// log whenever execution hits that statement. -// -// Unlike with Vmodule, the ".go" must be present. -func (h *GlogHandler) BacktraceAt(location string) error { - // Ensure the backtrace location contains two non-empty elements - parts := strings.Split(location, ":") - if len(parts) != 2 { - return errTraceSyntax - } - parts[0] = strings.TrimSpace(parts[0]) - parts[1] = strings.TrimSpace(parts[1]) - if len(parts[0]) == 0 || len(parts[1]) == 0 { - return errTraceSyntax - } - // Ensure the .go prefix is present and the line is valid - if !strings.HasSuffix(parts[0], ".go") { - return errTraceSyntax +func (h *GlogHandler) Enabled(ctx context.Context, lvl slog.Level) bool { + // fast-track skipping logging if override not enabled and the provided verbosity is above configured + return h.override.Load() || slog.Level(h.level.Load()) <= lvl +} + +func (h *GlogHandler) WithAttrs(attrs []slog.Attr) slog.Handler { + h.lock.RLock() + siteCache := make(map[uintptr]slog.Level) + for k, v := range h.siteCache { + siteCache[k] = v } - if _, err := strconv.Atoi(parts[1]); err != nil { - return errTraceSyntax + h.lock.RUnlock() + + patterns := []pattern{} + patterns = append(patterns, h.patterns...) + + res := GlogHandler{ + origin: h.origin.WithAttrs(attrs), + patterns: patterns, + siteCache: siteCache, + location: h.location, } - // All seems valid - h.lock.Lock() - defer h.lock.Unlock() - h.location = location - h.backtrace.Store(len(location) > 0) - // Enable location storage (globally) - stackEnabled.Store(true) - return nil + res.level.Store(h.level.Load()) + res.override.Store(h.override.Load()) + return &res +} + +func (h *GlogHandler) WithGroup(name string) slog.Handler { + panic("not implemented") } // Log implements Handler.Log, filtering a log record through the global, local // and backtrace filters, finally emitting it if either allow it through. -func (h *GlogHandler) Log(r *Record) error { - // If backtracing is requested, check whether this is the callsite - if h.backtrace.Load() { - // Everything below here is slow. Although we could cache the call sites the - // same way as for vmodule, backtracing is so rare it's not worth the extra - // complexity. - h.lock.RLock() - match := h.location == r.Call.String() - h.lock.RUnlock() - - if match { - // Callsite matched, raise the log level to info and gather the stacks - r.Lvl = LvlInfo - - buf := make([]byte, 1024*1024) - buf = buf[:runtime.Stack(buf, true)] - r.Msg += "\n\n" + string(buf) - } - } +func (h *GlogHandler) Handle(_ context.Context, r slog.Record) error { // If the global log level allows, fast track logging - if h.level.Load() >= uint32(r.Lvl) { - return h.origin.Log(r) - } - // If no local overrides are present, fast track skipping - if !h.override.Load() { - return nil + if slog.Level(h.level.Load()) <= r.Level { + return h.origin.Handle(context.Background(), r) } + // Check callsite cache for previously calculated log levels h.lock.RLock() - lvl, ok := h.siteCache[r.Call.Frame().PC] + lvl, ok := h.siteCache[r.PC] h.lock.RUnlock() // If we didn't cache the callsite yet, calculate it if !ok { h.lock.Lock() + + fs := runtime.CallersFrames([]uintptr{r.PC}) + frame, _ := fs.Next() + for _, rule := range h.patterns { - if rule.pattern.MatchString(fmt.Sprintf("%+s", r.Call)) { - h.siteCache[r.Call.Frame().PC], lvl, ok = rule.level, rule.level, true - break + if rule.pattern.MatchString(fmt.Sprintf("%+s", frame.File)) { + h.siteCache[r.PC], lvl, ok = rule.level, rule.level, true } } // If no rule matched, remember to drop log the next time if !ok { - h.siteCache[r.Call.Frame().PC] = 0 + h.siteCache[r.PC] = 0 } h.lock.Unlock() } - if lvl >= r.Lvl { - return h.origin.Log(r) + if lvl <= r.Level { + return h.origin.Handle(context.Background(), r) } return nil } diff --git a/log/logger.go b/log/logger.go index 42e7e375d0..20130146a5 100644 --- a/log/logger.go +++ b/log/logger.go @@ -1,294 +1,217 @@ package log import ( - "fmt" + "context" + "math" "os" + "runtime" "time" - "github.com/go-stack/stack" + "golang.org/x/exp/slog" ) -const timeKey = "t" -const lvlKey = "lvl" -const msgKey = "msg" -const ctxKey = "ctx" -const errorKey = "LOG15_ERROR" -const skipLevel = 2 +const errorKey = "LOG_ERROR" -type Lvl int +const ( + legacyLevelCrit = iota + legacyLevelError + legacyLevelWarn + legacyLevelInfo + legacyLevelDebug + legacyLevelTrace +) const ( - LvlCrit Lvl = iota - LvlError - LvlWarn - LvlInfo - LvlDebug - LvlTrace + levelMaxVerbosity slog.Level = math.MinInt + LevelTrace slog.Level = -8 + LevelDebug = slog.LevelDebug + LevelInfo = slog.LevelInfo + LevelWarn = slog.LevelWarn + LevelError = slog.LevelError + LevelCrit slog.Level = 12 + + // for backward-compatibility + LvlTrace = LevelTrace + LvlInfo = LevelInfo + LvlDebug = LevelDebug ) -// AlignedString returns a 5-character string containing the name of a Lvl. -func (l Lvl) AlignedString() string { +// convert from old Geth verbosity level constants +// to levels defined by slog +func FromLegacyLevel(lvl int) slog.Level { + switch lvl { + case legacyLevelCrit: + return LevelCrit + case legacyLevelError: + return slog.LevelError + case legacyLevelWarn: + return slog.LevelWarn + case legacyLevelInfo: + return slog.LevelInfo + case legacyLevelDebug: + return slog.LevelDebug + case legacyLevelTrace: + return LevelTrace + default: + break + } + + // TODO: should we allow use of custom levels or force them to match existing max/min if they fall outside the range as I am doing here? + if lvl > legacyLevelTrace { + return LevelTrace + } + return LevelCrit +} + +// LevelAlignedString returns a 5-character string containing the name of a Lvl. +func LevelAlignedString(l slog.Level) string { switch l { - case LvlTrace: + case LevelTrace: return "TRACE" - case LvlDebug: + case slog.LevelDebug: return "DEBUG" - case LvlInfo: + case slog.LevelInfo: return "INFO " - case LvlWarn: + case slog.LevelWarn: return "WARN " - case LvlError: + case slog.LevelError: return "ERROR" - case LvlCrit: + case LevelCrit: return "CRIT " default: - panic("bad level") + return "unknown level" } } -// String returns the name of a Lvl. -func (l Lvl) String() string { +// LevelString returns a 5-character string containing the name of a Lvl. +func LevelString(l slog.Level) string { switch l { - case LvlTrace: - return "trce" - case LvlDebug: - return "dbug" - case LvlInfo: + case LevelTrace: + return "trace" + case slog.LevelDebug: + return "debug" + case slog.LevelInfo: return "info" - case LvlWarn: + case slog.LevelWarn: return "warn" - case LvlError: + case slog.LevelError: return "eror" - case LvlCrit: + case LevelCrit: return "crit" default: - panic("bad level") - } -} - -// LvlFromString returns the appropriate Lvl from a string name. -// Useful for parsing command line args and configuration files. -func LvlFromString(lvlString string) (Lvl, error) { - switch lvlString { - case "trace", "trce": - return LvlTrace, nil - case "debug", "dbug": - return LvlDebug, nil - case "info": - return LvlInfo, nil - case "warn": - return LvlWarn, nil - case "error", "eror": - return LvlError, nil - case "crit": - return LvlCrit, nil - default: - return LvlDebug, fmt.Errorf("unknown level: %v", lvlString) + return "unknown" } } -// A Record is what a Logger asks its handler to write -type Record struct { - Time time.Time - Lvl Lvl - Msg string - Ctx []interface{} - Call stack.Call - KeyNames RecordKeyNames -} - -// RecordKeyNames gets stored in a Record when the write function is executed. -type RecordKeyNames struct { - Time string - Msg string - Lvl string - Ctx string -} - // A Logger writes key/value pairs to a Handler type Logger interface { - // New returns a new Logger that has this logger's context plus the given context - New(ctx ...interface{}) Logger + // With returns a new Logger that has this logger's attributes plus the given attributes + With(ctx ...interface{}) Logger - // GetHandler gets the handler associated with the logger. - GetHandler() Handler + // With returns a new Logger that has this logger's attributes plus the given attributes. Identical to 'With'. + New(ctx ...interface{}) Logger - // SetHandler updates the logger to write records to the specified handler. - SetHandler(h Handler) + // Log logs a message at the specified level with context key/value pairs + Log(level slog.Level, msg string, ctx ...interface{}) - // Log a message at the trace level with context key/value pairs - // - // # Usage - // - // log.Trace("msg") - // log.Trace("msg", "key1", val1) - // log.Trace("msg", "key1", val1, "key2", val2) + // Trace log a message at the trace level with context key/value pairs Trace(msg string, ctx ...interface{}) - // Log a message at the debug level with context key/value pairs - // - // # Usage Examples - // - // log.Debug("msg") - // log.Debug("msg", "key1", val1) - // log.Debug("msg", "key1", val1, "key2", val2) + // Debug logs a message at the debug level with context key/value pairs Debug(msg string, ctx ...interface{}) - // Log a message at the info level with context key/value pairs - // - // # Usage Examples - // - // log.Info("msg") - // log.Info("msg", "key1", val1) - // log.Info("msg", "key1", val1, "key2", val2) + // Info logs a message at the info level with context key/value pairs Info(msg string, ctx ...interface{}) - // Log a message at the warn level with context key/value pairs - // - // # Usage Examples - // - // log.Warn("msg") - // log.Warn("msg", "key1", val1) - // log.Warn("msg", "key1", val1, "key2", val2) + // Warn logs a message at the warn level with context key/value pairs Warn(msg string, ctx ...interface{}) - // Log a message at the error level with context key/value pairs - // - // # Usage Examples - // - // log.Error("msg") - // log.Error("msg", "key1", val1) - // log.Error("msg", "key1", val1, "key2", val2) + // Error logs a message at the error level with context key/value pairs Error(msg string, ctx ...interface{}) - // Log a message at the crit level with context key/value pairs, and then exit. - // - // # Usage Examples - // - // log.Crit("msg") - // log.Crit("msg", "key1", val1) - // log.Crit("msg", "key1", val1, "key2", val2) + // Crit logs a message at the crit level with context key/value pairs, and exits Crit(msg string, ctx ...interface{}) + + // Write logs a message at the specified level + Write(level slog.Level, msg string, attrs ...any) + + // Enabled reports whether l emits log records at the given context and level. + Enabled(ctx context.Context, level slog.Level) bool + + // Handler returns the underlying handler of the inner logger. + Handler() slog.Handler } type logger struct { - ctx []interface{} - h *swapHandler + inner *slog.Logger } -func (l *logger) write(msg string, lvl Lvl, ctx []interface{}, skip int) { - record := &Record{ - Time: time.Now(), - Lvl: lvl, - Msg: msg, - Ctx: newContext(l.ctx, ctx), - KeyNames: RecordKeyNames{ - Time: timeKey, - Msg: msgKey, - Lvl: lvlKey, - Ctx: ctxKey, - }, +// NewLogger returns a logger with the specified handler set +func NewLogger(h slog.Handler) Logger { + return &logger{ + slog.New(h), } - if stackEnabled.Load() { - record.Call = stack.Caller(skip) - } - l.h.Log(record) } -func (l *logger) New(ctx ...interface{}) Logger { - child := &logger{newContext(l.ctx, ctx), new(swapHandler)} - child.SetHandler(l.h) - return child +func (l *logger) Handler() slog.Handler { + return l.inner.Handler() } -func newContext(prefix []interface{}, suffix []interface{}) []interface{} { - normalizedSuffix := normalize(suffix) - newCtx := make([]interface{}, len(prefix)+len(normalizedSuffix)) - n := copy(newCtx, prefix) - copy(newCtx[n:], normalizedSuffix) - return newCtx -} +// write logs a message at the specified level: +func (l *logger) Write(level slog.Level, msg string, attrs ...any) { + if !l.inner.Enabled(context.Background(), level) { + return + } -func (l *logger) Trace(msg string, ctx ...interface{}) { - l.write(msg, LvlTrace, ctx, skipLevel) -} + var pcs [1]uintptr + runtime.Callers(3, pcs[:]) -func (l *logger) Debug(msg string, ctx ...interface{}) { - l.write(msg, LvlDebug, ctx, skipLevel) + if len(attrs)%2 != 0 { + attrs = append(attrs, nil, errorKey, "Normalized odd number of arguments by adding nil") + } + r := slog.NewRecord(time.Now(), level, msg, pcs[0]) + r.Add(attrs...) + l.inner.Handler().Handle(context.Background(), r) } -func (l *logger) Info(msg string, ctx ...interface{}) { - l.write(msg, LvlInfo, ctx, skipLevel) +func (l *logger) Log(level slog.Level, msg string, attrs ...any) { + l.Write(level, msg, attrs...) } -func (l *logger) Warn(msg string, ctx ...interface{}) { - l.write(msg, LvlWarn, ctx, skipLevel) +func (l *logger) With(ctx ...interface{}) Logger { + return &logger{l.inner.With(ctx...)} } -func (l *logger) Error(msg string, ctx ...interface{}) { - l.write(msg, LvlError, ctx, skipLevel) +func (l *logger) New(ctx ...interface{}) Logger { + return l.With(ctx...) } -func (l *logger) Crit(msg string, ctx ...interface{}) { - l.write(msg, LvlCrit, ctx, skipLevel) - os.Exit(1) +// Enabled reports whether l emits log records at the given context and level. +func (l *logger) Enabled(ctx context.Context, level slog.Level) bool { + return l.inner.Enabled(ctx, level) } -func (l *logger) GetHandler() Handler { - return l.h.Get() +func (l *logger) Trace(msg string, ctx ...interface{}) { + l.Write(LevelTrace, msg, ctx...) } -func (l *logger) SetHandler(h Handler) { - l.h.Swap(h) +func (l *logger) Debug(msg string, ctx ...interface{}) { + l.Write(slog.LevelDebug, msg, ctx...) } -func normalize(ctx []interface{}) []interface{} { - // if the caller passed a Ctx object, then expand it - if len(ctx) == 1 { - if ctxMap, ok := ctx[0].(Ctx); ok { - ctx = ctxMap.toArray() - } - } - - // ctx needs to be even because it's a series of key/value pairs - // no one wants to check for errors on logging functions, - // so instead of erroring on bad input, we'll just make sure - // that things are the right length and users can fix bugs - // when they see the output looks wrong - if len(ctx)%2 != 0 { - ctx = append(ctx, nil, errorKey, "Normalized odd number of arguments by adding nil") - } - - return ctx +func (l *logger) Info(msg string, ctx ...interface{}) { + l.Write(slog.LevelInfo, msg, ctx...) } -// Lazy allows you to defer calculation of a logged value that is expensive -// to compute until it is certain that it must be evaluated with the given filters. -// -// Lazy may also be used in conjunction with a Logger's New() function -// to generate a child logger which always reports the current value of changing -// state. -// -// You may wrap any function which takes no arguments to Lazy. It may return any -// number of values of any type. -type Lazy struct { - Fn interface{} +func (l *logger) Warn(msg string, ctx ...any) { + l.Write(slog.LevelWarn, msg, ctx...) } -// Ctx is a map of key/value pairs to pass as context to a log function -// Use this only if you really need greater safety around the arguments you pass -// to the logging functions. -type Ctx map[string]interface{} - -func (c Ctx) toArray() []interface{} { - arr := make([]interface{}, len(c)*2) - - i := 0 - for k, v := range c { - arr[i] = k - arr[i+1] = v - i += 2 - } +func (l *logger) Error(msg string, ctx ...interface{}) { + l.Write(slog.LevelError, msg, ctx...) +} - return arr +func (l *logger) Crit(msg string, ctx ...interface{}) { + l.Write(LevelCrit, msg, ctx...) + os.Exit(1) } diff --git a/log/logger_test.go b/log/logger_test.go index 2e59b3fdf0..a633f5ad7a 100644 --- a/log/logger_test.go +++ b/log/logger_test.go @@ -2,66 +2,171 @@ package log import ( "bytes" + "fmt" + "io" + "math/big" "os" "strings" "testing" + "time" + + "github.com/holiman/uint256" + "golang.org/x/exp/slog" ) -// TestLoggingWithTrace checks that if BackTraceAt is set, then the -// gloghandler is capable of spitting out a stacktrace -func TestLoggingWithTrace(t *testing.T) { - defer stackEnabled.Store(stackEnabled.Load()) +// TestLoggingWithVmodule checks that vmodule works. +func TestLoggingWithVmodule(t *testing.T) { out := new(bytes.Buffer) - logger := New() - { - glog := NewGlogHandler(StreamHandler(out, TerminalFormat(false))) - glog.Verbosity(LvlTrace) - if err := glog.BacktraceAt("logger_test.go:24"); err != nil { - t.Fatal(err) - } - logger.SetHandler(glog) - } - logger.Trace("a message", "foo", "bar") // Will be bumped to INFO + glog := NewGlogHandler(NewTerminalHandlerWithLevel(out, LevelTrace, false)) + glog.Verbosity(LevelCrit) + logger := NewLogger(glog) + logger.Warn("This should not be seen", "ignored", "true") + glog.Vmodule("logger_test.go=5") + logger.Trace("a message", "foo", "bar") have := out.String() - if !strings.HasPrefix(have, "INFO") { - t.Fatalf("backtraceat should bump level to info: %s", have) - } // The timestamp is locale-dependent, so we want to trim that off // "INFO [01-01|00:00:00.000] a messag ..." -> "a messag..." have = strings.Split(have, "]")[1] - wantPrefix := " a message\n\ngoroutine" - if !strings.HasPrefix(have, wantPrefix) { - t.Errorf("\nhave: %q\nwant: %q\n", have, wantPrefix) + want := " a message foo=bar\n" + if have != want { + t.Errorf("\nhave: %q\nwant: %q\n", have, want) } } -// TestLoggingWithVmodule checks that vmodule works. -func TestLoggingWithVmodule(t *testing.T) { - defer stackEnabled.Store(stackEnabled.Load()) +func TestTerminalHandlerWithAttrs(t *testing.T) { out := new(bytes.Buffer) - logger := New() - { - glog := NewGlogHandler(StreamHandler(out, TerminalFormat(false))) - glog.Verbosity(LvlCrit) - logger.SetHandler(glog) - logger.Warn("This should not be seen", "ignored", "true") - glog.Vmodule("logger_test.go=5") - } + glog := NewGlogHandler(NewTerminalHandlerWithLevel(out, LevelTrace, false).WithAttrs([]slog.Attr{slog.String("baz", "bat")})) + glog.Verbosity(LevelTrace) + logger := NewLogger(glog) logger.Trace("a message", "foo", "bar") have := out.String() // The timestamp is locale-dependent, so we want to trim that off // "INFO [01-01|00:00:00.000] a messag ..." -> "a messag..." have = strings.Split(have, "]")[1] - want := " a message foo=bar\n" + want := " a message baz=bat foo=bar\n" if have != want { t.Errorf("\nhave: %q\nwant: %q\n", have, want) } } func BenchmarkTraceLogging(b *testing.B) { - Root().SetHandler(LvlFilterHandler(LvlInfo, StreamHandler(os.Stderr, TerminalFormat(true)))) + SetDefault(NewLogger(NewTerminalHandler(os.Stderr, true))) b.ResetTimer() for i := 0; i < b.N; i++ { Trace("a message", "v", i) } } + +func BenchmarkTerminalHandler(b *testing.B) { + l := NewLogger(NewTerminalHandler(io.Discard, false)) + benchmarkLogger(b, l) +} +func BenchmarkLogfmtHandler(b *testing.B) { + l := NewLogger(LogfmtHandler(io.Discard)) + benchmarkLogger(b, l) +} + +func BenchmarkJSONHandler(b *testing.B) { + l := NewLogger(JSONHandler(io.Discard)) + benchmarkLogger(b, l) +} + +func benchmarkLogger(b *testing.B, l Logger) { + var ( + bb = make([]byte, 10) + tt = time.Now() + bigint = big.NewInt(100) + nilbig *big.Int + err = fmt.Errorf("Oh nooes it's crap") + ) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + l.Info("This is a message", + "foo", int16(i), + "bytes", bb, + "bonk", "a string with text", + "time", tt, + "bigint", bigint, + "nilbig", nilbig, + "err", err) + } + b.StopTimer() +} + +func TestLoggerOutput(t *testing.T) { + type custom struct { + A string + B int8 + } + var ( + customA = custom{"Foo", 12} + customB = custom{"Foo\nLinebreak", 122} + bb = make([]byte, 10) + tt = time.Time{} + bigint = big.NewInt(100) + nilbig *big.Int + err = fmt.Errorf("Oh nooes it's crap") + smallUint = uint256.NewInt(500_000) + bigUint = &uint256.Int{0xff, 0xff, 0xff, 0xff} + ) + + out := new(bytes.Buffer) + glogHandler := NewGlogHandler(NewTerminalHandler(out, false)) + glogHandler.Verbosity(LevelInfo) + NewLogger(glogHandler).Info("This is a message", + "foo", int16(123), + "bytes", bb, + "bonk", "a string with text", + "time", tt, + "bigint", bigint, + "nilbig", nilbig, + "err", err, + "struct", customA, + "struct", customB, + "ptrstruct", &customA, + "smalluint", smallUint, + "bigUint", bigUint) + + have := out.String() + t.Logf("output %v", out.String()) + want := `INFO [11-07|19:14:33.821] This is a message foo=123 bytes="[0 0 0 0 0 0 0 0 0 0]" bonk="a string with text" time=0001-01-01T00:00:00+0000 bigint=100 nilbig= err="Oh nooes it's crap" struct="{A:Foo B:12}" struct="{A:Foo\nLinebreak B:122}" ptrstruct="&{A:Foo B:12}" smalluint=500,000 bigUint=1,600,660,942,523,603,594,864,898,306,482,794,244,293,965,082,972,225,630,372,095 +` + if !bytes.Equal([]byte(have)[25:], []byte(want)[25:]) { + t.Errorf("Error\nhave: %q\nwant: %q", have, want) + } +} + +const termTimeFormat = "01-02|15:04:05.000" + +func BenchmarkAppendFormat(b *testing.B) { + var now = time.Now() + b.Run("fmt time.Format", func(b *testing.B) { + for i := 0; i < b.N; i++ { + fmt.Fprintf(io.Discard, "%s", now.Format(termTimeFormat)) + } + }) + b.Run("time.AppendFormat", func(b *testing.B) { + for i := 0; i < b.N; i++ { + now.AppendFormat(nil, termTimeFormat) + } + }) + var buf = new(bytes.Buffer) + b.Run("time.Custom", func(b *testing.B) { + for i := 0; i < b.N; i++ { + writeTimeTermFormat(buf, now) + buf.Reset() + } + }) +} + +func TestTermTimeFormat(t *testing.T) { + var now = time.Now() + want := now.AppendFormat(nil, termTimeFormat) + var b = new(bytes.Buffer) + writeTimeTermFormat(b, now) + have := b.Bytes() + if !bytes.Equal(have, want) { + t.Errorf("have != want\nhave: %q\nwant: %q\n", have, want) + } +} diff --git a/log/root.go b/log/root.go index 5a41723c3e..71040fff47 100644 --- a/log/root.go +++ b/log/root.go @@ -2,31 +2,33 @@ package log import ( "os" -) + "sync/atomic" -var ( - root = &logger{[]interface{}{}, new(swapHandler)} - StdoutHandler = StreamHandler(os.Stdout, LogfmtFormat()) - StderrHandler = StreamHandler(os.Stderr, LogfmtFormat()) + "golang.org/x/exp/slog" ) +var root atomic.Value + func init() { - root.SetHandler(DiscardHandler()) + defaultLogger := &logger{slog.New(DiscardHandler())} + SetDefault(defaultLogger) } -// New returns a new logger with the given context. -// New is a convenient alias for Root().New -func New(ctx ...interface{}) Logger { - return root.New(ctx...) +// SetDefault sets the default global logger +func SetDefault(l Logger) { + root.Store(l) + if lg, ok := l.(*logger); ok { + slog.SetDefault(lg.inner) + } } // Root returns the root logger func Root() Logger { - return root + return root.Load().(Logger) } // The following functions bypass the exported logger methods (logger.Debug, -// etc.) to keep the call depth the same for all paths to logger.write so +// etc.) to keep the call depth the same for all paths to logger.Write so // runtime.Caller(2) always refers to the call site in client code. // Trace is a convenient alias for Root().Trace @@ -39,7 +41,7 @@ func Root() Logger { // log.Trace("msg", "key1", val1) // log.Trace("msg", "key1", val1, "key2", val2) func Trace(msg string, ctx ...interface{}) { - root.write(msg, LvlTrace, ctx, skipLevel) + Root().Write(LevelTrace, msg, ctx...) } // Debug is a convenient alias for Root().Debug @@ -52,7 +54,7 @@ func Trace(msg string, ctx ...interface{}) { // log.Debug("msg", "key1", val1) // log.Debug("msg", "key1", val1, "key2", val2) func Debug(msg string, ctx ...interface{}) { - root.write(msg, LvlDebug, ctx, skipLevel) + Root().Write(slog.LevelDebug, msg, ctx...) } // Info is a convenient alias for Root().Info @@ -65,7 +67,7 @@ func Debug(msg string, ctx ...interface{}) { // log.Info("msg", "key1", val1) // log.Info("msg", "key1", val1, "key2", val2) func Info(msg string, ctx ...interface{}) { - root.write(msg, LvlInfo, ctx, skipLevel) + Root().Write(slog.LevelInfo, msg, ctx...) } // Warn is a convenient alias for Root().Warn @@ -78,7 +80,7 @@ func Info(msg string, ctx ...interface{}) { // log.Warn("msg", "key1", val1) // log.Warn("msg", "key1", val1, "key2", val2) func Warn(msg string, ctx ...interface{}) { - root.write(msg, LvlWarn, ctx, skipLevel) + Root().Write(slog.LevelWarn, msg, ctx...) } // Error is a convenient alias for Root().Error @@ -91,7 +93,7 @@ func Warn(msg string, ctx ...interface{}) { // log.Error("msg", "key1", val1) // log.Error("msg", "key1", val1, "key2", val2) func Error(msg string, ctx ...interface{}) { - root.write(msg, LvlError, ctx, skipLevel) + Root().Write(slog.LevelError, msg, ctx...) } // Crit is a convenient alias for Root().Crit @@ -104,15 +106,12 @@ func Error(msg string, ctx ...interface{}) { // log.Crit("msg", "key1", val1) // log.Crit("msg", "key1", val1, "key2", val2) func Crit(msg string, ctx ...interface{}) { - root.write(msg, LvlCrit, ctx, skipLevel) + Root().Write(LevelCrit, msg, ctx...) os.Exit(1) } -// Output is a convenient alias for write, allowing for the modification of -// the calldepth (number of stack frames to skip). -// calldepth influences the reported line number of the log message. -// A calldepth of zero reports the immediate caller of Output. -// Non-zero calldepth skips as many stack frames. -func Output(msg string, lvl Lvl, calldepth int, ctx ...interface{}) { - root.write(msg, lvl, ctx, calldepth+skipLevel) +// New returns a new logger with the given context. +// New is a convenient alias for Root().New +func New(ctx ...interface{}) Logger { + return Root().With(ctx...) } diff --git a/log/syslog.go b/log/syslog.go deleted file mode 100644 index 451d831b6d..0000000000 --- a/log/syslog.go +++ /dev/null @@ -1,58 +0,0 @@ -//go:build !windows && !plan9 -// +build !windows,!plan9 - -package log - -import ( - "log/syslog" - "strings" -) - -// SyslogHandler opens a connection to the system syslog daemon by calling -// syslog.New and writes all records to it. -func SyslogHandler(priority syslog.Priority, tag string, fmtr Format) (Handler, error) { - wr, err := syslog.New(priority, tag) - return sharedSyslog(fmtr, wr, err) -} - -// SyslogNetHandler opens a connection to a log daemon over the network and writes -// all log records to it. -func SyslogNetHandler(net, addr string, priority syslog.Priority, tag string, fmtr Format) (Handler, error) { - wr, err := syslog.Dial(net, addr, priority, tag) - return sharedSyslog(fmtr, wr, err) -} - -func sharedSyslog(fmtr Format, sysWr *syslog.Writer, err error) (Handler, error) { - if err != nil { - return nil, err - } - h := FuncHandler(func(r *Record) error { - var syslogFn = sysWr.Info - switch r.Lvl { - case LvlCrit: - syslogFn = sysWr.Crit - case LvlError: - syslogFn = sysWr.Err - case LvlWarn: - syslogFn = sysWr.Warning - case LvlInfo: - syslogFn = sysWr.Info - case LvlDebug: - syslogFn = sysWr.Debug - case LvlTrace: - syslogFn = func(m string) error { return nil } // There's no syslog level for trace - } - - s := strings.TrimSpace(string(fmtr.Format(r))) - return syslogFn(s) - }) - return LazyHandler(&closingHandler{sysWr, h}), nil -} - -func (m muster) SyslogHandler(priority syslog.Priority, tag string, fmtr Format) Handler { - return must(SyslogHandler(priority, tag, fmtr)) -} - -func (m muster) SyslogNetHandler(net, addr string, priority syslog.Priority, tag string, fmtr Format) Handler { - return must(SyslogNetHandler(net, addr, priority, tag, fmtr)) -} diff --git a/metrics/disk_nop.go b/metrics/disk_nop.go index 58fa4e02f8..41bbe9adb2 100644 --- a/metrics/disk_nop.go +++ b/metrics/disk_nop.go @@ -23,5 +23,5 @@ import "errors" // ReadDiskStats retrieves the disk IO stats belonging to the current process. func ReadDiskStats(stats *DiskStats) error { - return errors.New("Not implemented") + return errors.New("not implemented") } diff --git a/metrics/gauge_float64_test.go b/metrics/gauge_float64_test.go index f0ac7ea5e7..194a18821f 100644 --- a/metrics/gauge_float64_test.go +++ b/metrics/gauge_float64_test.go @@ -36,7 +36,7 @@ func TestGaugeFloat64Snapshot(t *testing.T) { g.Update(47.0) snapshot := g.Snapshot() g.Update(float64(0)) - if v := snapshot.Value(); 47.0 != v { + if v := snapshot.Value(); v != 47.0 { t.Errorf("g.Value(): 47.0 != %v\n", v) } } @@ -45,7 +45,7 @@ func TestGetOrRegisterGaugeFloat64(t *testing.T) { r := NewRegistry() NewRegisteredGaugeFloat64("foo", r).Update(47.0) t.Logf("registry: %v", r) - if g := GetOrRegisterGaugeFloat64("foo", r).Snapshot(); 47.0 != g.Value() { + if g := GetOrRegisterGaugeFloat64("foo", r).Snapshot(); g.Value() != 47.0 { t.Fatal(g) } } diff --git a/metrics/timer.go b/metrics/timer.go index 576ad8aa3e..bb8def82fb 100644 --- a/metrics/timer.go +++ b/metrics/timer.go @@ -106,20 +106,18 @@ func (t *StandardTimer) Time(f func()) { t.Update(time.Since(ts)) } -// Record the duration of an event. +// Record the duration of an event, in nanoseconds. func (t *StandardTimer) Update(d time.Duration) { t.mutex.Lock() defer t.mutex.Unlock() - t.histogram.Update(int64(d)) + t.histogram.Update(d.Nanoseconds()) t.meter.Mark(1) } // Record the duration of an event that started at a time and ends now. +// The record uses nanoseconds. func (t *StandardTimer) UpdateSince(ts time.Time) { - t.mutex.Lock() - defer t.mutex.Unlock() - t.histogram.Update(int64(time.Since(ts))) - t.meter.Mark(1) + t.Update(time.Since(ts)) } // timerSnapshot is a read-only copy of another Timer. diff --git a/miner/miner.go b/miner/miner.go index 82d353a336..5c0ba3f815 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -35,9 +35,35 @@ import ( "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" ) +var ( + commitDepositTxsTimer = metrics.NewRegisteredTimer("miner/commit/deposit/txs", nil) + packFromTxpoolTimer = metrics.NewRegisteredTimer("miner/pack/txpool/txs", nil) + commitTxpoolTxsTimer = metrics.NewRegisteredTimer("miner/commit/txpool/txs", nil) + assembleBlockTimer = metrics.NewRegisteredTimer("miner/assemble/block", nil) + buildBlockTimer = metrics.NewRegisteredTimer("miner/build/block", nil) + + accountReadTimer = metrics.NewRegisteredTimer("miner/account/reads", nil) + accountHashTimer = metrics.NewRegisteredTimer("miner/account/hashes", nil) + accountUpdateTimer = metrics.NewRegisteredTimer("miner/account/updates", nil) + + storageReadTimer = metrics.NewRegisteredTimer("miner/storage/reads", nil) + storageHashTimer = metrics.NewRegisteredTimer("miner/storage/hashes", nil) + storageUpdateTimer = metrics.NewRegisteredTimer("miner/storage/updates", nil) + + innerExecutionTimer = metrics.NewRegisteredTimer("miner/inner/execution", nil) + + snapshotAccountReadTimer = metrics.NewRegisteredTimer("miner/snapshot/account/reads", nil) + snapshotStorageReadTimer = metrics.NewRegisteredTimer("miner/snapshot/storage/reads", nil) + + waitPayloadTimer = metrics.NewRegisteredTimer("miner/wait/payload", nil) + + isBuildBlockInterruptCounter = metrics.NewRegisteredCounter("miner/build/interrupt", nil) +) + // Backend wraps all methods required for mining. Only full node is capable // to offer all the functions here. type Backend interface { diff --git a/miner/miner_test.go b/miner/miner_test.go index 4b07b4769e..427ece7b92 100644 --- a/miner/miner_test.go +++ b/miner/miner_test.go @@ -99,6 +99,7 @@ func (bc *testBlockChain) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) } func TestMiner(t *testing.T) { + t.Parallel() miner, mux, cleanup := createMiner(t) defer cleanup(false) @@ -128,6 +129,7 @@ func TestMiner(t *testing.T) { // An initial FailedEvent should allow mining to stop on a subsequent // downloader StartEvent. func TestMinerDownloaderFirstFails(t *testing.T) { + t.Parallel() miner, mux, cleanup := createMiner(t) defer cleanup(false) @@ -161,6 +163,7 @@ func TestMinerDownloaderFirstFails(t *testing.T) { } func TestMinerStartStopAfterDownloaderEvents(t *testing.T) { + t.Parallel() miner, mux, cleanup := createMiner(t) defer cleanup(false) @@ -185,6 +188,7 @@ func TestMinerStartStopAfterDownloaderEvents(t *testing.T) { } func TestStartWhileDownload(t *testing.T) { + t.Parallel() miner, mux, cleanup := createMiner(t) defer cleanup(false) waitForMiningState(t, miner, false) @@ -199,6 +203,7 @@ func TestStartWhileDownload(t *testing.T) { } func TestStartStopMiner(t *testing.T) { + t.Parallel() miner, _, cleanup := createMiner(t) defer cleanup(false) waitForMiningState(t, miner, false) @@ -209,6 +214,7 @@ func TestStartStopMiner(t *testing.T) { } func TestCloseMiner(t *testing.T) { + t.Parallel() miner, _, cleanup := createMiner(t) defer cleanup(true) waitForMiningState(t, miner, false) @@ -222,6 +228,7 @@ func TestCloseMiner(t *testing.T) { // TestMinerSetEtherbase checks that etherbase becomes set even if mining isn't // possible at the moment func TestMinerSetEtherbase(t *testing.T) { + t.Parallel() miner, mux, cleanup := createMiner(t) defer cleanup(false) miner.Start() diff --git a/miner/ordering_test.go b/miner/ordering_test.go index 59d478274d..e5868d7a06 100644 --- a/miner/ordering_test.go +++ b/miner/ordering_test.go @@ -30,10 +30,12 @@ import ( ) func TestTransactionPriceNonceSortLegacy(t *testing.T) { + t.Parallel() testTransactionPriceNonceSort(t, nil) } func TestTransactionPriceNonceSort1559(t *testing.T) { + t.Parallel() testTransactionPriceNonceSort(t, big.NewInt(0)) testTransactionPriceNonceSort(t, big.NewInt(5)) testTransactionPriceNonceSort(t, big.NewInt(50)) @@ -138,6 +140,7 @@ func testTransactionPriceNonceSort(t *testing.T, baseFee *big.Int) { // Tests that if multiple transactions have the same price, the ones seen earlier // are prioritized to avoid network spam attacks aiming for a specific ordering. func TestTransactionTimeSort(t *testing.T) { + t.Parallel() // Generate a batch of accounts to start with keys := make([]*ecdsa.PrivateKey, 5) for i := 0; i < len(keys); i++ { diff --git a/miner/payload_building.go b/miner/payload_building.go index ed1916e3c0..f3b8382783 100644 --- a/miner/payload_building.go +++ b/miner/payload_building.go @@ -164,6 +164,7 @@ func (payload *Payload) update(r *newPayloadResult, elapsed time.Duration, postF postFunc() } } + buildBlockTimer.Update(elapsed) } } @@ -211,7 +212,10 @@ func (payload *Payload) resolve(onlyFull bool) *engine.ExecutionPayloadEnvelope // Wait the full payload construction. Note it might block // forever if Resolve is called in the meantime which // terminates the background construction process. + start := time.Now() payload.cond.Wait() + waitPayloadTimer.UpdateSince(start) + log.Debug("waitPayloadTimer", "duration", common.PrettyDuration(time.Since(start)), "id", payload.id) } // Now we can signal the building routine to stop. diff --git a/miner/payload_building_test.go b/miner/payload_building_test.go index d9208e7bc2..7eea54a25d 100644 --- a/miner/payload_building_test.go +++ b/miner/payload_building_test.go @@ -39,6 +39,7 @@ func TestBuildPayload(t *testing.T) { } func testBuildPayload(t *testing.T, noTxPool, interrupt bool) { + t.Parallel() var ( db = rawdb.NewMemoryDatabase() recipient = common.HexToAddress("0xdeadbeef") @@ -52,6 +53,8 @@ func testBuildPayload(t *testing.T, noTxPool, interrupt bool) { // definitely be visible. txs := genTxs(1, numInterruptTxs) b.txPool.Add(txs, true, false) + // we wait for the txs to be promoted + time.Sleep(500 * time.Millisecond) } timestamp := uint64(time.Now().Unix()) @@ -134,6 +137,7 @@ func genTxs(startNonce, count uint64) types.Transactions { } func TestPayloadId(t *testing.T) { + t.Parallel() ids := make(map[string]int) for i, tt := range []*BuildPayloadArgs{ { diff --git a/miner/stress/clique/main.go b/miner/stress/clique/main.go index 7b29e63dfc..13336cd83c 100644 --- a/miner/stress/clique/main.go +++ b/miner/stress/clique/main.go @@ -45,7 +45,7 @@ import ( ) func main() { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelInfo, true))) fdlimit.Raise(2048) // Generate a batch of accounts to seal and fund with diff --git a/miner/worker.go b/miner/worker.go index 7b4b2a2676..fade5b084f 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -38,6 +38,7 @@ import ( "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" ) @@ -83,6 +84,17 @@ var ( errBlockInterruptedByResolve = errors.New("payload resolution while building block") ) +var ( + txTotalMeter = metrics.NewRegisteredMeter("miner/tx/total", nil) + txSuccMeter = metrics.NewRegisteredMeter("miner/tx/succ", nil) + txErrUnknownMeter = metrics.NewRegisteredMeter("miner/tx/unknown", nil) + txErrNoncetoolowMeter = metrics.NewRegisteredMeter("miner/tx/err/noncetoolow", nil) + txErrNotenoughgasMeter = metrics.NewRegisteredMeter("miner/tx/err/notenoughgas", nil) + txErrNotenoughblobgasMeter = metrics.NewRegisteredMeter("miner/tx/err/notenoughblobgas", nil) + txErrEvitedMeter = metrics.NewRegisteredMeter("miner/tx/evited", nil) + txErrReplayMeter = metrics.NewRegisteredMeter("miner/tx/replay", nil) +) + // environment is the worker's current environment and holds all // information of the sealing block generation. type environment struct { @@ -732,6 +744,7 @@ func (w *worker) resultLoop() { logs = append(logs, receipt.Logs...) } // Commit block and state to database. + task.state.SetExpectedStateRoot(block.Root()) _, err := w.chain.WriteBlockAndSetHead(block, receipts, logs, task.state, true) if err != nil { log.Error("Failed writing block to chain", "err", err) @@ -871,15 +884,18 @@ func (w *worker) commitTransactions(env *environment, txs *transactionsByPriceAn if ltx == nil { break } + txTotalMeter.Mark(1) // If we don't have enough space for the next transaction, skip the account. if env.gasPool.Gas() < ltx.Gas { log.Trace("Not enough gas left for transaction", "hash", ltx.Hash, "left", env.gasPool.Gas(), "needed", ltx.Gas) txs.Pop() + txErrNotenoughgasMeter.Mark(1) continue } if left := uint64(params.MaxBlobGasPerBlock - env.blobs*params.BlobTxBlobGasPerBlob); left < ltx.BlobGas { log.Trace("Not enough blob gas left for transaction", "hash", ltx.Hash, "left", left, "needed", ltx.BlobGas) txs.Pop() + txErrNotenoughblobgasMeter.Mark(1) continue } // Transaction seems to fit, pull it up from the pool @@ -887,6 +903,7 @@ func (w *worker) commitTransactions(env *environment, txs *transactionsByPriceAn if tx == nil { log.Trace("Ignoring evicted transaction", "hash", ltx.Hash) txs.Pop() + txErrEvitedMeter.Mark(1) continue } // Error may be ignored here. The error has already been checked @@ -898,6 +915,7 @@ func (w *worker) commitTransactions(env *environment, txs *transactionsByPriceAn if tx.Protected() && !w.chainConfig.IsEIP155(env.header.Number) { log.Trace("Ignoring replay protected transaction", "hash", ltx.Hash, "eip155", w.chainConfig.EIP155Block) txs.Pop() + txErrReplayMeter.Mark(1) continue } // Start executing the transaction @@ -909,18 +927,21 @@ func (w *worker) commitTransactions(env *environment, txs *transactionsByPriceAn // New head notification data race between the transaction pool and miner, shift log.Trace("Skipping transaction with low nonce", "hash", ltx.Hash, "sender", from, "nonce", tx.Nonce()) txs.Shift() + txErrNoncetoolowMeter.Mark(1) case errors.Is(err, nil): // Everything ok, collect the logs and shift in the next transaction from the same account coalescedLogs = append(coalescedLogs, logs...) env.tcount++ txs.Shift() + txSuccMeter.Mark(1) default: // Transaction is regarded as invalid, drop all consecutive transactions from // the same sender because of `nonce-too-high` clause. log.Debug("Transaction failed, account skipped", "hash", ltx.Hash, "err", err) txs.Pop() + txErrUnknownMeter.Mark(1) } } if !w.isRunning() && len(coalescedLogs) > 0 { @@ -1090,7 +1111,10 @@ func (w *worker) fillTransactions(interrupt *atomic.Int32, env *environment) err } } + start := time.Now() pending := w.eth.TxPool().Pending(true) + packFromTxpoolTimer.UpdateSince(start) + log.Debug("packFromTxpoolTimer", "duration", common.PrettyDuration(time.Since(start)), "hash", env.header.Hash()) // Split the pending transactions into locals and remotes. localTxs, remoteTxs := make(map[common.Address][]*txpool.LazyTransaction), pending @@ -1104,6 +1128,7 @@ func (w *worker) fillTransactions(interrupt *atomic.Int32, env *environment) err // } // Fill the block with all available pending transactions. + start = time.Now() if len(localTxs) > 0 { txs := newTransactionsByPriceAndNonce(env.signer, localTxs, env.header.BaseFee) if err := w.commitTransactions(env, txs, interrupt); err != nil { @@ -1116,11 +1141,19 @@ func (w *worker) fillTransactions(interrupt *atomic.Int32, env *environment) err return err } } + commitTxpoolTxsTimer.UpdateSince(start) + log.Debug("commitTxpoolTxsTimer", "duration", common.PrettyDuration(time.Since(start)), "hash", env.header.Hash()) return nil } // generateWork generates a sealing block based on the given parameters. func (w *worker) generateWork(genParams *generateParams) *newPayloadResult { + // TODO delete after debug performance metrics + core.DebugInnerExecutionDuration = 0 + defer func() { + core.DebugInnerExecutionDuration = 0 + }() + work, err := w.prepareWork(genParams) if err != nil { return &newPayloadResult{err: err} @@ -1134,9 +1167,9 @@ func (w *worker) generateWork(genParams *generateParams) *newPayloadResult { misc.ApplyPreContractHardFork(work.state) } - // opBNB no need to hard code this contract via hardfork - // misc.EnsureCreate2Deployer(w.chainConfig, work.header.Time, work.state) + misc.EnsureCreate2Deployer(w.chainConfig, work.header.Time, work.state) + start := time.Now() for _, tx := range genParams.txs { from, _ := types.Sender(work.signer, tx) work.state.SetTxContext(tx.Hash(), work.tcount) @@ -1146,6 +1179,8 @@ func (w *worker) generateWork(genParams *generateParams) *newPayloadResult { } work.tcount++ } + commitDepositTxsTimer.UpdateSince(start) + log.Debug("commitDepositTxsTimer", "duration", common.PrettyDuration(time.Since(start)), "parentHash", genParams.parentHash) // forced transactions done, fill rest of block with transactions if !genParams.noTxs { @@ -1161,19 +1196,42 @@ func (w *worker) generateWork(genParams *generateParams) *newPayloadResult { err := w.fillTransactions(interrupt, work) timer.Stop() // don't need timeout interruption any more if errors.Is(err, errBlockInterruptedByTimeout) { - log.Warn("Block building is interrupted", "allowance", common.PrettyDuration(w.newpayloadTimeout)) + log.Warn("Block building is interrupted", "allowance", common.PrettyDuration(w.newpayloadTimeout), "parentHash", genParams.parentHash) + isBuildBlockInterruptCounter.Inc(1) } else if errors.Is(err, errBlockInterruptedByResolve) { - log.Info("Block building got interrupted by payload resolution") + log.Info("Block building got interrupted by payload resolution", "parentHash", genParams.parentHash) + isBuildBlockInterruptCounter.Inc(1) } } if intr := genParams.interrupt; intr != nil && genParams.isUpdate && intr.Load() != commitInterruptNone { return &newPayloadResult{err: errInterruptedUpdate} } + start = time.Now() block, err := w.engine.FinalizeAndAssemble(w.chain, work.header, work.state, work.txs, nil, work.receipts, genParams.withdrawals) if err != nil { return &newPayloadResult{err: err} } + if block.Root() == (common.Hash{}) { + return &newPayloadResult{err: fmt.Errorf("empty block root")} + } + + assembleBlockTimer.UpdateSince(start) + log.Debug("assembleBlockTimer", "duration", common.PrettyDuration(time.Since(start)), "parentHash", genParams.parentHash) + + accountReadTimer.Update(work.state.AccountReads) // Account reads are complete(in commit txs) + storageReadTimer.Update(work.state.StorageReads) // Storage reads are complete(in commit txs) + snapshotAccountReadTimer.Update(work.state.SnapshotAccountReads) // Account reads are complete(in commit txs) + snapshotStorageReadTimer.Update(work.state.SnapshotStorageReads) // Storage reads are complete(in commit txs) + accountUpdateTimer.Update(work.state.AccountUpdates) // Account updates are complete(in FinalizeAndAssemble) + storageUpdateTimer.Update(work.state.StorageUpdates) // Storage updates are complete(in FinalizeAndAssemble) + accountHashTimer.Update(work.state.AccountHashes) // Account hashes are complete(in FinalizeAndAssemble) + storageHashTimer.Update(work.state.StorageHashes) // Storage hashes are complete(in FinalizeAndAssemble) + + innerExecutionTimer.Update(core.DebugInnerExecutionDuration) + + log.Debug("build payload statedb metrics", "parentHash", genParams.parentHash, "accountReads", common.PrettyDuration(work.state.AccountReads), "storageReads", common.PrettyDuration(work.state.StorageReads), "snapshotAccountReads", common.PrettyDuration(work.state.SnapshotAccountReads), "snapshotStorageReads", common.PrettyDuration(work.state.SnapshotStorageReads), "accountUpdates", common.PrettyDuration(work.state.AccountUpdates), "storageUpdates", common.PrettyDuration(work.state.StorageUpdates), "accountHashes", common.PrettyDuration(work.state.AccountHashes), "storageHashes", common.PrettyDuration(work.state.StorageHashes)) + return &newPayloadResult{ block: block, fees: totalFees(block, work.receipts), @@ -1213,7 +1271,7 @@ func (w *worker) commitWork(interrupt *atomic.Int32, timestamp int64) { case err == nil: // The entire block is filled, decrease resubmit interval in case // of current interval is larger than the user-specified one. - w.resubmitAdjustCh <- &intervalAdjust{inc: false} + w.adjustResubmitInterval(&intervalAdjust{inc: false}) case errors.Is(err, errBlockInterruptedByRecommit): // Notify resubmit loop to increase resubmitting interval if the @@ -1223,10 +1281,10 @@ func (w *worker) commitWork(interrupt *atomic.Int32, timestamp int64) { if ratio < 0.1 { ratio = 0.1 } - w.resubmitAdjustCh <- &intervalAdjust{ + w.adjustResubmitInterval(&intervalAdjust{ ratio: ratio, inc: true, - } + }) case errors.Is(err, errBlockInterruptedByNewHead): // If the block building is interrupted by newhead event, discard it @@ -1308,6 +1366,15 @@ func (w *worker) isTTDReached(header *types.Header) bool { return td != nil && ttd != nil && td.Cmp(ttd) >= 0 } +// adjustResubmitInterval adjusts the resubmit interval. +func (w *worker) adjustResubmitInterval(message *intervalAdjust) { + select { + case w.resubmitAdjustCh <- message: + default: + log.Warn("the resubmitAdjustCh is full, discard the message") + } +} + // copyReceipts makes a deep copy of the given receipts. func copyReceipts(receipts []*types.Receipt) []*types.Receipt { result := make([]*types.Receipt, len(receipts)) diff --git a/miner/worker_test.go b/miner/worker_test.go index d02c2dbe83..35ad5ee36b 100644 --- a/miner/worker_test.go +++ b/miner/worker_test.go @@ -161,12 +161,14 @@ func (b *testWorkerBackend) newRandomTx(creation bool) *types.Transaction { func newTestWorker(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, db ethdb.Database, blocks int) (*worker, *testWorkerBackend) { backend := newTestWorkerBackend(t, chainConfig, engine, db, blocks) backend.txPool.Add(pendingTxs, true, false) + time.Sleep(500 * time.Millisecond) // Wait for txs to be promoted w := newWorker(testConfig, chainConfig, engine, backend, new(event.TypeMux), nil, false) w.setEtherbase(testBankAddress) return w, backend } func TestGenerateAndImportBlock(t *testing.T) { + t.Parallel() var ( db = rawdb.NewMemoryDatabase() config = *params.AllCliqueProtocolChanges @@ -196,6 +198,7 @@ func TestGenerateAndImportBlock(t *testing.T) { for i := 0; i < 5; i++ { b.txPool.Add([]*types.Transaction{b.newRandomTx(true)}, true, false) b.txPool.Add([]*types.Transaction{b.newRandomTx(false)}, true, false) + time.Sleep(1 * time.Second) // Wait for txs to be promoted select { case ev := <-sub.Chan(): @@ -210,9 +213,11 @@ func TestGenerateAndImportBlock(t *testing.T) { } func TestEmptyWorkEthash(t *testing.T) { + t.Parallel() testEmptyWork(t, ethashChainConfig, ethash.NewFaker()) } func TestEmptyWorkClique(t *testing.T) { + t.Parallel() testEmptyWork(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } @@ -252,10 +257,12 @@ func testEmptyWork(t *testing.T, chainConfig *params.ChainConfig, engine consens } func TestAdjustIntervalEthash(t *testing.T) { + t.Parallel() testAdjustInterval(t, ethashChainConfig, ethash.NewFaker()) } func TestAdjustIntervalClique(t *testing.T) { + t.Parallel() testAdjustInterval(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } @@ -347,14 +354,17 @@ func testAdjustInterval(t *testing.T, chainConfig *params.ChainConfig, engine co } func TestGetSealingWorkEthash(t *testing.T) { + t.Parallel() testGetSealingWork(t, ethashChainConfig, ethash.NewFaker()) } func TestGetSealingWorkClique(t *testing.T) { + t.Parallel() testGetSealingWork(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } func TestGetSealingWorkPostMerge(t *testing.T) { + t.Parallel() local := new(params.ChainConfig) *local = *ethashChainConfig local.TerminalTotalDifficulty = big.NewInt(0) diff --git a/node/defaults.go b/node/defaults.go index 42d9d4cde0..e7ec278723 100644 --- a/node/defaults.go +++ b/node/defaults.go @@ -74,6 +74,32 @@ var DefaultConfig = Config{ DBEngine: "", // Use whatever exists, will default to Pebble if non-existent and supported } +// DefaultOpBNBConfig contains reasonable default opBNB settings. +var DefaultOpBNBConfig = Config{ + DataDir: DefaultDataDir(), + HTTPHost: DefaultHTTPHost, + HTTPPort: DefaultHTTPPort, + AuthAddr: DefaultAuthHost, + AuthPort: DefaultAuthPort, + AuthVirtualHosts: DefaultAuthVhosts, + HTTPModules: []string{"net", "web3", "engine"}, + HTTPVirtualHosts: []string{"localhost"}, + HTTPTimeouts: rpc.DefaultHTTPTimeouts, + WSHost: DefaultWSHost, + WSPort: DefaultWSPort, + WSModules: []string{"net", "web3", "engine"}, + BatchRequestLimit: 1000, + BatchResponseMaxSize: 25 * 1000 * 1000, + GraphQLVirtualHosts: []string{"localhost"}, + P2P: p2p.Config{ + ListenAddr: ":30303", + MaxPeers: 10, + NAT: nat.Any(), + }, + DBEngine: "", // Use whatever exists, will default to Pebble if non-existent and supported + InsecureUnlockAllowed: true, +} + // DefaultDataDir is the default data directory to use for the databases and other // persistence requirements. func DefaultDataDir() string { diff --git a/node/node.go b/node/node.go index 41c9971fe8..d10639fe5b 100644 --- a/node/node.go +++ b/node/node.go @@ -678,7 +678,7 @@ func (n *Node) IPCEndpoint() string { // HTTPEndpoint returns the URL of the HTTP server. Note that this URL does not // contain the JSON-RPC path prefix set by HTTPPathPrefix. func (n *Node) HTTPEndpoint() string { - return "http://" + n.http.listenAddr() + return "http://" + n.http.listenAddr() //nolint:all } // WSEndpoint returns the current JSON-RPC over WebSocket endpoint. diff --git a/oss-fuzz.sh b/oss-fuzz.sh index 745a5ba7c7..8978de70dd 100644 --- a/oss-fuzz.sh +++ b/oss-fuzz.sh @@ -1,5 +1,5 @@ -#/bin/bash -eu -# Copyright 2020 Google Inc. +#!/bin/bash -eu +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,17 +15,6 @@ # ################################################################################ -# This file is for integration with Google OSS-Fuzz. -# The following ENV variables are available when executing on OSS-fuzz: -# -# /out/ $OUT Directory to store build artifacts (fuzz targets, dictionaries, options files, seed corpus archives). -# /src/ $SRC Directory to checkout source files. -# /work/ $WORK Directory to store intermediate files. -# -# $CC, $CXX, $CCC The C and C++ compiler binaries. -# $CFLAGS, $CXXFLAGS C and C++ compiler flags. -# $LIB_FUZZING_ENGINE C++ compiler argument to link fuzz target against the prebuilt engine library (e.g. libFuzzer). - # This sets the -coverpgk for the coverage report when the corpus is executed through go test coverpkg="github.com/ethereum/go-ethereum/..." @@ -59,26 +48,27 @@ DOG cd - } -function compile_fuzzer { - # Inputs: - # $1: The package to fuzz, within go-ethereum - # $2: The name of the fuzzing function - # $3: The name to give to the final fuzzing-binary - - path=$GOPATH/src/github.com/ethereum/go-ethereum/$1 - func=$2 +function compile_fuzzer() { + package=$1 + function=$2 fuzzer=$3 + file=$4 + + path=$GOPATH/src/$package echo "Building $fuzzer" + cd $path - # Do a coverage-build or a regular build - if [[ $SANITIZER = *coverage* ]]; then - coverbuild $path $func $fuzzer $coverpkg - else - (cd $path && \ - go-fuzz -func $func -o $WORK/$fuzzer.a . && \ - $CXX $CXXFLAGS $LIB_FUZZING_ENGINE $WORK/$fuzzer.a -o $OUT/$fuzzer) - fi + # Install build dependencies + go mod tidy + go get github.com/holiman/gofuzz-shim/testing + + if [[ $SANITIZER == *coverage* ]]; then + coverbuild $path $function $fuzzer $coverpkg + else + gofuzz-shim --func $function --package $package -f $file -o $fuzzer.a + $CXX $CXXFLAGS $LIB_FUZZING_ENGINE $fuzzer.a -o $OUT/$fuzzer + fi ## Check if there exists a seed corpus file corpusfile="${path}/testdata/${fuzzer}_seed_corpus.zip" @@ -87,43 +77,143 @@ function compile_fuzzer { cp $corpusfile $OUT/ echo "Found seed corpus: $corpusfile" fi + cd - } -compile_fuzzer tests/fuzzers/bitutil Fuzz fuzzBitutilCompress -compile_fuzzer tests/fuzzers/bn256 FuzzAdd fuzzBn256Add -compile_fuzzer tests/fuzzers/bn256 FuzzMul fuzzBn256Mul -compile_fuzzer tests/fuzzers/bn256 FuzzPair fuzzBn256Pair -compile_fuzzer tests/fuzzers/runtime Fuzz fuzzVmRuntime -compile_fuzzer tests/fuzzers/keystore Fuzz fuzzKeystore -compile_fuzzer tests/fuzzers/txfetcher Fuzz fuzzTxfetcher -compile_fuzzer tests/fuzzers/rlp Fuzz fuzzRlp -compile_fuzzer tests/fuzzers/trie Fuzz fuzzTrie -compile_fuzzer tests/fuzzers/stacktrie Fuzz fuzzStackTrie -compile_fuzzer tests/fuzzers/difficulty Fuzz fuzzDifficulty -compile_fuzzer tests/fuzzers/abi Fuzz fuzzAbi -compile_fuzzer tests/fuzzers/les Fuzz fuzzLes -compile_fuzzer tests/fuzzers/secp256k1 Fuzz fuzzSecp256k1 -compile_fuzzer tests/fuzzers/vflux FuzzClientPool fuzzClientPool - -compile_fuzzer tests/fuzzers/bls12381 FuzzG1Add fuzz_g1_add -compile_fuzzer tests/fuzzers/bls12381 FuzzG1Mul fuzz_g1_mul -compile_fuzzer tests/fuzzers/bls12381 FuzzG1MultiExp fuzz_g1_multiexp -compile_fuzzer tests/fuzzers/bls12381 FuzzG2Add fuzz_g2_add -compile_fuzzer tests/fuzzers/bls12381 FuzzG2Mul fuzz_g2_mul -compile_fuzzer tests/fuzzers/bls12381 FuzzG2MultiExp fuzz_g2_multiexp -compile_fuzzer tests/fuzzers/bls12381 FuzzPairing fuzz_pairing -compile_fuzzer tests/fuzzers/bls12381 FuzzMapG1 fuzz_map_g1 -compile_fuzzer tests/fuzzers/bls12381 FuzzMapG2 fuzz_map_g2 - -compile_fuzzer tests/fuzzers/bls12381 FuzzCrossG1Add fuzz_cross_g1_add -compile_fuzzer tests/fuzzers/bls12381 FuzzCrossG1MultiExp fuzz_cross_g1_multiexp -compile_fuzzer tests/fuzzers/bls12381 FuzzCrossG2Add fuzz_cross_g2_add -compile_fuzzer tests/fuzzers/bls12381 FuzzCrossPairing fuzz_cross_pairing - -compile_fuzzer tests/fuzzers/snap FuzzARange fuzz_account_range -compile_fuzzer tests/fuzzers/snap FuzzSRange fuzz_storage_range -compile_fuzzer tests/fuzzers/snap FuzzByteCodes fuzz_byte_codes -compile_fuzzer tests/fuzzers/snap FuzzTrieNodes fuzz_trie_nodes - -#TODO: move this to tests/fuzzers, if possible -compile_fuzzer crypto/blake2b Fuzz fuzzBlake2b +go install github.com/holiman/gofuzz-shim@latest +repo=$GOPATH/src/github.com/ethereum/go-ethereum +compile_fuzzer github.com/ethereum/go-ethereum/accounts/abi \ + FuzzABI fuzzAbi \ + $repo/accounts/abi/abifuzzer_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/common/bitutil \ + FuzzEncoder fuzzBitutilEncoder \ + $repo/common/bitutil/compress_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/common/bitutil \ + FuzzDecoder fuzzBitutilDecoder \ + $repo/common/bitutil/compress_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/core/vm/runtime \ + FuzzVmRuntime fuzzVmRuntime\ + $repo/core/vm/runtime/runtime_fuzz_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/core/vm \ + FuzzPrecompiledContracts fuzzPrecompiledContracts\ + $repo/core/vm/contracts_fuzz_test.go,$repo/core/vm/contracts_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/core/types \ + FuzzRLP fuzzRlp \ + $repo/core/types/rlp_fuzzer_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/crypto/blake2b \ + Fuzz fuzzBlake2b \ + $repo/crypto/blake2b/blake2b_f_fuzz_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/accounts/keystore \ + FuzzPassword fuzzKeystore \ + $repo/accounts/keystore/keystore_fuzzing_test.go + +pkg=$repo/trie/ +compile_fuzzer github.com/ethereum/go-ethereum/trie \ + FuzzTrie fuzzTrie \ + $pkg/trie_test.go,$pkg/database_test.go,$pkg/tracer_test.go,$pkg/proof_test.go,$pkg/iterator_test.go,$pkg/sync_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/trie \ + FuzzStackTrie fuzzStackTrie \ + $pkg/stacktrie_fuzzer_test.go,$pkg/iterator_test.go,$pkg/trie_test.go,$pkg/database_test.go,$pkg/tracer_test.go,$pkg/proof_test.go,$pkg/sync_test.go + +#compile_fuzzer tests/fuzzers/snap FuzzARange fuzz_account_range +compile_fuzzer github.com/ethereum/go-ethereum/eth/protocols/snap \ + FuzzARange fuzz_account_range \ + $repo/eth/protocols/snap/handler_fuzzing_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/eth/protocols/snap \ + FuzzSRange fuzz_storage_range \ + $repo/eth/protocols/snap/handler_fuzzing_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/eth/protocols/snap \ + FuzzByteCodes fuzz_byte_codes \ + $repo/eth/protocols/snap/handler_fuzzing_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/eth/protocols/snap \ + FuzzTrieNodes fuzz_trie_nodes\ + $repo/eth/protocols/snap/handler_fuzzing_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bn256 \ + FuzzAdd fuzzBn256Add\ + $repo/tests/fuzzers/bn256/bn256_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bn256 \ + FuzzMul fuzzBn256Mul \ + $repo/tests/fuzzers/bn256/bn256_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bn256 \ + FuzzPair fuzzBn256Pair \ + $repo/tests/fuzzers/bn256/bn256_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/txfetcher \ + Fuzz fuzzTxfetcher \ + $repo/tests/fuzzers/txfetcher/txfetcher_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzG1Add fuzz_g1_add\ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzG1Mul fuzz_g1_mul\ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzG1MultiExp fuzz_g1_multiexp \ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzG2Add fuzz_g2_add \ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzG2Mul fuzz_g2_mul\ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzG2MultiExp fuzz_g2_multiexp \ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzPairing fuzz_pairing \ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzMapG1 fuzz_map_g1\ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzMapG2 fuzz_map_g2 \ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzCrossG1Add fuzz_cross_g1_add \ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzCrossG1MultiExp fuzz_cross_g1_multiexp \ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzCrossG2Add fuzz_cross_g2_add \ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \ + FuzzCrossPairing fuzz_cross_pairing\ + $repo/tests/fuzzers/bls12381/bls12381_test.go + +compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/secp256k1 \ + Fuzz fuzzSecp256k1\ + $repo/tests/fuzzers/secp256k1/secp_test.go + + +#compile_fuzzer tests/fuzzers/vflux FuzzClientPool fuzzClientPool +#compile_fuzzer tests/fuzzers/difficulty Fuzz fuzzDifficulty +#compile_fuzzer tests/fuzzers/les Fuzz fuzzLes + diff --git a/p2p/discover/table.go b/p2p/discover/table.go index f476d2079f..2b7a28708b 100644 --- a/p2p/discover/table.go +++ b/p2p/discover/table.go @@ -23,6 +23,7 @@ package discover import ( + "context" crand "crypto/rand" "encoding/binary" "fmt" @@ -330,8 +331,10 @@ func (tab *Table) loadSeedNodes() { seeds = append(seeds, tab.nursery...) for i := range seeds { seed := seeds[i] - age := log.Lazy{Fn: func() interface{} { return time.Since(tab.db.LastPongReceived(seed.ID(), seed.IP())) }} - tab.log.Trace("Found seed node in database", "id", seed.ID(), "addr", seed.addr(), "age", age) + if tab.log.Enabled(context.Background(), log.LevelTrace) { + age := time.Since(tab.db.LastPongReceived(seed.ID(), seed.IP())) + tab.log.Trace("Found seed node in database", "id", seed.ID(), "addr", seed.addr(), "age", age) + } tab.addSeenNode(seed) } } @@ -456,6 +459,26 @@ func (tab *Table) findnodeByID(target enode.ID, nresults int, preferLive bool) * return nodes } +// appendLiveNodes adds nodes at the given distance to the result slice. +func (tab *Table) appendLiveNodes(dist uint, result []*enode.Node) []*enode.Node { + if dist > 256 { + return result + } + if dist == 0 { + return append(result, tab.self()) + } + + tab.mutex.Lock() + defer tab.mutex.Unlock() + for _, n := range tab.bucketAtDistance(int(dist)).entries { + if n.livenessChecks >= 1 { + node := n.Node // avoid handing out pointer to struct field + result = append(result, &node) + } + } + return result +} + // len returns the number of nodes in the table. func (tab *Table) len() (n int) { tab.mutex.Lock() diff --git a/p2p/discover/table_test.go b/p2p/discover/table_test.go index 2781dd4225..3ba3422251 100644 --- a/p2p/discover/table_test.go +++ b/p2p/discover/table_test.go @@ -199,7 +199,7 @@ func TestTable_findnodeByID(t *testing.T) { tab, db := newTestTable(transport) defer db.Close() defer tab.close() - fillTable(tab, test.All) + fillTable(tab, test.All, true) // check that closest(Target, N) returns nodes result := tab.findnodeByID(test.Target, test.N, false).entries diff --git a/p2p/discover/table_util_test.go b/p2p/discover/table_util_test.go index 8f3813bdcf..d6309dfd6c 100644 --- a/p2p/discover/table_util_test.go +++ b/p2p/discover/table_util_test.go @@ -109,8 +109,11 @@ func fillBucket(tab *Table, n *node) (last *node) { // fillTable adds nodes the table to the end of their corresponding bucket // if the bucket is not full. The caller must not hold tab.mutex. -func fillTable(tab *Table, nodes []*node) { +func fillTable(tab *Table, nodes []*node, setLive bool) { for _, n := range nodes { + if setLive { + n.livenessChecks = 1 + } tab.addSeenNode(n) } } diff --git a/p2p/discover/v4_lookup_test.go b/p2p/discover/v4_lookup_test.go index 1f9ad69d0a..8867a5a8ac 100644 --- a/p2p/discover/v4_lookup_test.go +++ b/p2p/discover/v4_lookup_test.go @@ -40,7 +40,7 @@ func TestUDPv4_Lookup(t *testing.T) { } // Seed table with initial node. - fillTable(test.table, []*node{wrapNode(lookupTestnet.node(256, 0))}) + fillTable(test.table, []*node{wrapNode(lookupTestnet.node(256, 0))}, true) // Start the lookup. resultC := make(chan []*enode.Node, 1) @@ -74,7 +74,7 @@ func TestUDPv4_LookupIterator(t *testing.T) { for i := range lookupTestnet.dists[256] { bootnodes[i] = wrapNode(lookupTestnet.node(256, i)) } - fillTable(test.table, bootnodes) + fillTable(test.table, bootnodes, true) go serveTestnet(test, lookupTestnet) // Create the iterator and collect the nodes it yields. @@ -109,7 +109,7 @@ func TestUDPv4_LookupIteratorClose(t *testing.T) { for i := range lookupTestnet.dists[256] { bootnodes[i] = wrapNode(lookupTestnet.node(256, i)) } - fillTable(test.table, bootnodes) + fillTable(test.table, bootnodes, true) go serveTestnet(test, lookupTestnet) it := test.udp.RandomNodes() diff --git a/p2p/discover/v4_udp_test.go b/p2p/discover/v4_udp_test.go index 5add9cefa1..361e379626 100644 --- a/p2p/discover/v4_udp_test.go +++ b/p2p/discover/v4_udp_test.go @@ -269,7 +269,7 @@ func TestUDPv4_findnode(t *testing.T) { } nodes.push(n, numCandidates) } - fillTable(test.table, nodes.entries) + fillTable(test.table, nodes.entries, false) // ensure there's a bond with the test node, // findnode won't be accepted otherwise. @@ -557,12 +557,7 @@ func startLocalhostV4(t *testing.T, cfg Config) *UDPv4 { // Prefix logs with node ID. lprefix := fmt.Sprintf("(%s)", ln.ID().TerminalString()) - lfmt := log.TerminalFormat(false) - cfg.Log = testlog.Logger(t, log.LvlTrace) - cfg.Log.SetHandler(log.FuncHandler(func(r *log.Record) error { - t.Logf("%s %s", lprefix, lfmt.Format(r)) - return nil - })) + cfg.Log = testlog.Logger(t, log.LevelTrace).With("node-id", lprefix) // Listen. socket, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IP{127, 0, 0, 1}}) diff --git a/p2p/discover/v5_udp.go b/p2p/discover/v5_udp.go index 6ba7a90618..8b3e33d37c 100644 --- a/p2p/discover/v5_udp.go +++ b/p2p/discover/v5_udp.go @@ -851,6 +851,7 @@ func (t *UDPv5) handleFindnode(p *v5wire.Findnode, fromID enode.ID, fromAddr *ne // collectTableNodes creates a FINDNODE result set for the given distances. func (t *UDPv5) collectTableNodes(rip net.IP, distances []uint, limit int) []*enode.Node { + var bn []*enode.Node var nodes []*enode.Node var processed = make(map[uint]struct{}) for _, dist := range distances { @@ -859,21 +860,11 @@ func (t *UDPv5) collectTableNodes(rip net.IP, distances []uint, limit int) []*en if seen || dist > 256 { continue } - - // Get the nodes. - var bn []*enode.Node - if dist == 0 { - bn = []*enode.Node{t.Self()} - } else if dist <= 256 { - t.tab.mutex.Lock() - bn = unwrapNodes(t.tab.bucketAtDistance(int(dist)).entries) - t.tab.mutex.Unlock() - } processed[dist] = struct{}{} - // Apply some pre-checks to avoid sending invalid nodes. - for _, n := range bn { - // TODO livenessChecks > 1 + for _, n := range t.tab.appendLiveNodes(dist, bn[:0]) { + // Apply some pre-checks to avoid sending invalid nodes. + // Note liveness is checked by appendLiveNodes. if netutil.CheckRelayIP(rip, n.IP()) != nil { continue } diff --git a/p2p/discover/v5_udp_test.go b/p2p/discover/v5_udp_test.go index 880b71a991..eaa969ea8b 100644 --- a/p2p/discover/v5_udp_test.go +++ b/p2p/discover/v5_udp_test.go @@ -79,12 +79,7 @@ func startLocalhostV5(t *testing.T, cfg Config) *UDPv5 { // Prefix logs with node ID. lprefix := fmt.Sprintf("(%s)", ln.ID().TerminalString()) - lfmt := log.TerminalFormat(false) - cfg.Log = testlog.Logger(t, log.LvlTrace) - cfg.Log.SetHandler(log.FuncHandler(func(r *log.Record) error { - t.Logf("%s %s", lprefix, lfmt.Format(r)) - return nil - })) + cfg.Log = testlog.Logger(t, log.LevelTrace).With("node-id", lprefix) // Listen. socket, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IP{127, 0, 0, 1}}) @@ -164,9 +159,9 @@ func TestUDPv5_findnodeHandling(t *testing.T) { nodes253 := nodesAtDistance(test.table.self().ID(), 253, 16) nodes249 := nodesAtDistance(test.table.self().ID(), 249, 4) nodes248 := nodesAtDistance(test.table.self().ID(), 248, 10) - fillTable(test.table, wrapNodes(nodes253)) - fillTable(test.table, wrapNodes(nodes249)) - fillTable(test.table, wrapNodes(nodes248)) + fillTable(test.table, wrapNodes(nodes253), true) + fillTable(test.table, wrapNodes(nodes249), true) + fillTable(test.table, wrapNodes(nodes248), true) // Requesting with distance zero should return the node's own record. test.packetIn(&v5wire.Findnode{ReqID: []byte{0}, Distances: []uint{0}}) @@ -594,7 +589,7 @@ func TestUDPv5_lookup(t *testing.T) { // Seed table with initial node. initialNode := lookupTestnet.node(256, 0) - fillTable(test.table, []*node{wrapNode(initialNode)}) + fillTable(test.table, []*node{wrapNode(initialNode)}, true) // Start the lookup. resultC := make(chan []*enode.Node, 1) diff --git a/p2p/msgrate/msgrate.go b/p2p/msgrate/msgrate.go index 4f08792242..de1a3177db 100644 --- a/p2p/msgrate/msgrate.go +++ b/p2p/msgrate/msgrate.go @@ -18,6 +18,7 @@ package msgrate import ( + "context" "errors" "math" "sort" @@ -410,7 +411,9 @@ func (t *Trackers) tune() { t.tuned = time.Now() t.log.Debug("Recalculated msgrate QoS values", "rtt", t.roundtrip, "confidence", t.confidence, "ttl", t.targetTimeout(), "next", t.tuned.Add(t.roundtrip)) - t.log.Trace("Debug dump of mean capacities", "caps", log.Lazy{Fn: t.meanCapacities}) + if t.log.Enabled(context.Background(), log.LevelTrace) { + t.log.Trace("Debug dump of mean capacities", "caps", t.meanCapacities()) + } } // detune reduces the tracker's confidence in order to make fresh measurements diff --git a/p2p/nat/nat.go b/p2p/nat/nat.go index 61b6922988..2aa1f85585 100644 --- a/p2p/nat/nat.go +++ b/p2p/nat/nat.go @@ -61,12 +61,12 @@ type Interface interface { // "pmp:192.168.0.1" uses NAT-PMP with the given gateway address func Parse(spec string) (Interface, error) { var ( - parts = strings.SplitN(spec, ":", 2) - mech = strings.ToLower(parts[0]) - ip net.IP + before, after, found = strings.Cut(spec, ":") + mech = strings.ToLower(before) + ip net.IP ) - if len(parts) > 1 { - ip = net.ParseIP(parts[1]) + if found { + ip = net.ParseIP(after) if ip == nil { return nil, errors.New("invalid IP address") } @@ -86,7 +86,7 @@ func Parse(spec string) (Interface, error) { case "pmp", "natpmp", "nat-pmp": return PMP(ip), nil default: - return nil, fmt.Errorf("unknown mechanism %q", parts[0]) + return nil, fmt.Errorf("unknown mechanism %q", before) } } diff --git a/p2p/rlpx/rlpx_test.go b/p2p/rlpx/rlpx_test.go index 28759f2b49..136cb1b5bf 100644 --- a/p2p/rlpx/rlpx_test.go +++ b/p2p/rlpx/rlpx_test.go @@ -421,7 +421,7 @@ func BenchmarkThroughput(b *testing.B) { } conn2.SetSnappy(true) if err := <-handshakeDone; err != nil { - b.Fatal("server hanshake error:", err) + b.Fatal("server handshake error:", err) } // Read N messages. diff --git a/p2p/simulations/adapters/exec.go b/p2p/simulations/adapters/exec.go index 1d812514de..63cc4936c1 100644 --- a/p2p/simulations/adapters/exec.go +++ b/p2p/simulations/adapters/exec.go @@ -34,13 +34,14 @@ import ( "syscall" "time" - "github.com/docker/docker/pkg/reexec" + "github.com/ethereum/go-ethereum/internal/reexec" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/rpc" "github.com/gorilla/websocket" + "golang.org/x/exp/slog" ) func init() { @@ -375,9 +376,11 @@ type execNodeConfig struct { func initLogging() { // Initialize the logging by default first. - glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.LogfmtFormat())) - glogger.Verbosity(log.LvlInfo) - log.Root().SetHandler(glogger) + var innerHandler slog.Handler + innerHandler = slog.NewTextHandler(os.Stderr, nil) + glogger := log.NewGlogHandler(innerHandler) + glogger.Verbosity(log.LevelInfo) + log.SetDefault(log.NewLogger(glogger)) confEnv := os.Getenv(envNodeConfig) if confEnv == "" { @@ -395,14 +398,15 @@ func initLogging() { } writer = logWriter } - var verbosity = log.LvlInfo - if conf.Node.LogVerbosity <= log.LvlTrace && conf.Node.LogVerbosity >= log.LvlCrit { - verbosity = conf.Node.LogVerbosity + var verbosity = log.LevelInfo + if conf.Node.LogVerbosity <= log.LevelTrace && conf.Node.LogVerbosity >= log.LevelCrit { + verbosity = log.FromLegacyLevel(int(conf.Node.LogVerbosity)) } // Reinitialize the logger - glogger = log.NewGlogHandler(log.StreamHandler(writer, log.TerminalFormat(true))) + innerHandler = log.NewTerminalHandler(writer, true) + glogger = log.NewGlogHandler(innerHandler) glogger.Verbosity(verbosity) - log.Root().SetHandler(glogger) + log.SetDefault(log.NewLogger(glogger)) } // execP2PNode starts a simulation node when the current binary is executed with diff --git a/p2p/simulations/adapters/types.go b/p2p/simulations/adapters/types.go index 3b4e05a901..fb8463d221 100644 --- a/p2p/simulations/adapters/types.go +++ b/p2p/simulations/adapters/types.go @@ -25,8 +25,8 @@ import ( "os" "strconv" - "github.com/docker/docker/pkg/reexec" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/reexec" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" @@ -34,6 +34,7 @@ import ( "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/rpc" "github.com/gorilla/websocket" + "golang.org/x/exp/slog" ) // Node represents a node in a simulation network which is created by a @@ -129,7 +130,7 @@ type NodeConfig struct { // LogVerbosity is the log verbosity of the p2p node at runtime. // // The default verbosity is INFO. - LogVerbosity log.Lvl + LogVerbosity slog.Level } // nodeConfigJSON is used to encode and decode NodeConfig as JSON by encoding @@ -197,7 +198,7 @@ func (n *NodeConfig) UnmarshalJSON(data []byte) error { n.Port = confJSON.Port n.EnableMsgEvents = confJSON.EnableMsgEvents n.LogFile = confJSON.LogFile - n.LogVerbosity = log.Lvl(confJSON.LogVerbosity) + n.LogVerbosity = slog.Level(confJSON.LogVerbosity) return nil } diff --git a/p2p/simulations/examples/ping-pong.go b/p2p/simulations/examples/ping-pong.go index f6cf5113a6..70b35ad777 100644 --- a/p2p/simulations/examples/ping-pong.go +++ b/p2p/simulations/examples/ping-pong.go @@ -41,7 +41,7 @@ func main() { flag.Parse() // set the log level to Trace - log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(false)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelTrace, false))) // register a single ping-pong service services := map[string]adapters.LifecycleConstructor{ diff --git a/p2p/simulations/http.go b/p2p/simulations/http.go index 7a4f70e9b0..34521b4778 100644 --- a/p2p/simulations/http.go +++ b/p2p/simulations/http.go @@ -479,12 +479,12 @@ func (s *Server) StreamNetworkEvents(w http.ResponseWriter, req *http.Request) { func NewMsgFilters(filterParam string) (MsgFilters, error) { filters := make(MsgFilters) for _, filter := range strings.Split(filterParam, "-") { - protoCodes := strings.SplitN(filter, ":", 2) - if len(protoCodes) != 2 || protoCodes[0] == "" || protoCodes[1] == "" { + proto, codes, found := strings.Cut(filter, ":") + if !found || proto == "" || codes == "" { return nil, fmt.Errorf("invalid message filter: %s", filter) } - proto := protoCodes[0] - for _, code := range strings.Split(protoCodes[1], ",") { + + for _, code := range strings.Split(codes, ",") { if code == "*" || code == "-1" { filters[MsgFilter{Proto: proto, Code: -1}] = struct{}{} continue diff --git a/p2p/simulations/http_test.go b/p2p/simulations/http_test.go index 05e43238ab..c53a49797b 100644 --- a/p2p/simulations/http_test.go +++ b/p2p/simulations/http_test.go @@ -37,14 +37,14 @@ import ( "github.com/ethereum/go-ethereum/p2p/simulations/adapters" "github.com/ethereum/go-ethereum/rpc" "github.com/mattn/go-colorable" + "golang.org/x/exp/slog" ) func TestMain(m *testing.M) { loglevel := flag.Int("loglevel", 2, "verbosity of logs") flag.Parse() - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(colorable.NewColorableStderr(), slog.Level(*loglevel), true))) os.Exit(m.Run()) } diff --git a/p2p/simulations/network_test.go b/p2p/simulations/network_test.go index ab8cf19462..4ed1e4e6c3 100644 --- a/p2p/simulations/network_test.go +++ b/p2p/simulations/network_test.go @@ -683,7 +683,7 @@ func triggerChecks(ctx context.Context, ids []enode.ID, trigger chan enode.ID, i } } -// \todo: refactor to implement shapshots +// \todo: refactor to implement snapshots // and connect configuration methods once these are moved from // swarm/network/simulations/connect.go func BenchmarkMinimalService(b *testing.B) { diff --git a/params/bootnodes.go b/params/bootnodes.go index 985a948b3f..56a25f1cfc 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -44,6 +44,12 @@ var MainnetBootnodes = []string{ "enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303", // bootnode-hetzner-fsn } +var OPMainnetBootnodes = []string{ + "enode://ca2774c3c401325850b2477fd7d0f27911efbf79b1e8b335066516e2bd8c4c9e0ba9696a94b1cb030a88eac582305ff55e905e64fb77fe0edcd70a4e5296d3ec@34.65.175.185:30305", + "enode://dd751a9ef8912be1bfa7a5e34e2c3785cc5253110bd929f385e07ba7ac19929fb0e0c5d93f77827291f4da02b2232240fbc47ea7ce04c46e333e452f8656b667@34.65.107.0:30305", + "enode://c5d289b56a77b6a2342ca29956dfd07aadf45364dde8ab20d1dc4efd4d1bc6b4655d902501daea308f4d8950737a4e93a4dfedd17b49cd5760ffd127837ca965@34.65.202.239:30305", +} + // HoleskyBootnodes are the enode URLs of the P2P bootstrap nodes running on the // Holesky test network. var HoleskyBootnodes = []string{ @@ -63,6 +69,12 @@ var SepoliaBootnodes = []string{ "enode://9e9492e2e8836114cc75f5b929784f4f46c324ad01daf87d956f98b3b6c5fcba95524d6e5cf9861dc96a2c8a171ea7105bb554a197455058de185fa870970c7c@138.68.123.152:30303", // sepolia-bootnode-1-ams3 } +var OPSepoliaBootnodes = []string{ + "enode://2bd2e657bb3c8efffb8ff6db9071d9eb7be70d7c6d7d980ff80fc93b2629675c5f750bc0a5ef27cd788c2e491b8795a7e9a4a6e72178c14acc6753c0e5d77ae4@34.65.205.244:30305", + "enode://db8e1cab24624cc62fc35dbb9e481b88a9ef0116114cd6e41034c55b5b4f18755983819252333509bd8e25f6b12aadd6465710cd2e956558faf17672cce7551f@34.65.173.88:30305", + "enode://bfda2e0110cfd0f4c9f7aa5bf5ec66e6bd18f71a2db028d36b8bf8b0d6fdb03125c1606a6017b31311d96a36f5ef7e1ad11604d7a166745e6075a715dfa67f8a@34.65.229.245:30305", +} + // GoerliBootnodes are the enode URLs of the P2P bootstrap nodes running on the // Görli test network. var GoerliBootnodes = []string{ @@ -82,20 +94,25 @@ var GoerliBootnodes = []string{ var V5Bootnodes = []string{ // Teku team's bootnode - "enr:-KG4QOtcP9X1FbIMOe17QNMKqDxCpm14jcX5tiOE4_TyMrFqbmhPZHK_ZPG2Gxb1GE2xdtodOfx9-cgvNtxnRyHEmC0ghGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQDE8KdiXNlY3AyNTZrMaEDhpehBDbZjM_L9ek699Y7vhUJ-eAdMyQW_Fil522Y0fODdGNwgiMog3VkcIIjKA", - "enr:-KG4QDyytgmE4f7AnvW-ZaUOIi9i79qX4JwjRAiXBZCU65wOfBu-3Nb5I7b_Rmg3KCOcZM_C3y5pg7EBU5XGrcLTduQEhGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQ2_DUbiXNlY3AyNTZrMaEDKnz_-ps3UUOfHWVYaskI5kWYO_vtYMGYCQRAR3gHDouDdGNwgiMog3VkcIIjKA", + "enr:-KG4QMOEswP62yzDjSwWS4YEjtTZ5PO6r65CPqYBkgTTkrpaedQ8uEUo1uMALtJIvb2w_WWEVmg5yt1UAuK1ftxUU7QDhGV0aDKQu6TalgMAAAD__________4JpZIJ2NIJpcIQEnfA2iXNlY3AyNTZrMaEDfol8oLr6XJ7FsdAYE7lpJhKMls4G_v6qQOGKJUWGb_uDdGNwgiMog3VkcIIjKA", // # 4.157.240.54 | azure-us-east-virginia + "enr:-KG4QF4B5WrlFcRhUU6dZETwY5ZzAXnA0vGC__L1Kdw602nDZwXSTs5RFXFIFUnbQJmhNGVU6OIX7KVrCSTODsz1tK4DhGV0aDKQu6TalgMAAAD__________4JpZIJ2NIJpcIQExNYEiXNlY3AyNTZrMaECQmM9vp7KhaXhI-nqL_R0ovULLCFSFTa9CPPSdb1zPX6DdGNwgiMog3VkcIIjKA", // 4.196.214.4 | azure-au-east-sydney // Prylab team's bootnodes - "enr:-Ku4QImhMc1z8yCiNJ1TyUxdcfNucje3BGwEHzodEZUan8PherEo4sF7pPHPSIB1NNuSg5fZy7qFsjmUKs2ea1Whi0EBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQOVphkDqal4QzPMksc5wnpuC3gvSC8AfbFOnZY_On34wIN1ZHCCIyg", - "enr:-Ku4QP2xDnEtUXIjzJ_DhlCRN9SN99RYQPJL92TMlSv7U5C1YnYLjwOQHgZIUXw6c-BvRg2Yc2QsZxxoS_pPRVe0yK8Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMeFF5GrS7UZpAH2Ly84aLK-TyvH-dRo0JM1i8yygH50YN1ZHCCJxA", - "enr:-Ku4QPp9z1W4tAO8Ber_NQierYaOStqhDqQdOPY3bB3jDgkjcbk6YrEnVYIiCBbTxuar3CzS528d2iE7TdJsrL-dEKoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMw5fqqkw2hHC4F5HZZDPsNmPdB1Gi8JPQK7pRc9XHh-oN1ZHCCKvg", + "enr:-Ku4QImhMc1z8yCiNJ1TyUxdcfNucje3BGwEHzodEZUan8PherEo4sF7pPHPSIB1NNuSg5fZy7qFsjmUKs2ea1Whi0EBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQOVphkDqal4QzPMksc5wnpuC3gvSC8AfbFOnZY_On34wIN1ZHCCIyg", // 18.223.219.100 | aws-us-east-2-ohio + "enr:-Ku4QP2xDnEtUXIjzJ_DhlCRN9SN99RYQPJL92TMlSv7U5C1YnYLjwOQHgZIUXw6c-BvRg2Yc2QsZxxoS_pPRVe0yK8Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMeFF5GrS7UZpAH2Ly84aLK-TyvH-dRo0JM1i8yygH50YN1ZHCCJxA", // 18.223.219.100 | aws-us-east-2-ohio + "enr:-Ku4QPp9z1W4tAO8Ber_NQierYaOStqhDqQdOPY3bB3jDgkjcbk6YrEnVYIiCBbTxuar3CzS528d2iE7TdJsrL-dEKoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQMw5fqqkw2hHC4F5HZZDPsNmPdB1Gi8JPQK7pRc9XHh-oN1ZHCCKvg", // 18.223.219.100 | aws-us-east-2-ohio // Lighthouse team's bootnodes - "enr:-IS4QLkKqDMy_ExrpOEWa59NiClemOnor-krjp4qoeZwIw2QduPC-q7Kz4u1IOWf3DDbdxqQIgC4fejavBOuUPy-HE4BgmlkgnY0gmlwhCLzAHqJc2VjcDI1NmsxoQLQSJfEAHZApkm5edTCZ_4qps_1k_ub2CxHFxi-gr2JMIN1ZHCCIyg", - "enr:-IS4QDAyibHCzYZmIYZCjXwU9BqpotWmv2BsFlIq1V31BwDDMJPFEbox1ijT5c2Ou3kvieOKejxuaCqIcjxBjJ_3j_cBgmlkgnY0gmlwhAMaHiCJc2VjcDI1NmsxoQJIdpj_foZ02MXz4It8xKD7yUHTBx7lVFn3oeRP21KRV4N1ZHCCIyg", + "enr:-Le4QPUXJS2BTORXxyx2Ia-9ae4YqA_JWX3ssj4E_J-3z1A-HmFGrU8BpvpqhNabayXeOZ2Nq_sbeDgtzMJpLLnXFgAChGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISsaa0Zg2lwNpAkAIkHAAAAAPA8kv_-awoTiXNlY3AyNTZrMaEDHAD2JKYevx89W0CcFJFiskdcEzkH_Wdv9iW42qLK79ODdWRwgiMohHVkcDaCI4I", // 172.105.173.25 | linode-au-sydney + "enr:-Le4QLHZDSvkLfqgEo8IWGG96h6mxwe_PsggC20CL3neLBjfXLGAQFOPSltZ7oP6ol54OvaNqO02Rnvb8YmDR274uq8ChGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISLosQxg2lwNpAqAX4AAAAAAPA8kv_-ax65iXNlY3AyNTZrMaEDBJj7_dLFACaxBfaI8KZTh_SSJUjhyAyfshimvSqo22WDdWRwgiMohHVkcDaCI4I", // 139.162.196.49 | linode-uk-london + "enr:-Le4QH6LQrusDbAHPjU_HcKOuMeXfdEB5NJyXgHWFadfHgiySqeDyusQMvfphdYWOzuSZO9Uq2AMRJR5O4ip7OvVma8BhGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISLY9ncg2lwNpAkAh8AgQIBAAAAAAAAAAmXiXNlY3AyNTZrMaECDYCZTZEksF-kmgPholqgVt8IXr-8L7Nu7YrZ7HUpgxmDdWRwgiMohHVkcDaCI4I", // 139.99.217.220 | ovh-au-sydney + "enr:-Le4QIqLuWybHNONr933Lk0dcMmAB5WgvGKRyDihy1wHDIVlNuuztX62W51voT4I8qD34GcTEOTmag1bcdZ_8aaT4NUBhGV0aDKQtTA_KgEAAAAAIgEAAAAAAIJpZIJ2NIJpcISLY04ng2lwNpAkAh8AgAIBAAAAAAAAAA-fiXNlY3AyNTZrMaEDscnRV6n1m-D9ID5UsURk0jsoKNXt1TIrj8uKOGW6iluDdWRwgiMohHVkcDaCI4I", // 139.99.78.39 | ovh-singapore // EF bootnodes - "enr:-Ku4QHqVeJ8PPICcWk1vSn_XcSkjOkNiTg6Fmii5j6vUQgvzMc9L1goFnLKgXqBJspJjIsB91LTOleFmyWWrFVATGngBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhAMRHkWJc2VjcDI1NmsxoQKLVXFOhp2uX6jeT0DvvDpPcU8FWMjQdR4wMuORMhpX24N1ZHCCIyg", - "enr:-Ku4QG-2_Md3sZIAUebGYT6g0SMskIml77l6yR-M_JXc-UdNHCmHQeOiMLbylPejyJsdAPsTHJyjJB2sYGDLe0dn8uYBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhBLY-NyJc2VjcDI1NmsxoQORcM6e19T1T9gi7jxEZjk_sjVLGFscUNqAY9obgZaxbIN1ZHCCIyg", - "enr:-Ku4QPn5eVhcoF1opaFEvg1b6JNFD2rqVkHQ8HApOKK61OIcIXD127bKWgAtbwI7pnxx6cDyk_nI88TrZKQaGMZj0q0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDayLMaJc2VjcDI1NmsxoQK2sBOLGcUb4AwuYzFuAVCaNHA-dy24UuEKkeFNgCVCsIN1ZHCCIyg", - "enr:-Ku4QEWzdnVtXc2Q0ZVigfCGggOVB2Vc1ZCPEc6j21NIFLODSJbvNaef1g4PxhPwl_3kax86YPheFUSLXPRs98vvYsoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDZBrP2Jc2VjcDI1NmsxoQM6jr8Rb1ktLEsVcKAPa08wCsKUmvoQ8khiOl_SLozf9IN1ZHCCIyg", + "enr:-Ku4QHqVeJ8PPICcWk1vSn_XcSkjOkNiTg6Fmii5j6vUQgvzMc9L1goFnLKgXqBJspJjIsB91LTOleFmyWWrFVATGngBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhAMRHkWJc2VjcDI1NmsxoQKLVXFOhp2uX6jeT0DvvDpPcU8FWMjQdR4wMuORMhpX24N1ZHCCIyg", // 3.17.30.69 | aws-us-east-2-ohio + "enr:-Ku4QG-2_Md3sZIAUebGYT6g0SMskIml77l6yR-M_JXc-UdNHCmHQeOiMLbylPejyJsdAPsTHJyjJB2sYGDLe0dn8uYBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhBLY-NyJc2VjcDI1NmsxoQORcM6e19T1T9gi7jxEZjk_sjVLGFscUNqAY9obgZaxbIN1ZHCCIyg", // 18.216.248.220 | aws-us-east-2-ohio + "enr:-Ku4QPn5eVhcoF1opaFEvg1b6JNFD2rqVkHQ8HApOKK61OIcIXD127bKWgAtbwI7pnxx6cDyk_nI88TrZKQaGMZj0q0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDayLMaJc2VjcDI1NmsxoQK2sBOLGcUb4AwuYzFuAVCaNHA-dy24UuEKkeFNgCVCsIN1ZHCCIyg", // 54.178.44.198 | aws-ap-northeast-1-tokyo + "enr:-Ku4QEWzdnVtXc2Q0ZVigfCGggOVB2Vc1ZCPEc6j21NIFLODSJbvNaef1g4PxhPwl_3kax86YPheFUSLXPRs98vvYsoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhDZBrP2Jc2VjcDI1NmsxoQM6jr8Rb1ktLEsVcKAPa08wCsKUmvoQ8khiOl_SLozf9IN1ZHCCIyg", // 54.65.172.253 | aws-ap-northeast-1-tokyo + // Nimbus team's bootnodes + "enr:-LK4QA8FfhaAjlb_BXsXxSfiysR7R52Nhi9JBt4F8SPssu8hdE1BXQQEtVDC3qStCW60LSO7hEsVHv5zm8_6Vnjhcn0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhAN4aBKJc2VjcDI1NmsxoQJerDhsJ-KxZ8sHySMOCmTO6sHM3iCFQ6VMvLTe948MyYN0Y3CCI4yDdWRwgiOM", // 3.120.104.18 | aws-eu-central-1-frankfurt + "enr:-LK4QKWrXTpV9T78hNG6s8AM6IO4XH9kFT91uZtFg1GcsJ6dKovDOr1jtAAFPnS2lvNltkOGA9k29BUN7lFh_sjuc9QBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC1MD8qAAAAAP__________gmlkgnY0gmlwhANAdd-Jc2VjcDI1NmsxoQLQa6ai7y9PMN5hpLe5HmiJSlYzMuzP7ZhwRiwHvqNXdoN0Y3CCI4yDdWRwgiOM", // 3.64.117.223 | aws-eu-central-1-frankfurt} } const dnsPrefix = "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@" diff --git a/params/config.go b/params/config.go index 0a111e8611..150da88d72 100644 --- a/params/config.go +++ b/params/config.go @@ -32,7 +32,7 @@ var ( OPBNBMainNetGenesisHash = common.HexToHash("0x4dd61178c8b0f01670c231597e7bcb368e84545acd46d940a896d6a791dd6df4") OPBNBTestNetGenesisHash = common.HexToHash("0x51fa57729dfb1c27542c21b06cb72a0459c57440ceb43a465dae1307cd04fe80") - OPBNBQANetGenesisHash = common.HexToHash("0x1cba296441b55cf9b5b306b6aef43e68e9aeff2450d68c391dec448604cf3baf") + OPBNBQANetGenesisHash = common.HexToHash("0xe182e685b1ec05ca55f2374cb3a190d1ae8f3e196acb55a69efd61536fc3983f") ) const ( @@ -50,7 +50,7 @@ const ( const ( OPBNBMainnetChainID = 204 OPBNBTestNetChainID = 5611 - OPBNBQANetChainID = 1322 + OPBNBQANetChainID = 2484 ) // OP Stack chain config @@ -190,10 +190,17 @@ var ( TerminalTotalDifficulty: big.NewInt(0), TerminalTotalDifficultyPassed: true, Optimism: &OptimismConfig{ - EIP1559Elasticity: 2, - EIP1559Denominator: 8, + EIP1559Elasticity: 2, + EIP1559Denominator: 8, + EIP1559DenominatorCanyon: 8, }, - Fermat: big.NewInt(9397477), // Nov-28-2023 06 AM +UTC + Fermat: big.NewInt(9397477), // Nov-28-2023 06 AM +UTC + ShanghaiTime: newUint64(1718870400), // Jun-20-2024 08:00 AM +UTC + CanyonTime: newUint64(1718870400), // Jun-20-2024 08:00 AM +UTC + // Delta: the Delta upgrade does not affect the execution-layer, and is thus not configurable in the chain config. + CancunTime: newUint64(1718871600), // Jun-20-2024 08:20 AM +UTC + EcotoneTime: newUint64(1718871600), // Jun-20-2024 08:20 AM +UTC + HaberTime: newUint64(1718872200), // Jun-20-2024 08:30 AM +UTC } // OPBNBTestNetConfig is the chain parameters to run a node on the opBNB testnet network. OPBNBTestNetConfig = &ChainConfig{ @@ -217,15 +224,22 @@ var ( TerminalTotalDifficulty: big.NewInt(0), TerminalTotalDifficultyPassed: true, Optimism: &OptimismConfig{ - EIP1559Elasticity: 2, - EIP1559Denominator: 8, + EIP1559Elasticity: 2, + EIP1559Denominator: 8, + EIP1559DenominatorCanyon: 8, }, PreContractForkBlock: big.NewInt(5805494), - Fermat: big.NewInt(12113000), // Nov-03-2023 06 AM +UTC + Fermat: big.NewInt(12113000), // Nov-03-2023 06 AM +UTC + ShanghaiTime: newUint64(1715753400), // May-15-2024 06:10 AM +UTC + CanyonTime: newUint64(1715753400), // May-15-2024 06:10 AM +UTC + // Delta: the Delta upgrade does not affect the execution-layer, and is thus not configurable in the chain config. + CancunTime: newUint64(1715754600), // May-15-2024 06:30 AM +UTC + EcotoneTime: newUint64(1715754600), // May-15-2024 06:30 AM +UTC + HaberTime: newUint64(1717048800), // May-30-2024 06:00 AM +UTC } // OPBNBQANetConfig is the chain parameters to run a node on the opBNB qa network. It is just for internal test. OPBNBQANetConfig = &ChainConfig{ - ChainID: big.NewInt(1322), + ChainID: big.NewInt(2484), HomesteadBlock: big.NewInt(0), EIP150Block: big.NewInt(0), EIP155Block: big.NewInt(0), @@ -245,10 +259,17 @@ var ( TerminalTotalDifficulty: big.NewInt(0), TerminalTotalDifficultyPassed: true, Optimism: &OptimismConfig{ - EIP1559Elasticity: 2, - EIP1559Denominator: 8, + EIP1559Elasticity: 2, + EIP1559Denominator: 8, + EIP1559DenominatorCanyon: 8, }, - // Fermat: big.NewInt(3615117), + Fermat: big.NewInt(0), + ShanghaiTime: newUint64(1714993800), // May-06-2024 11:10 AM +UTC + CanyonTime: newUint64(1714993800), // May-06-2024 11:10 AM +UTC + // Delta: the Delta upgrade does not affect the execution-layer, and is thus not configurable in the chain config. + CancunTime: newUint64(1714995000), // May-06-2024 11:30 AM +UTC + EcotoneTime: newUint64(1714995000), // May-06-2024 11:30 AM +UTC + HaberTime: newUint64(1716361200), // May-22-2024 07:00 AM +UTC } // AllEthashProtocolChanges contains every protocol change (EIPs) introduced @@ -301,7 +322,6 @@ var ( ShanghaiTime: newUint64(0), TerminalTotalDifficulty: big.NewInt(0), TerminalTotalDifficultyPassed: true, - IsDevMode: true, } // AllCliqueProtocolChanges contains every protocol change (EIPs) introduced @@ -459,6 +479,11 @@ type ChainConfig struct { BedrockBlock *big.Int `json:"bedrockBlock,omitempty"` // Bedrock switch block (nil = no fork, 0 = already on optimism bedrock) RegolithTime *uint64 `json:"regolithTime,omitempty"` // Regolith switch time (nil = no fork, 0 = already on optimism regolith) CanyonTime *uint64 `json:"canyonTime,omitempty"` // Canyon switch time (nil = no fork, 0 = already on optimism canyon) + // Delta: the Delta upgrade does not affect the execution-layer, and is thus not configurable in the chain config. + EcotoneTime *uint64 `json:"ecotoneTime,omitempty"` // Ecotone switch time (nil = no fork, 0 = already on optimism ecotone) + HaberTime *uint64 `json:"haberTime,omitempty"` // Haber switch time (nil = no fork, 0 = already on haber) + + InteropTime *uint64 `json:"interopTime,omitempty"` // Interop switch time (nil = no fork, 0 = already on optimism interop) // PreContractForkBlock hard-fork switch block (nil = no fork, 0 = already on preContractForkBlock) PreContractForkBlock *big.Int `json:"preContractForkBlock,omitempty"` @@ -475,9 +500,8 @@ type ChainConfig struct { TerminalTotalDifficultyPassed bool `json:"terminalTotalDifficultyPassed,omitempty"` // Various consensus engines - Ethash *EthashConfig `json:"ethash,omitempty"` - Clique *CliqueConfig `json:"clique,omitempty"` - IsDevMode bool `json:"isDev,omitempty"` + Ethash *EthashConfig `json:"ethash,omitempty"` + Clique *CliqueConfig `json:"clique,omitempty"` // Optimism config, nil if not active Optimism *OptimismConfig `json:"optimism,omitempty"` @@ -611,12 +635,24 @@ func (c *ChainConfig) Description() string { if c.CanyonTime != nil { banner += fmt.Sprintf(" - Canyon: @%-10v\n", *c.CanyonTime) } + if c.EcotoneTime != nil { + banner += fmt.Sprintf(" - Ecotone: @%-10v\n", *c.EcotoneTime) + } + if c.InteropTime != nil { + banner += fmt.Sprintf(" - Interop: @%-10v\n", *c.InteropTime) + } banner += "OPBNB hard forks (block based):\n" if c.PreContractForkBlock != nil { banner += fmt.Sprintf(" - PreContractForkBlock: #%-8v\n", c.PreContractForkBlock) } - // TODO: add bep - banner += fmt.Sprintf(" - Fermat: #%-8v\n", c.Fermat) + if c.Fermat != nil { + banner += fmt.Sprintf(" - Fermat: #%-8v (https://github.com/bnb-chain/BEPs/blob/master/BEPs/BEP-293.md)\n", c.Fermat) + } + banner += "OPBNB hard forks (timestamp based):\n" + if c.HaberTime != nil { + banner += fmt.Sprintf(" - Haber: @%-10v\n", *c.HaberTime) + } + return banner } @@ -733,6 +769,18 @@ func (c *ChainConfig) IsCanyon(time uint64) bool { return isTimestampForked(c.CanyonTime, time) } +func (c *ChainConfig) IsEcotone(time uint64) bool { + return isTimestampForked(c.EcotoneTime, time) +} + +func (c *ChainConfig) IsHaber(time uint64) bool { + return isTimestampForked(c.HaberTime, time) +} + +func (c *ChainConfig) IsInterop(time uint64) bool { + return isTimestampForked(c.InteropTime, time) +} + // IsOptimism returns whether the node is an optimism node or not. func (c *ChainConfig) IsOptimism() bool { return c.Optimism != nil @@ -746,10 +794,15 @@ func (c *ChainConfig) IsOptimismBedrock(num *big.Int) bool { func (c *ChainConfig) IsOptimismRegolith(time uint64) bool { return c.IsOptimism() && c.IsRegolith(time) } + func (c *ChainConfig) IsOptimismCanyon(time uint64) bool { return c.IsOptimism() && c.IsCanyon(time) } +func (c *ChainConfig) IsOptimismEcotone(time uint64) bool { + return c.IsOptimism() && c.IsEcotone(time) +} + // IsOptimismPreBedrock returns true iff this is an optimism node & bedrock is not yet active func (c *ChainConfig) IsOptimismPreBedrock(num *big.Int) bool { return c.IsOptimism() && !c.IsBedrock(num) @@ -1086,6 +1139,7 @@ type Rules struct { IsOptimismBedrock, IsOptimismRegolith bool IsOptimismCanyon bool IsFermat bool + IsHaber bool } // Rules ensures c's ChainID is not nil. @@ -1117,5 +1171,6 @@ func (c *ChainConfig) Rules(num *big.Int, isMerge bool, timestamp uint64) Rules IsOptimismCanyon: c.IsOptimismCanyon(timestamp), // OPBNB IsFermat: c.IsFermat(num), + IsHaber: c.IsHaber(timestamp), } } diff --git a/params/protocol_params.go b/params/protocol_params.go index 59a29f71e2..49805a4d16 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -166,6 +166,8 @@ const ( Bls12381MapG1Gas uint64 = 5500 // Gas price for BLS12-381 mapping field element to G1 operation Bls12381MapG2Gas uint64 = 110000 // Gas price for BLS12-381 mapping field element to G2 operation + P256VerifyGas uint64 = 3450 // secp256r1 elliptic curve signature verifier gas price + CometBFTLightBlockValidateGas uint64 = 3000 // Gas for validate cometBFT light block BlsSignatureVerifyBaseGas uint64 = 1000 // base price for a BLS signature verify operation BlsSignatureVerifyPerKeyGas uint64 = 3500 // Per-key price for a BLS signature verify operation diff --git a/params/superchain.go b/params/superchain.go index 3928153fbe..83a5b47f5b 100644 --- a/params/superchain.go +++ b/params/superchain.go @@ -11,7 +11,7 @@ import ( "github.com/ethereum/go-ethereum/common" ) -var OPStackSupport = ProtocolVersionV0{Build: [8]byte{}, Major: 4, Minor: 0, Patch: 0, PreRelease: 1}.Encode() +var OPStackSupport = ProtocolVersionV0{Build: [8]byte{}, Major: 6, Minor: 0, Patch: 0, PreRelease: 0}.Encode() func init() { for id, ch := range superchain.OPChains { @@ -41,10 +41,6 @@ func LoadOPStackChainConfig(chainID uint64) (*ChainConfig, error) { if !ok { return nil, fmt.Errorf("unknown chain ID: %d", chainID) } - superchainConfig, ok := superchain.Superchains[chConfig.Superchain] - if !ok { - return nil, fmt.Errorf("unknown superchain %q", chConfig.Superchain) - } genesisActivation := uint64(0) out := &ChainConfig{ @@ -65,12 +61,13 @@ func LoadOPStackChainConfig(chainID uint64) (*ChainConfig, error) { ArrowGlacierBlock: common.Big0, GrayGlacierBlock: common.Big0, MergeNetsplitBlock: common.Big0, - ShanghaiTime: superchainConfig.Config.CanyonTime, // Shanghai activates with Canyon - CancunTime: nil, + ShanghaiTime: chConfig.CanyonTime, // Shanghai activates with Canyon + CancunTime: chConfig.EcotoneTime, // Cancun activates with Ecotone PragueTime: nil, BedrockBlock: common.Big0, RegolithTime: &genesisActivation, - CanyonTime: superchainConfig.Config.CanyonTime, + CanyonTime: chConfig.CanyonTime, + EcotoneTime: chConfig.EcotoneTime, TerminalTotalDifficulty: common.Big0, TerminalTotalDifficultyPassed: true, Ethash: nil, @@ -82,10 +79,6 @@ func LoadOPStackChainConfig(chainID uint64) (*ChainConfig, error) { }, } - // note: no actual parameters are being loaded, yet. - // Future superchain upgrades are loaded from the superchain chConfig and applied to the geth ChainConfig here. - _ = superchainConfig.Config - // special overrides for OP-Stack chains with pre-Regolith upgrade history switch chainID { case OPGoerliChainID: diff --git a/params/version.go b/params/version.go index 499a61c89e..763655c821 100644 --- a/params/version.go +++ b/params/version.go @@ -26,7 +26,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 13 // Minor version component of the current release - VersionPatch = 4 // Patch version component of the current release + VersionPatch = 8 // Patch version component of the current release VersionMeta = "stable" // Version metadata to append to the version string ) diff --git a/rpc/client_test.go b/rpc/client_test.go index 7c96b2d666..8870ed1cb6 100644 --- a/rpc/client_test.go +++ b/rpc/client_test.go @@ -585,7 +585,7 @@ func TestClientSubscriptionChannelClose(t *testing.T) { var ( srv = NewServer() httpsrv = httptest.NewServer(srv.WebsocketHandler(nil)) - wsURL = "ws:" + strings.TrimPrefix(httpsrv.URL, "http:") + wsURL = "ws:" + strings.TrimPrefix(httpsrv.URL, "http:") //nolint:all ) defer srv.Stop() defer httpsrv.Close() @@ -595,7 +595,7 @@ func TestClientSubscriptionChannelClose(t *testing.T) { for i := 0; i < 100; i++ { ch := make(chan int, 100) - sub, err := client.Subscribe(context.Background(), "nftest", ch, "someSubscription", maxClientSubscriptionBuffer-1, 1) + sub, err := client.Subscribe(context.Background(), "nftest", ch, "someSubscription", 100, 1) if err != nil { t.Fatal(err) } diff --git a/rpc/json.go b/rpc/json.go index 8a3b162cab..5557a80760 100644 --- a/rpc/json.go +++ b/rpc/json.go @@ -46,6 +46,17 @@ type subscriptionResult struct { Result json.RawMessage `json:"result,omitempty"` } +type subscriptionResultEnc struct { + ID string `json:"subscription"` + Result any `json:"result"` +} + +type jsonrpcSubscriptionNotification struct { + Version string `json:"jsonrpc"` + Method string `json:"method"` + Params subscriptionResultEnc `json:"params"` +} + // A value of this type can a JSON-RPC request, notification, successful response or // error response. Which one it is depends on the fields. type jsonrpcMessage struct { @@ -86,8 +97,8 @@ func (msg *jsonrpcMessage) isUnsubscribe() bool { } func (msg *jsonrpcMessage) namespace() string { - elem := strings.SplitN(msg.Method, serviceMethodSeparator, 2) - return elem[0] + before, _, _ := strings.Cut(msg.Method, serviceMethodSeparator) + return before } func (msg *jsonrpcMessage) String() string { diff --git a/rpc/metrics.go b/rpc/metrics.go index b1f1284535..ef7449ce05 100644 --- a/rpc/metrics.go +++ b/rpc/metrics.go @@ -46,5 +46,5 @@ func updateServeTimeHistogram(method string, success bool, elapsed time.Duration metrics.NewExpDecaySample(1028, 0.015), ) } - metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(elapsed.Microseconds()) + metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(elapsed.Nanoseconds()) } diff --git a/rpc/service.go b/rpc/service.go index 8485cab3aa..a180b8db93 100644 --- a/rpc/service.go +++ b/rpc/service.go @@ -93,13 +93,13 @@ func (r *serviceRegistry) registerName(name string, rcvr interface{}) error { // callback returns the callback corresponding to the given RPC method name. func (r *serviceRegistry) callback(method string) *callback { - elem := strings.SplitN(method, serviceMethodSeparator, 2) - if len(elem) != 2 { + before, after, found := strings.Cut(method, serviceMethodSeparator) + if !found { return nil } r.mu.Lock() defer r.mu.Unlock() - return r.services[elem[0]].callbacks[elem[1]] + return r.services[before].callbacks[after] } // subscription returns a subscription callback in the given service. diff --git a/rpc/subscription.go b/rpc/subscription.go index 3231c2ceec..9cb0727547 100644 --- a/rpc/subscription.go +++ b/rpc/subscription.go @@ -105,7 +105,7 @@ type Notifier struct { mu sync.Mutex sub *Subscription - buffer []json.RawMessage + buffer []any callReturned bool activated bool } @@ -129,12 +129,7 @@ func (n *Notifier) CreateSubscription() *Subscription { // Notify sends a notification to the client with the given data as payload. // If an error occurs the RPC connection is closed and the error is returned. -func (n *Notifier) Notify(id ID, data interface{}) error { - enc, err := json.Marshal(data) - if err != nil { - return err - } - +func (n *Notifier) Notify(id ID, data any) error { n.mu.Lock() defer n.mu.Unlock() @@ -144,9 +139,9 @@ func (n *Notifier) Notify(id ID, data interface{}) error { panic("Notify with wrong ID") } if n.activated { - return n.send(n.sub, enc) + return n.send(n.sub, data) } - n.buffer = append(n.buffer, enc) + n.buffer = append(n.buffer, data) return nil } @@ -181,16 +176,16 @@ func (n *Notifier) activate() error { return nil } -func (n *Notifier) send(sub *Subscription, data json.RawMessage) error { - params, _ := json.Marshal(&subscriptionResult{ID: string(sub.ID), Result: data}) - ctx := context.Background() - - msg := &jsonrpcMessage{ +func (n *Notifier) send(sub *Subscription, data any) error { + msg := jsonrpcSubscriptionNotification{ Version: vsn, Method: n.namespace + notificationMethodSuffix, - Params: params, + Params: subscriptionResultEnc{ + ID: string(sub.ID), + Result: data, + }, } - return n.h.conn.writeJSON(ctx, msg, false) + return n.h.conn.writeJSON(context.Background(), &msg, false) } // A Subscription is created by a notifier and tied to that notifier. The client can use diff --git a/rpc/subscription_test.go b/rpc/subscription_test.go index b270457829..3a131c8e6b 100644 --- a/rpc/subscription_test.go +++ b/rpc/subscription_test.go @@ -17,12 +17,19 @@ package rpc import ( + "bytes" + "context" "encoding/json" "fmt" + "io" + "math/big" "net" "strings" "testing" "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" ) func TestNewID(t *testing.T) { @@ -218,3 +225,56 @@ func readAndValidateMessage(in *json.Decoder) (*subConfirmation, *subscriptionRe return nil, nil, fmt.Errorf("unrecognized message: %v", msg) } } + +type mockConn struct { + enc *json.Encoder +} + +// writeJSON writes a message to the connection. +func (c *mockConn) writeJSON(ctx context.Context, msg interface{}, isError bool) error { + return c.enc.Encode(msg) +} + +// Closed returns a channel which is closed when the connection is closed. +func (c *mockConn) closed() <-chan interface{} { return nil } + +// RemoteAddr returns the peer address of the connection. +func (c *mockConn) remoteAddr() string { return "" } + +// BenchmarkNotify benchmarks the performance of notifying a subscription. +func BenchmarkNotify(b *testing.B) { + id := ID("test") + notifier := &Notifier{ + h: &handler{conn: &mockConn{json.NewEncoder(io.Discard)}}, + sub: &Subscription{ID: id}, + activated: true, + } + msg := &types.Header{ + ParentHash: common.HexToHash("0x01"), + Number: big.NewInt(100), + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + notifier.Notify(id, msg) + } +} + +func TestNotify(t *testing.T) { + out := new(bytes.Buffer) + id := ID("test") + notifier := &Notifier{ + h: &handler{conn: &mockConn{json.NewEncoder(out)}}, + sub: &Subscription{ID: id}, + activated: true, + } + msg := &types.Header{ + ParentHash: common.HexToHash("0x01"), + Number: big.NewInt(100), + } + notifier.Notify(id, msg) + have := strings.TrimSpace(out.String()) + want := `{"jsonrpc":"2.0","method":"_subscription","params":{"subscription":"test","result":{"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000001","sha3Uncles":"0x0000000000000000000000000000000000000000000000000000000000000000","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","transactionsRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","receiptsRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":null,"number":"0x64","gasLimit":"0x0","gasUsed":"0x0","timestamp":"0x0","extraData":"0x","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","baseFeePerGas":null,"withdrawalsRoot":null,"blobGasUsed":null,"excessBlobGas":null,"parentBeaconBlockRoot":null,"hash":"0xe5fb877dde471b45b9742bb4bb4b3d74a761e2fb7cb849a3d2b687eed90fb604"}}}` + if have != want { + t.Errorf("have:\n%v\nwant:\n%v\n", have, want) + } +} diff --git a/rpc/websocket_test.go b/rpc/websocket_test.go index e4ac5c3fad..d3e15d94c9 100644 --- a/rpc/websocket_test.go +++ b/rpc/websocket_test.go @@ -215,7 +215,7 @@ func TestClientWebsocketPing(t *testing.T) { var ( sendPing = make(chan struct{}) server = wsPingTestServer(t, sendPing) - ctx, cancel = context.WithTimeout(context.Background(), 1*time.Second) + ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) ) defer cancel() defer server.Shutdown(ctx) diff --git a/signer/core/api_test.go b/signer/core/api_test.go index 5a9de161b3..69229dadaf 100644 --- a/signer/core/api_test.go +++ b/signer/core/api_test.go @@ -169,6 +169,7 @@ func list(ui *headlessUi, api *core.SignerAPI, t *testing.T) ([]common.Address, } func TestNewAcc(t *testing.T) { + t.Parallel() api, control := setup(t) verifyNum := func(num int) { list, err := list(control, api, t) @@ -235,6 +236,7 @@ func mkTestTx(from common.MixedcaseAddress) apitypes.SendTxArgs { } func TestSignTx(t *testing.T) { + t.Parallel() var ( list []common.Address res, res2 *ethapi.SignTransactionResult diff --git a/signer/core/apitypes/signed_data_internal_test.go b/signer/core/apitypes/signed_data_internal_test.go index af7fc93ed8..8067893c21 100644 --- a/signer/core/apitypes/signed_data_internal_test.go +++ b/signer/core/apitypes/signed_data_internal_test.go @@ -27,6 +27,7 @@ import ( ) func TestBytesPadding(t *testing.T) { + t.Parallel() tests := []struct { Type string Input []byte @@ -87,6 +88,7 @@ func TestBytesPadding(t *testing.T) { } func TestParseAddress(t *testing.T) { + t.Parallel() tests := []struct { Input interface{} Output []byte // nil => error @@ -136,6 +138,7 @@ func TestParseAddress(t *testing.T) { } func TestParseBytes(t *testing.T) { + t.Parallel() for i, tt := range []struct { v interface{} exp []byte @@ -170,6 +173,7 @@ func TestParseBytes(t *testing.T) { } func TestParseInteger(t *testing.T) { + t.Parallel() for i, tt := range []struct { t string v interface{} @@ -200,6 +204,7 @@ func TestParseInteger(t *testing.T) { } func TestConvertStringDataToSlice(t *testing.T) { + t.Parallel() slice := []string{"a", "b", "c"} var it interface{} = slice _, err := convertDataToSlice(it) @@ -209,6 +214,7 @@ func TestConvertStringDataToSlice(t *testing.T) { } func TestConvertUint256DataToSlice(t *testing.T) { + t.Parallel() slice := []*math.HexOrDecimal256{ math.NewHexOrDecimal256(1), math.NewHexOrDecimal256(2), @@ -222,6 +228,7 @@ func TestConvertUint256DataToSlice(t *testing.T) { } func TestConvertAddressDataToSlice(t *testing.T) { + t.Parallel() slice := []common.Address{ common.HexToAddress("0x0000000000000000000000000000000000000001"), common.HexToAddress("0x0000000000000000000000000000000000000002"), diff --git a/signer/core/apitypes/types_test.go b/signer/core/apitypes/types_test.go index eef3cae00c..b5aa3d1e93 100644 --- a/signer/core/apitypes/types_test.go +++ b/signer/core/apitypes/types_test.go @@ -19,6 +19,7 @@ package apitypes import "testing" func TestIsPrimitive(t *testing.T) { + t.Parallel() // Expected positives for i, tc := range []string{ "int24", "int24[]", "uint88", "uint88[]", "uint", "uint[]", "int256", "int256[]", diff --git a/signer/core/auditlog.go b/signer/core/auditlog.go index a0b292bf71..d2207c9eb8 100644 --- a/signer/core/auditlog.go +++ b/signer/core/auditlog.go @@ -19,12 +19,14 @@ package core import ( "context" "encoding/json" + "os" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/signer/core/apitypes" + "golang.org/x/exp/slog" ) type AuditLogger struct { @@ -113,12 +115,13 @@ func (l *AuditLogger) Version(ctx context.Context) (string, error) { } func NewAuditLogger(path string, api ExternalAPI) (*AuditLogger, error) { - l := log.New("api", "signer") - handler, err := log.FileHandler(path, log.LogfmtFormat()) + f, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) if err != nil { return nil, err } - l.SetHandler(handler) + + handler := slog.NewTextHandler(f, nil) + l := log.NewLogger(handler).With("api", "signer") l.Info("Configured", "audit log", path) return &AuditLogger{l, api}, nil } diff --git a/signer/core/signed_data_test.go b/signer/core/signed_data_test.go index 3e3837cae2..1cf8b4bf38 100644 --- a/signer/core/signed_data_test.go +++ b/signer/core/signed_data_test.go @@ -183,6 +183,7 @@ var typedData = apitypes.TypedData{ } func TestSignData(t *testing.T) { + t.Parallel() api, control := setup(t) //Create two accounts createAccount(control, api, t) @@ -248,6 +249,7 @@ func TestSignData(t *testing.T) { } func TestDomainChainId(t *testing.T) { + t.Parallel() withoutChainID := apitypes.TypedData{ Types: apitypes.Types{ "EIP712Domain": []apitypes.Type{ @@ -289,6 +291,7 @@ func TestDomainChainId(t *testing.T) { } func TestHashStruct(t *testing.T) { + t.Parallel() hash, err := typedData.HashStruct(typedData.PrimaryType, typedData.Message) if err != nil { t.Fatal(err) @@ -309,6 +312,7 @@ func TestHashStruct(t *testing.T) { } func TestEncodeType(t *testing.T) { + t.Parallel() domainTypeEncoding := string(typedData.EncodeType("EIP712Domain")) if domainTypeEncoding != "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" { t.Errorf("Expected different encodeType result (got %s)", domainTypeEncoding) @@ -321,6 +325,7 @@ func TestEncodeType(t *testing.T) { } func TestTypeHash(t *testing.T) { + t.Parallel() mailTypeHash := fmt.Sprintf("0x%s", common.Bytes2Hex(typedData.TypeHash(typedData.PrimaryType))) if mailTypeHash != "0xa0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2" { t.Errorf("Expected different typeHash result (got %s)", mailTypeHash) @@ -328,6 +333,7 @@ func TestTypeHash(t *testing.T) { } func TestEncodeData(t *testing.T) { + t.Parallel() hash, err := typedData.EncodeData(typedData.PrimaryType, typedData.Message, 0) if err != nil { t.Fatal(err) @@ -339,6 +345,7 @@ func TestEncodeData(t *testing.T) { } func TestFormatter(t *testing.T) { + t.Parallel() var d apitypes.TypedData err := json.Unmarshal([]byte(jsonTypedData), &d) if err != nil { @@ -368,6 +375,7 @@ func sign(typedData apitypes.TypedData) ([]byte, []byte, error) { } func TestJsonFiles(t *testing.T) { + t.Parallel() testfiles, err := os.ReadDir("testdata/") if err != nil { t.Fatalf("failed reading files: %v", err) @@ -402,6 +410,7 @@ func TestJsonFiles(t *testing.T) { // TestFuzzerFiles tests some files that have been found by fuzzing to cause // crashes or hangs. func TestFuzzerFiles(t *testing.T) { + t.Parallel() corpusdir := path.Join("testdata", "fuzzing") testfiles, err := os.ReadDir(corpusdir) if err != nil { @@ -514,6 +523,7 @@ var gnosisTx = ` // TestGnosisTypedData tests the scenario where a user submits a full EIP-712 // struct without using the gnosis-specific endpoint func TestGnosisTypedData(t *testing.T) { + t.Parallel() var td apitypes.TypedData err := json.Unmarshal([]byte(gnosisTypedData), &td) if err != nil { @@ -532,6 +542,7 @@ func TestGnosisTypedData(t *testing.T) { // TestGnosisCustomData tests the scenario where a user submits only the gnosis-safe // specific data, and we fill the TypedData struct on our side func TestGnosisCustomData(t *testing.T) { + t.Parallel() var tx core.GnosisSafeTx err := json.Unmarshal([]byte(gnosisTx), &tx) if err != nil { @@ -644,6 +655,7 @@ var gnosisTxWithChainId = ` ` func TestGnosisTypedDataWithChainId(t *testing.T) { + t.Parallel() var td apitypes.TypedData err := json.Unmarshal([]byte(gnosisTypedDataWithChainId), &td) if err != nil { @@ -662,6 +674,7 @@ func TestGnosisTypedDataWithChainId(t *testing.T) { // TestGnosisCustomData tests the scenario where a user submits only the gnosis-safe // specific data, and we fill the TypedData struct on our side func TestGnosisCustomDataWithChainId(t *testing.T) { + t.Parallel() var tx core.GnosisSafeTx err := json.Unmarshal([]byte(gnosisTxWithChainId), &tx) if err != nil { @@ -813,6 +826,7 @@ var complexTypedData = ` ` func TestComplexTypedData(t *testing.T) { + t.Parallel() var td apitypes.TypedData err := json.Unmarshal([]byte(complexTypedData), &td) if err != nil { @@ -829,6 +843,7 @@ func TestComplexTypedData(t *testing.T) { } func TestGnosisSafe(t *testing.T) { + t.Parallel() // json missing chain id js := "{\n \"safe\": \"0x899FcB1437DE65DC6315f5a69C017dd3F2837557\",\n \"to\": \"0x899FcB1437DE65DC6315f5a69C017dd3F2837557\",\n \"value\": \"0\",\n \"data\": \"0x0d582f13000000000000000000000000d3ed2b8756b942c98c851722f3bd507a17b4745f0000000000000000000000000000000000000000000000000000000000000005\",\n \"operation\": 0,\n \"gasToken\": \"0x0000000000000000000000000000000000000000\",\n \"safeTxGas\": 0,\n \"baseGas\": 0,\n \"gasPrice\": \"0\",\n \"refundReceiver\": \"0x0000000000000000000000000000000000000000\",\n \"nonce\": 0,\n \"executionDate\": null,\n \"submissionDate\": \"2022-02-23T14:09:00.018475Z\",\n \"modified\": \"2022-12-01T15:52:21.214357Z\",\n \"blockNumber\": null,\n \"transactionHash\": null,\n \"safeTxHash\": \"0x6f0f5cffee69087c9d2471e477a63cab2ae171cf433e754315d558d8836274f4\",\n \"executor\": null,\n \"isExecuted\": false,\n \"isSuccessful\": null,\n \"ethGasPrice\": null,\n \"maxFeePerGas\": null,\n \"maxPriorityFeePerGas\": null,\n \"gasUsed\": null,\n \"fee\": null,\n \"origin\": \"https://gnosis-safe.io\",\n \"dataDecoded\": {\n \"method\": \"addOwnerWithThreshold\",\n \"parameters\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"value\": \"0xD3Ed2b8756b942c98c851722F3bd507a17B4745F\"\n },\n {\n \"name\": \"_threshold\",\n \"type\": \"uint256\",\n \"value\": \"5\"\n }\n ]\n },\n \"confirmationsRequired\": 4,\n \"confirmations\": [\n {\n \"owner\": \"0x30B714E065B879F5c042A75Bb40a220A0BE27966\",\n \"submissionDate\": \"2022-03-01T14:56:22Z\",\n \"transactionHash\": \"0x6d0a9c83ac7578ef3be1f2afce089fb83b619583dfa779b82f4422fd64ff3ee9\",\n \"signature\": \"0x00000000000000000000000030b714e065b879f5c042a75bb40a220a0be27966000000000000000000000000000000000000000000000000000000000000000001\",\n \"signatureType\": \"APPROVED_HASH\"\n },\n {\n \"owner\": \"0x8300dFEa25Da0eb744fC0D98c23283F86AB8c10C\",\n \"submissionDate\": \"2022-12-01T15:52:21.214357Z\",\n \"transactionHash\": null,\n \"signature\": \"0xbce73de4cc6ee208e933a93c794dcb8ba1810f9848d1eec416b7be4dae9854c07dbf1720e60bbd310d2159197a380c941cfdb55b3ce58f9dd69efd395d7bef881b\",\n \"signatureType\": \"EOA\"\n }\n ],\n \"trusted\": true,\n \"signatures\": null\n}\n" var gnosisTx core.GnosisSafeTx @@ -984,6 +999,7 @@ var complexTypedDataLCRefType = ` ` func TestComplexTypedDataWithLowercaseReftype(t *testing.T) { + t.Parallel() var td apitypes.TypedData err := json.Unmarshal([]byte(complexTypedDataLCRefType), &td) if err != nil { diff --git a/signer/core/validation_test.go b/signer/core/validation_test.go index 6adaa21afd..7f733b0bb1 100644 --- a/signer/core/validation_test.go +++ b/signer/core/validation_test.go @@ -19,6 +19,7 @@ package core import "testing" func TestPasswordValidation(t *testing.T) { + t.Parallel() testcases := []struct { pw string shouldFail bool diff --git a/signer/fourbyte/abi_test.go b/signer/fourbyte/abi_test.go index 68c027ecea..9656732dff 100644 --- a/signer/fourbyte/abi_test.go +++ b/signer/fourbyte/abi_test.go @@ -52,6 +52,7 @@ func verify(t *testing.T, jsondata, calldata string, exp []interface{}) { } func TestNewUnpacker(t *testing.T) { + t.Parallel() type unpackTest struct { jsondata string calldata string @@ -97,6 +98,7 @@ func TestNewUnpacker(t *testing.T) { } func TestCalldataDecoding(t *testing.T) { + t.Parallel() // send(uint256) : a52c101e // compareAndApprove(address,uint256,uint256) : 751e1079 // issue(address[],uint256) : 42958b54 @@ -159,6 +161,7 @@ func TestCalldataDecoding(t *testing.T) { } func TestMaliciousABIStrings(t *testing.T) { + t.Parallel() tests := []string{ "func(uint256,uint256,[]uint256)", "func(uint256,uint256,uint256,)", diff --git a/signer/fourbyte/fourbyte_test.go b/signer/fourbyte/fourbyte_test.go index 017001f97b..a3dc3b5117 100644 --- a/signer/fourbyte/fourbyte_test.go +++ b/signer/fourbyte/fourbyte_test.go @@ -17,8 +17,8 @@ package fourbyte import ( + "encoding/json" "fmt" - "strings" "testing" "github.com/ethereum/go-ethereum/accounts/abi" @@ -27,18 +27,19 @@ import ( // Tests that all the selectors contained in the 4byte database are valid. func TestEmbeddedDatabase(t *testing.T) { + t.Parallel() db, err := New() if err != nil { t.Fatal(err) } + var abistruct abi.ABI for id, selector := range db.embedded { abistring, err := parseSelector(selector) if err != nil { t.Errorf("Failed to convert selector to ABI: %v", err) continue } - abistruct, err := abi.JSON(strings.NewReader(string(abistring))) - if err != nil { + if err := json.Unmarshal(abistring, &abistruct); err != nil { t.Errorf("Failed to parse ABI: %v", err) continue } @@ -55,6 +56,7 @@ func TestEmbeddedDatabase(t *testing.T) { // Tests that custom 4byte datasets can be handled too. func TestCustomDatabase(t *testing.T) { + t.Parallel() // Create a new custom 4byte database with no embedded component tmpdir := t.TempDir() filename := fmt.Sprintf("%s/4byte_custom.json", tmpdir) diff --git a/signer/fourbyte/validation_test.go b/signer/fourbyte/validation_test.go index 1b0ab507a8..74fed9fe01 100644 --- a/signer/fourbyte/validation_test.go +++ b/signer/fourbyte/validation_test.go @@ -73,6 +73,7 @@ type txtestcase struct { } func TestTransactionValidation(t *testing.T) { + t.Parallel() var ( // use empty db, there are other tests for the abi-specific stuff db = newEmpty() diff --git a/signer/rules/rules_test.go b/signer/rules/rules_test.go index c35da8ecc1..d27de22b29 100644 --- a/signer/rules/rules_test.go +++ b/signer/rules/rules_test.go @@ -124,6 +124,7 @@ func initRuleEngine(js string) (*rulesetUI, error) { } func TestListRequest(t *testing.T) { + t.Parallel() accs := make([]accounts.Account, 5) for i := range accs { @@ -152,6 +153,7 @@ func TestListRequest(t *testing.T) { } func TestSignTxRequest(t *testing.T) { + t.Parallel() js := ` function ApproveTx(r){ console.log("transaction.from", r.transaction.from); @@ -244,6 +246,7 @@ func (d *dummyUI) OnSignerStartup(info core.StartupInfo) { // TestForwarding tests that the rule-engine correctly dispatches requests to the next caller func TestForwarding(t *testing.T) { + t.Parallel() js := "" ui := &dummyUI{make([]string, 0)} jsBackend := storage.NewEphemeralStorage() @@ -271,6 +274,7 @@ func TestForwarding(t *testing.T) { } func TestMissingFunc(t *testing.T) { + t.Parallel() r, err := initRuleEngine(JS) if err != nil { t.Errorf("Couldn't create evaluator %v", err) @@ -293,6 +297,7 @@ func TestMissingFunc(t *testing.T) { t.Logf("Err %v", err) } func TestStorage(t *testing.T) { + t.Parallel() js := ` function testStorage(){ storage.put("mykey", "myvalue") @@ -455,6 +460,7 @@ func dummySigned(value *big.Int) *types.Transaction { } func TestLimitWindow(t *testing.T) { + t.Parallel() r, err := initRuleEngine(ExampleTxWindow) if err != nil { t.Errorf("Couldn't create evaluator %v", err) @@ -540,6 +546,7 @@ func (d *dontCallMe) OnApprovedTx(tx ethapi.SignTransactionResult) { // if it does, that would be bad since developers may rely on that to store data, // instead of using the disk-based data storage func TestContextIsCleared(t *testing.T) { + t.Parallel() js := ` function ApproveTx(){ if (typeof foobar == 'undefined') { @@ -571,6 +578,7 @@ func TestContextIsCleared(t *testing.T) { } func TestSignData(t *testing.T) { + t.Parallel() js := `function ApproveListing(){ return "Approve" } diff --git a/signer/storage/aes_gcm_storage_test.go b/signer/storage/aes_gcm_storage_test.go index e1fea59280..a223b1a6b4 100644 --- a/signer/storage/aes_gcm_storage_test.go +++ b/signer/storage/aes_gcm_storage_test.go @@ -26,9 +26,11 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/mattn/go-colorable" + "golang.org/x/exp/slog" ) func TestEncryption(t *testing.T) { + t.Parallel() // key := []byte("AES256Key-32Characters1234567890") // plaintext := []byte(value) key := []byte("AES256Key-32Characters1234567890") @@ -51,6 +53,7 @@ func TestEncryption(t *testing.T) { } func TestFileStorage(t *testing.T) { + t.Parallel() a := map[string]storedCredential{ "secret": { Iv: common.Hex2Bytes("cdb30036279601aeee60f16b"), @@ -89,7 +92,8 @@ func TestFileStorage(t *testing.T) { } } func TestEnd2End(t *testing.T) { - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(3), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) + t.Parallel() + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(colorable.NewColorableStderr(), slog.LevelInfo, true))) d := t.TempDir() @@ -109,9 +113,10 @@ func TestEnd2End(t *testing.T) { } func TestSwappedKeys(t *testing.T) { + t.Parallel() // It should not be possible to swap the keys/values, so that // K1:V1, K2:V2 can be swapped into K1:V2, K2:V1 - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(3), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(colorable.NewColorableStderr(), slog.LevelInfo, true))) d := t.TempDir() diff --git a/tests/block_test.go b/tests/block_test.go index 3aeaf67b41..9a1c1c519a 100644 --- a/tests/block_test.go +++ b/tests/block_test.go @@ -17,9 +17,12 @@ package tests import ( - "github.com/ethereum/go-ethereum/core/rawdb" + "math/rand" + "runtime" "testing" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/common" ) @@ -49,6 +52,9 @@ func TestBlockchain(t *testing.T) { bt.skipLoad(`.*randomStatetest94.json.*`) bt.walk(t, blockTestDir, func(t *testing.T, name string, test *BlockTest) { + if runtime.GOARCH == "386" && runtime.GOOS == "windows" && rand.Int63()%2 == 0 { + t.Skip("test (randomly) skipped on 32-bit windows") + } execBlockTest(t, bt, test) }) // There is also a LegacyTests folder, containing blockchain tests generated @@ -69,24 +75,21 @@ func TestExecutionSpec(t *testing.T) { } func execBlockTest(t *testing.T, bt *testMatcher, test *BlockTest) { - if err := bt.checkFailure(t, test.Run(false, rawdb.HashScheme, nil)); err != nil { + if err := bt.checkFailure(t, test.Run(false, rawdb.HashScheme, nil, nil)); err != nil { t.Errorf("test in hash mode without snapshotter failed: %v", err) return } - - if err := bt.checkFailure(t, test.Run(true, rawdb.HashScheme, nil)); err != nil { + if err := bt.checkFailure(t, test.Run(true, rawdb.HashScheme, nil, nil)); err != nil { t.Errorf("test in hash mode with snapshotter failed: %v", err) return } - - if err := bt.checkFailure(t, test.Run(false, rawdb.PathScheme, nil)); err != nil { + if err := bt.checkFailure(t, test.Run(false, rawdb.PathScheme, nil, nil)); err != nil { t.Errorf("test in path mode without snapshotter failed: %v", err) return } - - if err := bt.checkFailure(t, test.Run(true, rawdb.PathScheme, nil)); err != nil { + if err := bt.checkFailure(t, test.Run(true, rawdb.PathScheme, nil, nil)); err != nil { t.Errorf("test in path mode with snapshotter failed: %v", err) return } - + } diff --git a/tests/block_test_util.go b/tests/block_test_util.go index 8a13795890..837cd514ab 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -108,7 +108,7 @@ type btHeaderMarshaling struct { ExcessBlobGas *math.HexOrDecimal64 } -func (t *BlockTest) Run(snapshotter bool, scheme string, tracer vm.EVMLogger) error { +func (t *BlockTest) Run(snapshotter bool, scheme string, tracer vm.EVMLogger, postCheck func(error, *core.BlockChain)) (result error) { config, ok := Forks[t.json.Network] if !ok { return UnsupportedForkError{t.json.Network} @@ -116,7 +116,9 @@ func (t *BlockTest) Run(snapshotter bool, scheme string, tracer vm.EVMLogger) er // import pre accounts & construct test genesis block & state root var ( db = rawdb.NewMemoryDatabase() - tconf = &trie.Config{} + tconf = &trie.Config{ + Preimages: true, + } ) if scheme == rawdb.PathScheme { tconf.PathDB = pathdb.Defaults @@ -130,6 +132,7 @@ func (t *BlockTest) Run(snapshotter bool, scheme string, tracer vm.EVMLogger) er if err != nil { return err } + triedb.Journal(triedb.Head()) triedb.Close() // close the db to prevent memory leak if gblock.Hash() != t.json.Genesis.Hash { @@ -141,7 +144,7 @@ func (t *BlockTest) Run(snapshotter bool, scheme string, tracer vm.EVMLogger) er // Wrap the original engine within the beacon-engine engine := beacon.New(ethash.NewFaker()) - cache := &core.CacheConfig{TrieCleanLimit: 0, StateScheme: scheme} + cache := &core.CacheConfig{TrieCleanLimit: 0, StateScheme: scheme, Preimages: true} if snapshotter { cache.SnapshotLimit = 1 cache.SnapshotWait = true @@ -162,6 +165,11 @@ func (t *BlockTest) Run(snapshotter bool, scheme string, tracer vm.EVMLogger) er fmt.Printf("Dav -- Test - t.insertBlocks fail, err: %s\n", err) return err } + // Import succeeded: regardless of whether the _test_ succeeds or not, schedule + // the post-check to run + if postCheck != nil { + defer postCheck(result, chain) + } cmlast := chain.CurrentBlock().Hash() if common.Hash(t.json.BestBlock) != cmlast { return fmt.Errorf("last block hash validation mismatch: want: %x, have: %x", t.json.BestBlock, cmlast) @@ -334,6 +342,12 @@ func (t *BlockTest) validatePostState(statedb *state.StateDB) error { if nonce2 != acct.Nonce { return fmt.Errorf("account nonce mismatch for addr: %s want: %d have: %d", addr, acct.Nonce, nonce2) } + for k, v := range acct.Storage { + v2 := statedb.GetState(addr, k) + if v2 != v { + return fmt.Errorf("account storage mismatch for addr: %s, slot: %x, want: %x, have: %x", addr, k, v, v2) + } + } } return nil } diff --git a/tests/fuzzers/abi/abifuzzer_test.go b/tests/fuzzers/abi/abifuzzer_test.go deleted file mode 100644 index c66399e1b7..0000000000 --- a/tests/fuzzers/abi/abifuzzer_test.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package abi - -import ( - "testing" -) - -// TestReplicate can be used to replicate crashers from the fuzzing tests. -// Just replace testString with the data in .quoted -func TestReplicate(t *testing.T) { - testString := "\x20\x20\x20\x20\x20\x20\x20\x20\x80\x00\x00\x00\x20\x20\x20\x20\x00" - data := []byte(testString) - runFuzzer(data) -} - -// TestGenerateCorpus can be used to add corpus for the fuzzer. -// Just replace corpusHex with the hexEncoded output you want to add to the fuzzer. -func TestGenerateCorpus(t *testing.T) { - /* - corpusHex := "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - data := common.FromHex(corpusHex) - checksum := sha1.Sum(data) - outf := fmt.Sprintf("corpus/%x", checksum) - if err := os.WriteFile(outf, data, 0777); err != nil { - panic(err) - } - */ -} diff --git a/tests/fuzzers/bitutil/compress_fuzz.go b/tests/fuzzers/bitutil/compress_fuzz.go deleted file mode 100644 index 5903cf2f93..0000000000 --- a/tests/fuzzers/bitutil/compress_fuzz.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bitutil - -import ( - "bytes" - - "github.com/ethereum/go-ethereum/common/bitutil" -) - -// Fuzz implements a go-fuzz fuzzer method to test various encoding method -// invocations. -func Fuzz(data []byte) int { - if len(data) == 0 { - return 0 - } - if data[0]%2 == 0 { - return fuzzEncode(data[1:]) - } - return fuzzDecode(data[1:]) -} - -// fuzzEncode implements a go-fuzz fuzzer method to test the bitset encoding and -// decoding algorithm. -func fuzzEncode(data []byte) int { - proc, _ := bitutil.DecompressBytes(bitutil.CompressBytes(data), len(data)) - if !bytes.Equal(data, proc) { - panic("content mismatch") - } - return 1 -} - -// fuzzDecode implements a go-fuzz fuzzer method to test the bit decoding and -// reencoding algorithm. -func fuzzDecode(data []byte) int { - blob, err := bitutil.DecompressBytes(data, 1024) - if err != nil { - return 0 - } - // re-compress it (it's OK if the re-compressed differs from the - // original - the first input may not have been compressed at all) - comp := bitutil.CompressBytes(blob) - if len(comp) > len(blob) { - // After compression, it must be smaller or equal - panic("bad compression") - } - // But decompressing it once again should work - decomp, err := bitutil.DecompressBytes(data, 1024) - if err != nil { - panic(err) - } - if !bytes.Equal(decomp, blob) { - panic("content mismatch") - } - return 1 -} diff --git a/tests/fuzzers/bls12381/bls12381_fuzz.go b/tests/fuzzers/bls12381/bls12381_fuzz.go index ced87dd41a..9a5c566540 100644 --- a/tests/fuzzers/bls12381/bls12381_fuzz.go +++ b/tests/fuzzers/bls12381/bls12381_fuzz.go @@ -14,8 +14,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -//go:build gofuzz -// +build gofuzz +//go:build cgo +// +build cgo package bls @@ -35,7 +35,7 @@ import ( blst "github.com/supranational/blst/bindings/go" ) -func FuzzCrossPairing(data []byte) int { +func fuzzCrossPairing(data []byte) int { input := bytes.NewReader(data) // get random G1 points @@ -101,7 +101,7 @@ func massageBLST(in []byte) []byte { return out } -func FuzzCrossG1Add(data []byte) int { +func fuzzCrossG1Add(data []byte) int { input := bytes.NewReader(data) // get random G1 points @@ -139,7 +139,7 @@ func FuzzCrossG1Add(data []byte) int { return 1 } -func FuzzCrossG2Add(data []byte) int { +func fuzzCrossG2Add(data []byte) int { input := bytes.NewReader(data) // get random G2 points @@ -177,7 +177,7 @@ func FuzzCrossG2Add(data []byte) int { return 1 } -func FuzzCrossG1MultiExp(data []byte) int { +func fuzzCrossG1MultiExp(data []byte) int { var ( input = bytes.NewReader(data) gethScalars []*big.Int diff --git a/tests/fuzzers/bls12381/bls12381_test.go b/tests/fuzzers/bls12381/bls12381_test.go new file mode 100644 index 0000000000..3e88979d16 --- /dev/null +++ b/tests/fuzzers/bls12381/bls12381_test.go @@ -0,0 +1,100 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +//go:build cgo +// +build cgo + +package bls + +import "testing" + +func FuzzCrossPairing(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzCrossPairing(data) + }) +} + +func FuzzCrossG1Add(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzCrossG1Add(data) + }) +} + +func FuzzCrossG2Add(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzCrossG2Add(data) + }) +} + +func FuzzCrossG1MultiExp(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzCrossG1MultiExp(data) + }) +} + +func FuzzG1Add(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(blsG1Add, data) + }) +} + +func FuzzG1Mul(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(blsG1Mul, data) + }) +} + +func FuzzG1MultiExp(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(blsG1MultiExp, data) + }) +} + +func FuzzG2Add(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(blsG2Add, data) + }) +} + +func FuzzG2Mul(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(blsG2Mul, data) + }) +} + +func FuzzG2MultiExp(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(blsG2MultiExp, data) + }) +} + +func FuzzPairing(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(blsPairing, data) + }) +} + +func FuzzMapG1(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(blsMapG1, data) + }) +} + +func FuzzMapG2(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(blsMapG2, data) + }) +} diff --git a/tests/fuzzers/bls12381/precompile_fuzzer.go b/tests/fuzzers/bls12381/precompile_fuzzer.go index cab2bcba38..763ed56e9f 100644 --- a/tests/fuzzers/bls12381/precompile_fuzzer.go +++ b/tests/fuzzers/bls12381/precompile_fuzzer.go @@ -36,16 +36,6 @@ const ( blsMapG2 = byte(18) ) -func FuzzG1Add(data []byte) int { return fuzz(blsG1Add, data) } -func FuzzG1Mul(data []byte) int { return fuzz(blsG1Mul, data) } -func FuzzG1MultiExp(data []byte) int { return fuzz(blsG1MultiExp, data) } -func FuzzG2Add(data []byte) int { return fuzz(blsG2Add, data) } -func FuzzG2Mul(data []byte) int { return fuzz(blsG2Mul, data) } -func FuzzG2MultiExp(data []byte) int { return fuzz(blsG2MultiExp, data) } -func FuzzPairing(data []byte) int { return fuzz(blsPairing, data) } -func FuzzMapG1(data []byte) int { return fuzz(blsMapG1, data) } -func FuzzMapG2(data []byte) int { return fuzz(blsMapG2, data) } - func checkInput(id byte, inputLen int) bool { switch id { case blsG1Add: diff --git a/tests/fuzzers/bn256/bn256_fuzz.go b/tests/fuzzers/bn256/bn256_fuzz.go index abf1b88615..75f7d59dee 100644 --- a/tests/fuzzers/bn256/bn256_fuzz.go +++ b/tests/fuzzers/bn256/bn256_fuzz.go @@ -14,9 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -//go:build gofuzz -// +build gofuzz - package bn256 import ( @@ -64,8 +61,8 @@ func getG2Points(input io.Reader) (*cloudflare.G2, *google.G2, *bn254.G2Affine) return xc, xg, xs } -// FuzzAdd fuzzez bn256 addition between the Google and Cloudflare libraries. -func FuzzAdd(data []byte) int { +// fuzzAdd fuzzez bn256 addition between the Google and Cloudflare libraries. +func fuzzAdd(data []byte) int { input := bytes.NewReader(data) xc, xg, xs := getG1Points(input) if xc == nil { @@ -97,9 +94,9 @@ func FuzzAdd(data []byte) int { return 1 } -// FuzzMul fuzzez bn256 scalar multiplication between the Google and Cloudflare +// fuzzMul fuzzez bn256 scalar multiplication between the Google and Cloudflare // libraries. -func FuzzMul(data []byte) int { +func fuzzMul(data []byte) int { input := bytes.NewReader(data) pc, pg, ps := getG1Points(input) if pc == nil { @@ -139,7 +136,7 @@ func FuzzMul(data []byte) int { return 1 } -func FuzzPair(data []byte) int { +func fuzzPair(data []byte) int { input := bytes.NewReader(data) pc, pg, ps := getG1Points(input) if pc == nil { diff --git a/tests/fuzzers/snap/debug/main.go b/tests/fuzzers/bn256/bn256_test.go similarity index 64% rename from tests/fuzzers/snap/debug/main.go rename to tests/fuzzers/bn256/bn256_test.go index df46bb1e22..8b2f962284 100644 --- a/tests/fuzzers/snap/debug/main.go +++ b/tests/fuzzers/bn256/bn256_test.go @@ -1,4 +1,4 @@ -// Copyright 2020 The go-ethereum Authors +// Copyright 2023 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,25 +14,24 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package main +package bn256 -import ( - "fmt" - "os" +import "testing" - "github.com/ethereum/go-ethereum/tests/fuzzers/snap" -) +func FuzzAdd(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzAdd(data) + }) +} + +func FuzzMul(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzMul(data) + }) +} -func main() { - if len(os.Args) != 2 { - fmt.Fprintf(os.Stderr, "Usage: debug \n") - os.Exit(1) - } - crasher := os.Args[1] - data, err := os.ReadFile(crasher) - if err != nil { - fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) - os.Exit(1) - } - snap.FuzzTrieNodes(data) +func FuzzPair(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzzPair(data) + }) } diff --git a/tests/fuzzers/difficulty/difficulty-fuzz.go b/tests/fuzzers/difficulty/difficulty-fuzz.go index e8753bb623..fbbd7f6876 100644 --- a/tests/fuzzers/difficulty/difficulty-fuzz.go +++ b/tests/fuzzers/difficulty/difficulty-fuzz.go @@ -75,7 +75,7 @@ func (f *fuzzer) readBool() bool { // - 0 otherwise // // other values are reserved for future use. -func Fuzz(data []byte) int { +func fuzz(data []byte) int { f := fuzzer{ input: bytes.NewReader(data), exhausted: false, diff --git a/tests/fuzzers/difficulty/debug/main.go b/tests/fuzzers/difficulty/difficulty_test.go similarity index 63% rename from tests/fuzzers/difficulty/debug/main.go rename to tests/fuzzers/difficulty/difficulty_test.go index 70cf092568..49beedb486 100644 --- a/tests/fuzzers/difficulty/debug/main.go +++ b/tests/fuzzers/difficulty/difficulty_test.go @@ -1,4 +1,4 @@ -// Copyright 2020 The go-ethereum Authors +// Copyright 2023 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,25 +14,12 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package main +package difficulty -import ( - "fmt" - "os" +import "testing" - "github.com/ethereum/go-ethereum/tests/fuzzers/difficulty" -) - -func main() { - if len(os.Args) != 2 { - fmt.Fprintf(os.Stderr, "Usage: debug ") - os.Exit(1) - } - crasher := os.Args[1] - data, err := os.ReadFile(crasher) - if err != nil { - fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) - os.Exit(1) - } - difficulty.Fuzz(data) +func Fuzz(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(data) + }) } diff --git a/tests/fuzzers/keystore/corpus/0176eaf52ed014ec5c91cf4afa070dd3fd469077-1 b/tests/fuzzers/keystore/corpus/0176eaf52ed014ec5c91cf4afa070dd3fd469077-1 deleted file mode 100644 index 1c0ecf5250..0000000000 --- a/tests/fuzzers/keystore/corpus/0176eaf52ed014ec5c91cf4afa070dd3fd469077-1 +++ /dev/null @@ -1 +0,0 @@ -ns©›,²Ô \ No newline at end of file diff --git a/tests/fuzzers/les/debug/main.go b/tests/fuzzers/les/debug/main.go deleted file mode 100644 index 77a6127030..0000000000 --- a/tests/fuzzers/les/debug/main.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package main - -import ( - "fmt" - "os" - - "github.com/ethereum/go-ethereum/tests/fuzzers/les" -) - -func main() { - if len(os.Args) != 2 { - fmt.Fprintf(os.Stderr, "Usage: debug \n") - fmt.Fprintf(os.Stderr, "Example\n") - fmt.Fprintf(os.Stderr, " $ debug ../crashers/4bbef6857c733a87ecf6fd8b9e7238f65eb9862a\n") - os.Exit(1) - } - crasher := os.Args[1] - data, err := os.ReadFile(crasher) - if err != nil { - fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) - os.Exit(1) - } - les.Fuzz(data) -} diff --git a/tests/fuzzers/les/les-fuzzer.go b/tests/fuzzers/les/les-fuzzer.go deleted file mode 100644 index c29bb2ef12..0000000000 --- a/tests/fuzzers/les/les-fuzzer.go +++ /dev/null @@ -1,411 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package les - -import ( - "bytes" - "encoding/binary" - "io" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/txpool/legacypool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" - l "github.com/ethereum/go-ethereum/les" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie" -) - -var ( - bankKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - bankAddr = crypto.PubkeyToAddress(bankKey.PublicKey) - bankFunds = new(big.Int).Mul(big.NewInt(100), big.NewInt(params.Ether)) - - testChainLen = 256 - testContractCode = common.Hex2Bytes("606060405260cc8060106000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806360cd2685146041578063c16431b914606b57603f565b005b6055600480803590602001909190505060a9565b6040518082815260200191505060405180910390f35b60886004808035906020019091908035906020019091905050608a565b005b80600060005083606481101560025790900160005b50819055505b5050565b6000600060005082606481101560025790900160005b5054905060c7565b91905056") - - chain *core.BlockChain - addresses []common.Address - txHashes []common.Hash - - chtTrie *trie.Trie - bloomTrie *trie.Trie - chtKeys [][]byte - bloomKeys [][]byte -) - -func makechain() (bc *core.BlockChain, addresses []common.Address, txHashes []common.Hash) { - gspec := &core.Genesis{ - Config: params.TestChainConfig, - Alloc: core.GenesisAlloc{bankAddr: {Balance: bankFunds}}, - GasLimit: 100000000, - } - signer := types.HomesteadSigner{} - _, blocks, _ := core.GenerateChainWithGenesis(gspec, ethash.NewFaker(), testChainLen, - func(i int, gen *core.BlockGen) { - var ( - tx *types.Transaction - addr common.Address - ) - nonce := uint64(i) - if i%4 == 0 { - tx, _ = types.SignTx(types.NewContractCreation(nonce, big.NewInt(0), 200000, big.NewInt(0), testContractCode), signer, bankKey) - addr = crypto.CreateAddress(bankAddr, nonce) - } else { - addr = common.BigToAddress(big.NewInt(int64(i))) - tx, _ = types.SignTx(types.NewTransaction(nonce, addr, big.NewInt(10000), params.TxGas, big.NewInt(params.GWei), nil), signer, bankKey) - } - gen.AddTx(tx) - addresses = append(addresses, addr) - txHashes = append(txHashes, tx.Hash()) - }) - bc, _ = core.NewBlockChain(rawdb.NewMemoryDatabase(), nil, gspec, nil, ethash.NewFaker(), vm.Config{}, nil, nil) - if _, err := bc.InsertChain(blocks); err != nil { - panic(err) - } - return -} - -func makeTries() (chtTrie *trie.Trie, bloomTrie *trie.Trie, chtKeys, bloomKeys [][]byte) { - chtTrie = trie.NewEmpty(trie.NewDatabase(rawdb.NewMemoryDatabase(), trie.HashDefaults)) - bloomTrie = trie.NewEmpty(trie.NewDatabase(rawdb.NewMemoryDatabase(), trie.HashDefaults)) - for i := 0; i < testChainLen; i++ { - // The element in CHT is -> - key := make([]byte, 8) - binary.BigEndian.PutUint64(key, uint64(i+1)) - chtTrie.MustUpdate(key, []byte{0x1, 0xf}) - chtKeys = append(chtKeys, key) - - // The element in Bloom trie is <2 byte bit index> + -> bloom - key2 := make([]byte, 10) - binary.BigEndian.PutUint64(key2[2:], uint64(i+1)) - bloomTrie.MustUpdate(key2, []byte{0x2, 0xe}) - bloomKeys = append(bloomKeys, key2) - } - return -} - -func init() { - chain, addresses, txHashes = makechain() - chtTrie, bloomTrie, chtKeys, bloomKeys = makeTries() -} - -type fuzzer struct { - chain *core.BlockChain - pool *txpool.TxPool - - chainLen int - addresses []common.Address - txs []common.Hash - nonce uint64 - - chtKeys [][]byte - bloomKeys [][]byte - chtTrie *trie.Trie - bloomTrie *trie.Trie - - input io.Reader - exhausted bool -} - -func newFuzzer(input []byte) *fuzzer { - pool := legacypool.New(legacypool.DefaultConfig, chain) - txpool, _ := txpool.New(new(big.Int).SetUint64(legacypool.DefaultConfig.PriceLimit), chain, []txpool.SubPool{pool}) - - return &fuzzer{ - chain: chain, - chainLen: testChainLen, - addresses: addresses, - txs: txHashes, - chtTrie: chtTrie, - bloomTrie: bloomTrie, - chtKeys: chtKeys, - bloomKeys: bloomKeys, - nonce: uint64(len(txHashes)), - pool: txpool, - input: bytes.NewReader(input), - } -} - -func (f *fuzzer) read(size int) []byte { - out := make([]byte, size) - if _, err := f.input.Read(out); err != nil { - f.exhausted = true - } - return out -} - -func (f *fuzzer) randomByte() byte { - d := f.read(1) - return d[0] -} - -func (f *fuzzer) randomBool() bool { - d := f.read(1) - return d[0]&1 == 1 -} - -func (f *fuzzer) randomInt(max int) int { - if max == 0 { - return 0 - } - if max <= 256 { - return int(f.randomByte()) % max - } - var a uint16 - if err := binary.Read(f.input, binary.LittleEndian, &a); err != nil { - f.exhausted = true - } - return int(a % uint16(max)) -} - -func (f *fuzzer) randomX(max int) uint64 { - var a uint16 - if err := binary.Read(f.input, binary.LittleEndian, &a); err != nil { - f.exhausted = true - } - if a < 0x8000 { - return uint64(a%uint16(max+1)) - 1 - } - return (uint64(1)<<(a%64+1) - 1) & (uint64(a) * 343897772345826595) -} - -func (f *fuzzer) randomBlockHash() common.Hash { - h := f.chain.GetCanonicalHash(uint64(f.randomInt(3 * f.chainLen))) - if h != (common.Hash{}) { - return h - } - return common.BytesToHash(f.read(common.HashLength)) -} - -func (f *fuzzer) randomAddress() []byte { - i := f.randomInt(3 * len(f.addresses)) - if i < len(f.addresses) { - return f.addresses[i].Bytes() - } - return f.read(common.AddressLength) -} - -func (f *fuzzer) randomCHTTrieKey() []byte { - i := f.randomInt(3 * len(f.chtKeys)) - if i < len(f.chtKeys) { - return f.chtKeys[i] - } - return f.read(8) -} - -func (f *fuzzer) randomBloomTrieKey() []byte { - i := f.randomInt(3 * len(f.bloomKeys)) - if i < len(f.bloomKeys) { - return f.bloomKeys[i] - } - return f.read(10) -} - -func (f *fuzzer) randomTxHash() common.Hash { - i := f.randomInt(3 * len(f.txs)) - if i < len(f.txs) { - return f.txs[i] - } - return common.BytesToHash(f.read(common.HashLength)) -} - -func (f *fuzzer) BlockChain() *core.BlockChain { - return f.chain -} - -func (f *fuzzer) TxPool() *txpool.TxPool { - return f.pool -} - -func (f *fuzzer) ArchiveMode() bool { - return false -} - -func (f *fuzzer) AddTxsSync() bool { - return false -} - -func (f *fuzzer) GetHelperTrie(typ uint, index uint64) *trie.Trie { - if typ == 0 { - return f.chtTrie - } else if typ == 1 { - return f.bloomTrie - } - return nil -} - -type dummyMsg struct { - data []byte -} - -func (d dummyMsg) Decode(val interface{}) error { - return rlp.DecodeBytes(d.data, val) -} - -func (f *fuzzer) doFuzz(msgCode uint64, packet interface{}) { - enc, err := rlp.EncodeToBytes(packet) - if err != nil { - panic(err) - } - version := f.randomInt(3) + 2 // [LES2, LES3, LES4] - peer, closeFn := l.NewFuzzerPeer(version) - defer closeFn() - fn, _, _, err := l.Les3[msgCode].Handle(dummyMsg{enc}) - if err != nil { - panic(err) - } - fn(f, peer, func() bool { return true }) -} - -func Fuzz(input []byte) int { - // We expect some large inputs - if len(input) < 100 { - return -1 - } - f := newFuzzer(input) - if f.exhausted { - return -1 - } - for !f.exhausted { - switch f.randomInt(8) { - case 0: - req := &l.GetBlockHeadersPacket{ - Query: l.GetBlockHeadersData{ - Amount: f.randomX(l.MaxHeaderFetch + 1), - Skip: f.randomX(10), - Reverse: f.randomBool(), - }, - } - if f.randomBool() { - req.Query.Origin.Hash = f.randomBlockHash() - } else { - req.Query.Origin.Number = uint64(f.randomInt(f.chainLen * 2)) - } - f.doFuzz(l.GetBlockHeadersMsg, req) - - case 1: - req := &l.GetBlockBodiesPacket{Hashes: make([]common.Hash, f.randomInt(l.MaxBodyFetch+1))} - for i := range req.Hashes { - req.Hashes[i] = f.randomBlockHash() - } - f.doFuzz(l.GetBlockBodiesMsg, req) - - case 2: - req := &l.GetCodePacket{Reqs: make([]l.CodeReq, f.randomInt(l.MaxCodeFetch+1))} - for i := range req.Reqs { - req.Reqs[i] = l.CodeReq{ - BHash: f.randomBlockHash(), - AccountAddress: f.randomAddress(), - } - } - f.doFuzz(l.GetCodeMsg, req) - - case 3: - req := &l.GetReceiptsPacket{Hashes: make([]common.Hash, f.randomInt(l.MaxReceiptFetch+1))} - for i := range req.Hashes { - req.Hashes[i] = f.randomBlockHash() - } - f.doFuzz(l.GetReceiptsMsg, req) - - case 4: - req := &l.GetProofsPacket{Reqs: make([]l.ProofReq, f.randomInt(l.MaxProofsFetch+1))} - for i := range req.Reqs { - if f.randomBool() { - req.Reqs[i] = l.ProofReq{ - BHash: f.randomBlockHash(), - AccountAddress: f.randomAddress(), - Key: f.randomAddress(), - FromLevel: uint(f.randomX(3)), - } - } else { - req.Reqs[i] = l.ProofReq{ - BHash: f.randomBlockHash(), - Key: f.randomAddress(), - FromLevel: uint(f.randomX(3)), - } - } - } - f.doFuzz(l.GetProofsV2Msg, req) - - case 5: - req := &l.GetHelperTrieProofsPacket{Reqs: make([]l.HelperTrieReq, f.randomInt(l.MaxHelperTrieProofsFetch+1))} - for i := range req.Reqs { - switch f.randomInt(3) { - case 0: - // Canonical hash trie - req.Reqs[i] = l.HelperTrieReq{ - Type: 0, - TrieIdx: f.randomX(3), - Key: f.randomCHTTrieKey(), - FromLevel: uint(f.randomX(3)), - AuxReq: uint(2), - } - case 1: - // Bloom trie - req.Reqs[i] = l.HelperTrieReq{ - Type: 1, - TrieIdx: f.randomX(3), - Key: f.randomBloomTrieKey(), - FromLevel: uint(f.randomX(3)), - AuxReq: 0, - } - default: - // Random trie - req.Reqs[i] = l.HelperTrieReq{ - Type: 2, - TrieIdx: f.randomX(3), - Key: f.randomCHTTrieKey(), - FromLevel: uint(f.randomX(3)), - AuxReq: 0, - } - } - } - f.doFuzz(l.GetHelperTrieProofsMsg, req) - - case 6: - req := &l.SendTxPacket{Txs: make([]*types.Transaction, f.randomInt(l.MaxTxSend+1))} - signer := types.HomesteadSigner{} - for i := range req.Txs { - var nonce uint64 - if f.randomBool() { - nonce = uint64(f.randomByte()) - } else { - nonce = f.nonce - f.nonce += 1 - } - req.Txs[i], _ = types.SignTx(types.NewTransaction(nonce, common.Address{}, big.NewInt(10000), params.TxGas, big.NewInt(1000000000*int64(f.randomByte())), nil), signer, bankKey) - } - f.doFuzz(l.SendTxV2Msg, req) - - case 7: - req := &l.GetTxStatusPacket{Hashes: make([]common.Hash, f.randomInt(l.MaxTxStatus+1))} - for i := range req.Hashes { - req.Hashes[i] = f.randomTxHash() - } - f.doFuzz(l.GetTxStatusMsg, req) - } - } - return 0 -} diff --git a/tests/fuzzers/rangeproof/debug/main.go b/tests/fuzzers/rangeproof/debug/main.go deleted file mode 100644 index d4cab8ec46..0000000000 --- a/tests/fuzzers/rangeproof/debug/main.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package main - -import ( - "fmt" - "os" - - "github.com/ethereum/go-ethereum/tests/fuzzers/rangeproof" -) - -func main() { - if len(os.Args) != 2 { - fmt.Fprintf(os.Stderr, "Usage: debug \n") - fmt.Fprintf(os.Stderr, "Example\n") - fmt.Fprintf(os.Stderr, " $ debug ../crashers/4bbef6857c733a87ecf6fd8b9e7238f65eb9862a\n") - os.Exit(1) - } - crasher := os.Args[1] - data, err := os.ReadFile(crasher) - if err != nil { - fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) - os.Exit(1) - } - rangeproof.Fuzz(data) -} diff --git a/tests/fuzzers/rangeproof/rangeproof-fuzzer.go b/tests/fuzzers/rangeproof/rangeproof-fuzzer.go index c9d7815536..6b5ca90880 100644 --- a/tests/fuzzers/rangeproof/rangeproof-fuzzer.go +++ b/tests/fuzzers/rangeproof/rangeproof-fuzzer.go @@ -185,7 +185,7 @@ func (f *fuzzer) fuzz() int { // - 0 otherwise // // other values are reserved for future use. -func Fuzz(input []byte) int { +func fuzz(input []byte) int { if len(input) < 100 { return 0 } diff --git a/tests/fuzzers/rangeproof/rangeproof_test.go b/tests/fuzzers/rangeproof/rangeproof_test.go new file mode 100644 index 0000000000..bc7badc5b3 --- /dev/null +++ b/tests/fuzzers/rangeproof/rangeproof_test.go @@ -0,0 +1,25 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rangeproof + +import "testing" + +func Fuzz(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(data) + }) +} diff --git a/tests/fuzzers/rlp/corpus/block_with_uncle.rlp b/tests/fuzzers/rlp/corpus/block_with_uncle.rlp deleted file mode 100644 index 1b49fe6a095f6086ba3b2a22980818adb535c18f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1120 zcmey#68n?!=Yq7}+ib@e9?7`~NX2fJjiyVr+U(iMH>U2nKQ*W-BmB-4lRK+dE|_lmWY(#>TW%QlUAFykmm$S- z6L;&2dG1PHC*JheElMa{z?!Z6dzS~>v~BTEm(K22^jN4lk@?8i+8>t6R-exMEV{Il zkzu5RW+sLMEY14wcQplZw8XfVZEsjWC`dYB3VtO0NML4cW;v}tg)^>t-LhrJj~u%H zdV1Zj!)oh8b=$cbq!%pT{^{3bruc);R!JOO#eP`JHN~>jPcmn_zkaRIdAkX+?CBzT!UCj;%*;$U2*-e{<(!TeAEou1H-La+RLaRU-Uhq0?W7 zE0f))?70_Q^5^N>J$+hj(+>t4rq|`|=Uxz_7ZtdC?$Y*&Xa9w3pI?0c<%xv-^=oUV zTP$34F6{keqXl6vLf(k~H7y~eg RIWU2eSOX}5Z6zUr0RUb(3%vjU diff --git a/tests/fuzzers/rlp/corpus/r.bin b/tests/fuzzers/rlp/corpus/r.bin deleted file mode 100644 index cb98a76a8a..0000000000 --- a/tests/fuzzers/rlp/corpus/r.bin +++ /dev/null @@ -1 +0,0 @@ -Ë€€€À€ÀÃÀÀÀÀ \ No newline at end of file diff --git a/tests/fuzzers/rlp/corpus/transaction.rlp b/tests/fuzzers/rlp/corpus/transaction.rlp deleted file mode 100644 index 80eea1aec6..0000000000 --- a/tests/fuzzers/rlp/corpus/transaction.rlp +++ /dev/null @@ -1,2 +0,0 @@ -øNƒ“à€€€‚ -• aùËåÀP?-'´{ÏЋDY¯³fÆj\ÿE÷ ~ì•ÒçF?1(íij6@Év ±LÀÝÚ‘‘ \ No newline at end of file diff --git a/tests/fuzzers/rlp/rlp_fuzzer.go b/tests/fuzzers/rlp/rlp_fuzzer.go deleted file mode 100644 index 9fcdb57769..0000000000 --- a/tests/fuzzers/rlp/rlp_fuzzer.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package rlp - -import ( - "bytes" - "fmt" - "math/big" - - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rlp" - "github.com/holiman/uint256" -) - -func decodeEncode(input []byte, val interface{}, i int) { - if err := rlp.DecodeBytes(input, val); err == nil { - output, err := rlp.EncodeToBytes(val) - if err != nil { - panic(err) - } - if !bytes.Equal(input, output) { - panic(fmt.Sprintf("case %d: encode-decode is not equal, \ninput : %x\noutput: %x", i, input, output)) - } - } -} - -func Fuzz(input []byte) int { - if len(input) == 0 { - return 0 - } - if len(input) > 500*1024 { - return 0 - } - - var i int - { - rlp.Split(input) - } - { - if elems, _, err := rlp.SplitList(input); err == nil { - rlp.CountValues(elems) - } - } - - { - rlp.NewStream(bytes.NewReader(input), 0).Decode(new(interface{})) - } - - { - decodeEncode(input, new(interface{}), i) - i++ - } - { - var v struct { - Int uint - String string - Bytes []byte - } - decodeEncode(input, &v, i) - i++ - } - - { - type Types struct { - Bool bool - Raw rlp.RawValue - Slice []*Types - Iface []interface{} - } - var v Types - decodeEncode(input, &v, i) - i++ - } - { - type AllTypes struct { - Int uint - String string - Bytes []byte - Bool bool - Raw rlp.RawValue - Slice []*AllTypes - Array [3]*AllTypes - Iface []interface{} - } - var v AllTypes - decodeEncode(input, &v, i) - i++ - } - { - decodeEncode(input, [10]byte{}, i) - i++ - } - { - var v struct { - Byte [10]byte - Rool [10]bool - } - decodeEncode(input, &v, i) - i++ - } - { - var h types.Header - decodeEncode(input, &h, i) - i++ - var b types.Block - decodeEncode(input, &b, i) - i++ - var t types.Transaction - decodeEncode(input, &t, i) - i++ - var txs types.Transactions - decodeEncode(input, &txs, i) - i++ - var rs types.Receipts - decodeEncode(input, &rs, i) - } - { - i++ - var v struct { - AnIntPtr *big.Int - AnInt big.Int - AnU256Ptr *uint256.Int - AnU256 uint256.Int - NotAnU256 [4]uint64 - } - decodeEncode(input, &v, i) - } - return 1 -} diff --git a/tests/fuzzers/secp256k1/secp_fuzzer.go b/tests/fuzzers/secp256k1/secp_fuzzer.go deleted file mode 100644 index 47083d5fe3..0000000000 --- a/tests/fuzzers/secp256k1/secp_fuzzer.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// build +gofuzz - -package secp256k1 - -import ( - "fmt" - - "github.com/btcsuite/btcd/btcec/v2" - "github.com/ethereum/go-ethereum/crypto/secp256k1" - fuzz "github.com/google/gofuzz" -) - -func Fuzz(input []byte) int { - var ( - fuzzer = fuzz.NewFromGoFuzz(input) - curveA = secp256k1.S256() - curveB = btcec.S256() - dataP1 []byte - dataP2 []byte - ) - // first point - fuzzer.Fuzz(&dataP1) - x1, y1 := curveB.ScalarBaseMult(dataP1) - // second point - fuzzer.Fuzz(&dataP2) - x2, y2 := curveB.ScalarBaseMult(dataP2) - resAX, resAY := curveA.Add(x1, y1, x2, y2) - resBX, resBY := curveB.Add(x1, y1, x2, y2) - if resAX.Cmp(resBX) != 0 || resAY.Cmp(resBY) != 0 { - fmt.Printf("%s %s %s %s\n", x1, y1, x2, y2) - panic(fmt.Sprintf("Addition failed: geth: %s %s btcd: %s %s", resAX, resAY, resBX, resBY)) - } - return 0 -} diff --git a/tests/fuzzers/secp256k1/secp_test.go b/tests/fuzzers/secp256k1/secp_test.go index 0ca16cb9bf..ca3039764b 100644 --- a/tests/fuzzers/secp256k1/secp_test.go +++ b/tests/fuzzers/secp256k1/secp_test.go @@ -16,9 +16,38 @@ package secp256k1 -import "testing" +import ( + "fmt" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/ethereum/go-ethereum/crypto/secp256k1" +) func TestFuzzer(t *testing.T) { - test := "00000000N0000000/R00000000000000000U0000S0000000mkhP000000000000000U" - Fuzz([]byte(test)) + a, b := "00000000N0000000/R0000000000000000", "0U0000S0000000mkhP000000000000000U" + fuzz([]byte(a), []byte(b)) +} + +func Fuzz(f *testing.F) { + f.Fuzz(func(t *testing.T, a, b []byte) { + fuzz(a, b) + }) +} + +func fuzz(dataP1, dataP2 []byte) { + var ( + curveA = secp256k1.S256() + curveB = btcec.S256() + ) + // first point + x1, y1 := curveB.ScalarBaseMult(dataP1) + // second points + x2, y2 := curveB.ScalarBaseMult(dataP2) + resAX, resAY := curveA.Add(x1, y1, x2, y2) + resBX, resBY := curveB.Add(x1, y1, x2, y2) + if resAX.Cmp(resBX) != 0 || resAY.Cmp(resBY) != 0 { + fmt.Printf("%s %s %s %s\n", x1, y1, x2, y2) + panic(fmt.Sprintf("Addition failed: geth: %s %s btcd: %s %s", resAX, resAY, resBX, resBY)) + } } diff --git a/tests/fuzzers/stacktrie/trie_fuzzer.go b/tests/fuzzers/stacktrie/trie_fuzzer.go deleted file mode 100644 index 20b8ca24b3..0000000000 --- a/tests/fuzzers/stacktrie/trie_fuzzer.go +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stacktrie - -import ( - "bytes" - "encoding/binary" - "errors" - "fmt" - "hash" - "io" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/trie" - "github.com/ethereum/go-ethereum/trie/trienode" - "golang.org/x/crypto/sha3" - "golang.org/x/exp/slices" -) - -type fuzzer struct { - input io.Reader - exhausted bool - debugging bool -} - -func (f *fuzzer) read(size int) []byte { - out := make([]byte, size) - if _, err := f.input.Read(out); err != nil { - f.exhausted = true - } - return out -} - -func (f *fuzzer) readSlice(min, max int) []byte { - var a uint16 - binary.Read(f.input, binary.LittleEndian, &a) - size := min + int(a)%(max-min) - out := make([]byte, size) - if _, err := f.input.Read(out); err != nil { - f.exhausted = true - } - return out -} - -// spongeDb is a dummy db backend which accumulates writes in a sponge -type spongeDb struct { - sponge hash.Hash - debug bool -} - -func (s *spongeDb) Has(key []byte) (bool, error) { panic("implement me") } -func (s *spongeDb) Get(key []byte) ([]byte, error) { return nil, errors.New("no such elem") } -func (s *spongeDb) Delete(key []byte) error { panic("implement me") } -func (s *spongeDb) NewBatch() ethdb.Batch { return &spongeBatch{s} } -func (s *spongeDb) NewBatchWithSize(size int) ethdb.Batch { return &spongeBatch{s} } -func (s *spongeDb) NewSnapshot() (ethdb.Snapshot, error) { panic("implement me") } -func (s *spongeDb) Stat(property string) (string, error) { panic("implement me") } -func (s *spongeDb) Compact(start []byte, limit []byte) error { panic("implement me") } -func (s *spongeDb) Close() error { return nil } - -func (s *spongeDb) Put(key []byte, value []byte) error { - if s.debug { - fmt.Printf("db.Put %x : %x\n", key, value) - } - s.sponge.Write(key) - s.sponge.Write(value) - return nil -} -func (s *spongeDb) NewIterator(prefix []byte, start []byte) ethdb.Iterator { panic("implement me") } - -// spongeBatch is a dummy batch which immediately writes to the underlying spongedb -type spongeBatch struct { - db *spongeDb -} - -func (b *spongeBatch) Put(key, value []byte) error { - b.db.Put(key, value) - return nil -} -func (b *spongeBatch) Delete(key []byte) error { panic("implement me") } -func (b *spongeBatch) ValueSize() int { return 100 } -func (b *spongeBatch) Write() error { return nil } -func (b *spongeBatch) Reset() {} -func (b *spongeBatch) Replay(w ethdb.KeyValueWriter) error { return nil } - -type kv struct { - k, v []byte -} - -// Fuzz is the fuzzing entry-point. -// The function must return -// -// - 1 if the fuzzer should increase priority of the -// given input during subsequent fuzzing (for example, the input is lexically -// correct and was parsed successfully); -// - -1 if the input must not be added to corpus even if gives new coverage; and -// - 0 otherwise -// -// other values are reserved for future use. -func Fuzz(data []byte) int { - f := fuzzer{ - input: bytes.NewReader(data), - exhausted: false, - } - return f.fuzz() -} - -func Debug(data []byte) int { - f := fuzzer{ - input: bytes.NewReader(data), - exhausted: false, - debugging: true, - } - return f.fuzz() -} - -func (f *fuzzer) fuzz() int { - // This spongeDb is used to check the sequence of disk-db-writes - var ( - spongeA = &spongeDb{sponge: sha3.NewLegacyKeccak256()} - dbA = trie.NewDatabase(rawdb.NewDatabase(spongeA), nil) - trieA = trie.NewEmpty(dbA) - spongeB = &spongeDb{sponge: sha3.NewLegacyKeccak256()} - dbB = trie.NewDatabase(rawdb.NewDatabase(spongeB), nil) - trieB = trie.NewStackTrie(func(path []byte, hash common.Hash, blob []byte) { - rawdb.WriteTrieNode(spongeB, common.Hash{}, path, hash, blob, dbB.Scheme()) - }) - vals []kv - useful bool - maxElements = 10000 - // operate on unique keys only - keys = make(map[string]struct{}) - ) - // Fill the trie with elements - for i := 0; !f.exhausted && i < maxElements; i++ { - k := f.read(32) - v := f.readSlice(1, 500) - if f.exhausted { - // If it was exhausted while reading, the value may be all zeroes, - // thus 'deletion' which is not supported on stacktrie - break - } - if _, present := keys[string(k)]; present { - // This key is a duplicate, ignore it - continue - } - keys[string(k)] = struct{}{} - vals = append(vals, kv{k: k, v: v}) - trieA.MustUpdate(k, v) - useful = true - } - if !useful { - return 0 - } - // Flush trie -> database - rootA, nodes, err := trieA.Commit(false) - if err != nil { - panic(err) - } - if nodes != nil { - dbA.Update(rootA, types.EmptyRootHash, 0, trienode.NewWithNodeSet(nodes), nil) - } - // Flush memdb -> disk (sponge) - dbA.Commit(rootA, false) - - // Stacktrie requires sorted insertion - slices.SortFunc(vals, func(a, b kv) int { - return bytes.Compare(a.k, b.k) - }) - for _, kv := range vals { - if f.debugging { - fmt.Printf("{\"%#x\" , \"%#x\"} // stacktrie.Update\n", kv.k, kv.v) - } - trieB.MustUpdate(kv.k, kv.v) - } - rootB := trieB.Hash() - trieB.Commit() - if rootA != rootB { - panic(fmt.Sprintf("roots differ: (trie) %x != %x (stacktrie)", rootA, rootB)) - } - sumA := spongeA.sponge.Sum(nil) - sumB := spongeB.sponge.Sum(nil) - if !bytes.Equal(sumA, sumB) { - panic(fmt.Sprintf("sequence differ: (trie) %x != %x (stacktrie)", sumA, sumB)) - } - - // Ensure all the nodes are persisted correctly - var ( - nodeset = make(map[string][]byte) // path -> blob - trieC = trie.NewStackTrie(func(path []byte, hash common.Hash, blob []byte) { - if crypto.Keccak256Hash(blob) != hash { - panic("invalid node blob") - } - nodeset[string(path)] = common.CopyBytes(blob) - }) - checked int - ) - for _, kv := range vals { - trieC.MustUpdate(kv.k, kv.v) - } - rootC, _ := trieC.Commit() - if rootA != rootC { - panic(fmt.Sprintf("roots differ: (trie) %x != %x (stacktrie)", rootA, rootC)) - } - trieA, _ = trie.New(trie.TrieID(rootA), dbA) - iterA := trieA.MustNodeIterator(nil) - for iterA.Next(true) { - if iterA.Hash() == (common.Hash{}) { - if _, present := nodeset[string(iterA.Path())]; present { - panic("unexpected tiny node") - } - continue - } - nodeBlob, present := nodeset[string(iterA.Path())] - if !present { - panic("missing node") - } - if !bytes.Equal(nodeBlob, iterA.NodeBlob()) { - panic("node blob is not matched") - } - checked += 1 - } - if checked != len(nodeset) { - panic("node number is not matched") - } - return 1 -} diff --git a/tests/fuzzers/trie/corpus/data b/tests/fuzzers/trie/corpus/data deleted file mode 100644 index c4a4839cb8..0000000000 --- a/tests/fuzzers/trie/corpus/data +++ /dev/null @@ -1 +0,0 @@ -asdlfkjasf23oiejfasdfadkfqlkjfasdlkfjalwk4jfalsdkfjawlefkjsadlfkjasldkfjwalefkjasdlfkjM \ No newline at end of file diff --git a/tests/fuzzers/trie/trie-fuzzer.go b/tests/fuzzers/trie/trie-fuzzer.go deleted file mode 100644 index 687f5efb1c..0000000000 --- a/tests/fuzzers/trie/trie-fuzzer.go +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package trie - -import ( - "bytes" - "encoding/binary" - "errors" - "fmt" - - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/trie" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -// randTest performs random trie operations. -// Instances of this test are created by Generate. -type randTest []randTestStep - -type randTestStep struct { - op int - key []byte // for opUpdate, opDelete, opGet - value []byte // for opUpdate - err error // for debugging -} - -type proofDb struct{} - -func (proofDb) Put(key []byte, value []byte) error { - return nil -} - -func (proofDb) Delete(key []byte) error { - return nil -} - -const ( - opUpdate = iota - opDelete - opGet - opHash - opCommit - opItercheckhash - opProve - opMax // boundary value, not an actual op -) - -type dataSource struct { - input []byte - reader *bytes.Reader -} - -func newDataSource(input []byte) *dataSource { - return &dataSource{ - input, bytes.NewReader(input), - } -} -func (ds *dataSource) readByte() byte { - if b, err := ds.reader.ReadByte(); err != nil { - return 0 - } else { - return b - } -} -func (ds *dataSource) Read(buf []byte) (int, error) { - return ds.reader.Read(buf) -} -func (ds *dataSource) Ended() bool { - return ds.reader.Len() == 0 -} - -func Generate(input []byte) randTest { - var allKeys [][]byte - r := newDataSource(input) - genKey := func() []byte { - if len(allKeys) < 2 || r.readByte() < 0x0f { - // new key - key := make([]byte, r.readByte()%50) - r.Read(key) - allKeys = append(allKeys, key) - return key - } - // use existing key - return allKeys[int(r.readByte())%len(allKeys)] - } - - var steps randTest - - for i := 0; !r.Ended(); i++ { - step := randTestStep{op: int(r.readByte()) % opMax} - switch step.op { - case opUpdate: - step.key = genKey() - step.value = make([]byte, 8) - binary.BigEndian.PutUint64(step.value, uint64(i)) - case opGet, opDelete, opProve: - step.key = genKey() - } - steps = append(steps, step) - if len(steps) > 500 { - break - } - } - - return steps -} - -// Fuzz is the fuzzing entry-point. -// The function must return -// -// - 1 if the fuzzer should increase priority of the -// given input during subsequent fuzzing (for example, the input is lexically -// correct and was parsed successfully); -// - -1 if the input must not be added to corpus even if gives new coverage; and -// - 0 otherwise -// -// other values are reserved for future use. -func Fuzz(input []byte) int { - program := Generate(input) - if len(program) == 0 { - return 0 - } - if err := runRandTest(program); err != nil { - panic(err) - } - return 1 -} - -func runRandTest(rt randTest) error { - var ( - triedb = trie.NewDatabase(rawdb.NewMemoryDatabase(), nil) - tr = trie.NewEmpty(triedb) - origin = types.EmptyRootHash - values = make(map[string]string) // tracks content of the trie - ) - for i, step := range rt { - switch step.op { - case opUpdate: - tr.MustUpdate(step.key, step.value) - values[string(step.key)] = string(step.value) - case opDelete: - tr.MustDelete(step.key) - delete(values, string(step.key)) - case opGet: - v := tr.MustGet(step.key) - want := values[string(step.key)] - if string(v) != want { - rt[i].err = fmt.Errorf("mismatch for key %#x, got %#x want %#x", step.key, v, want) - } - case opHash: - tr.Hash() - case opCommit: - hash, nodes, err := tr.Commit(false) - if err != nil { - return err - } - if nodes != nil { - if err := triedb.Update(hash, origin, 0, trienode.NewWithNodeSet(nodes), nil); err != nil { - return err - } - } - newtr, err := trie.New(trie.TrieID(hash), triedb) - if err != nil { - return err - } - tr = newtr - origin = hash - case opItercheckhash: - checktr := trie.NewEmpty(triedb) - it := trie.NewIterator(tr.MustNodeIterator(nil)) - for it.Next() { - checktr.MustUpdate(it.Key, it.Value) - } - if tr.Hash() != checktr.Hash() { - return errors.New("hash mismatch in opItercheckhash") - } - case opProve: - rt[i].err = tr.Prove(step.key, proofDb{}) - } - // Abort the test on error. - if rt[i].err != nil { - return rt[i].err - } - } - return nil -} diff --git a/tests/fuzzers/txfetcher/txfetcher_fuzzer.go b/tests/fuzzers/txfetcher/txfetcher_fuzzer.go index 8b501645b6..51f2fc3b4d 100644 --- a/tests/fuzzers/txfetcher/txfetcher_fuzzer.go +++ b/tests/fuzzers/txfetcher/txfetcher_fuzzer.go @@ -48,7 +48,7 @@ func init() { } } -func Fuzz(input []byte) int { +func fuzz(input []byte) int { // Don't generate insanely large test cases, not much value in them if len(input) > 16*1024 { return 0 diff --git a/tests/fuzzers/txfetcher/txfetcher_test.go b/tests/fuzzers/txfetcher/txfetcher_test.go new file mode 100644 index 0000000000..ac2e6b1c67 --- /dev/null +++ b/tests/fuzzers/txfetcher/txfetcher_test.go @@ -0,0 +1,25 @@ +// Copyright 2023 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package txfetcher + +import "testing" + +func Fuzz(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(data) + }) +} diff --git a/tests/fuzzers/vflux/clientpool-fuzzer.go b/tests/fuzzers/vflux/clientpool-fuzzer.go deleted file mode 100644 index b3b523cc82..0000000000 --- a/tests/fuzzers/vflux/clientpool-fuzzer.go +++ /dev/null @@ -1,333 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package vflux - -import ( - "bytes" - "encoding/binary" - "io" - "math" - "math/big" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb/memorydb" - "github.com/ethereum/go-ethereum/les/vflux" - vfs "github.com/ethereum/go-ethereum/les/vflux/server" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/enr" - "github.com/ethereum/go-ethereum/rlp" -) - -var ( - debugMode = false - doLog = func(msg string, ctx ...interface{}) { - if !debugMode { - return - } - log.Info(msg, ctx...) - } -) - -type fuzzer struct { - peers [256]*clientPeer - disconnectList []*clientPeer - input io.Reader - exhausted bool - activeCount, activeCap uint64 - maxCount, maxCap uint64 -} - -type clientPeer struct { - fuzzer *fuzzer - node *enode.Node - freeID string - timeout time.Duration - - balance vfs.ConnectedBalance - capacity uint64 -} - -func (p *clientPeer) Node() *enode.Node { - return p.node -} - -func (p *clientPeer) FreeClientId() string { - return p.freeID -} - -func (p *clientPeer) InactiveAllowance() time.Duration { - return p.timeout -} - -func (p *clientPeer) UpdateCapacity(newCap uint64, requested bool) { - origin, originTotal := p.capacity, p.fuzzer.activeCap - p.fuzzer.activeCap -= p.capacity - if p.capacity != 0 { - p.fuzzer.activeCount-- - } - p.capacity = newCap - p.fuzzer.activeCap += p.capacity - if p.capacity != 0 { - p.fuzzer.activeCount++ - } - doLog("Update capacity", "peer", p.node.ID(), "origin", origin, "cap", newCap, "origintotal", originTotal, "total", p.fuzzer.activeCap, "requested", requested) -} - -func (p *clientPeer) Disconnect() { - origin, originTotal := p.capacity, p.fuzzer.activeCap - p.fuzzer.disconnectList = append(p.fuzzer.disconnectList, p) - p.fuzzer.activeCap -= p.capacity - if p.capacity != 0 { - p.fuzzer.activeCount-- - } - p.capacity = 0 - p.balance = nil - doLog("Disconnect", "peer", p.node.ID(), "origin", origin, "origintotal", originTotal, "total", p.fuzzer.activeCap) -} - -func newFuzzer(input []byte) *fuzzer { - f := &fuzzer{ - input: bytes.NewReader(input), - } - for i := range f.peers { - f.peers[i] = &clientPeer{ - fuzzer: f, - node: enode.SignNull(new(enr.Record), enode.ID{byte(i)}), - freeID: string([]byte{byte(i)}), - timeout: f.randomDelay(), - } - } - return f -} - -func (f *fuzzer) read(size int) []byte { - out := make([]byte, size) - if _, err := f.input.Read(out); err != nil { - f.exhausted = true - } - return out -} - -func (f *fuzzer) randomByte() byte { - d := f.read(1) - return d[0] -} - -func (f *fuzzer) randomBool() bool { - d := f.read(1) - return d[0]&1 == 1 -} - -func (f *fuzzer) randomInt(max int) int { - if max == 0 { - return 0 - } - if max <= 256 { - return int(f.randomByte()) % max - } - var a uint16 - if err := binary.Read(f.input, binary.LittleEndian, &a); err != nil { - f.exhausted = true - } - return int(a % uint16(max)) -} - -func (f *fuzzer) randomTokenAmount(signed bool) int64 { - x := uint64(f.randomInt(65000)) - x = x * x * x * x - - if signed && (x&1) == 1 { - if x <= math.MaxInt64 { - return -int64(x) - } - return math.MinInt64 - } - if x <= math.MaxInt64 { - return int64(x) - } - return math.MaxInt64 -} - -func (f *fuzzer) randomDelay() time.Duration { - delay := f.randomByte() - if delay < 128 { - return time.Duration(delay) * time.Second - } - return 0 -} - -func (f *fuzzer) randomFactors() vfs.PriceFactors { - return vfs.PriceFactors{ - TimeFactor: float64(f.randomByte()) / 25500, - CapacityFactor: float64(f.randomByte()) / 255, - RequestFactor: float64(f.randomByte()) / 255, - } -} - -func (f *fuzzer) connectedBalanceOp(balance vfs.ConnectedBalance, id enode.ID) { - switch f.randomInt(3) { - case 0: - cost := uint64(f.randomTokenAmount(false)) - balance.RequestServed(cost) - doLog("Serve request cost", "id", id, "amount", cost) - case 1: - posFactor, negFactor := f.randomFactors(), f.randomFactors() - balance.SetPriceFactors(posFactor, negFactor) - doLog("Set price factor", "pos", posFactor, "neg", negFactor) - case 2: - balance.GetBalance() - balance.GetRawBalance() - balance.GetPriceFactors() - } -} - -func (f *fuzzer) atomicBalanceOp(balance vfs.AtomicBalanceOperator, id enode.ID) { - switch f.randomInt(3) { - case 0: - amount := f.randomTokenAmount(true) - balance.AddBalance(amount) - doLog("Add balance", "id", id, "amount", amount) - case 1: - pos, neg := uint64(f.randomTokenAmount(false)), uint64(f.randomTokenAmount(false)) - balance.SetBalance(pos, neg) - doLog("Set balance", "id", id, "pos", pos, "neg", neg) - case 2: - balance.GetBalance() - balance.GetRawBalance() - balance.GetPriceFactors() - } -} - -func FuzzClientPool(input []byte) int { - if len(input) > 10000 { - return -1 - } - f := newFuzzer(input) - if f.exhausted { - return 0 - } - clock := &mclock.Simulated{} - db := memorydb.New() - pool := vfs.NewClientPool(db, 10, f.randomDelay(), clock, func() bool { return true }) - pool.Start() - defer pool.Stop() - - count := 0 - for !f.exhausted && count < 1000 { - count++ - switch f.randomInt(11) { - case 0: - i := int(f.randomByte()) - f.peers[i].balance = pool.Register(f.peers[i]) - doLog("Register peer", "id", f.peers[i].node.ID()) - case 1: - i := int(f.randomByte()) - f.peers[i].Disconnect() - doLog("Disconnect peer", "id", f.peers[i].node.ID()) - case 2: - f.maxCount = uint64(f.randomByte()) - f.maxCap = uint64(f.randomByte()) - f.maxCap *= f.maxCap - - count, cap := pool.Limits() - pool.SetLimits(f.maxCount, f.maxCap) - doLog("Set limits", "maxcount", f.maxCount, "maxcap", f.maxCap, "origincount", count, "oricap", cap) - case 3: - bias := f.randomDelay() - pool.SetConnectedBias(f.randomDelay()) - doLog("Set connection bias", "bias", bias) - case 4: - pos, neg := f.randomFactors(), f.randomFactors() - pool.SetDefaultFactors(pos, neg) - doLog("Set default factors", "pos", pos, "neg", neg) - case 5: - pos, neg := uint64(f.randomInt(50000)), uint64(f.randomInt(50000)) - pool.SetExpirationTCs(pos, neg) - doLog("Set expiration constants", "pos", pos, "neg", neg) - case 6: - var ( - index = f.randomByte() - reqCap = uint64(f.randomByte()) - bias = f.randomDelay() - requested = f.randomBool() - ) - pool.SetCapacity(f.peers[index].node, reqCap, bias, requested) - doLog("Set capacity", "id", f.peers[index].node.ID(), "reqcap", reqCap, "bias", bias, "requested", requested) - case 7: - index := f.randomByte() - if balance := f.peers[index].balance; balance != nil { - f.connectedBalanceOp(balance, f.peers[index].node.ID()) - } - case 8: - index := f.randomByte() - pool.BalanceOperation(f.peers[index].node.ID(), f.peers[index].freeID, func(balance vfs.AtomicBalanceOperator) { - count := f.randomInt(4) - for i := 0; i < count; i++ { - f.atomicBalanceOp(balance, f.peers[index].node.ID()) - } - }) - case 9: - pool.TotalTokenAmount() - pool.GetExpirationTCs() - pool.Active() - pool.Limits() - pool.GetPosBalanceIDs(f.peers[f.randomByte()].node.ID(), f.peers[f.randomByte()].node.ID(), f.randomInt(100)) - case 10: - req := vflux.CapacityQueryReq{ - Bias: uint64(f.randomByte()), - AddTokens: make([]vflux.IntOrInf, f.randomInt(vflux.CapacityQueryMaxLen+1)), - } - for i := range req.AddTokens { - v := vflux.IntOrInf{Type: uint8(f.randomInt(4))} - if v.Type < 2 { - v.Value = *big.NewInt(f.randomTokenAmount(false)) - } - req.AddTokens[i] = v - } - reqEnc, err := rlp.EncodeToBytes(&req) - if err != nil { - panic(err) - } - p := int(f.randomByte()) - if p < len(reqEnc) { - reqEnc[p] = f.randomByte() - } - pool.Handle(f.peers[f.randomByte()].node.ID(), f.peers[f.randomByte()].freeID, vflux.CapacityQueryName, reqEnc) - } - - for _, peer := range f.disconnectList { - pool.Unregister(peer) - doLog("Unregister peer", "id", peer.node.ID()) - } - f.disconnectList = nil - if d := f.randomDelay(); d > 0 { - clock.Run(d) - } - doLog("Clientpool stats in fuzzer", "count", f.activeCap, "maxcount", f.maxCount, "cap", f.activeCap, "maxcap", f.maxCap) - activeCount, activeCap := pool.Active() - doLog("Clientpool stats in pool", "count", activeCount, "cap", activeCap) - if activeCount != f.activeCount || activeCap != f.activeCap { - panic(nil) - } - if f.activeCount > f.maxCount || f.activeCap > f.maxCap { - panic(nil) - } - } - return 0 -} diff --git a/tests/fuzzers/vflux/debug/main.go b/tests/fuzzers/vflux/debug/main.go deleted file mode 100644 index e6cec04606..0000000000 --- a/tests/fuzzers/vflux/debug/main.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package main - -import ( - "fmt" - "os" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/tests/fuzzers/vflux" -) - -func main() { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) - - if len(os.Args) != 2 { - fmt.Fprintf(os.Stderr, "Usage: debug \n") - fmt.Fprintf(os.Stderr, "Example\n") - fmt.Fprintf(os.Stderr, " $ debug ../crashers/4bbef6857c733a87ecf6fd8b9e7238f65eb9862a\n") - os.Exit(1) - } - crasher := os.Args[1] - data, err := os.ReadFile(crasher) - if err != nil { - fmt.Fprintf(os.Stderr, "error loading crasher %v: %v", crasher, err) - os.Exit(1) - } - vflux.FuzzClientPool(data) -} diff --git a/tests/state_test.go b/tests/state_test.go index aebedb1179..3d59db6bbe 100644 --- a/tests/state_test.go +++ b/tests/state_test.go @@ -21,9 +21,11 @@ import ( "bytes" "fmt" "math/big" + "math/rand" "os" "path/filepath" "reflect" + "runtime" "strings" "testing" "time" @@ -76,6 +78,10 @@ func TestState(t *testing.T) { benchmarksDir, } { st.walk(t, dir, func(t *testing.T, name string, test *StateTest) { + if runtime.GOARCH == "386" && runtime.GOOS == "windows" && rand.Int63()%2 == 0 { + t.Skip("test (randomly) skipped on 32-bit windows") + return + } for _, subtest := range test.Subtests() { subtest := subtest key := fmt.Sprintf("%s/%d", subtest.Fork, subtest.Index) @@ -224,7 +230,10 @@ func runBenchmark(b *testing.B, t *StateTest) { vmconfig.ExtraEips = eips block := t.genesis(config).ToBlock() triedb, _, statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre, false, rawdb.HashScheme) - defer triedb.Close() + defer func() { + triedb.Journal(triedb.Head()) + triedb.Close() + }() var baseFee *big.Int if rules.IsLondon { diff --git a/tests/state_test_util.go b/tests/state_test_util.go index d09b29b762..231bde8def 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -25,6 +25,8 @@ import ( "strconv" "strings" + "golang.org/x/crypto/sha3" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" @@ -41,7 +43,6 @@ import ( "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie/triedb/hashdb" "github.com/ethereum/go-ethereum/trie/triedb/pathdb" - "golang.org/x/crypto/sha3" ) // StateTest checks transaction processing without block context. @@ -198,8 +199,12 @@ func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config, snapshotter bo postCheck(result, snaps, statedb) if triedb != nil { + triedb.Journal(triedb.Head()) triedb.Close() } + if snaps != nil { + snaps.Release() + } }() checkedErr := t.checkError(subtest, err) if checkedErr != nil { @@ -247,6 +252,7 @@ func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapsh post := t.json.Post[subtest.Fork][subtest.Index] msg, err := t.json.Tx.toMessage(post, baseFee) if err != nil { + triedb.Journal(triedb.Head()) triedb.Close() return nil, nil, nil, common.Hash{}, err } @@ -256,11 +262,13 @@ func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapsh var ttx types.Transaction err := ttx.UnmarshalBinary(post.TxBytes) if err != nil { + triedb.Journal(triedb.Head()) triedb.Close() return nil, nil, nil, common.Hash{}, err } if _, err := types.Sender(types.LatestSigner(config), &ttx); err != nil { + triedb.Journal(triedb.Head()) triedb.Close() return nil, nil, nil, common.Hash{}, err } @@ -297,8 +305,10 @@ func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapsh // the coinbase gets no txfee, so isn't created, and thus needs to be touched statedb.AddBalance(block.Coinbase(), new(big.Int)) + root := statedb.IntermediateRoot(config.IsEIP158(block.Number())) + statedb.SetExpectedStateRoot(root) // Commit state mutations into database. - root, _ := statedb.Commit(block.NumberU64(), config.IsEIP158(block.Number())) + root, _ = statedb.Commit(block.NumberU64(), config.IsEIP158(block.Number())) return triedb, snaps, statedb, root, err } @@ -325,7 +335,9 @@ func MakePreState(db ethdb.Database, accounts core.GenesisAlloc, snapshotter boo } } // Commit and re-open to start with a clean state. - root, _ := statedb.Commit(0, false) + root := statedb.IntermediateRoot(false) + statedb.SetExpectedStateRoot(root) + root, _ = statedb.Commit(0, false) var snaps *snapshot.Tree if snapshotter { diff --git a/trie/database.go b/trie/database.go index 256db6d6ec..a49049c61b 100644 --- a/trie/database.go +++ b/trie/database.go @@ -33,8 +33,10 @@ import ( // Config defines all necessary options for database. type Config struct { Preimages bool // Flag whether the preimage of node key is recorded + IsVerkle bool // Flag whether the db is holding a verkle tree HashDB *hashdb.Config // Configs for hash-based scheme PathDB *pathdb.Config // Configs for experimental path-based scheme + NoTries bool } // HashDefaults represents a config for using hash-based scheme with @@ -273,17 +275,6 @@ func (db *Database) Dereference(root common.Hash) error { return nil } -// Node retrieves the rlp-encoded node blob with provided node hash. It's -// only supported by hash-based database and will return an error for others. -// Note, this function should be deprecated once ETH66 is deprecated. -func (db *Database) Node(hash common.Hash) ([]byte, error) { - hdb, ok := db.backend.(*hashdb.Database) - if !ok { - return nil, errors.New("not supported") - } - return hdb.Node(hash) -} - // Recover rollbacks the database to a specified historical point. The state is // supported as the rollback destination only if it's canonical state and the // corresponding trie histories are existent. It's only supported by path-based @@ -363,3 +354,12 @@ func (db *Database) Head() common.Hash { } return pdb.Head() } + +// IsVerkle returns the indicator if the database is holding a verkle tree. +func (db *Database) IsVerkle() bool { + return db.config.IsVerkle +} + +func (db *Database) Config() *Config { + return db.config +} diff --git a/trie/dummy_trie.go b/trie/dummy_trie.go new file mode 100644 index 0000000000..cb796c6342 --- /dev/null +++ b/trie/dummy_trie.go @@ -0,0 +1,88 @@ +// Copyright 2015 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package trie + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/trie/trienode" +) + +type EmptyTrie struct{} + +// NewSecure creates a dummy trie +func NewEmptyTrie() *EmptyTrie { + return &EmptyTrie{} +} + +func (t *EmptyTrie) GetKey(shaKey []byte) []byte { + return nil +} + +func (t *EmptyTrie) GetStorage(_ common.Address, key []byte) ([]byte, error) { + return nil, nil +} + +func (t *EmptyTrie) GetAccount(address common.Address) (*types.StateAccount, error) { + return nil, nil +} + +func (t *EmptyTrie) UpdateStorage(_ common.Address, key, value []byte) error { + return nil +} + +// TryUpdateAccount abstract an account write in the trie. +func (t *EmptyTrie) UpdateAccount(address common.Address, account *types.StateAccount) error { + return nil +} + +func (t *EmptyTrie) UpdateContractCode(_ common.Address, _ common.Hash, _ []byte) error { + return nil +} + +func (t *EmptyTrie) DeleteStorage(_ common.Address, key []byte) error { + return nil +} + +func (t *EmptyTrie) DeleteAccount(address common.Address) error { + return nil +} + +func (t *EmptyTrie) Commit(collectLeaf bool) (common.Hash, *trienode.NodeSet, error) { + return common.Hash{}, nil, nil +} + +func (t *EmptyTrie) Hash() common.Hash { + return common.Hash{} +} + +// NodeIterator returns an iterator that returns nodes of the underlying trie. Iteration +// starts at the key after the given start key. +func (t *EmptyTrie) NodeIterator(startKey []byte) (NodeIterator, error) { + return nil, nil +} + +func (t *EmptyTrie) Prove(key []byte, proofDb ethdb.KeyValueWriter) error { + return nil +} + +// Copy returns a copy of SecureTrie. +func (t *EmptyTrie) Copy() *EmptyTrie { + cpy := *t + return &cpy +} diff --git a/trie/hasher.go b/trie/hasher.go index e594d6d6b2..1e063d8020 100644 --- a/trie/hasher.go +++ b/trie/hasher.go @@ -84,20 +84,19 @@ func (h *hasher) hash(n node, force bool) (hashed node, cached node) { } return hashed, cached default: - // Value and hash nodes don't have children so they're left as were + // Value and hash nodes don't have children, so they're left as were return n, n } } // hashShortNodeChildren collapses the short node. The returned collapsed node // holds a live reference to the Key, and must not be modified. -// The cached func (h *hasher) hashShortNodeChildren(n *shortNode) (collapsed, cached *shortNode) { // Hash the short node's child, caching the newly hashed subtree collapsed, cached = n.copy(), n.copy() // Previously, we did copy this one. We don't seem to need to actually // do that, since we don't overwrite/reuse keys - //cached.Key = common.CopyBytes(n.Key) + // cached.Key = common.CopyBytes(n.Key) collapsed.Key = hexToCompact(n.Key) // Unless the child is a valuenode or hashnode, hash it switch n.Val.(type) { @@ -153,7 +152,7 @@ func (h *hasher) shortnodeToHash(n *shortNode, force bool) node { return h.hashData(enc) } -// shortnodeToHash is used to creates a hashNode from a set of hashNodes, (which +// fullnodeToHash is used to create a hashNode from a fullNode, (which // may contain nil values) func (h *hasher) fullnodeToHash(n *fullNode, force bool) node { n.encode(h.encbuf) @@ -203,7 +202,7 @@ func (h *hasher) proofHash(original node) (collapsed, hashed node) { fn, _ := h.hashFullNodeChildren(n) return fn, h.fullnodeToHash(fn, false) default: - // Value and hash nodes don't have children so they're left as were + // Value and hash nodes don't have children, so they're left as were return n, n } } diff --git a/trie/hbss2pbss.go b/trie/hbss2pbss.go new file mode 100644 index 0000000000..1c6e842c7f --- /dev/null +++ b/trie/hbss2pbss.go @@ -0,0 +1,247 @@ +package trie + +import ( + "bytes" + "errors" + "fmt" + "runtime" + "sync" + "sync/atomic" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie/trienode" +) + +type Hbss2Pbss struct { + trie *Trie // traverse trie + db *Database + blockNum uint64 + root node // root of triedb + stateRootHash common.Hash + concurrentQueue chan struct{} + totalNum uint64 + wg sync.WaitGroup +} + +const ( + DEFAULT_TRIEDBCACHE_SIZE = 1024 * 1024 * 1024 +) + +// NewHbss2Pbss return a hash2Path obj +func NewHbss2Pbss(tr *Trie, db *Database, stateRootHash common.Hash, blockNum uint64, jobNum uint64) (*Hbss2Pbss, error) { + if tr == nil { + return nil, errors.New("trie is nil") + } + + if tr.root == nil { + return nil, errors.New("trie root is nil") + } + + ins := &Hbss2Pbss{ + trie: tr, + blockNum: blockNum, + db: db, + stateRootHash: stateRootHash, + root: tr.root, + concurrentQueue: make(chan struct{}, jobNum), + wg: sync.WaitGroup{}, + } + + return ins, nil +} + +func (t *Trie) resolveWithoutTrack(n node, prefix []byte) (node, error) { + if n, ok := n.(hashNode); ok { + blob, err := t.reader.node(prefix, common.BytesToHash(n)) + if err != nil { + return nil, err + } + return mustDecodeNode(n, blob), nil + } + return n, nil +} + +func (h2p *Hbss2Pbss) writeNode(pathKey []byte, n *trienode.Node, owner common.Hash) { + if owner == (common.Hash{}) { + rawdb.WriteAccountTrieNode(h2p.db.diskdb, pathKey, n.Blob) + log.Debug("Write account trie node", "path", common.Bytes2Hex(pathKey), "hash", n.Hash, + "blob hash", crypto.Keccak256Hash(n.Blob)) + } else { + rawdb.WriteStorageTrieNode(h2p.db.diskdb, owner, pathKey, n.Blob) + log.Debug("Write storage trie node", "path", common.Bytes2Hex(pathKey), "owner", owner.String(), + "hash", n.Hash, "blob hash", crypto.Keccak256Hash(n.Blob)) + } +} + +// Run statistics, external call +func (h2p *Hbss2Pbss) Run() { + log.Debug("Find account trie tree", "rootHash", h2p.trie.Hash().String(), "block num", h2p.blockNum) + + h2p.ConcurrentTraversal(h2p.trie, h2p.root, []byte{}) + h2p.wg.Wait() + + log.Info("Hbss to pbss statistics", "total complete", h2p.totalNum, "go routines num", runtime.NumGoroutine(), + "h2p concurrent queue", len(h2p.concurrentQueue)) + + rawdb.WritePersistentStateID(h2p.db.diskdb, h2p.blockNum) + rawdb.WriteStateID(h2p.db.diskdb, h2p.stateRootHash, h2p.blockNum) +} + +func (h2p *Hbss2Pbss) SubConcurrentTraversal(theTrie *Trie, theNode node, path []byte) { + h2p.concurrentQueue <- struct{}{} + h2p.ConcurrentTraversal(theTrie, theNode, path) + <-h2p.concurrentQueue + h2p.wg.Done() +} + +func (h2p *Hbss2Pbss) ConcurrentTraversal(theTrie *Trie, theNode node, path []byte) { + totalNum := uint64(0) + // nil node + if theNode == nil { + return + } + + switch current := (theNode).(type) { + case *shortNode: + collapsed := current.copy() + collapsed.Key = hexToCompact(current.Key) + var hash, _ = current.cache() + h2p.writeNode(path, trienode.New(common.BytesToHash(hash), nodeToBytes(collapsed)), theTrie.owner) + + h2p.ConcurrentTraversal(theTrie, current.Val, append(path, current.Key...)) + + case *fullNode: + // copy from trie/Committer (*committer).commit + collapsed := current.copy() + var hash, _ = collapsed.cache() + collapsed.Children = h2p.commitChildren(path, current) + + nodeBytes := nodeToBytes(collapsed) + if common.BytesToHash(hash) != common.BytesToHash(crypto.Keccak256(nodeBytes)) { + log.Error("Hash is inconsistent", "hash", common.BytesToHash(hash), + "node hash", common.BytesToHash(crypto.Keccak256(nodeBytes)), "node", collapsed.fstring("")) + panic("inconsistent hash") + } + + h2p.writeNode(path, trienode.New(common.BytesToHash(hash), nodeToBytes(collapsed)), theTrie.owner) + + for idx, child := range current.Children { + if child == nil { + continue + } + childPath := append(path, byte(idx)) + if len(h2p.concurrentQueue)*2 < cap(h2p.concurrentQueue) { + h2p.wg.Add(1) + dst := make([]byte, len(childPath)) + copy(dst, childPath) + go h2p.SubConcurrentTraversal(theTrie, child, dst) + } else { + h2p.ConcurrentTraversal(theTrie, child, childPath) + } + } + case hashNode: + n, err := theTrie.resolveWithoutTrack(current, path) + if err != nil { + log.Error("Failed to resolve hash node", "error", err, "trie root", theTrie.Hash(), "path", path) + return + } + h2p.ConcurrentTraversal(theTrie, n, path) + totalNum = atomic.AddUint64(&h2p.totalNum, 1) + if totalNum%100000 == 0 { + log.Info("Converting", "complete progress", totalNum, "go routines num", runtime.NumGoroutine(), + "h2p concurrentQueue", len(h2p.concurrentQueue)) + } + return + case valueNode: + if !hasTerm(path) { + log.Info("ValueNode misses path term", "path", common.Bytes2Hex(path)) + break + } + var account types.StateAccount + if err := rlp.Decode(bytes.NewReader(current), &account); err != nil { + // log.Error("Failed to decode rlp account", "err", err) + break + } + if account.Root == (common.Hash{}) || account.Root == types.EmptyRootHash { + // log.Info("Not a storage trie", "account", common.BytesToHash(path).String()) + break + } + + ownerAddress := common.BytesToHash(hexToCompact(path)) + tr, err := New(StorageTrieID(h2p.stateRootHash, ownerAddress, account.Root), h2p.db) + if err != nil { + log.Error("Failed to new Storage trie", "err", err, "root", account.Root.String(), "owner", ownerAddress.String()) + break + } + log.Debug("Find Contract Trie Tree", "rootHash", tr.Hash().String()) + h2p.wg.Add(1) + go h2p.SubConcurrentTraversal(tr, tr.root, []byte{}) + default: + panic(errors.New("invalid node type to traverse")) + } +} + +// copy from trie/Commiter (*committer).commit +func (h2p *Hbss2Pbss) commitChildren(path []byte, n *fullNode) [17]node { + var children [17]node + for i := 0; i < 16; i++ { + child := n.Children[i] + if child == nil { + continue + } + // If it's the hashed child, save the hash value directly. + // Note: it's impossible that the child in range [0, 15] + // is a valueNode. + if hn, ok := child.(hashNode); ok { + children[i] = hn + continue + } + + children[i] = h2p.commit(append(path, byte(i)), child) + } + // For the 17th child, it's possible the type is valuenode. + if n.Children[16] != nil { + children[16] = n.Children[16] + } + return children +} + +// commit collapses a node down into a hash node and returns it. +func (h2p *Hbss2Pbss) commit(path []byte, n node) node { + // if this path is clean, use available cached data + hash, dirty := n.cache() + if hash != nil && !dirty { + return hash + } + // Commit children, then parent, and remove the dirty flag. + switch cn := n.(type) { + case *shortNode: + // Commit child + collapsed := cn.copy() + + // If the child is fullNode, recursively commit, + // otherwise it can only be hashNode or valueNode. + if _, ok := cn.Val.(*fullNode); ok { + collapsed.Val = h2p.commit(append(path, cn.Key...), cn.Val) + } + // The key needs to be copied, since we're adding it to the + // modified nodeset. + collapsed.Key = hexToCompact(cn.Key) + return collapsed + case *fullNode: + hashedKids := h2p.commitChildren(path, cn) + collapsed := cn.copy() + collapsed.Children = hashedKids + return collapsed + case hashNode: + return cn + default: + // nil, valuenode shouldn't be committed + panic(fmt.Sprintf("%T: invalid node: %v", n, n)) + } +} diff --git a/trie/inspect_trie.go b/trie/inspect_trie.go new file mode 100644 index 0000000000..42b3171058 --- /dev/null +++ b/trie/inspect_trie.go @@ -0,0 +1,293 @@ +package trie + +import ( + "bytes" + "errors" + "fmt" + "math/big" + "os" + "runtime" + "sort" + "strconv" + "sync" + "sync/atomic" + "time" + + "github.com/olekukonko/tablewriter" + "golang.org/x/sync/semaphore" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" +) + +type Account struct { + Nonce uint64 + Balance *big.Int + Root common.Hash // merkle root of the storage trie + CodeHash []byte +} + +type Inspector struct { + trie *Trie // traverse trie + db *Database + stateRootHash common.Hash + blockNum uint64 + root node // root of triedb + totalNum uint64 + wg sync.WaitGroup + statLock sync.RWMutex + result map[string]*TrieTreeStat + sem *semaphore.Weighted + eoaAccountNums uint64 +} + +type TrieTreeStat struct { + is_account_trie bool + theNodeStatByLevel [15]NodeStat + totalNodeStat NodeStat +} + +type NodeStat struct { + ShortNodeCnt uint64 + FullNodeCnt uint64 + ValueNodeCnt uint64 +} + +func (trieStat *TrieTreeStat) AtomicAdd(theNode node, height uint32) { + switch (theNode).(type) { + case *shortNode: + atomic.AddUint64(&trieStat.totalNodeStat.ShortNodeCnt, 1) + atomic.AddUint64(&(trieStat.theNodeStatByLevel[height].ShortNodeCnt), 1) + case *fullNode: + atomic.AddUint64(&trieStat.totalNodeStat.FullNodeCnt, 1) + atomic.AddUint64(&trieStat.theNodeStatByLevel[height].FullNodeCnt, 1) + case valueNode: + atomic.AddUint64(&trieStat.totalNodeStat.ValueNodeCnt, 1) + atomic.AddUint64(&((trieStat.theNodeStatByLevel[height]).ValueNodeCnt), 1) + default: + panic(errors.New("invalid node type to statistics")) + } +} + +func (trieStat *TrieTreeStat) Display(ownerAddress string, treeType string) { + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"-", "Level", "ShortNodeCnt", "FullNodeCnt", "ValueNodeCnt"}) + if ownerAddress == "" { + table.SetCaption(true, fmt.Sprintf("%v", treeType)) + } else { + table.SetCaption(true, fmt.Sprintf("%v-%v", treeType, ownerAddress)) + } + table.SetAlignment(1) + for i := 0; i < len(trieStat.theNodeStatByLevel); i++ { + nodeStat := trieStat.theNodeStatByLevel[i] + if nodeStat.FullNodeCnt == 0 && nodeStat.ShortNodeCnt == 0 && nodeStat.ValueNodeCnt == 0 { + break + } + table.AppendBulk([][]string{ + {"-", strconv.Itoa(i), nodeStat.ShortNodeCount(), nodeStat.FullNodeCount(), nodeStat.ValueNodeCount()}, + }) + } + table.AppendBulk([][]string{ + {"Total", "-", trieStat.totalNodeStat.ShortNodeCount(), trieStat.totalNodeStat.FullNodeCount(), trieStat.totalNodeStat.ValueNodeCount()}, + }) + table.Render() +} + +func Uint64ToString(cnt uint64) string { + return fmt.Sprintf("%v", cnt) +} + +func (nodeStat *NodeStat) ShortNodeCount() string { + return Uint64ToString(nodeStat.ShortNodeCnt) +} + +func (nodeStat *NodeStat) FullNodeCount() string { + return Uint64ToString(nodeStat.FullNodeCnt) +} +func (nodeStat *NodeStat) ValueNodeCount() string { + return Uint64ToString(nodeStat.ValueNodeCnt) +} + +// NewInspector return a inspector obj +func NewInspector(tr *Trie, db *Database, stateRootHash common.Hash, blockNum uint64, jobNum uint64) (*Inspector, error) { + if tr == nil { + return nil, errors.New("trie is nil") + } + + if tr.root == nil { + return nil, errors.New("trie root is nil") + } + + ins := &Inspector{ + trie: tr, + db: db, + stateRootHash: stateRootHash, + blockNum: blockNum, + root: tr.root, + result: make(map[string]*TrieTreeStat), + totalNum: (uint64)(0), + wg: sync.WaitGroup{}, + sem: semaphore.NewWeighted(int64(jobNum)), + eoaAccountNums: 0, + } + + return ins, nil +} + +// Run statistics, external call +func (inspect *Inspector) Run() { + accountTrieStat := &TrieTreeStat{ + is_account_trie: true, + } + if inspect.db.Scheme() == rawdb.HashScheme { + ticker := time.NewTicker(30 * time.Second) + go func() { + defer ticker.Stop() + for range ticker.C { + inspect.db.Cap(DEFAULT_TRIEDBCACHE_SIZE) + } + }() + } + + if _, ok := inspect.result[""]; !ok { + inspect.result[""] = accountTrieStat + } + log.Info("Find Account Trie Tree", "root hash", inspect.trie.Hash().String(), "block num", inspect.blockNum) + + inspect.ConcurrentTraversal(inspect.trie, accountTrieStat, inspect.root, 0, []byte{}) + inspect.wg.Wait() +} + +func (inspect *Inspector) SubConcurrentTraversal(theTrie *Trie, theTrieTreeStat *TrieTreeStat, theNode node, height uint32, path []byte) { + inspect.ConcurrentTraversal(theTrie, theTrieTreeStat, theNode, height, path) + inspect.wg.Done() +} + +func (inspect *Inspector) ConcurrentTraversal(theTrie *Trie, theTrieTreeStat *TrieTreeStat, theNode node, height uint32, path []byte) { + // print process progress + total_num := atomic.AddUint64(&inspect.totalNum, 1) + if total_num%100000 == 0 { + fmt.Printf("Complete progress: %v, go routines num: %v\n", total_num, runtime.NumGoroutine()) + } + + // nil node + if theNode == nil { + return + } + + switch current := (theNode).(type) { + case *shortNode: + inspect.ConcurrentTraversal(theTrie, theTrieTreeStat, current.Val, height, append(path, current.Key...)) + case *fullNode: + for idx, child := range current.Children { + if child == nil { + continue + } + childPath := append(path, byte(idx)) + if inspect.sem.TryAcquire(1) { + inspect.wg.Add(1) + dst := make([]byte, len(childPath)) + copy(dst, childPath) + go inspect.SubConcurrentTraversal(theTrie, theTrieTreeStat, child, height+1, dst) + } else { + inspect.ConcurrentTraversal(theTrie, theTrieTreeStat, child, height+1, childPath) + } + } + case hashNode: + n, err := theTrie.resolveWithoutTrack(current, path) + if err != nil { + fmt.Printf("Failed to resolve hash node, error: %v, TrieRoot: %v, Height: %v, Path: %v\n", err, + theTrie.Hash().String(), height+1, path) + return + } + inspect.ConcurrentTraversal(theTrie, theTrieTreeStat, n, height, path) + return + case valueNode: + if !hasTerm(path) { + break + } + var account Account + if err := rlp.Decode(bytes.NewReader(current), &account); err != nil { + break + } + if common.BytesToHash(account.CodeHash) == types.EmptyCodeHash { + inspect.eoaAccountNums++ + } + if account.Root == (common.Hash{}) || account.Root == types.EmptyRootHash { + break + } + ownerAddress := common.BytesToHash(hexToCompact(path)) + contractTrie, err := New(StorageTrieID(inspect.stateRootHash, ownerAddress, account.Root), inspect.db) + if err != nil { + fmt.Printf("New contract trie node: %v, error: %v, Height: %v, Path: %v\n", theNode, err, height, path) + break + } + contractTrie.tracer.reset() + trieStat := &TrieTreeStat{ + is_account_trie: false, + } + + inspect.statLock.Lock() + if _, ok := inspect.result[ownerAddress.String()]; !ok { + inspect.result[ownerAddress.String()] = trieStat + } + inspect.statLock.Unlock() + + // log.Info("Find Contract Trie Tree, rootHash: ", contractTrie.Hash().String(), "") + inspect.wg.Add(1) + go inspect.SubConcurrentTraversal(contractTrie, trieStat, contractTrie.root, 0, []byte{}) + default: + panic(errors.New("invalid node type to traverse")) + } + theTrieTreeStat.AtomicAdd(theNode, height) +} + +func (inspect *Inspector) DisplayResult() { + // display root hash + if _, ok := inspect.result[""]; !ok { + log.Info("Display result error", "missing account trie") + return + } + inspect.result[""].Display("", "AccountTrie") + + type SortedTrie struct { + totalNum uint64 + ownerAddress string + } + // display contract trie + var sortedTriesByNums []SortedTrie + var totalContactsNodeStat NodeStat + var contractTrieCnt uint64 = 0 + + for ownerAddress, stat := range inspect.result { + if ownerAddress == "" { + continue + } + contractTrieCnt++ + totalContactsNodeStat.ShortNodeCnt += stat.totalNodeStat.ShortNodeCnt + totalContactsNodeStat.FullNodeCnt += stat.totalNodeStat.FullNodeCnt + totalContactsNodeStat.ValueNodeCnt += stat.totalNodeStat.ValueNodeCnt + totalNodeCnt := stat.totalNodeStat.ShortNodeCnt + stat.totalNodeStat.ValueNodeCnt + stat.totalNodeStat.FullNodeCnt + sortedTriesByNums = append(sortedTriesByNums, SortedTrie{totalNum: totalNodeCnt, ownerAddress: ownerAddress}) + } + sort.Slice(sortedTriesByNums, func(i, j int) bool { + return sortedTriesByNums[i].totalNum > sortedTriesByNums[j].totalNum + }) + fmt.Println("EOA accounts num: ", inspect.eoaAccountNums) + // only display top 6 + for i, t := range sortedTriesByNums { + if i > 5 { + break + } + if stat, ok := inspect.result[t.ownerAddress]; !ok { + log.Error("Storage trie stat not found", "ownerAddress", t.ownerAddress) + } else { + stat.Display(t.ownerAddress, "ContractTrie") + } + } + fmt.Printf("Contract Trie, total trie num: %v, ShortNodeCnt: %v, FullNodeCnt: %v, ValueNodeCnt: %v\n", + contractTrieCnt, totalContactsNodeStat.ShortNodeCnt, totalContactsNodeStat.FullNodeCnt, totalContactsNodeStat.ValueNodeCnt) +} diff --git a/trie/iterator.go b/trie/iterator.go index 6f054a7245..83ccc0740f 100644 --- a/trie/iterator.go +++ b/trie/iterator.go @@ -144,7 +144,8 @@ type nodeIterator struct { path []byte // Path to the current node err error // Failure set in case of an internal error in the iterator - resolver NodeResolver // optional node resolver for avoiding disk hits + resolver NodeResolver // optional node resolver for avoiding disk hits + pool []*nodeIteratorState // local pool for iteratorstates } // errIteratorEnd is stored in nodeIterator.err when iteration is done. @@ -172,6 +173,24 @@ func newNodeIterator(trie *Trie, start []byte) NodeIterator { return it } +func (it *nodeIterator) putInPool(item *nodeIteratorState) { + if len(it.pool) < 40 { + item.node = nil + it.pool = append(it.pool, item) + } +} + +func (it *nodeIterator) getFromPool() *nodeIteratorState { + idx := len(it.pool) - 1 + if idx < 0 { + return new(nodeIteratorState) + } + el := it.pool[idx] + it.pool[idx] = nil + it.pool = it.pool[:idx] + return el +} + func (it *nodeIterator) AddResolver(resolver NodeResolver) { it.resolver = resolver } @@ -423,8 +442,9 @@ func (st *nodeIteratorState) resolve(it *nodeIterator, path []byte) error { return nil } -func findChild(n *fullNode, index int, path []byte, ancestor common.Hash) (node, *nodeIteratorState, []byte, int) { +func (it *nodeIterator) findChild(n *fullNode, index int, ancestor common.Hash) (node, *nodeIteratorState, []byte, int) { var ( + path = it.path child node state *nodeIteratorState childPath []byte @@ -433,13 +453,12 @@ func findChild(n *fullNode, index int, path []byte, ancestor common.Hash) (node, if n.Children[index] != nil { child = n.Children[index] hash, _ := child.cache() - state = &nodeIteratorState{ - hash: common.BytesToHash(hash), - node: child, - parent: ancestor, - index: -1, - pathlen: len(path), - } + state = it.getFromPool() + state.hash = common.BytesToHash(hash) + state.node = child + state.parent = ancestor + state.index = -1 + state.pathlen = len(path) childPath = append(childPath, path...) childPath = append(childPath, byte(index)) return child, state, childPath, index @@ -452,7 +471,7 @@ func (it *nodeIterator) nextChild(parent *nodeIteratorState, ancestor common.Has switch node := parent.node.(type) { case *fullNode: // Full node, move to the first non-nil child. - if child, state, path, index := findChild(node, parent.index+1, it.path, ancestor); child != nil { + if child, state, path, index := it.findChild(node, parent.index+1, ancestor); child != nil { parent.index = index - 1 return state, path, true } @@ -460,13 +479,12 @@ func (it *nodeIterator) nextChild(parent *nodeIteratorState, ancestor common.Has // Short node, return the pointer singleton child if parent.index < 0 { hash, _ := node.Val.cache() - state := &nodeIteratorState{ - hash: common.BytesToHash(hash), - node: node.Val, - parent: ancestor, - index: -1, - pathlen: len(it.path), - } + state := it.getFromPool() + state.hash = common.BytesToHash(hash) + state.node = node.Val + state.parent = ancestor + state.index = -1 + state.pathlen = len(it.path) path := append(it.path, node.Key...) return state, path, true } @@ -480,7 +498,7 @@ func (it *nodeIterator) nextChildAt(parent *nodeIteratorState, ancestor common.H switch n := parent.node.(type) { case *fullNode: // Full node, move to the first non-nil child before the desired key position - child, state, path, index := findChild(n, parent.index+1, it.path, ancestor) + child, state, path, index := it.findChild(n, parent.index+1, ancestor) if child == nil { // No more children in this fullnode return parent, it.path, false @@ -492,7 +510,7 @@ func (it *nodeIterator) nextChildAt(parent *nodeIteratorState, ancestor common.H } // The child is before the seek position. Try advancing for { - nextChild, nextState, nextPath, nextIndex := findChild(n, index+1, it.path, ancestor) + nextChild, nextState, nextPath, nextIndex := it.findChild(n, index+1, ancestor) // If we run out of children, or skipped past the target, return the // previous one if nextChild == nil || bytes.Compare(nextPath, key) >= 0 { @@ -506,13 +524,12 @@ func (it *nodeIterator) nextChildAt(parent *nodeIteratorState, ancestor common.H // Short node, return the pointer singleton child if parent.index < 0 { hash, _ := n.Val.cache() - state := &nodeIteratorState{ - hash: common.BytesToHash(hash), - node: n.Val, - parent: ancestor, - index: -1, - pathlen: len(it.path), - } + state := it.getFromPool() + state.hash = common.BytesToHash(hash) + state.node = n.Val + state.parent = ancestor + state.index = -1 + state.pathlen = len(it.path) path := append(it.path, n.Key...) return state, path, true } @@ -533,6 +550,8 @@ func (it *nodeIterator) pop() { it.path = it.path[:last.pathlen] it.stack[len(it.stack)-1] = nil it.stack = it.stack[:len(it.stack)-1] + // last is now unused + it.putInPool(last) } func compareNodes(a, b NodeIterator) int { diff --git a/trie/iterator_test.go b/trie/iterator_test.go index 57d1f06a16..9679b49ca7 100644 --- a/trie/iterator_test.go +++ b/trie/iterator_test.go @@ -616,3 +616,15 @@ func isTrieNode(scheme string, key, val []byte) (bool, []byte, common.Hash) { } return true, path, hash } + +func BenchmarkIterator(b *testing.B) { + diskDb, srcDb, tr, _ := makeTestTrie(rawdb.HashScheme) + root := tr.Hash() + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + if err := checkTrieConsistency(diskDb, srcDb.Scheme(), root, false); err != nil { + b.Fatal(err) + } + } +} diff --git a/trie/node.go b/trie/node.go index 15bbf62f1c..d78ed5c569 100644 --- a/trie/node.go +++ b/trie/node.go @@ -112,6 +112,11 @@ func (n rawNode) EncodeRLP(w io.Writer) error { return err } +func NodeString(hash, buf []byte) string { + node := mustDecodeNode(hash, buf) + return node.fstring("NodeString: ") +} + // mustDecodeNode is a wrapper of decodeNode and panic if any error is encountered. func mustDecodeNode(hash, buf []byte) node { n, err := decodeNode(hash, buf) diff --git a/trie/secure_trie.go b/trie/secure_trie.go index 7f0685e306..423205ec4e 100644 --- a/trie/secure_trie.go +++ b/trie/secure_trie.go @@ -72,6 +72,28 @@ func NewStateTrie(id *ID, db *Database) (*StateTrie, error) { return &StateTrie{trie: *trie, preimages: db.preimages}, nil } +// NewStateTrieByInnerReader creates a trie with an existing root node from a backing database and a inner reader. +// Which is used by proof keeper to avoid deadlock in pathdb read/write. +func NewStateTrieByInnerReader(id *ID, db *Database, innerReader Reader) (*StateTrie, error) { + if db == nil || innerReader == nil { + panic("trie.NewStateTrieByInnerReader called without a database or a inner reader") + } + reader := &trieReader{owner: id.Owner, reader: innerReader} + trie := &Trie{ + owner: id.Owner, + reader: reader, + tracer: newTracer(), + } + if id.Root != (common.Hash{}) && id.Root != types.EmptyRootHash { + rootnode, err := trie.resolveAndTrack(id.Root[:], nil) + if err != nil { + return nil, err + } + trie.root = rootnode + } + return &StateTrie{trie: *trie, preimages: db.preimages}, nil +} + // MustGet returns the value for key stored in the trie. // The value bytes must not be modified by the caller. // diff --git a/trie/stacktrie.go b/trie/stacktrie.go index 35208e1cb3..f2f5355c49 100644 --- a/trie/stacktrie.go +++ b/trie/stacktrie.go @@ -17,37 +17,75 @@ package trie import ( + "bytes" "errors" "sync" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" ) var ( - ErrCommitDisabled = errors.New("no database for committing") - stPool = sync.Pool{New: func() any { return new(stNode) }} - _ = types.TrieHasher((*StackTrie)(nil)) + stPool = sync.Pool{New: func() any { return new(stNode) }} + _ = types.TrieHasher((*StackTrie)(nil)) ) -// NodeWriteFunc is used to provide all information of a dirty node for committing -// so that callers can flush nodes into database with desired scheme. -type NodeWriteFunc = func(path []byte, hash common.Hash, blob []byte) +// StackTrieOptions contains the configured options for manipulating the stackTrie. +type StackTrieOptions struct { + Writer func(path []byte, hash common.Hash, blob []byte) // The function to commit the dirty nodes + Cleaner func(path []byte) // The function to clean up dangling nodes + + SkipLeftBoundary bool // Flag whether the nodes on the left boundary are skipped for committing + SkipRightBoundary bool // Flag whether the nodes on the right boundary are skipped for committing + boundaryGauge metrics.Gauge // Gauge to track how many boundary nodes are met +} + +// NewStackTrieOptions initializes an empty options for stackTrie. +func NewStackTrieOptions() *StackTrieOptions { return &StackTrieOptions{} } + +// WithWriter configures trie node writer within the options. +func (o *StackTrieOptions) WithWriter(writer func(path []byte, hash common.Hash, blob []byte)) *StackTrieOptions { + o.Writer = writer + return o +} + +// WithCleaner configures the cleaner in the option for removing dangling nodes. +func (o *StackTrieOptions) WithCleaner(cleaner func(path []byte)) *StackTrieOptions { + o.Cleaner = cleaner + return o +} + +// WithSkipBoundary configures whether the left and right boundary nodes are +// filtered for committing, along with a gauge metrics to track how many +// boundary nodes are met. +func (o *StackTrieOptions) WithSkipBoundary(skipLeft, skipRight bool, gauge metrics.Gauge) *StackTrieOptions { + o.SkipLeftBoundary = skipLeft + o.SkipRightBoundary = skipRight + o.boundaryGauge = gauge + return o +} // StackTrie is a trie implementation that expects keys to be inserted // in order. Once it determines that a subtree will no longer be inserted // into, it will hash it and free up the memory it uses. type StackTrie struct { - writeFn NodeWriteFunc // function for committing nodes, can be nil + options *StackTrieOptions root *stNode h *hasher + + first []byte // The (hex-encoded without terminator) key of first inserted entry, tracked as left boundary. + last []byte // The (hex-encoded without terminator) key of last inserted entry, tracked as right boundary. } // NewStackTrie allocates and initializes an empty trie. -func NewStackTrie(writeFn NodeWriteFunc) *StackTrie { +func NewStackTrie(options *StackTrieOptions) *StackTrie { + if options == nil { + options = NewStackTrieOptions() + } return &StackTrie{ - writeFn: writeFn, + options: options, root: stPool.Get().(*stNode), h: newHasher(false), } @@ -55,11 +93,24 @@ func NewStackTrie(writeFn NodeWriteFunc) *StackTrie { // Update inserts a (key, value) pair into the stack trie. func (t *StackTrie) Update(key, value []byte) error { - k := keybytesToHex(key) if len(value) == 0 { - panic("deletion not supported") + return errors.New("trying to insert empty (deletion)") + } + k := keybytesToHex(key) + k = k[:len(k)-1] // chop the termination flag + if bytes.Compare(t.last, k) >= 0 { + return errors.New("non-ascending key order") + } + // track the first and last inserted entries. + if t.first == nil { + t.first = append([]byte{}, k...) } - t.insert(t.root, k[:len(k)-1], value, nil) + if t.last == nil { + t.last = append([]byte{}, k...) // allocate key slice + } else { + t.last = append(t.last[:0], k...) // reuse key slice + } + t.insert(t.root, k, value, nil) return nil } @@ -71,9 +122,12 @@ func (t *StackTrie) MustUpdate(key, value []byte) { } } +// Reset resets the stack trie object to empty state. func (t *StackTrie) Reset() { - t.writeFn = nil + t.options = NewStackTrieOptions() t.root = stPool.Get().(*stNode) + t.first = nil + t.last = nil } // stNode represents a node within a StackTrie @@ -138,7 +192,7 @@ func (n *stNode) getDiffIndex(key []byte) int { // Helper function to that inserts a (key, value) pair into // the trie. -func (t *StackTrie) insert(st *stNode, key, value []byte, prefix []byte) { +func (t *StackTrie) insert(st *stNode, key, value []byte, path []byte) { switch st.typ { case branchNode: /* Branch */ idx := int(key[0]) @@ -147,7 +201,7 @@ func (t *StackTrie) insert(st *stNode, key, value []byte, prefix []byte) { for i := idx - 1; i >= 0; i-- { if st.children[i] != nil { if st.children[i].typ != hashedNode { - t.hash(st.children[i], append(prefix, byte(i))) + t.hash(st.children[i], append(path, byte(i))) } break } @@ -157,7 +211,7 @@ func (t *StackTrie) insert(st *stNode, key, value []byte, prefix []byte) { if st.children[idx] == nil { st.children[idx] = newLeaf(key[1:], value) } else { - t.insert(st.children[idx], key[1:], value, append(prefix, key[0])) + t.insert(st.children[idx], key[1:], value, append(path, key[0])) } case extNode: /* Ext */ @@ -172,7 +226,7 @@ func (t *StackTrie) insert(st *stNode, key, value []byte, prefix []byte) { if diffidx == len(st.key) { // Ext key and key segment are identical, recurse into // the child node. - t.insert(st.children[0], key[diffidx:], value, append(prefix, key[:diffidx]...)) + t.insert(st.children[0], key[diffidx:], value, append(path, key[:diffidx]...)) return } // Save the original part. Depending if the break is @@ -185,14 +239,14 @@ func (t *StackTrie) insert(st *stNode, key, value []byte, prefix []byte) { // extension. The path prefix of the newly-inserted // extension should also contain the different byte. n = newExt(st.key[diffidx+1:], st.children[0]) - t.hash(n, append(prefix, st.key[:diffidx+1]...)) + t.hash(n, append(path, st.key[:diffidx+1]...)) } else { // Break on the last byte, no need to insert // an extension node: reuse the current node. // The path prefix of the original part should // still be same. n = st.children[0] - t.hash(n, append(prefix, st.key...)) + t.hash(n, append(path, st.key...)) } var p *stNode if diffidx == 0 { @@ -257,7 +311,7 @@ func (t *StackTrie) insert(st *stNode, key, value []byte, prefix []byte) { // is hashed directly in order to free up some memory. origIdx := st.key[diffidx] p.children[origIdx] = newLeaf(st.key[diffidx+1:], st.val) - t.hash(p.children[origIdx], append(prefix, st.key[:diffidx+1]...)) + t.hash(p.children[origIdx], append(path, st.key[:diffidx+1]...)) newIdx := key[diffidx] p.children[newIdx] = newLeaf(key[diffidx+1:], value) @@ -292,9 +346,10 @@ func (t *StackTrie) insert(st *stNode, key, value []byte, prefix []byte) { // // This method also sets 'st.type' to hashedNode, and clears 'st.key'. func (t *StackTrie) hash(st *stNode, path []byte) { - // The switch below sets this to the RLP-encoding of this node. - var encodedNode []byte - + var ( + blob []byte // RLP-encoded node blob + internal [][]byte // List of node paths covered by the extension node + ) switch st.typ { case hashedNode: return @@ -323,11 +378,22 @@ func (t *StackTrie) hash(st *stNode, path []byte) { stPool.Put(child.reset()) // Release child back to pool. } nodes.encode(t.h.encbuf) - encodedNode = t.h.encodedBytes() + blob = t.h.encodedBytes() case extNode: + // recursively hash and commit child as the first step t.hash(st.children[0], append(path, st.key...)) + // Collect the path of internal nodes between shortNode and its **in disk** + // child. This is essential in the case of path mode scheme to avoid leaving + // danging nodes within the range of this internal path on disk, which would + // break the guarantee for state healing. + if len(st.children[0].val) >= 32 && t.options.Cleaner != nil { + for i := 1; i < len(st.key); i++ { + internal = append(internal, append(path, st.key[:i]...)) + } + } + // encode the extension node n := shortNode{Key: hexToCompactInPlace(st.key)} if len(st.children[0].val) < 32 { n.Val = rawNode(st.children[0].val) @@ -335,7 +401,7 @@ func (t *StackTrie) hash(st *stNode, path []byte) { n.Val = hashNode(st.children[0].val) } n.encode(t.h.encbuf) - encodedNode = t.h.encodedBytes() + blob = t.h.encodedBytes() stPool.Put(st.children[0].reset()) // Release child back to pool. st.children[0] = nil @@ -345,7 +411,7 @@ func (t *StackTrie) hash(st *stNode, path []byte) { n := shortNode{Key: hexToCompactInPlace(st.key), Val: valueNode(st.val)} n.encode(t.h.encbuf) - encodedNode = t.h.encodedBytes() + blob = t.h.encodedBytes() default: panic("invalid node type") @@ -353,60 +419,61 @@ func (t *StackTrie) hash(st *stNode, path []byte) { st.typ = hashedNode st.key = st.key[:0] - if len(encodedNode) < 32 { - st.val = common.CopyBytes(encodedNode) + + // Skip committing the non-root node if the size is smaller than 32 bytes. + if len(blob) < 32 && len(path) > 0 { + st.val = common.CopyBytes(blob) return } - // Write the hash to the 'val'. We allocate a new val here to not mutate - // input values - st.val = t.h.hashData(encodedNode) - if t.writeFn != nil { - t.writeFn(path, common.BytesToHash(st.val), encodedNode) + // input values. + st.val = t.h.hashData(blob) + + // Short circuit if the stack trie is not configured for writing. + if t.options.Writer == nil { + return + } + // Skip committing if the node is on the left boundary and stackTrie is + // configured to filter the boundary. + if t.options.SkipLeftBoundary && bytes.HasPrefix(t.first, path) { + if t.options.boundaryGauge != nil { + t.options.boundaryGauge.Inc(1) + } + return } + // Skip committing if the node is on the right boundary and stackTrie is + // configured to filter the boundary. + if t.options.SkipRightBoundary && bytes.HasPrefix(t.last, path) { + if t.options.boundaryGauge != nil { + t.options.boundaryGauge.Inc(1) + } + return + } + // Clean up the internal dangling nodes covered by the extension node. + // This should be done before writing the node to adhere to the committing + // order from bottom to top. + for _, path := range internal { + t.options.Cleaner(path) + } + t.options.Writer(path, common.BytesToHash(st.val), blob) } -// Hash returns the hash of the current node. -func (t *StackTrie) Hash() (h common.Hash) { - st := t.root - t.hash(st, nil) - if len(st.val) == 32 { - copy(h[:], st.val) - return h - } - // If the node's RLP isn't 32 bytes long, the node will not - // be hashed, and instead contain the rlp-encoding of the - // node. For the top level node, we need to force the hashing. - t.h.sha.Reset() - t.h.sha.Write(st.val) - t.h.sha.Read(h[:]) - return h +// Hash will firstly hash the entire trie if it's still not hashed and then commit +// all nodes to the associated database. Actually most of the trie nodes have been +// committed already. The main purpose here is to commit the nodes on right boundary. +// +// For stack trie, Hash and Commit are functionally identical. +func (t *StackTrie) Hash() common.Hash { + n := t.root + t.hash(n, nil) + return common.BytesToHash(n.val) } -// Commit will firstly hash the entire trie if it's still not hashed -// and then commit all nodes to the associated database. Actually most -// of the trie nodes MAY have been committed already. The main purpose -// here is to commit the root node. +// Commit will firstly hash the entire trie if it's still not hashed and then commit +// all nodes to the associated database. Actually most of the trie nodes have been +// committed already. The main purpose here is to commit the nodes on right boundary. // -// The associated database is expected, otherwise the whole commit -// functionality should be disabled. -func (t *StackTrie) Commit() (h common.Hash, err error) { - if t.writeFn == nil { - return common.Hash{}, ErrCommitDisabled - } - st := t.root - t.hash(st, nil) - if len(st.val) == 32 { - copy(h[:], st.val) - return h, nil - } - // If the node's RLP isn't 32 bytes long, the node will not - // be hashed (and committed), and instead contain the rlp-encoding of the - // node. For the top level node, we need to force the hashing+commit. - t.h.sha.Reset() - t.h.sha.Write(st.val) - t.h.sha.Read(h[:]) - - t.writeFn(nil, h, st.val) - return h, nil +// For stack trie, Hash and Commit are functionally identical. +func (t *StackTrie) Commit() common.Hash { + return t.Hash() } diff --git a/trie/stacktrie_fuzzer_test.go b/trie/stacktrie_fuzzer_test.go new file mode 100644 index 0000000000..1b3f9dbe9c --- /dev/null +++ b/trie/stacktrie_fuzzer_test.go @@ -0,0 +1,155 @@ +// Copyright 2020 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package trie + +import ( + "bytes" + "encoding/binary" + "fmt" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/trie/trienode" + "golang.org/x/crypto/sha3" + "golang.org/x/exp/slices" +) + +func FuzzStackTrie(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + fuzz(data, false) + }) +} + +func fuzz(data []byte, debugging bool) { + // This spongeDb is used to check the sequence of disk-db-writes + var ( + input = bytes.NewReader(data) + spongeA = &spongeDb{sponge: sha3.NewLegacyKeccak256()} + dbA = NewDatabase(rawdb.NewDatabase(spongeA), nil) + trieA = NewEmpty(dbA) + spongeB = &spongeDb{sponge: sha3.NewLegacyKeccak256()} + dbB = NewDatabase(rawdb.NewDatabase(spongeB), nil) + + options = NewStackTrieOptions().WithWriter(func(path []byte, hash common.Hash, blob []byte) { + rawdb.WriteTrieNode(spongeB, common.Hash{}, path, hash, blob, dbB.Scheme()) + }) + trieB = NewStackTrie(options) + vals []*kv + maxElements = 10000 + // operate on unique keys only + keys = make(map[string]struct{}) + ) + // Fill the trie with elements + for i := 0; input.Len() > 0 && i < maxElements; i++ { + k := make([]byte, 32) + input.Read(k) + var a uint16 + binary.Read(input, binary.LittleEndian, &a) + a = 1 + a%100 + v := make([]byte, a) + input.Read(v) + if input.Len() == 0 { + // If it was exhausted while reading, the value may be all zeroes, + // thus 'deletion' which is not supported on stacktrie + break + } + if _, present := keys[string(k)]; present { + // This key is a duplicate, ignore it + continue + } + keys[string(k)] = struct{}{} + vals = append(vals, &kv{k: k, v: v}) + trieA.MustUpdate(k, v) + } + if len(vals) == 0 { + return + } + // Flush trie -> database + rootA, nodes, err := trieA.Commit(false) + if err != nil { + panic(err) + } + if nodes != nil { + dbA.Update(rootA, types.EmptyRootHash, 0, trienode.NewWithNodeSet(nodes), nil) + } + // Flush memdb -> disk (sponge) + dbA.Commit(rootA, false) + + // Stacktrie requires sorted insertion + slices.SortFunc(vals, (*kv).cmp) + + for _, kv := range vals { + if debugging { + fmt.Printf("{\"%#x\" , \"%#x\"} // stacktrie.Update\n", kv.k, kv.v) + } + trieB.MustUpdate(kv.k, kv.v) + } + rootB := trieB.Hash() + trieB.Commit() + if rootA != rootB { + panic(fmt.Sprintf("roots differ: (trie) %x != %x (stacktrie)", rootA, rootB)) + } + sumA := spongeA.sponge.Sum(nil) + sumB := spongeB.sponge.Sum(nil) + if !bytes.Equal(sumA, sumB) { + panic(fmt.Sprintf("sequence differ: (trie) %x != %x (stacktrie)", sumA, sumB)) + } + + // Ensure all the nodes are persisted correctly + var ( + nodeset = make(map[string][]byte) // path -> blob + optionsC = NewStackTrieOptions().WithWriter(func(path []byte, hash common.Hash, blob []byte) { + if crypto.Keccak256Hash(blob) != hash { + panic("invalid node blob") + } + nodeset[string(path)] = common.CopyBytes(blob) + }) + trieC = NewStackTrie(optionsC) + checked int + ) + for _, kv := range vals { + trieC.MustUpdate(kv.k, kv.v) + } + rootC := trieC.Commit() + if rootA != rootC { + panic(fmt.Sprintf("roots differ: (trie) %x != %x (stacktrie)", rootA, rootC)) + } + trieA, _ = New(TrieID(rootA), dbA) + iterA := trieA.MustNodeIterator(nil) + for iterA.Next(true) { + if iterA.Hash() == (common.Hash{}) { + if _, present := nodeset[string(iterA.Path())]; present { + panic("unexpected tiny node") + } + continue + } + nodeBlob, present := nodeset[string(iterA.Path())] + if !present { + panic("missing node") + } + if !bytes.Equal(nodeBlob, iterA.NodeBlob()) { + panic("node blob is not matched") + } + checked += 1 + } + if checked != len(nodeset) { + panic("node number is not matched") + } +} diff --git a/trie/stacktrie_test.go b/trie/stacktrie_test.go index 0e52781c62..909a77062a 100644 --- a/trie/stacktrie_test.go +++ b/trie/stacktrie_test.go @@ -19,11 +19,15 @@ package trie import ( "bytes" "math/big" + "math/rand" "testing" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/trie/testutil" + "github.com/stretchr/testify/assert" + "golang.org/x/exp/slices" ) func TestStackTrieInsertAndHash(t *testing.T) { @@ -376,3 +380,108 @@ func TestStacktrieNotModifyValues(t *testing.T) { } } } + +func buildPartialTree(entries []*kv, t *testing.T) map[string]common.Hash { + var ( + options = NewStackTrieOptions() + nodes = make(map[string]common.Hash) + ) + var ( + first int + last = len(entries) - 1 + + noLeft bool + noRight bool + ) + // Enter split mode if there are at least two elements + if rand.Intn(5) != 0 { + for { + first = rand.Intn(len(entries)) + last = rand.Intn(len(entries)) + if first <= last { + break + } + } + if first != 0 { + noLeft = true + } + if last != len(entries)-1 { + noRight = true + } + } + options = options.WithSkipBoundary(noLeft, noRight, nil) + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { + nodes[string(path)] = hash + }) + tr := NewStackTrie(options) + + for i := first; i <= last; i++ { + tr.MustUpdate(entries[i].k, entries[i].v) + } + tr.Commit() + return nodes +} + +func TestPartialStackTrie(t *testing.T) { + for round := 0; round < 100; round++ { + var ( + n = rand.Intn(100) + 1 + entries []*kv + ) + for i := 0; i < n; i++ { + var val []byte + if rand.Intn(3) == 0 { + val = testutil.RandBytes(3) + } else { + val = testutil.RandBytes(32) + } + entries = append(entries, &kv{ + k: testutil.RandBytes(32), + v: val, + }) + } + slices.SortFunc(entries, (*kv).cmp) + + var ( + nodes = make(map[string]common.Hash) + options = NewStackTrieOptions().WithWriter(func(path []byte, hash common.Hash, blob []byte) { + nodes[string(path)] = hash + }) + ) + tr := NewStackTrie(options) + + for i := 0; i < len(entries); i++ { + tr.MustUpdate(entries[i].k, entries[i].v) + } + tr.Commit() + + for j := 0; j < 100; j++ { + for path, hash := range buildPartialTree(entries, t) { + if nodes[path] != hash { + t.Errorf("%v, want %x, got %x", []byte(path), nodes[path], hash) + } + } + } + } +} + +func TestStackTrieErrors(t *testing.T) { + s := NewStackTrie(nil) + // Deletion + if err := s.Update(nil, nil); err == nil { + t.Fatal("expected error") + } + if err := s.Update(nil, []byte{}); err == nil { + t.Fatal("expected error") + } + if err := s.Update([]byte{0xa}, []byte{}); err == nil { + t.Fatal("expected error") + } + // Non-ascending keys (going backwards or repeating) + assert.Nil(t, s.Update([]byte{0xaa}, []byte{0xa})) + assert.NotNil(t, s.Update([]byte{0xaa}, []byte{0xa}), "repeat insert same key") + assert.NotNil(t, s.Update([]byte{0xaa}, []byte{0xb}), "repeat insert same key") + assert.Nil(t, s.Update([]byte{0xab}, []byte{0xa})) + assert.NotNil(t, s.Update([]byte{0x10}, []byte{0xb}), "out of order insert") + assert.NotNil(t, s.Update([]byte{0xaa}, []byte{0xb}), "repeat insert same key") +} diff --git a/trie/sync.go b/trie/sync.go index 6939aed76d..589d28364b 100644 --- a/trie/sync.go +++ b/trie/sync.go @@ -51,6 +51,18 @@ var ( // lookupGauge is the metric to track how many trie node lookups are // performed to determine if node needs to be deleted. lookupGauge = metrics.NewRegisteredGauge("trie/sync/lookup", nil) + + // accountNodeSyncedGauge is the metric to track how many account trie + // node are written during the sync. + accountNodeSyncedGauge = metrics.NewRegisteredGauge("trie/sync/nodes/account", nil) + + // storageNodeSyncedGauge is the metric to track how many account trie + // node are written during the sync. + storageNodeSyncedGauge = metrics.NewRegisteredGauge("trie/sync/nodes/storage", nil) + + // codeSyncedGauge is the metric to track how many contract codes are + // written during the sync. + codeSyncedGauge = metrics.NewRegisteredGauge("trie/sync/codes", nil) ) // SyncPath is a path tuple identifying a particular trie node either in a single @@ -104,10 +116,9 @@ type LeafCallback func(keys [][]byte, path []byte, leaf []byte, parent common.Ha // nodeRequest represents a scheduled or already in-flight trie node retrieval request. type nodeRequest struct { - hash common.Hash // Hash of the trie node to retrieve - path []byte // Merkle path leading to this node for prioritization - data []byte // Data content of the node, cached until all subtrees complete - deletes [][]byte // List of internal path segments for trie nodes to delete + hash common.Hash // Hash of the trie node to retrieve + path []byte // Merkle path leading to this node for prioritization + data []byte // Data content of the node, cached until all subtrees complete parent *nodeRequest // Parent state node referencing this entry deps int // Number of dependencies before allowed to commit this node @@ -134,38 +145,85 @@ type CodeSyncResult struct { Data []byte // Data content of the retrieved bytecode } +// nodeOp represents an operation upon the trie node. It can either represent a +// deletion to the specific node or a node write for persisting retrieved node. +type nodeOp struct { + owner common.Hash // identifier of the trie (empty for account trie) + path []byte // path from the root to the specified node. + blob []byte // the content of the node (nil for deletion) + hash common.Hash // hash of the node content (empty for node deletion) +} + +// isDelete indicates if the operation is a database deletion. +func (op *nodeOp) isDelete() bool { + return len(op.blob) == 0 +} + // syncMemBatch is an in-memory buffer of successfully downloaded but not yet // persisted data items. type syncMemBatch struct { - nodes map[string][]byte // In-memory membatch of recently completed nodes - hashes map[string]common.Hash // Hashes of recently completed nodes - deletes map[string]struct{} // List of paths for trie node to delete - codes map[common.Hash][]byte // In-memory membatch of recently completed codes - size uint64 // Estimated batch-size of in-memory data. + scheme string // State scheme identifier + codes map[common.Hash][]byte // In-memory batch of recently completed codes + nodes []nodeOp // In-memory batch of recently completed/deleted nodes + size uint64 // Estimated batch-size of in-memory data. } // newSyncMemBatch allocates a new memory-buffer for not-yet persisted trie nodes. -func newSyncMemBatch() *syncMemBatch { +func newSyncMemBatch(scheme string) *syncMemBatch { return &syncMemBatch{ - nodes: make(map[string][]byte), - hashes: make(map[string]common.Hash), - deletes: make(map[string]struct{}), - codes: make(map[common.Hash][]byte), + scheme: scheme, + codes: make(map[common.Hash][]byte), } } -// hasNode reports the trie node with specific path is already cached. -func (batch *syncMemBatch) hasNode(path []byte) bool { - _, ok := batch.nodes[string(path)] - return ok -} - // hasCode reports the contract code with specific hash is already cached. func (batch *syncMemBatch) hasCode(hash common.Hash) bool { _, ok := batch.codes[hash] return ok } +// addCode caches a contract code database write operation. +func (batch *syncMemBatch) addCode(hash common.Hash, code []byte) { + batch.codes[hash] = code + batch.size += common.HashLength + uint64(len(code)) +} + +// addNode caches a node database write operation. +func (batch *syncMemBatch) addNode(owner common.Hash, path []byte, blob []byte, hash common.Hash) { + if batch.scheme == rawdb.PathScheme { + if owner == (common.Hash{}) { + batch.size += uint64(len(path) + len(blob)) + } else { + batch.size += common.HashLength + uint64(len(path)+len(blob)) + } + } else { + batch.size += common.HashLength + uint64(len(blob)) + } + batch.nodes = append(batch.nodes, nodeOp{ + owner: owner, + path: path, + blob: blob, + hash: hash, + }) +} + +// delNode caches a node database delete operation. +func (batch *syncMemBatch) delNode(owner common.Hash, path []byte) { + if batch.scheme != rawdb.PathScheme { + log.Error("Unexpected node deletion", "owner", owner, "path", path, "scheme", batch.scheme) + return // deletion is not supported in hash mode. + } + if owner == (common.Hash{}) { + batch.size += uint64(len(path)) + } else { + batch.size += common.HashLength + uint64(len(path)) + } + batch.nodes = append(batch.nodes, nodeOp{ + owner: owner, + path: path, + }) +} + // Sync is the main state trie synchronisation scheduler, which provides yet // unknown trie hashes to retrieve, accepts node data associated with said hashes // and reconstructs the trie step by step until all is done. @@ -184,7 +242,7 @@ func NewSync(root common.Hash, database ethdb.KeyValueReader, callback LeafCallb ts := &Sync{ scheme: scheme, database: database, - membatch: newSyncMemBatch(), + membatch: newSyncMemBatch(scheme), nodeReqs: make(map[string]*nodeRequest), codeReqs: make(map[common.Hash]*codeRequest), queue: prque.New[int64, any](nil), // Ugh, can contain both string and hash, whyyy @@ -198,16 +256,17 @@ func NewSync(root common.Hash, database ethdb.KeyValueReader, callback LeafCallb // parent for completion tracking. The given path is a unique node path in // hex format and contain all the parent path if it's layered trie node. func (s *Sync) AddSubTrie(root common.Hash, path []byte, parent common.Hash, parentPath []byte, callback LeafCallback) { - // Short circuit if the trie is empty or already known if root == types.EmptyRootHash { return } - if s.membatch.hasNode(path) { - return - } owner, inner := ResolvePath(path) - if rawdb.HasTrieNode(s.database, owner, inner, root, s.scheme) { + exist, inconsistent := s.hasNode(owner, inner, root) + if exist { + // The entire subtrie is already present in the database. return + } else if inconsistent { + // There is a pre-existing node with the wrong hash in DB, remove it. + s.membatch.delNode(owner, inner) } // Assemble the new sub-trie sync request req := &nodeRequest{ @@ -359,25 +418,42 @@ func (s *Sync) ProcessNode(result NodeSyncResult) error { } // Commit flushes the data stored in the internal membatch out to persistent -// storage, returning any occurred error. +// storage, returning any occurred error. The whole data set will be flushed +// in an atomic database batch. func (s *Sync) Commit(dbw ethdb.Batch) error { // Flush the pending node writes into database batch. - for path, value := range s.membatch.nodes { - owner, inner := ResolvePath([]byte(path)) - rawdb.WriteTrieNode(dbw, owner, inner, s.membatch.hashes[path], value, s.scheme) - } - // Flush the pending node deletes into the database batch. - // Please note that each written and deleted node has a - // unique path, ensuring no duplication occurs. - for path := range s.membatch.deletes { - owner, inner := ResolvePath([]byte(path)) - rawdb.DeleteTrieNode(dbw, owner, inner, common.Hash{} /* unused */, s.scheme) + var ( + account int + storage int + ) + for _, op := range s.membatch.nodes { + if op.isDelete() { + // node deletion is only supported in path mode. + if op.owner == (common.Hash{}) { + rawdb.DeleteAccountTrieNode(dbw, op.path) + } else { + rawdb.DeleteStorageTrieNode(dbw, op.owner, op.path) + } + deletionGauge.Inc(1) + } else { + if op.owner == (common.Hash{}) { + account += 1 + } else { + storage += 1 + } + rawdb.WriteTrieNode(dbw, op.owner, op.path, op.hash, op.blob, s.scheme) + } } + accountNodeSyncedGauge.Inc(int64(account)) + storageNodeSyncedGauge.Inc(int64(storage)) + // Flush the pending code writes into database batch. for hash, value := range s.membatch.codes { rawdb.WriteCode(dbw, hash, value) } - s.membatch = newSyncMemBatch() // reset the batch + codeSyncedGauge.Inc(int64(len(s.membatch.codes))) + + s.membatch = newSyncMemBatch(s.scheme) // reset the batch return nil } @@ -450,12 +526,15 @@ func (s *Sync) children(req *nodeRequest, object node) ([]*nodeRequest, error) { // child as invalid. This is essential in the case of path mode // scheme; otherwise, state healing might overwrite existing child // nodes silently while leaving a dangling parent node within the - // range of this internal path on disk. This would break the - // guarantee for state healing. + // range of this internal path on disk and the persistent state + // ends up with a very weird situation that nodes on the same path + // are not inconsistent while they all present in disk. This property + // would break the guarantee for state healing. // // While it's possible for this shortNode to overwrite a previously // existing full node, the other branches of the fullNode can be - // retained as they remain untouched and complete. + // retained as they are not accessible with the new shortNode, and + // also the whole sub-trie is still untouched and complete. // // This step is only necessary for path mode, as there is no deletion // in hash mode at all. @@ -472,8 +551,7 @@ func (s *Sync) children(req *nodeRequest, object node) ([]*nodeRequest, error) { exists = rawdb.ExistsStorageTrieNode(s.database, owner, append(inner, key[:i]...)) } if exists { - req.deletes = append(req.deletes, key[:i]) - deletionGauge.Inc(1) + s.membatch.delNode(owner, append(inner, key[:i]...)) log.Debug("Detected dangling node", "owner", owner, "path", append(inner, key[:i]...)) } } @@ -495,6 +573,7 @@ func (s *Sync) children(req *nodeRequest, object node) ([]*nodeRequest, error) { var ( missing = make(chan *nodeRequest, len(children)) pending sync.WaitGroup + batchMu sync.Mutex ) for _, child := range children { // Notify any external watcher of a new key/value node @@ -512,34 +591,32 @@ func (s *Sync) children(req *nodeRequest, object node) ([]*nodeRequest, error) { } } } - // If the child references another node, resolve or schedule + // If the child references another node, resolve or schedule. + // We check all children concurrently. if node, ok := (child.node).(hashNode); ok { - // Try to resolve the node from the local database - if s.membatch.hasNode(child.path) { - continue - } - // Check the presence of children concurrently + path := child.path + hash := common.BytesToHash(node) pending.Add(1) - go func(child childNode) { + go func() { defer pending.Done() - - // If database says duplicate, then at least the trie node is present - // and we hold the assumption that it's NOT legacy contract code. - var ( - chash = common.BytesToHash(node) - owner, inner = ResolvePath(child.path) - ) - if rawdb.HasTrieNode(s.database, owner, inner, chash, s.scheme) { + owner, inner := ResolvePath(path) + exist, inconsistent := s.hasNode(owner, inner, hash) + if exist { return + } else if inconsistent { + // There is a pre-existing node with the wrong hash in DB, remove it. + batchMu.Lock() + s.membatch.delNode(owner, inner) + batchMu.Unlock() } // Locally unknown node, schedule for retrieval missing <- &nodeRequest{ - path: child.path, - hash: chash, + path: path, + hash: hash, parent: req, callback: req.callback, } - }(child) + }() } } pending.Wait() @@ -561,21 +638,10 @@ func (s *Sync) children(req *nodeRequest, object node) ([]*nodeRequest, error) { // committed themselves. func (s *Sync) commitNodeRequest(req *nodeRequest) error { // Write the node content to the membatch - s.membatch.nodes[string(req.path)] = req.data - s.membatch.hashes[string(req.path)] = req.hash + owner, path := ResolvePath(req.path) + s.membatch.addNode(owner, path, req.data, req.hash) - // The size tracking refers to the db-batch, not the in-memory data. - if s.scheme == rawdb.PathScheme { - s.membatch.size += uint64(len(req.path) + len(req.data)) - } else { - s.membatch.size += common.HashLength + uint64(len(req.data)) - } - // Delete the internal nodes which are marked as invalid - for _, segment := range req.deletes { - path := append(req.path, segment...) - s.membatch.deletes[string(path)] = struct{}{} - s.membatch.size += uint64(len(path)) - } + // Removed the completed node request delete(s.nodeReqs, string(req.path)) s.fetches[len(req.path)]-- @@ -596,8 +662,9 @@ func (s *Sync) commitNodeRequest(req *nodeRequest) error { // committed themselves. func (s *Sync) commitCodeRequest(req *codeRequest) error { // Write the node content to the membatch - s.membatch.codes[req.hash] = req.data - s.membatch.size += common.HashLength + uint64(len(req.data)) + s.membatch.addCode(req.hash, req.data) + + // Removed the completed code request delete(s.codeReqs, req.hash) s.fetches[len(req.path)]-- @@ -613,6 +680,28 @@ func (s *Sync) commitCodeRequest(req *codeRequest) error { return nil } +// hasNode reports whether the specified trie node is present in the database. +// 'exists' is true when the node exists in the database and matches the given root +// hash. The 'inconsistent' return value is true when the node exists but does not +// match the expected hash. +func (s *Sync) hasNode(owner common.Hash, path []byte, hash common.Hash) (exists bool, inconsistent bool) { + // If node is running with hash scheme, check the presence with node hash. + if s.scheme == rawdb.HashScheme { + return rawdb.HasLegacyTrieNode(s.database, hash), false + } + // If node is running with path scheme, check the presence with node path. + var blob []byte + var dbHash common.Hash + if owner == (common.Hash{}) { + blob, dbHash = rawdb.ReadAccountTrieNode(s.database, path) + } else { + blob, dbHash = rawdb.ReadStorageTrieNode(s.database, owner, path) + } + exists = hash == dbHash + inconsistent = !exists && len(blob) != 0 + return exists, inconsistent +} + // ResolvePath resolves the provided composite node path by separating the // path in account trie if it's existent. func ResolvePath(path []byte) (common.Hash, []byte) { diff --git a/trie/sync_test.go b/trie/sync_test.go index 3b7986ef67..585181b48c 100644 --- a/trie/sync_test.go +++ b/trie/sync_test.go @@ -19,6 +19,7 @@ package trie import ( "bytes" "fmt" + "math/rand" "testing" "github.com/ethereum/go-ethereum/common" @@ -571,7 +572,7 @@ func testIncompleteSync(t *testing.T, scheme string) { hash := crypto.Keccak256Hash(result.Data) if hash != root { addedKeys = append(addedKeys, result.Path) - addedHashes = append(addedHashes, crypto.Keccak256Hash(result.Data)) + addedHashes = append(addedHashes, hash) } } // Fetch the next batch to retrieve @@ -587,6 +588,10 @@ func testIncompleteSync(t *testing.T, scheme string) { } // Sanity check that removing any node from the database is detected for i, path := range addedKeys { + if rand.Int31n(100) > 5 { + // Only check 5 percent of added keys as a sanity check + continue + } owner, inner := ResolvePath([]byte(path)) nodeHash := addedHashes[i] value := rawdb.ReadTrieNode(diskdb, owner, inner, nodeHash, scheme) @@ -679,8 +684,11 @@ func testSyncOrdering(t *testing.T, scheme string) { } } } - func syncWith(t *testing.T, root common.Hash, db ethdb.Database, srcDb *Database) { + syncWithHookWriter(t, root, db, srcDb, nil) +} + +func syncWithHookWriter(t *testing.T, root common.Hash, db ethdb.Database, srcDb *Database, hookWriter ethdb.KeyValueWriter) { // Create a destination trie and sync with the scheduler sched := NewSync(root, db, nil, srcDb.Scheme()) @@ -718,8 +726,11 @@ func syncWith(t *testing.T, root common.Hash, db ethdb.Database, srcDb *Database if err := sched.Commit(batch); err != nil { t.Fatalf("failed to commit data: %v", err) } - batch.Write() - + if hookWriter != nil { + batch.Replay(hookWriter) + } else { + batch.Write() + } paths, nodes, _ = sched.Missing(0) elements = elements[:0] for i := 0; i < len(paths); i++ { @@ -889,3 +900,116 @@ func testPivotMove(t *testing.T, scheme string, tiny bool) { syncWith(t, rootC, destDisk, srcTrieDB) checkTrieContents(t, destDisk, scheme, srcTrie.Hash().Bytes(), stateC, true) } + +func TestSyncAbort(t *testing.T) { + testSyncAbort(t, rawdb.PathScheme) + testSyncAbort(t, rawdb.HashScheme) +} + +type hookWriter struct { + db ethdb.KeyValueStore + filter func(key []byte, value []byte) bool +} + +// Put inserts the given value into the key-value data store. +func (w *hookWriter) Put(key []byte, value []byte) error { + if w.filter != nil && w.filter(key, value) { + return nil + } + return w.db.Put(key, value) +} + +// Delete removes the key from the key-value data store. +func (w *hookWriter) Delete(key []byte) error { + return w.db.Delete(key) +} + +func testSyncAbort(t *testing.T, scheme string) { + var ( + srcDisk = rawdb.NewMemoryDatabase() + srcTrieDB = newTestDatabase(srcDisk, scheme) + srcTrie, _ = New(TrieID(types.EmptyRootHash), srcTrieDB) + + deleteFn = func(key []byte, tr *Trie, states map[string][]byte) { + tr.Delete(key) + delete(states, string(key)) + } + writeFn = func(key []byte, val []byte, tr *Trie, states map[string][]byte) { + if val == nil { + val = randBytes(32) + } + tr.Update(key, val) + states[string(key)] = common.CopyBytes(val) + } + copyStates = func(states map[string][]byte) map[string][]byte { + cpy := make(map[string][]byte) + for k, v := range states { + cpy[k] = v + } + return cpy + } + ) + var ( + stateA = make(map[string][]byte) + key = randBytes(32) + val = randBytes(32) + ) + for i := 0; i < 256; i++ { + writeFn(randBytes(32), nil, srcTrie, stateA) + } + writeFn(key, val, srcTrie, stateA) + + rootA, nodesA, _ := srcTrie.Commit(false) + if err := srcTrieDB.Update(rootA, types.EmptyRootHash, 0, trienode.NewWithNodeSet(nodesA), nil); err != nil { + panic(err) + } + if err := srcTrieDB.Commit(rootA, false); err != nil { + panic(err) + } + // Create a destination trie and sync with the scheduler + destDisk := rawdb.NewMemoryDatabase() + syncWith(t, rootA, destDisk, srcTrieDB) + checkTrieContents(t, destDisk, scheme, srcTrie.Hash().Bytes(), stateA, true) + + // Delete the element from the trie + stateB := copyStates(stateA) + srcTrie, _ = New(TrieID(rootA), srcTrieDB) + deleteFn(key, srcTrie, stateB) + + rootB, nodesB, _ := srcTrie.Commit(false) + if err := srcTrieDB.Update(rootB, rootA, 0, trienode.NewWithNodeSet(nodesB), nil); err != nil { + panic(err) + } + if err := srcTrieDB.Commit(rootB, false); err != nil { + panic(err) + } + + // Sync the new state, but never persist the new root node. Before the + // fix #28595, the original old root node will still be left in database + // which breaks the next healing cycle. + syncWithHookWriter(t, rootB, destDisk, srcTrieDB, &hookWriter{db: destDisk, filter: func(key []byte, value []byte) bool { + if scheme == rawdb.HashScheme { + return false + } + if len(value) == 0 { + return false + } + ok, path := rawdb.ResolveAccountTrieNodeKey(key) + return ok && len(path) == 0 + }}) + + // Add elements to expand trie + stateC := copyStates(stateB) + srcTrie, _ = New(TrieID(rootB), srcTrieDB) + + writeFn(key, val, srcTrie, stateC) + rootC, nodesC, _ := srcTrie.Commit(false) + if err := srcTrieDB.Update(rootC, rootB, 0, trienode.NewWithNodeSet(nodesC), nil); err != nil { + panic(err) + } + if err := srcTrieDB.Commit(rootC, false); err != nil { + panic(err) + } + syncWith(t, rootC, destDisk, srcTrieDB) + checkTrieContents(t, destDisk, scheme, srcTrie.Hash().Bytes(), stateC, true) +} diff --git a/trie/trie.go b/trie/trie.go index 07467ac69c..f4d4d9963c 100644 --- a/trie/trie.go +++ b/trie/trie.go @@ -21,13 +21,21 @@ import ( "bytes" "errors" "fmt" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/trie/trienode" ) +var ( + trieGetTimer = metrics.NewRegisteredTimer("trie/get/time", nil) + trieReaderGetTimer = metrics.NewRegisteredTimer("trie/reader/get/time", nil) + trieReaderTotalTimer = metrics.NewRegisteredTimer("trie/reader/total/time", nil) +) + // Trie is a Merkle Patricia Trie. Use New to create a trie that sits on // top of a database. Whenever trie performs a commit operation, the generated // nodes will be gathered and returned in a set. Once the trie is committed, @@ -145,6 +153,10 @@ func (t *Trie) Get(key []byte) ([]byte, error) { if t.committed { return nil, ErrCommitted } + if metrics.EnabledExpensive { + start := time.Now() + defer func() { trieGetTimer.UpdateSince(start) }() + } value, newroot, didResolve, err := t.get(t.root, keybytesToHex(key), 0) if err == nil && didResolve { t.root = newroot @@ -177,7 +189,11 @@ func (t *Trie) get(origNode node, key []byte, pos int) (value []byte, newnode no } return value, n, didResolve, err case hashNode: + start := time.Now() child, err := t.resolveAndTrack(n, key[:pos]) + if metrics.EnabledExpensive { + trieReaderGetTimer.UpdateSince(start) + } if err != nil { return nil, n, true, err } @@ -585,6 +601,10 @@ func (t *Trie) resolve(n node, prefix []byte) (node, error) { // node's original value. The rlp-encoded blob is preferred to be loaded from // database because it's easy to decode node while complex to encode node to blob. func (t *Trie) resolveAndTrack(n hashNode, prefix []byte) (node, error) { + if metrics.EnabledExpensive { + start := time.Now() + defer func() { trieReaderTotalTimer.UpdateSince(start) }() + } blob, err := t.reader.node(prefix, common.BytesToHash(n)) if err != nil { return nil, err diff --git a/trie/trie_test.go b/trie/trie_test.go index 2dfe81ef81..c5bd3faf53 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -22,6 +22,7 @@ import ( "errors" "fmt" "hash" + "io" "math/big" "math/rand" "reflect" @@ -362,13 +363,18 @@ func TestRandomCases(t *testing.T) { {op: 1, key: common.Hex2Bytes("980c393656413a15c8da01978ed9f89feb80b502f58f2d640e3a2f5f7a99a7018f1b573befd92053ac6f78fca4a87268"), value: common.Hex2Bytes("")}, // step 24 {op: 1, key: common.Hex2Bytes("fd"), value: common.Hex2Bytes("")}, // step 25 } - runRandTest(rt) + if err := runRandTest(rt); err != nil { + t.Fatal(err) + } } // randTest performs random trie operations. // Instances of this test are created by Generate. type randTest []randTestStep +// compile-time interface check +var _ quick.Generator = (randTest)(nil) + type randTestStep struct { op int key []byte // for opUpdate, opDelete, opGet @@ -389,33 +395,45 @@ const ( ) func (randTest) Generate(r *rand.Rand, size int) reflect.Value { + var finishedFn = func() bool { + size-- + return size == 0 + } + return reflect.ValueOf(generateSteps(finishedFn, r)) +} + +func generateSteps(finished func() bool, r io.Reader) randTest { var allKeys [][]byte + var one = []byte{0} genKey := func() []byte { - if len(allKeys) < 2 || r.Intn(100) < 10 { + r.Read(one) + if len(allKeys) < 2 || one[0]%100 > 90 { // new key - key := make([]byte, r.Intn(50)) + size := one[0] % 50 + key := make([]byte, size) r.Read(key) allKeys = append(allKeys, key) return key } // use existing key - return allKeys[r.Intn(len(allKeys))] + idx := int(one[0]) % len(allKeys) + return allKeys[idx] } - var steps randTest - for i := 0; i < size; i++ { - step := randTestStep{op: r.Intn(opMax)} + for !finished() { + r.Read(one) + step := randTestStep{op: int(one[0]) % opMax} switch step.op { case opUpdate: step.key = genKey() step.value = make([]byte, 8) - binary.BigEndian.PutUint64(step.value, uint64(i)) + binary.BigEndian.PutUint64(step.value, uint64(len(steps))) case opGet, opDelete, opProve: step.key = genKey() } steps = append(steps, step) } - return reflect.ValueOf(steps) + return steps } func verifyAccessList(old *Trie, new *Trie, set *trienode.NodeSet) error { @@ -460,7 +478,12 @@ func verifyAccessList(old *Trie, new *Trie, set *trienode.NodeSet) error { return nil } -func runRandTest(rt randTest) bool { +// runRandTestBool coerces error to boolean, for use in quick.Check +func runRandTestBool(rt randTest) bool { + return runRandTest(rt) == nil +} + +func runRandTest(rt randTest) error { var scheme = rawdb.HashScheme if rand.Intn(2) == 0 { scheme = rawdb.PathScheme @@ -513,12 +536,12 @@ func runRandTest(rt randTest) bool { newtr, err := New(TrieID(root), triedb) if err != nil { rt[i].err = err - return false + return err } if nodes != nil { if err := verifyAccessList(origTrie, newtr, nodes); err != nil { rt[i].err = err - return false + return err } } tr = newtr @@ -587,14 +610,14 @@ func runRandTest(rt randTest) bool { } // Abort the test on error. if rt[i].err != nil { - return false + return rt[i].err } } - return true + return nil } func TestRandom(t *testing.T) { - if err := quick.Check(runRandTest, nil); err != nil { + if err := quick.Check(runRandTestBool, nil); err != nil { if cerr, ok := err.(*quick.CheckError); ok { t.Fatalf("random test iteration %d failed: %s", cerr.Count, spew.Sdump(cerr.In)) } @@ -912,9 +935,12 @@ func TestCommitSequenceStackTrie(t *testing.T) { trie := NewEmpty(db) // Another sponge is used for the stacktrie commits stackTrieSponge := &spongeDb{sponge: sha3.NewLegacyKeccak256(), id: "b"} - stTrie := NewStackTrie(func(path []byte, hash common.Hash, blob []byte) { + + options := NewStackTrieOptions() + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { rawdb.WriteTrieNode(stackTrieSponge, common.Hash{}, path, hash, blob, db.Scheme()) }) + stTrie := NewStackTrie(options) // Fill the trie with elements for i := 0; i < count; i++ { // For the stack trie, we need to do inserts in proper order @@ -937,10 +963,7 @@ func TestCommitSequenceStackTrie(t *testing.T) { db.Update(root, types.EmptyRootHash, 0, trienode.NewWithNodeSet(nodes), nil) db.Commit(root, false) // And flush stacktrie -> disk - stRoot, err := stTrie.Commit() - if err != nil { - t.Fatalf("Failed to commit stack trie %v", err) - } + stRoot := stTrie.Commit() if stRoot != root { t.Fatalf("root wrong, got %x exp %x", stRoot, root) } @@ -971,9 +994,12 @@ func TestCommitSequenceSmallRoot(t *testing.T) { trie := NewEmpty(db) // Another sponge is used for the stacktrie commits stackTrieSponge := &spongeDb{sponge: sha3.NewLegacyKeccak256(), id: "b"} - stTrie := NewStackTrie(func(path []byte, hash common.Hash, blob []byte) { + + options := NewStackTrieOptions() + options = options.WithWriter(func(path []byte, hash common.Hash, blob []byte) { rawdb.WriteTrieNode(stackTrieSponge, common.Hash{}, path, hash, blob, db.Scheme()) }) + stTrie := NewStackTrie(options) // Add a single small-element to the trie(s) key := make([]byte, 5) key[0] = 1 @@ -985,10 +1011,7 @@ func TestCommitSequenceSmallRoot(t *testing.T) { db.Update(root, types.EmptyRootHash, 0, trienode.NewWithNodeSet(nodes), nil) db.Commit(root, false) // And flush stacktrie -> disk - stRoot, err := stTrie.Commit() - if err != nil { - t.Fatalf("Failed to commit stack trie %v", err) - } + stRoot := stTrie.Commit() if stRoot != root { t.Fatalf("root wrong, got %x exp %x", stRoot, root) } @@ -1185,3 +1208,17 @@ func TestDecodeNode(t *testing.T) { decodeNode(hash, elems) } } + +func FuzzTrie(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + var steps = 500 + var input = bytes.NewReader(data) + var finishedFn = func() bool { + steps-- + return steps < 0 || input.Len() == 0 + } + if err := runRandTest(generateSteps(finishedFn, input)); err != nil { + t.Fatal(err) + } + }) +} diff --git a/trie/triedb/hashdb/database.go b/trie/triedb/hashdb/database.go index 1f49491d01..c509ab74ec 100644 --- a/trie/triedb/hashdb/database.go +++ b/trie/triedb/hashdb/database.go @@ -82,11 +82,6 @@ var Defaults = &Config{ // Database is an intermediate write layer between the trie data structures and // the disk database. The aim is to accumulate trie writes in-memory and only // periodically flush a couple tries to disk, garbage collecting the remainder. -// -// Note, the trie Database is **not** thread safe in its mutations, but it **is** -// thread safe in providing individual, independent node access. The rationale -// behind this split design is to provide read access to RPC handlers and sync -// servers even while the trie is executing expensive garbage collection. type Database struct { diskdb ethdb.Database // Persistent storage for matured trie nodes resolver ChildResolver // The handler to resolve children of nodes @@ -113,7 +108,7 @@ type Database struct { // cachedNode is all the information we know about a single cached trie node // in the memory database write layer. type cachedNode struct { - node []byte // Encoded node blob + node []byte // Encoded node blob, immutable parents uint32 // Number of live nodes referencing this one external map[common.Hash]struct{} // The set of external children flushPrev common.Hash // Previous node in the flush-list @@ -152,9 +147,9 @@ func New(diskdb ethdb.Database, config *Config, resolver ChildResolver) *Databas } } -// insert inserts a simplified trie node into the memory database. -// All nodes inserted by this function will be reference tracked -// and in theory should only used for **trie nodes** insertion. +// insert inserts a trie node into the memory database. All nodes inserted by +// this function will be reference tracked. This function assumes the lock is +// already held. func (db *Database) insert(hash common.Hash, node []byte) { // If the node's already cached, skip if _, ok := db.dirties[hash]; ok { @@ -183,9 +178,9 @@ func (db *Database) insert(hash common.Hash, node []byte) { db.dirtiesSize += common.StorageSize(common.HashLength + len(node)) } -// Node retrieves an encoded cached trie node from memory. If it cannot be found +// node retrieves an encoded cached trie node from memory. If it cannot be found // cached, the method queries the persistent database for the content. -func (db *Database) Node(hash common.Hash) ([]byte, error) { +func (db *Database) node(hash common.Hash) ([]byte, error) { // It doesn't make sense to retrieve the metaroot if hash == (common.Hash{}) { return nil, errors.New("not found") @@ -198,11 +193,14 @@ func (db *Database) Node(hash common.Hash) ([]byte, error) { return enc, nil } } - // Retrieve the node from the dirty cache if available + // Retrieve the node from the dirty cache if available. db.lock.RLock() dirty := db.dirties[hash] db.lock.RUnlock() + // Return the cached node if it's found in the dirty set. + // The dirty.node field is immutable and safe to read it + // even without lock guard. if dirty != nil { memcacheDirtyHitMeter.Mark(1) memcacheDirtyReadMeter.Mark(int64(len(dirty.node))) @@ -223,20 +221,6 @@ func (db *Database) Node(hash common.Hash) ([]byte, error) { return nil, errors.New("not found") } -// Nodes retrieves the hashes of all the nodes cached within the memory database. -// This method is extremely expensive and should only be used to validate internal -// states in test code. -func (db *Database) Nodes() []common.Hash { - db.lock.RLock() - defer db.lock.RUnlock() - - var hashes = make([]common.Hash, 0, len(db.dirties)) - for hash := range db.dirties { - hashes = append(hashes, hash) - } - return hashes -} - // Reference adds a new reference from a parent node to a child node. // This function is used to add reference between internal trie node // and external node(e.g. storage trie root), all internal trie nodes @@ -344,16 +328,16 @@ func (db *Database) dereference(hash common.Hash) { // Cap iteratively flushes old but still referenced trie nodes until the total // memory usage goes below the given threshold. -// -// Note, this method is a non-synchronized mutator. It is unsafe to call this -// concurrently with other mutators. func (db *Database) Cap(limit common.StorageSize) error { + db.lock.Lock() + defer db.lock.Unlock() + // Create a database batch to flush persistent data out. It is important that // outside code doesn't see an inconsistent state (referenced data removed from // memory cache during commit but not yet in persistent storage). This is ensured // by only uncaching existing data when the database write finalizes. - nodes, storage, start := len(db.dirties), db.dirtiesSize, time.Now() batch := db.diskdb.NewBatch() + nodes, storage, start := len(db.dirties), db.dirtiesSize, time.Now() // db.dirtiesSize only contains the useful data in the cache, but when reporting // the total memory consumption, the maintenance metadata is also needed to be @@ -391,9 +375,6 @@ func (db *Database) Cap(limit common.StorageSize) error { return err } // Write successful, clear out the flushed data - db.lock.Lock() - defer db.lock.Unlock() - for db.oldest != oldest { node := db.dirties[db.oldest] delete(db.dirties, db.oldest) @@ -424,10 +405,10 @@ func (db *Database) Cap(limit common.StorageSize) error { // Commit iterates over all the children of a particular node, writes them out // to disk, forcefully tearing down all references in both directions. As a side // effect, all pre-images accumulated up to this point are also written. -// -// Note, this method is a non-synchronized mutator. It is unsafe to call this -// concurrently with other mutators. func (db *Database) Commit(node common.Hash, report bool) error { + db.lock.Lock() + defer db.lock.Unlock() + // Create a database batch to flush persistent data out. It is important that // outside code doesn't see an inconsistent state (referenced data removed from // memory cache during commit but not yet in persistent storage). This is ensured @@ -449,8 +430,6 @@ func (db *Database) Commit(node common.Hash, report bool) error { return err } // Uncache any leftovers in the last batch - db.lock.Lock() - defer db.lock.Unlock() if err := batch.Replay(uncacher); err != nil { return err } @@ -499,13 +478,11 @@ func (db *Database) commit(hash common.Hash, batch ethdb.Batch, uncacher *cleane if err := batch.Write(); err != nil { return err } - db.lock.Lock() err := batch.Replay(uncacher) - batch.Reset() - db.lock.Unlock() if err != nil { return err } + batch.Reset() } return nil } @@ -574,7 +551,7 @@ func (db *Database) Initialized(genesisRoot common.Hash) bool { func (db *Database) Update(root common.Hash, parent common.Hash, block uint64, nodes *trienode.MergedNodeSet, states *triestate.Set) error { // Ensure the parent state is present and signal a warning if not. if parent != types.EmptyRootHash { - if blob, _ := db.Node(parent); len(blob) == 0 { + if blob, _ := db.node(parent); len(blob) == 0 { log.Error("parent state is not present") } } @@ -655,7 +632,7 @@ func (db *Database) Scheme() string { // Reader retrieves a node reader belonging to the given state root. // An error will be returned if the requested state is not available. func (db *Database) Reader(root common.Hash) (*reader, error) { - if _, err := db.Node(root); err != nil { + if _, err := db.node(root); err != nil { return nil, fmt.Errorf("state %#x is not available, %v", root, err) } return &reader{db: db}, nil @@ -666,9 +643,9 @@ type reader struct { db *Database } -// Node retrieves the trie node with the given node hash. -// No error will be returned if the node is not found. +// Node retrieves the trie node with the given node hash. No error will be +// returned if the node is not found. func (reader *reader) Node(owner common.Hash, path []byte, hash common.Hash) ([]byte, error) { - blob, _ := reader.db.Node(hash) + blob, _ := reader.db.node(hash) return blob, nil } diff --git a/trie/triedb/pathdb/asyncnodebuffer.go b/trie/triedb/pathdb/asyncnodebuffer.go index a94fab4461..4e41e8173c 100644 --- a/trie/triedb/pathdb/asyncnodebuffer.go +++ b/trie/triedb/pathdb/asyncnodebuffer.go @@ -41,6 +41,7 @@ func newAsyncNodeBuffer(limit int, nodes map[common.Hash]map[string]*trienode.No } } + log.Info("new async node buffer", "limit", common.StorageSize(limit), "layers", layers) return &asyncnodebuffer{ current: newNodeCache(uint64(limit), size, nodes, layers), background: newNodeCache(uint64(limit), 0, make(map[common.Hash]map[string]*trienode.Node), 0), @@ -66,7 +67,7 @@ func (a *asyncnodebuffer) node(owner common.Hash, path []byte, hash common.Hash) // the ownership of the nodes map which belongs to the bottom-most diff layer. // It will just hold the node references from the given map which are safe to // copy. -func (a *asyncnodebuffer) commit(nodes map[common.Hash]map[string]*trienode.Node) trienodebuffer { +func (a *asyncnodebuffer) commit(root common.Hash, id uint64, block uint64, nodes map[common.Hash]map[string]*trienode.Node) trienodebuffer { a.mux.Lock() defer a.mux.Unlock() @@ -164,6 +165,7 @@ func (a *asyncnodebuffer) flush(db ethdb.KeyValueStore, clean *fastcache.Cache, return nil } +// waitAndStopFlushing will block unit writing the trie nodes of trienodebuffer to disk. func (a *asyncnodebuffer) waitAndStopFlushing() { a.stopFlushing.Store(true) for a.isFlushing.Load() { @@ -172,6 +174,7 @@ func (a *asyncnodebuffer) waitAndStopFlushing() { } } +// getAllNodes return all the trie nodes are cached in trienodebuffer. func (a *asyncnodebuffer) getAllNodes() map[common.Hash]map[string]*trienode.Node { a.mux.Lock() defer a.mux.Unlock() @@ -183,6 +186,7 @@ func (a *asyncnodebuffer) getAllNodes() map[common.Hash]map[string]*trienode.Nod return cached.nodes } +// getLayers return the size of cached difflayers. func (a *asyncnodebuffer) getLayers() uint64 { a.mux.RLock() defer a.mux.RUnlock() @@ -190,6 +194,7 @@ func (a *asyncnodebuffer) getLayers() uint64 { return a.current.layers + a.background.layers } +// getSize return the trienodebuffer used size. func (a *asyncnodebuffer) getSize() (uint64, uint64) { a.mux.RLock() defer a.mux.RUnlock() @@ -197,6 +202,17 @@ func (a *asyncnodebuffer) getSize() (uint64, uint64) { return a.current.size, a.background.size } +// setClean set fastcache to trienodebuffer for cache the trie nodes, +// used for nodebufferlist. +func (a *asyncnodebuffer) setClean(clean *fastcache.Cache) { + return +} + +// proposedBlockReader return the world state Reader of block that is proposed to L1. +func (a *asyncnodebuffer) proposedBlockReader(blockRoot common.Hash) (layer, error) { + return nil, errors.New("async node buffer not support to get proposed block reader") +} + type nodecache struct { layers uint64 // The number of diff layers aggregated inside size uint64 // The size of aggregated writes diff --git a/trie/triedb/pathdb/database.go b/trie/triedb/pathdb/database.go index 9dae534da4..5b96656c92 100644 --- a/trie/triedb/pathdb/database.go +++ b/trie/triedb/pathdb/database.go @@ -20,10 +20,12 @@ import ( "errors" "fmt" "io" + "os" "sync" "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/gopool" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" @@ -62,6 +64,13 @@ const ( DefaultBatchRedundancyRate = 1.1 ) +type JournalType int + +const ( + JournalKVType JournalType = iota + JournalFileType +) + // layer is the interface implemented by all state layers which includes some // public methods and some additional methods for internal usage. type layer interface { @@ -89,16 +98,20 @@ type layer interface { // journal commits an entire diff hierarchy to disk into a single journal entry. // This is meant to be used during shutdown to persist the layer without // flattening everything down (bad for reorgs). - journal(w io.Writer) error + journal(w io.Writer, journalType JournalType) error } // Config contains the settings for database. type Config struct { - SyncFlush bool // Flag of trienodebuffer sync flush cache to disk - StateHistory uint64 // Number of recent blocks to maintain state history for - CleanCacheSize int // Maximum memory allowance (in bytes) for caching clean nodes - DirtyCacheSize int // Maximum memory allowance (in bytes) for caching dirty nodes - ReadOnly bool // Flag whether the database is opened in read only mode. + TrieNodeBufferType NodeBufferType // Type of trienodebuffer to cache trie nodes in disklayer + StateHistory uint64 // Number of recent blocks to maintain state history for + CleanCacheSize int // Maximum memory allowance (in bytes) for caching clean nodes + DirtyCacheSize int // Maximum memory allowance (in bytes) for caching dirty nodes + ReadOnly bool // Flag whether the database is opened in read only mode. + ProposeBlockInterval uint64 // Propose block to L1 block interval. + NotifyKeep NotifyKeepFunc // NotifyKeep is used to keep the proof which maybe queried by op-proposer. + JournalFilePath string // The journal file path + JournalFile bool // Whether to use journal file mode } // sanitize checks the provided user configurations and changes anything that's @@ -106,6 +119,7 @@ type Config struct { func (c *Config) sanitize() *Config { conf := *c if conf.DirtyCacheSize > maxBufferSize { + conf.CleanCacheSize = conf.DirtyCacheSize - maxBufferSize log.Warn("Sanitizing invalid node buffer size", "provided", common.StorageSize(conf.DirtyCacheSize), "updated", common.StorageSize(maxBufferSize)) conf.DirtyCacheSize = maxBufferSize } @@ -145,6 +159,7 @@ type Database struct { tree *layerTree // The group for all known layers freezer *rawdb.ResettableFreezer // Freezer for storing trie histories, nil possible in tests lock sync.RWMutex // Lock to prevent mutations from happening at the same time + capLock sync.Mutex } // New attempts to load an already existing layer from a persistent key-value @@ -179,14 +194,31 @@ func New(diskdb ethdb.Database, config *Config) *Database { } db.freezer = freezer - // Truncate the extra state histories above in freezer in case - // it's not aligned with the disk layer. - pruned, err := truncateFromHead(db.diskdb, freezer, db.tree.bottom().stateID()) - if err != nil { - log.Crit("Failed to truncate extra state histories", "err", err) - } - if pruned != 0 { - log.Warn("Truncated extra state histories", "number", pruned) + diskLayerID := db.tree.bottom().stateID() + if diskLayerID == 0 { + // Reset the entire state histories in case the trie database is + // not initialized yet, as these state histories are not expected. + frozen, err := db.freezer.Ancients() + if err != nil { + log.Crit("Failed to retrieve head of state history", "err", err) + } + if frozen != 0 { + err := db.freezer.Reset() + if err != nil { + log.Crit("Failed to reset state histories", "err", err) + } + log.Info("Truncated extraneous state history") + } + } else { + // Truncate the extra state histories above in freezer in case + // it's not aligned with the disk layer. + pruned, err := truncateFromHead(db.diskdb, freezer, diskLayerID) + if err != nil { + log.Crit("Failed to truncate extra state histories", "err", err) + } + if pruned != 0 { + log.Warn("Truncated extra state histories", "number", pruned) + } } } // Disable database in case node is still in the initial state sync stage. @@ -195,7 +227,7 @@ func New(diskdb ethdb.Database, config *Config) *Database { log.Crit("Failed to disable database", "err", err) // impossible to happen } } - log.Warn("Path-based state scheme is an experimental feature", "sync", db.config.SyncFlush) + log.Warn("Path-based state scheme is an experimental feature") return db } @@ -203,6 +235,10 @@ func New(diskdb ethdb.Database, config *Config) *Database { func (db *Database) Reader(root common.Hash) (layer, error) { l := db.tree.get(root) if l == nil { + r, err := db.tree.bottom().buffer.proposedBlockReader(root) + if err == nil && r != nil { + return r, nil + } return nil, fmt.Errorf("state %#x is not available", root) } return l, nil @@ -227,12 +263,20 @@ func (db *Database) Update(root common.Hash, parentRoot common.Hash, block uint6 if err := db.tree.add(root, parentRoot, block, nodes, states); err != nil { return err } - // Keep 128 diff layers in the memory, persistent layer is 129th. - // - head layer is paired with HEAD state - // - head-1 layer is paired with HEAD-1 state - // - head-127 layer(bottom-most diff layer) is paired with HEAD-127 state - // - head-128 layer(disk layer) is paired with HEAD-128 state - return db.tree.cap(root, maxDiffLayers) + db.capLock.Lock() + gopool.Submit(func() { + defer db.capLock.Unlock() + // Keep 128 diff layers in the memory, persistent layer is 129th. + // - head layer is paired with HEAD state + // - head-1 layer is paired with HEAD-1 state + // - head-127 layer(bottom-most diff layer) is paired with HEAD-127 state + // - head-128 layer(disk layer) is paired with HEAD-128 state + err := db.tree.cap(root, maxDiffLayers) + if err != nil { + log.Crit("failed to cap layer tree", "error", err) + } + }) + return nil } // Commit traverses downwards the layer tree from a specified layer with the @@ -241,7 +285,9 @@ func (db *Database) Update(root common.Hash, parentRoot common.Hash, block uint6 func (db *Database) Commit(root common.Hash, report bool) error { // Hold the lock to prevent concurrent mutations. db.lock.Lock() + db.capLock.Lock() defer db.lock.Unlock() + defer db.capLock.Unlock() // Short circuit if the mutation is not allowed. if err := db.modifyAllowed(); err != nil { @@ -296,7 +342,7 @@ func (db *Database) Enable(root common.Hash) error { // Drop the stale state journal in persistent database and // reset the persistent state id back to zero. batch := db.diskdb.NewBatch() - rawdb.DeleteTrieJournal(batch) + db.DeleteTrieJournal(batch) rawdb.WritePersistentStateID(batch, 0) if err := batch.Write(); err != nil { return err @@ -312,7 +358,10 @@ func (db *Database) Enable(root common.Hash) error { } // Re-construct a new disk layer backed by persistent state // with **empty clean cache and node buffer**. - db.tree.reset(newDiskLayer(root, 0, db, nil, NewTrieNodeBuffer(db.config.SyncFlush, db.bufferSize, nil, 0))) + nb := NewTrieNodeBuffer(db.diskdb, db.config.TrieNodeBufferType, db.bufferSize, nil, 0, db.config.ProposeBlockInterval, db.config.NotifyKeep) + dl := newDiskLayer(root, 0, db, nil, nb) + nb.setClean(dl.cleans) + db.tree.reset(dl) // Re-enable the database as the final step. db.waitSync = false @@ -326,7 +375,9 @@ func (db *Database) Enable(root common.Hash) error { // canonical state and the corresponding trie histories are existent. func (db *Database) Recover(root common.Hash, loader triestate.TrieLoader) error { db.lock.Lock() + db.capLock.Lock() defer db.lock.Unlock() + defer db.capLock.Unlock() // Short circuit if rollback operation is not supported. if err := db.modifyAllowed(); err != nil { @@ -337,8 +388,7 @@ func (db *Database) Recover(root common.Hash, loader triestate.TrieLoader) error } // Short circuit if the target state is not recoverable. root = types.TrieRootHash(root) - - if !db.Recoverable(root) { + if !db.recoverable(root) { return errStateUnrecoverable } // Apply the state histories upon the disk layer in order. @@ -363,7 +413,7 @@ func (db *Database) Recover(root common.Hash, loader triestate.TrieLoader) error // disk layer won't be accessible from outside. db.tree.reset(dl) } - rawdb.DeleteTrieJournal(db.diskdb) + db.DeleteTrieJournal(db.diskdb) _, err := truncateFromHead(db.diskdb, db.freezer, dl.stateID()) if err != nil { return err @@ -372,8 +422,14 @@ func (db *Database) Recover(root common.Hash, loader triestate.TrieLoader) error return nil } -// Recoverable returns the indicator if the specified state is recoverable. func (db *Database) Recoverable(root common.Hash) bool { + db.capLock.Lock() + defer db.capLock.Unlock() + return db.recoverable(root) +} + +// Recoverable returns the indicator if the specified state is recoverable. +func (db *Database) recoverable(root common.Hash) bool { // Ensure the requested state is a known state. root = types.TrieRootHash(root) id := rawdb.ReadStateID(db.diskdb, root) @@ -444,6 +500,9 @@ func (db *Database) Initialized(genesisRoot common.Hash) bool { inited = true } }) + if !inited { + inited = rawdb.ReadSnapSyncStatusFlag(db.diskdb) != rawdb.StateSyncUnknown + } return inited } @@ -483,3 +542,45 @@ func (db *Database) modifyAllowed() error { } return nil } + +// DetermineJournalTypeForWriter is used when persisting the journal. +// It determines JournalType based on the config passed in by the Config. +func (db *Database) DetermineJournalTypeForWriter() JournalType { + if db.config.JournalFile { + return JournalFileType + } else { + return JournalKVType + } +} + +// DetermineJournalTypeForReader is used when loading the journal. +// It loads based on whether JournalKV or JournalFile currently exists. +func (db *Database) DetermineJournalTypeForReader() JournalType { + if journal := rawdb.ReadTrieJournal(db.diskdb); len(journal) != 0 { + return JournalKVType + } + + if fileInfo, stateErr := os.Stat(db.config.JournalFilePath); stateErr == nil && !fileInfo.IsDir() { + return JournalFileType + } + + return JournalKVType +} + +// DeleteTrieJournal deletes trie journal data. +func (db *Database) DeleteTrieJournal(writer ethdb.KeyValueWriter) error { + // To prevent any remnants of old journals after converting from JournalKV to JournalFile + // or vice versa, all deletions must be completed. + rawdb.DeleteTrieJournal(writer) + + // delete from journal file, may not exist + filePath := db.config.JournalFilePath + if _, err := os.Stat(filePath); os.IsNotExist(err) { + return nil + } + errRemove := os.Remove(filePath) + if errRemove != nil { + log.Crit("Failed to remove tries journal", "journal path", filePath, "err", errRemove) + } + return nil +} diff --git a/trie/triedb/pathdb/database_test.go b/trie/triedb/pathdb/database_test.go index 912364f7f4..52b298bb9f 100644 --- a/trie/triedb/pathdb/database_test.go +++ b/trie/triedb/pathdb/database_test.go @@ -96,11 +96,15 @@ type tester struct { snapStorages map[common.Hash]map[common.Hash]map[common.Hash][]byte } -func newTester(t *testing.T) *tester { +func newTester(t *testing.T, historyLimit uint64) *tester { var ( disk, _ = rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), t.TempDir(), "", false) - db = New(disk, &Config{CleanCacheSize: 256 * 1024, DirtyCacheSize: 256 * 1024}) - obj = &tester{ + db = New(disk, &Config{ + StateHistory: historyLimit, + CleanCacheSize: 256 * 1024, + DirtyCacheSize: 256 * 1024, + }) + obj = &tester{ db: db, preimages: make(map[common.Hash]common.Address), accounts: make(map[common.Hash][]byte), @@ -120,6 +124,7 @@ func newTester(t *testing.T) *tester { } obj.roots = append(obj.roots, root) } + _ = db.Recoverable(types.EmptyRootHash) return obj } @@ -376,7 +381,7 @@ func (t *tester) bottomIndex() int { func TestDatabaseRollback(t *testing.T) { // Verify state histories - tester := newTester(t) + tester := newTester(t, 0) defer tester.release() if err := tester.verifyHistory(); err != nil { @@ -402,7 +407,7 @@ func TestDatabaseRollback(t *testing.T) { func TestDatabaseRecoverable(t *testing.T) { var ( - tester = newTester(t) + tester = newTester(t, 0) index = tester.bottomIndex() ) defer tester.release() @@ -440,9 +445,11 @@ func TestDatabaseRecoverable(t *testing.T) { } func TestDisable(t *testing.T) { - tester := newTester(t) + tester := newTester(t, 0) defer tester.release() + index := len(tester.roots)/2 + 1 + tester.db.Commit(tester.roots[index], false) _, stored := rawdb.ReadAccountTrieNode(tester.db.diskdb, nil) if err := tester.db.Disable(); err != nil { t.Fatal("Failed to deactivate database") @@ -476,7 +483,7 @@ func TestDisable(t *testing.T) { } func TestCommit(t *testing.T) { - tester := newTester(t) + tester := newTester(t, 0) defer tester.release() if err := tester.db.Commit(tester.lastHash(), false); err != nil { @@ -500,7 +507,7 @@ func TestCommit(t *testing.T) { } func TestJournal(t *testing.T) { - tester := newTester(t) + tester := newTester(t, 0) defer tester.release() if err := tester.db.Journal(tester.lastHash()); err != nil { @@ -524,7 +531,7 @@ func TestJournal(t *testing.T) { } func TestCorruptedJournal(t *testing.T) { - tester := newTester(t) + tester := newTester(t, 0) defer tester.release() if err := tester.db.Journal(tester.lastHash()); err != nil { @@ -553,6 +560,35 @@ func TestCorruptedJournal(t *testing.T) { } } +// TestTailTruncateHistory function is designed to test a specific edge case where, +// when history objects are removed from the end, it should trigger a state flush +// if the ID of the new tail object is even higher than the persisted state ID. +// +// For example, let's say the ID of the persistent state is 10, and the current +// history objects range from ID(5) to ID(15). As we accumulate six more objects, +// the history will expand to cover ID(11) to ID(21). ID(11) then becomes the +// oldest history object, and its ID is even higher than the stored state. +// +// In this scenario, it is mandatory to update the persistent state before +// truncating the tail histories. This ensures that the ID of the persistent state +// always falls within the range of [oldest-history-id, latest-history-id]. +func TestTailTruncateHistory(t *testing.T) { + tester := newTester(t, 10) + defer tester.release() + + tester.db.Close() + tester.db = New(tester.db.diskdb, &Config{StateHistory: 10}) + + head, err := tester.db.freezer.Ancients() + if err != nil { + t.Fatalf("Failed to obtain freezer head") + } + stored := rawdb.ReadPersistentStateID(tester.db.diskdb) + if head != stored { + t.Fatalf("Failed to truncate excess history object above, stored: %d, head: %d", stored, head) + } +} + // copyAccounts returns a deep-copied account set of the provided one. func copyAccounts(set map[common.Hash][]byte) map[common.Hash][]byte { copied := make(map[common.Hash][]byte, len(set)) diff --git a/trie/triedb/pathdb/difflayer_test.go b/trie/triedb/pathdb/difflayer_test.go index 9b5907c3c5..7c3d97ddfb 100644 --- a/trie/triedb/pathdb/difflayer_test.go +++ b/trie/triedb/pathdb/difflayer_test.go @@ -165,6 +165,6 @@ func BenchmarkJournal(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - layer.journal(new(bytes.Buffer)) + layer.journal(new(bytes.Buffer), JournalKVType) } } diff --git a/trie/triedb/pathdb/disklayer.go b/trie/triedb/pathdb/disklayer.go index 95679ced86..c386acc9e5 100644 --- a/trie/triedb/pathdb/disklayer.go +++ b/trie/triedb/pathdb/disklayer.go @@ -43,7 +43,7 @@ type trienodebuffer interface { // the ownership of the nodes map which belongs to the bottom-most diff layer. // It will just hold the node references from the given map which are safe to // copy. - commit(nodes map[common.Hash]map[string]*trienode.Node) trienodebuffer + commit(root common.Hash, id uint64, block uint64, nodes map[common.Hash]map[string]*trienode.Node) trienodebuffer // revert is the reverse operation of commit. It also merges the provided nodes // into the trienodebuffer, the difference is that the provided node set should @@ -75,15 +75,63 @@ type trienodebuffer interface { // waitAndStopFlushing will block unit writing the trie nodes of trienodebuffer to disk. waitAndStopFlushing() + + // setClean set fastcache to trienodebuffer for cache the trie nodes, used for nodebufferlist. + setClean(clean *fastcache.Cache) + + // proposedBlockReader return the world state Reader of block that is proposed to L1. + proposedBlockReader(blockRoot common.Hash) (layer, error) +} + +type NodeBufferType int32 + +const ( + AsyncNodeBuffer NodeBufferType = 0 + SyncNodeBuffer NodeBufferType = 1 + NodeBufferList NodeBufferType = 2 +) + +var ( + nodeBufferStringToType = map[string]NodeBufferType{ + "async": AsyncNodeBuffer, + "sync": SyncNodeBuffer, + "list": NodeBufferList, + } + + nodeBufferTypeToString = map[NodeBufferType]string{ + AsyncNodeBuffer: "async", + SyncNodeBuffer: "sync", + NodeBufferList: "list", + } +) + +func GetNodeBufferType(name string) NodeBufferType { + if _, ok := nodeBufferStringToType[name]; !ok { + log.Warn("node buffer type mismatch", "provide", name, "adjust to default", nodeBufferTypeToString[NodeBufferList]) + return NodeBufferList + } + return nodeBufferStringToType[name] } -func NewTrieNodeBuffer(sync bool, limit int, nodes map[common.Hash]map[string]*trienode.Node, layers uint64) trienodebuffer { - if sync { - log.Info("New sync node buffer", "limit", common.StorageSize(limit), "layers", layers) +func NewTrieNodeBuffer( + db ethdb.Database, + trieNodeBufferType NodeBufferType, + limit int, + nodes map[common.Hash]map[string]*trienode.Node, + layers, proposeBlockInterval uint64, + keepFunc NotifyKeepFunc, +) trienodebuffer { + log.Info("init trie node buffer", "type", nodeBufferTypeToString[trieNodeBufferType]) + switch trieNodeBufferType { + case NodeBufferList: + return newNodeBufferList(db, uint64(limit), nodes, layers, proposeBlockInterval, keepFunc) + case AsyncNodeBuffer: + return newAsyncNodeBuffer(limit, nodes, layers) + case SyncNodeBuffer: return newNodeBuffer(limit, nodes, layers) + default: + return newAsyncNodeBuffer(limit, nodes, layers) } - log.Info("New async node buffer", "limit", common.StorageSize(limit), "layers", layers) - return newAsyncNodeBuffer(limit, nodes, layers) } // diskLayer is a low level persistent layer built on top of a key-value store. @@ -227,37 +275,65 @@ func (dl *diskLayer) commit(bottom *diffLayer, force bool) (*diskLayer, error) { dl.lock.Lock() defer dl.lock.Unlock() - // Construct and store the state history first. If crash happens - // after storing the state history but without flushing the - // corresponding states(journal), the stored state history will - // be truncated in the next restart. + // Construct and store the state history first. If crash happens after storing + // the state history but without flushing the corresponding states(journal), + // the stored state history will be truncated from head in the next restart. + var ( + overflow bool + oldest uint64 + ) if dl.db.freezer != nil { - err := writeHistory(dl.db.diskdb, dl.db.freezer, bottom, dl.db.config.StateHistory) + err := writeHistory(dl.db.freezer, bottom) + if err != nil { + return nil, err + } + // Determine if the persisted history object has exceeded the configured + // limitation, set the overflow as true if so. + tail, err := dl.db.freezer.Tail() if err != nil { return nil, err } + limit := dl.db.config.StateHistory + if limit != 0 && bottom.stateID()-tail > limit { + overflow = true + oldest = bottom.stateID() - limit + 1 // track the id of history **after truncation** + } } // Mark the diskLayer as stale before applying any mutations on top. dl.stale = true - // Store the root->id lookup afterwards. All stored lookups are - // identified by the **unique** state root. It's impossible that - // in the same chain blocks are not adjacent but have the same - // root. + // Store the root->id lookup afterwards. All stored lookups are identified + // by the **unique** state root. It's impossible that in the same chain + // blocks are not adjacent but have the same root. if dl.id == 0 { rawdb.WriteStateID(dl.db.diskdb, dl.root, 0) } rawdb.WriteStateID(dl.db.diskdb, bottom.rootHash(), bottom.stateID()) - // Construct a new disk layer by merging the nodes from the provided - // diff layer, and flush the content in disk layer if there are too - // many nodes cached. The clean cache is inherited from the original - // disk layer for reusing. - ndl := newDiskLayer(bottom.root, bottom.stateID(), dl.db, dl.cleans, dl.buffer.commit(bottom.nodes)) - err := ndl.buffer.flush(ndl.db.diskdb, ndl.cleans, ndl.id, force) - if err != nil { + // Construct a new disk layer by merging the nodes from the provided diff + // layer, and flush the content in disk layer if there are too many nodes + // cached. The clean cache is inherited from the original disk layer. + ndl := newDiskLayer(bottom.root, bottom.stateID(), dl.db, dl.cleans, dl.buffer.commit(bottom.root, bottom.id, bottom.block, bottom.nodes)) + + // In a unique scenario where the ID of the oldest history object (after tail + // truncation) surpasses the persisted state ID, we take the necessary action + // of forcibly committing the cached dirty nodes to ensure that the persisted + // state ID remains higher. + if !force && rawdb.ReadPersistentStateID(dl.db.diskdb) < oldest { + force = true + } + if err := ndl.buffer.flush(ndl.db.diskdb, ndl.cleans, ndl.id, force); err != nil { return nil, err } + // To remove outdated history objects from the end, we set the 'tail' parameter + // to 'oldest-1' due to the offset between the freezer index and the history ID. + if overflow { + pruned, err := truncateFromTail(ndl.db.diskdb, ndl.db.freezer, oldest-1) + if err != nil { + return nil, err + } + log.Debug("Pruned state history", "items", pruned, "tailid", oldest) + } return ndl, nil } diff --git a/trie/triedb/pathdb/errors.go b/trie/triedb/pathdb/errors.go index 46b986f884..6b9fa0317e 100644 --- a/trie/triedb/pathdb/errors.go +++ b/trie/triedb/pathdb/errors.go @@ -63,6 +63,9 @@ var ( // errRevertImmutable is returned if revert the background immutable nodecache errRevertImmutable = errors.New("revert immutable nodecache") + + // errNoProposedBlockDifflayer is returned if difflayers is not enough. + errNoProposedBlockDifflayer = errors.New("no proposed block difflayer") ) func newUnexpectedNodeError(loc string, expHash common.Hash, gotHash common.Hash, owner common.Hash, path []byte, blob []byte) error { diff --git a/trie/triedb/pathdb/history.go b/trie/triedb/pathdb/history.go index ce82532507..6e3f3faaed 100644 --- a/trie/triedb/pathdb/history.go +++ b/trie/triedb/pathdb/history.go @@ -512,38 +512,28 @@ func readHistory(freezer *rawdb.ResettableFreezer, id uint64) (*history, error) return &dec, nil } -// writeHistory writes the state history with provided state set. After -// storing the corresponding state history, it will also prune the stale -// histories from the disk with the given threshold. -func writeHistory(db ethdb.KeyValueStore, freezer *rawdb.ResettableFreezer, dl *diffLayer, limit uint64) error { +// writeHistory persists the state history with the provided state set. +func writeHistory(freezer *rawdb.ResettableFreezer, dl *diffLayer) error { // Short circuit if state set is not available. if dl.states == nil { return errors.New("state change set is not available") } var ( - err error - n int - start = time.Now() - h = newHistory(dl.rootHash(), dl.parentLayer().rootHash(), dl.block, dl.states) + start = time.Now() + history = newHistory(dl.rootHash(), dl.parentLayer().rootHash(), dl.block, dl.states) ) - accountData, storageData, accountIndex, storageIndex := h.encode() + accountData, storageData, accountIndex, storageIndex := history.encode() dataSize := common.StorageSize(len(accountData) + len(storageData)) indexSize := common.StorageSize(len(accountIndex) + len(storageIndex)) // Write history data into five freezer table respectively. - rawdb.WriteStateHistory(freezer, dl.stateID(), h.meta.encode(), accountIndex, storageIndex, accountData, storageData) + rawdb.WriteStateHistory(freezer, dl.stateID(), history.meta.encode(), accountIndex, storageIndex, accountData, storageData) - // Prune stale state histories based on the config. - if limit != 0 && dl.stateID() > limit { - n, err = truncateFromTail(db, freezer, dl.stateID()-limit) - if err != nil { - return err - } - } historyDataBytesMeter.Mark(int64(dataSize)) historyIndexBytesMeter.Mark(int64(indexSize)) historyBuildTimeMeter.UpdateSince(start) - log.Debug("Stored state history", "id", dl.stateID(), "block", dl.block, "data", dataSize, "index", indexSize, "pruned", n, "elapsed", common.PrettyDuration(time.Since(start))) + log.Debug("Stored state history", "id", dl.stateID(), "block", dl.block, "data", dataSize, "index", indexSize, "elapsed", common.PrettyDuration(time.Since(start))) + return nil } @@ -581,7 +571,16 @@ func truncateFromHead(db ethdb.Batcher, freezer *rawdb.ResettableFreezer, nhead if err != nil { return 0, err } - if ohead <= nhead { + otail, err := freezer.Tail() + if err != nil { + return 0, err + } + // Ensure that the truncation target falls within the specified range. + if ohead < nhead || nhead < otail { + return 0, fmt.Errorf("out of range, tail: %d, head: %d, target: %d", otail, ohead, nhead) + } + // Short circuit if nothing to truncate. + if ohead == nhead { return 0, nil } // Load the meta objects in range [nhead+1, ohead] @@ -610,11 +609,20 @@ func truncateFromHead(db ethdb.Batcher, freezer *rawdb.ResettableFreezer, nhead // truncateFromTail removes the extra state histories from the tail with the given // parameters. It returns the number of items removed from the tail. func truncateFromTail(db ethdb.Batcher, freezer *rawdb.ResettableFreezer, ntail uint64) (int, error) { + ohead, err := freezer.Ancients() + if err != nil { + return 0, err + } otail, err := freezer.Tail() if err != nil { return 0, err } - if otail >= ntail { + // Ensure that the truncation target falls within the specified range. + if otail > ntail || ntail > ohead { + return 0, fmt.Errorf("out of range, tail: %d, head: %d, target: %d", otail, ohead, ntail) + } + // Short circuit if nothing to truncate. + if otail == ntail { return 0, nil } // Load the meta objects in range [otail+1, ntail] diff --git a/trie/triedb/pathdb/history_test.go b/trie/triedb/pathdb/history_test.go index 677103e2b0..a3257441de 100644 --- a/trie/triedb/pathdb/history_test.go +++ b/trie/triedb/pathdb/history_test.go @@ -224,6 +224,50 @@ func TestTruncateTailHistories(t *testing.T) { } } +func TestTruncateOutOfRange(t *testing.T) { + var ( + hs = makeHistories(10) + db = rawdb.NewMemoryDatabase() + freezer, _ = openFreezer(t.TempDir(), false) + ) + defer freezer.Close() + + for i := 0; i < len(hs); i++ { + accountData, storageData, accountIndex, storageIndex := hs[i].encode() + rawdb.WriteStateHistory(freezer, uint64(i+1), hs[i].meta.encode(), accountIndex, storageIndex, accountData, storageData) + rawdb.WriteStateID(db, hs[i].meta.root, uint64(i+1)) + } + truncateFromTail(db, freezer, uint64(len(hs)/2)) + + // Ensure of-out-range truncations are rejected correctly. + head, _ := freezer.Ancients() + tail, _ := freezer.Tail() + + cases := []struct { + mode int + target uint64 + expErr error + }{ + {0, head, nil}, // nothing to delete + {0, head + 1, fmt.Errorf("out of range, tail: %d, head: %d, target: %d", tail, head, head+1)}, + {0, tail - 1, fmt.Errorf("out of range, tail: %d, head: %d, target: %d", tail, head, tail-1)}, + {1, tail, nil}, // nothing to delete + {1, head + 1, fmt.Errorf("out of range, tail: %d, head: %d, target: %d", tail, head, head+1)}, + {1, tail - 1, fmt.Errorf("out of range, tail: %d, head: %d, target: %d", tail, head, tail-1)}, + } + for _, c := range cases { + var gotErr error + if c.mode == 0 { + _, gotErr = truncateFromHead(db, freezer, c.target) + } else { + _, gotErr = truncateFromTail(db, freezer, c.target) + } + if !reflect.DeepEqual(gotErr, c.expErr) { + t.Errorf("Unexpected error, want: %v, got: %v", c.expErr, gotErr) + } + } +} + // openFreezer initializes the freezer instance for storing state histories. func openFreezer(datadir string, readOnly bool) (*rawdb.ResettableFreezer, error) { return rawdb.NewStateFreezer(datadir, readOnly) diff --git a/trie/triedb/pathdb/journal.go b/trie/triedb/pathdb/journal.go index f86d857560..c6358f6808 100644 --- a/trie/triedb/pathdb/journal.go +++ b/trie/triedb/pathdb/journal.go @@ -18,15 +18,19 @@ package pathdb import ( "bytes" + "crypto/sha256" "errors" "fmt" "io" + "io/fs" + "os" "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie/trienode" @@ -70,13 +74,140 @@ type journalStorage struct { Slots [][]byte } +type JournalWriter interface { + io.Writer + + Close() + Size() uint64 +} + +type JournalReader interface { + io.Reader + Close() +} + +type JournalFileWriter struct { + file *os.File +} + +type JournalFileReader struct { + file *os.File +} + +type JournalKVWriter struct { + journalBuf bytes.Buffer + diskdb ethdb.Database +} + +type JournalKVReader struct { + journalBuf *bytes.Buffer +} + +// Write appends b directly to the encoder output. +func (fw *JournalFileWriter) Write(b []byte) (int, error) { + return fw.file.Write(b) +} + +func (fw *JournalFileWriter) Close() { + fw.file.Close() +} + +func (fw *JournalFileWriter) Size() uint64 { + if fw.file == nil { + return 0 + } + fileInfo, err := fw.file.Stat() + if err != nil { + log.Crit("Failed to stat journal", "err", err) + } + return uint64(fileInfo.Size()) +} + +func (kw *JournalKVWriter) Write(b []byte) (int, error) { + return kw.journalBuf.Write(b) +} + +func (kw *JournalKVWriter) Close() { + rawdb.WriteTrieJournal(kw.diskdb, kw.journalBuf.Bytes()) + kw.journalBuf.Reset() +} + +func (kw *JournalKVWriter) Size() uint64 { + return uint64(kw.journalBuf.Len()) +} + +func (fr *JournalFileReader) Read(p []byte) (n int, err error) { + return fr.file.Read(p) +} + +func (fr *JournalFileReader) Close() { + fr.file.Close() +} + +func (kr *JournalKVReader) Read(p []byte) (n int, err error) { + return kr.journalBuf.Read(p) +} + +func (kr *JournalKVReader) Close() { +} + +func newJournalWriter(file string, db ethdb.Database, journalType JournalType) JournalWriter { + if journalType == JournalKVType { + log.Info("New journal writer for journal kv") + return &JournalKVWriter{ + diskdb: db, + } + } else { + fd, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) + if err != nil { + return nil + } + log.Info("New journal writer for journal file", "path", file) + return &JournalFileWriter{ + file: fd, + } + } +} + +func newJournalReader(file string, db ethdb.Database, journalType JournalType) (JournalReader, error) { + if journalType == JournalKVType { + journal := rawdb.ReadTrieJournal(db) + if len(journal) == 0 { + return nil, errMissJournal + } + + log.Info("New journal reader for journal kv") + return &JournalKVReader{ + journalBuf: bytes.NewBuffer(journal), + }, nil + } else { + fd, err := os.Open(file) + if errors.Is(err, fs.ErrNotExist) { + return nil, errMissJournal + } + if err != nil { + return nil, err + } + log.Info("New journal reader for journal file", "path", file) + return &JournalFileReader{ + file: fd, + }, nil + } +} + // loadJournal tries to parse the layer journal from the disk. func (db *Database) loadJournal(diskRoot common.Hash) (layer, error) { - journal := rawdb.ReadTrieJournal(db.diskdb) - if len(journal) == 0 { - return nil, errMissJournal + start := time.Now() + journalTypeForReader := db.DetermineJournalTypeForReader() + reader, err := newJournalReader(db.config.JournalFilePath, db.diskdb, journalTypeForReader) + + if err != nil { + return nil, err + } + if reader != nil { + defer reader.Close() } - r := rlp.NewStream(bytes.NewReader(journal), 0) + r := rlp.NewStream(reader, 0) // Firstly, resolve the first element as the journal version version, err := r.Uint64() @@ -99,16 +230,16 @@ func (db *Database) loadJournal(diskRoot common.Hash) (layer, error) { return nil, fmt.Errorf("%w want %x got %x", errUnmatchedJournal, root, diskRoot) } // Load the disk layer from the journal - base, err := db.loadDiskLayer(r) + base, err := db.loadDiskLayer(r, journalTypeForReader) if err != nil { return nil, err } // Load all the diff layers from the journal - head, err := db.loadDiffLayer(base, r) + head, err := db.loadDiffLayer(base, r, journalTypeForReader) if err != nil { return nil, err } - log.Debug("Loaded layer journal", "diskroot", diskRoot, "diffhead", head.rootHash()) + log.Info("Loaded layer journal", "diskroot", diskRoot, "diffhead", head.rootHash(), "elapsed", common.PrettyDuration(time.Since(start))) return head, nil } @@ -130,23 +261,39 @@ func (db *Database) loadLayers() layer { log.Info("Failed to load journal, discard it", "err", err) } // Return single layer with persistent state. - return newDiskLayer(root, rawdb.ReadPersistentStateID(db.diskdb), db, nil, NewTrieNodeBuffer(db.config.SyncFlush, db.bufferSize, nil, 0)) + nb := NewTrieNodeBuffer(db.diskdb, db.config.TrieNodeBufferType, db.bufferSize, nil, 0, db.config.ProposeBlockInterval, db.config.NotifyKeep) + dl := newDiskLayer(root, rawdb.ReadPersistentStateID(db.diskdb), db, nil, nb) + nb.setClean(dl.cleans) + return dl } // loadDiskLayer reads the binary blob from the layer journal, reconstructing // a new disk layer on it. -func (db *Database) loadDiskLayer(r *rlp.Stream) (layer, error) { +func (db *Database) loadDiskLayer(r *rlp.Stream, journalTypeForReader JournalType) (layer, error) { // Resolve disk layer root - var root common.Hash - if err := r.Decode(&root); err != nil { - return nil, fmt.Errorf("load disk root: %v", err) + var ( + root common.Hash + journalBuf *rlp.Stream + journalEncodedBuff []byte + ) + if journalTypeForReader == JournalFileType { + if err := r.Decode(&journalEncodedBuff); err != nil { + return nil, fmt.Errorf("failed to load disk journal: %v", err) + } + journalBuf = rlp.NewStream(bytes.NewReader(journalEncodedBuff), 0) + } else { + journalBuf = r + } + + if err := journalBuf.Decode(&root); err != nil { + return nil, fmt.Errorf("failed to load disk root: %v", err) } // Resolve the state id of disk layer, it can be different // with the persistent id tracked in disk, the id distance // is the number of transitions aggregated in disk layer. var id uint64 - if err := r.Decode(&id); err != nil { - return nil, fmt.Errorf("load state id: %v", err) + if err := journalBuf.Decode(&id); err != nil { + return nil, fmt.Errorf("failed to load state id: %v", err) } stored := rawdb.ReadPersistentStateID(db.diskdb) if stored > id { @@ -154,8 +301,8 @@ func (db *Database) loadDiskLayer(r *rlp.Stream) (layer, error) { } // Resolve nodes cached in node buffer var encoded []journalNodes - if err := r.Decode(&encoded); err != nil { - return nil, fmt.Errorf("load disk nodes: %v", err) + if err := journalBuf.Decode(&encoded); err != nil { + return nil, fmt.Errorf("failed to load disk nodes: %v", err) } nodes := make(map[common.Hash]map[string]*trienode.Node) for _, entry := range encoded { @@ -169,31 +316,63 @@ func (db *Database) loadDiskLayer(r *rlp.Stream) (layer, error) { } nodes[entry.Owner] = subset } + + if journalTypeForReader == JournalFileType { + var shaSum [32]byte + if err := r.Decode(&shaSum); err != nil { + return nil, fmt.Errorf("failed to load shasum: %v", err) + } + + expectedSum := sha256.Sum256(journalEncodedBuff) + if shaSum != expectedSum { + return nil, fmt.Errorf("expected shaSum: %v, real:%v", expectedSum, shaSum) + } + } + // Calculate the internal state transitions by id difference. - base := newDiskLayer(root, id, db, nil, NewTrieNodeBuffer(db.config.SyncFlush, db.bufferSize, nodes, id-stored)) + nb := NewTrieNodeBuffer(db.diskdb, db.config.TrieNodeBufferType, db.bufferSize, nodes, id-stored, db.config.ProposeBlockInterval, db.config.NotifyKeep) + base := newDiskLayer(root, id, db, nil, nb) + nb.setClean(base.cleans) return base, nil } // loadDiffLayer reads the next sections of a layer journal, reconstructing a new // diff and verifying that it can be linked to the requested parent. -func (db *Database) loadDiffLayer(parent layer, r *rlp.Stream) (layer, error) { +func (db *Database) loadDiffLayer(parent layer, r *rlp.Stream, journalTypeForReader JournalType) (layer, error) { // Read the next diff journal entry - var root common.Hash - if err := r.Decode(&root); err != nil { + var ( + root common.Hash + journalBuf *rlp.Stream + journalEncodedBuff []byte + ) + if journalTypeForReader == JournalFileType { + if err := r.Decode(&journalEncodedBuff); err != nil { + // The first read may fail with EOF, marking the end of the journal + if err == io.EOF { + return parent, nil + } + return nil, fmt.Errorf("failed to load disk journal buffer: %v", err) + } + journalBuf = rlp.NewStream(bytes.NewReader(journalEncodedBuff), 0) + } else { + journalBuf = r + } + + if err := journalBuf.Decode(&root); err != nil { // The first read may fail with EOF, marking the end of the journal if err == io.EOF { return parent, nil } - return nil, fmt.Errorf("load diff root: %v", err) + return nil, fmt.Errorf("failed to load diff root: %v", err) } var block uint64 - if err := r.Decode(&block); err != nil { - return nil, fmt.Errorf("load block number: %v", err) + if err := journalBuf.Decode(&block); err != nil { + return nil, fmt.Errorf("failed to load block number: %v", err) } // Read in-memory trie nodes from journal var encoded []journalNodes - if err := r.Decode(&encoded); err != nil { - return nil, fmt.Errorf("load diff nodes: %v", err) + if err := journalBuf.Decode(&encoded); err != nil { + return nil, fmt.Errorf("failed to load diff nodes: %v", err) } nodes := make(map[common.Hash]map[string]*trienode.Node) for _, entry := range encoded { @@ -215,13 +394,13 @@ func (db *Database) loadDiffLayer(parent layer, r *rlp.Stream) (layer, error) { storages = make(map[common.Address]map[common.Hash][]byte) incomplete = make(map[common.Address]struct{}) ) - if err := r.Decode(&jaccounts); err != nil { - return nil, fmt.Errorf("load diff accounts: %v", err) + if err := journalBuf.Decode(&jaccounts); err != nil { + return nil, fmt.Errorf("failed to load diff accounts: %v", err) } for i, addr := range jaccounts.Addresses { accounts[addr] = jaccounts.Accounts[i] } - if err := r.Decode(&jstorages); err != nil { + if err := journalBuf.Decode(&jstorages); err != nil { return nil, fmt.Errorf("load diff storages: %v", err) } for _, entry := range jstorages { @@ -238,25 +417,43 @@ func (db *Database) loadDiffLayer(parent layer, r *rlp.Stream) (layer, error) { } storages[entry.Account] = set } - return db.loadDiffLayer(newDiffLayer(parent, root, parent.stateID()+1, block, nodes, triestate.New(accounts, storages, incomplete)), r) + + if journalTypeForReader == JournalFileType { + var shaSum [32]byte + if err := r.Decode(&shaSum); err != nil { + return nil, fmt.Errorf("failed to load shaSum: %v", err) + } + + expectedSum := sha256.Sum256(journalEncodedBuff) + if shaSum != expectedSum { + return nil, fmt.Errorf("expected shaSum: %v, real:%v", expectedSum, shaSum) + } + } + + log.Debug("Loaded diff layer journal", "root", root, "parent", parent.rootHash(), "id", parent.stateID()+1, "block", block) + + return db.loadDiffLayer(newDiffLayer(parent, root, parent.stateID()+1, block, nodes, triestate.New(accounts, storages, incomplete)), r, journalTypeForReader) } // journal implements the layer interface, marshaling the un-flushed trie nodes -// along with layer meta data into provided byte buffer. -func (dl *diskLayer) journal(w io.Writer) error { +// along with layer metadata into provided byte buffer. +func (dl *diskLayer) journal(w io.Writer, journalType JournalType) error { dl.lock.RLock() defer dl.lock.RUnlock() + // Create a buffer to store encoded data + journalBuf := new(bytes.Buffer) + // Ensure the layer didn't get stale if dl.stale { return errSnapshotStale } // Step one, write the disk root into the journal. - if err := rlp.Encode(w, dl.root); err != nil { + if err := rlp.Encode(journalBuf, dl.root); err != nil { return err } // Step two, write the corresponding state id into the journal - if err := rlp.Encode(w, dl.id); err != nil { + if err := rlp.Encode(journalBuf, dl.id); err != nil { return err } // Step three, write all unwritten nodes into the journal @@ -269,28 +466,46 @@ func (dl *diskLayer) journal(w io.Writer) error { } nodes = append(nodes, entry) } - if err := rlp.Encode(w, nodes); err != nil { + if err := rlp.Encode(journalBuf, nodes); err != nil { return err } - log.Debug("Journaled pathdb disk layer", "root", dl.root, "nodes", len(bufferNodes)) + + // Store the journal buf into w and calculate checksum + if journalType == JournalFileType { + shaSum := sha256.Sum256(journalBuf.Bytes()) + if err := rlp.Encode(w, journalBuf.Bytes()); err != nil { + return err + } + if err := rlp.Encode(w, shaSum); err != nil { + return err + } + } else { + if _, err := w.Write(journalBuf.Bytes()); err != nil { + return err + } + } + + log.Info("Journaled pathdb disk layer", "root", dl.root, "nodes", len(bufferNodes)) return nil } // journal implements the layer interface, writing the memory layer contents // into a buffer to be stored in the database as the layer journal. -func (dl *diffLayer) journal(w io.Writer) error { +func (dl *diffLayer) journal(w io.Writer, journalType JournalType) error { dl.lock.RLock() defer dl.lock.RUnlock() // journal the parent first - if err := dl.parent.journal(w); err != nil { + if err := dl.parent.journal(w, journalType); err != nil { return err } + // Create a buffer to store encoded data + journalBuf := new(bytes.Buffer) // Everything below was journaled, persist this layer too - if err := rlp.Encode(w, dl.root); err != nil { + if err := rlp.Encode(journalBuf, dl.root); err != nil { return err } - if err := rlp.Encode(w, dl.block); err != nil { + if err := rlp.Encode(journalBuf, dl.block); err != nil { return err } // Write the accumulated trie nodes into buffer @@ -302,7 +517,7 @@ func (dl *diffLayer) journal(w io.Writer) error { } nodes = append(nodes, entry) } - if err := rlp.Encode(w, nodes); err != nil { + if err := rlp.Encode(journalBuf, nodes); err != nil { return err } // Write the accumulated state changes into buffer @@ -311,7 +526,7 @@ func (dl *diffLayer) journal(w io.Writer) error { jacct.Addresses = append(jacct.Addresses, addr) jacct.Accounts = append(jacct.Accounts, account) } - if err := rlp.Encode(w, jacct); err != nil { + if err := rlp.Encode(journalBuf, jacct); err != nil { return err } storage := make([]journalStorage, 0, len(dl.states.Storages)) @@ -326,10 +541,27 @@ func (dl *diffLayer) journal(w io.Writer) error { } storage = append(storage, entry) } - if err := rlp.Encode(w, storage); err != nil { + if err := rlp.Encode(journalBuf, storage); err != nil { return err } - log.Debug("Journaled pathdb diff layer", "root", dl.root, "parent", dl.parent.rootHash(), "id", dl.stateID(), "block", dl.block, "nodes", len(dl.nodes)) + + // Store the journal buf into w and calculate checksum + if journalType == JournalFileType { + shaSum := sha256.Sum256(journalBuf.Bytes()) + if err := rlp.Encode(w, journalBuf.Bytes()); err != nil { + return err + } + if err := rlp.Encode(w, shaSum); err != nil { + return err + } + } else { + if _, err := w.Write(journalBuf.Bytes()); err != nil { + return err + } + } + + log.Info("Journaled pathdb diff layer", "root", dl.root, "parent", dl.parent.rootHash(), + "id", dl.stateID(), "block", dl.block, "nodes", len(dl.nodes)) return nil } @@ -362,7 +594,10 @@ func (db *Database) Journal(root common.Hash) error { return errDatabaseReadOnly } // Firstly write out the metadata of journal - journal := new(bytes.Buffer) + db.DeleteTrieJournal(db.diskdb) + journal := newJournalWriter(db.config.JournalFilePath, db.diskdb, db.DetermineJournalTypeForWriter()) + defer journal.Close() + if err := rlp.Encode(journal, journalVersion); err != nil { return err } @@ -377,14 +612,14 @@ func (db *Database) Journal(root common.Hash) error { return err } // Finally write out the journal of each layer in reverse order. - if err := l.journal(journal); err != nil { + if err := l.journal(journal, db.DetermineJournalTypeForWriter()); err != nil { return err } // Store the journal into the database and return - rawdb.WriteTrieJournal(db.diskdb, journal.Bytes()) + journalSize := journal.Size() // Set the db in read only mode to reject all following mutations db.readOnly = true - log.Info("Persisted dirty state to disk", "size", common.StorageSize(journal.Len()), "elapsed", common.PrettyDuration(time.Since(start))) + log.Info("Persisted dirty state to disk", "size", common.StorageSize(journalSize), "elapsed", common.PrettyDuration(time.Since(start))) return nil } diff --git a/trie/triedb/pathdb/metrics.go b/trie/triedb/pathdb/metrics.go index 9e2b1dcbf5..ee91e5dc20 100644 --- a/trie/triedb/pathdb/metrics.go +++ b/trie/triedb/pathdb/metrics.go @@ -47,4 +47,18 @@ var ( historyBuildTimeMeter = metrics.NewRegisteredTimer("pathdb/history/time", nil) historyDataBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/data", nil) historyIndexBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/index", nil) + + // only for node buffer list + nodeBufferListSizeGauge = metrics.NewRegisteredGauge("pathdb/nodebufferlist/size", nil) + nodeBufferListCountGauge = metrics.NewRegisteredGauge("pathdb/nodebufferlist/count", nil) + nodeBufferListLayerGauge = metrics.NewRegisteredGauge("pathdb/nodebufferlist/layer", nil) + nodeBufferListPersistIDGauge = metrics.NewRegisteredGauge("pathdb/nodebufferlist/persistid", nil) + nodeBufferListLastBlockGauge = metrics.NewRegisteredGauge("pathdb/nodebufferlist/lastblock", nil) + nodeBufferListLastStateIdGauge = metrics.NewRegisteredGauge("pathdb/nodebufferlist/laststateid", nil) + nodeBufferListDifflayerAvgSize = metrics.NewRegisteredGauge("pathdb/nodebufferlist/difflayeravgsize", nil) + baseNodeBufferSizeGauge = metrics.NewRegisteredGauge("pathdb/basenodebuffer/size", nil) + baseNodeBufferLayerGauge = metrics.NewRegisteredGauge("pathdb/basenodebuffer/layer", nil) + baseNodeBufferDifflayerAvgSize = metrics.NewRegisteredGauge("pathdb/basenodebuffer/difflayeravgsize", nil) + proposedBlockReaderSuccess = metrics.NewRegisteredMeter("pathdb/nodebufferlist/proposedblockreader/success", nil) + proposedBlockReaderMismatch = metrics.NewRegisteredMeter("pathdb/nodebufferlist/proposedblockreader/mismatch", nil) ) diff --git a/trie/triedb/pathdb/nodebuffer.go b/trie/triedb/pathdb/nodebuffer.go index 4c4bc73ee3..4ecd83b4fb 100644 --- a/trie/triedb/pathdb/nodebuffer.go +++ b/trie/triedb/pathdb/nodebuffer.go @@ -17,6 +17,7 @@ package pathdb import ( + "errors" "fmt" "time" @@ -52,6 +53,8 @@ func newNodeBuffer(limit int, nodes map[common.Hash]map[string]*trienode.Node, l size += uint64(len(n.Blob) + len(path)) } } + + log.Info("new sync node buffer", "limit", common.StorageSize(limit), "layers", layers) return &nodebuffer{ layers: layers, nodes: nodes, @@ -82,7 +85,7 @@ func (b *nodebuffer) node(owner common.Hash, path []byte, hash common.Hash) (*tr // the ownership of the nodes map which belongs to the bottom-most diff layer. // It will just hold the node references from the given map which are safe to // copy. -func (b *nodebuffer) commit(nodes map[common.Hash]map[string]*trienode.Node) trienodebuffer { +func (b *nodebuffer) commit(root common.Hash, id uint64, block uint64, nodes map[common.Hash]map[string]*trienode.Node) trienodebuffer { var ( delta int64 overwrite int64 @@ -291,4 +294,16 @@ func (b *nodebuffer) getLayers() uint64 { return b.layers } +// waitAndStopFlushing will block unit writing the trie nodes of trienodebuffer to disk. func (b *nodebuffer) waitAndStopFlushing() {} + +// setClean set fastcache to trienodebuffer for cache the trie nodes, +// used for nodebufferlist. +func (b *nodebuffer) setClean(clean *fastcache.Cache) { + return +} + +// proposedBlockReader return the world state Reader of block that is proposed to L1. +func (b *nodebuffer) proposedBlockReader(blockRoot common.Hash) (layer, error) { + return nil, errors.New("anode buffer not support to get proposed block reader") +} diff --git a/trie/triedb/pathdb/nodebufferlist.go b/trie/triedb/pathdb/nodebufferlist.go new file mode 100644 index 0000000000..2b92fef855 --- /dev/null +++ b/trie/triedb/pathdb/nodebufferlist.go @@ -0,0 +1,937 @@ +package pathdb + +import ( + "errors" + "fmt" + "io" + "sync" + "sync/atomic" + "time" + + "github.com/VictoriaMetrics/fastcache" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/trie/trienode" + "github.com/ethereum/go-ethereum/trie/triestate" +) + +const ( + // mergeMultiDifflayerInterval defines the interval to collect nodes to flush disk. + mergeMultiDifflayerInterval = 3 + + // DefaultProposeBlockInterval defines the interval of op-proposer proposes block. + DefaultProposeBlockInterval = 3600 + + // DefaultReserveMultiDifflayerNumber defines the default reserve number of multiDifflayer in nodebufferlist. + DefaultReserveMultiDifflayerNumber = 3 +) + +type KeepRecord struct { + BlockID uint64 + StateRoot common.Hash + KeepInterval uint64 + PinnedInnerTrieReader layer +} +type NotifyKeepFunc func(*KeepRecord) + +var _ trienodebuffer = &nodebufferlist{} + +// nodebufferlist implements the trienodebuffer interface, it is designed to meet +// the withdraw proof function of opBNB at the storage layer while taking into +// account high performance. It is a multiDifflayer based queue that stores +// mergeBlockInterval compressed block difflayers per multiDifflayer. It also has +// one base multiDifflayer that collects the list's trie nodes to write disk. +type nodebufferlist struct { + db ethdb.Database // Persistent storage for matured trie nodes. + clean *fastcache.Cache // GC friendly memory cache of clean node RLPs. + wpBlocks uint64 // Propose block to L1 block interval. + rsevMdNum uint64 // Reserve number of multiDifflayer in nodebufferlist. + dlInMd uint64 // Difflayer number in multiDifflayer. + + limit uint64 // The maximum memory allowance in bytes for base multiDifflayer. + block uint64 // Corresponding last update block number. + stateId uint64 // Corresponding last update state id. + size uint64 // Size of nodebufferlist + count uint64 // Count of multiDifflayer in nodebufferlist + layers uint64 // Layers in nodebufferlist + head *multiDifflayer // The first element of nodebufferlist. + tail *multiDifflayer // The last element of nodebufferlist. + mux sync.RWMutex + + base *multiDifflayer // Collect the nodes of nodebufferlist and write to disk. + persistID uint64 // The last state id that have written to disk. + baseMux sync.RWMutex // The mutex of base multiDifflayer and persistID. + flushMux sync.RWMutex // The mutex of flushing base multiDifflayer for reorg corner case. + + isFlushing atomic.Bool // Flag indicates writing disk under background. + stopFlushing atomic.Bool // Flag stops writing disk under background. + stopCh chan struct{} // Trigger stop background event loop. + waitStopCh chan struct{} // Wait stop background event loop. + forceKeepCh chan struct{} // Trigger force keep event loop. + waitForceKeepCh chan struct{} // Wait force keep event loop. + keepFunc NotifyKeepFunc // Used to keep op-proposer output proof. +} + +// newNodeBufferList initializes the node buffer list with the provided nodes +func newNodeBufferList( + db ethdb.Database, + limit uint64, + nodes map[common.Hash]map[string]*trienode.Node, + layers uint64, + proposeBlockInterval uint64, + keepFunc NotifyKeepFunc) *nodebufferlist { + var ( + rsevMdNum uint64 + dlInMd uint64 + wpBlocks = proposeBlockInterval + ) + if wpBlocks == 0 { + rsevMdNum = DefaultReserveMultiDifflayerNumber + wpBlocks = DefaultProposeBlockInterval + dlInMd = DefaultProposeBlockInterval / (DefaultReserveMultiDifflayerNumber - 1) + } else if wpBlocks%(DefaultReserveMultiDifflayerNumber-1) == 0 { + rsevMdNum = DefaultReserveMultiDifflayerNumber + dlInMd = wpBlocks / (DefaultReserveMultiDifflayerNumber - 1) + } else { + rsevMdNum = 1 + dlInMd = wpBlocks + } + + if nodes == nil { + nodes = make(map[common.Hash]map[string]*trienode.Node) + } + var size uint64 + for _, subset := range nodes { + for path, n := range subset { + size += uint64(len(n.Blob) + len(path)) + } + } + base := newMultiDifflayer(limit, size, common.Hash{}, nodes, layers) + ele := newMultiDifflayer(limit, 0, common.Hash{}, make(map[common.Hash]map[string]*trienode.Node), 0) + nf := &nodebufferlist{ + db: db, + wpBlocks: wpBlocks, + rsevMdNum: rsevMdNum, + dlInMd: dlInMd, + limit: limit, + base: base, + head: ele, + tail: ele, + count: 1, + persistID: rawdb.ReadPersistentStateID(db), + stopCh: make(chan struct{}), + waitStopCh: make(chan struct{}), + forceKeepCh: make(chan struct{}), + waitForceKeepCh: make(chan struct{}), + keepFunc: keepFunc, + } + + go nf.loop() + + log.Info("new node buffer list", "proposed block interval", nf.wpBlocks, + "reserve multi difflayers", nf.rsevMdNum, "difflayers in multidifflayer", nf.dlInMd, + "limit", common.StorageSize(limit), "layers", layers, "persist id", nf.persistID, "base_size", size) + return nf +} + +// node retrieves the trie node with given node info. +func (nf *nodebufferlist) node(owner common.Hash, path []byte, hash common.Hash) (node *trienode.Node, err error) { + nf.mux.RLock() + defer nf.mux.RUnlock() + find := func(nc *multiDifflayer) bool { + subset, ok := nc.nodes[owner] + if !ok { + return true + } + n, ok := subset[string(path)] + if !ok { + return true + } + if n.Hash != hash { + log.Error("Unexpected trie node in node buffer list", "owner", owner, "path", path, "expect", hash, "got", n.Hash) + err = newUnexpectedNodeError("dirty", hash, n.Hash, owner, path, n.Blob) + return false + } + node = n + return false + } + nf.traverse(find) + if err != nil { + return nil, err + } + if node != nil { + return node, nil + } + + nf.baseMux.RLock() + node, err = nf.base.node(owner, path, hash) + nf.baseMux.RUnlock() + return node, err +} + +// commit merges the dirty nodes into the trienodebuffer. This operation won't take +// the ownership of the nodes map which belongs to the bottom-most diff layer. +// It will just hold the node references from the given map which are safe to +// copy. +func (nf *nodebufferlist) commit(root common.Hash, id uint64, block uint64, nodes map[common.Hash]map[string]*trienode.Node) trienodebuffer { + nf.mux.Lock() + defer nf.mux.Unlock() + + if nf.head == nil { + nf.head = newMultiDifflayer(nf.limit, 0, common.Hash{}, make(map[common.Hash]map[string]*trienode.Node), 0) + nf.tail = nf.head + } + oldSize := nf.head.size + err := nf.head.commit(root, id, block, 1, nodes) + if err != nil { + log.Crit("failed to commit nodes to node buffer list", "error", err) + } + + nf.stateId = id + nf.block = block + nf.size = nf.size + nf.head.size - oldSize + nf.layers++ + + nodeBufferListSizeGauge.Update(int64(nf.size)) + nodeBufferListLayerGauge.Update(int64(nf.layers)) + nodeBufferListLastStateIdGauge.Update(int64(nf.stateId)) + nodeBufferListLastBlockGauge.Update(int64(nf.block)) + + if block != 0 && block%nf.dlInMd == 0 { + nc := newMultiDifflayer(nf.limit, 0, common.Hash{}, make(map[common.Hash]map[string]*trienode.Node), 0) + nf.pushFront(nc) + } + return nf +} + +// revert is the reverse operation of commit. It also merges the provided nodes +// into the trienodebuffer, the difference is that the provided node set should +// revert the changes made by the last state transition. +func (nf *nodebufferlist) revert(db ethdb.KeyValueReader, nodes map[common.Hash]map[string]*trienode.Node) error { + // hang user read/write and background write, + nf.mux.Lock() + nf.baseMux.Lock() + nf.flushMux.Lock() + defer nf.mux.Unlock() + defer nf.baseMux.Unlock() + defer nf.flushMux.Unlock() + + merge := func(buffer *multiDifflayer) bool { + if err := nf.base.commit(buffer.root, buffer.id, buffer.block, buffer.layers, buffer.nodes); err != nil { + log.Crit("failed to commit nodes to base node buffer", "error", err) + } + _ = nf.popBack() + return true + } + nf.traverseReverse(merge) + nc := newMultiDifflayer(nf.limit, 0, common.Hash{}, make(map[common.Hash]map[string]*trienode.Node), 0) + nf.head = nc + nf.tail = nc + nf.size = 0 + nf.layers = 0 + nf.count = 1 + return nf.base.revert(nf.db, nodes) +} + +// flush persists the in-memory dirty trie node into the disk if the configured +// memory threshold is reached. Note, all data must be written atomically. +func (nf *nodebufferlist) flush(db ethdb.KeyValueStore, clean *fastcache.Cache, id uint64, force bool) error { + if nf.clean == nil { + nf.clean = clean + } + if !force { + return nil + } + + nf.forceKeepCh <- struct{}{} + <-nf.waitForceKeepCh + + // hang user read/write and background write + nf.mux.Lock() + nf.baseMux.Lock() + nf.flushMux.Lock() + defer nf.mux.Unlock() + defer nf.baseMux.Unlock() + defer nf.flushMux.Unlock() + + nf.stopFlushing.Store(true) + defer nf.stopFlushing.Store(false) + for { + if nf.isFlushing.Swap(true) { + time.Sleep(time.Duration(DefaultBackgroundFlushInterval) * time.Second) + log.Info("waiting base node buffer to be flushed to disk") + continue + } else { + break + } + } + + commitFunc := func(buffer *multiDifflayer) bool { + if err := nf.base.commit(buffer.root, buffer.id, buffer.block, buffer.layers, buffer.nodes); err != nil { + log.Crit("failed to commit nodes to base node buffer", "error", err) + } + _ = nf.popBack() + return true + } + nf.traverseReverse(commitFunc) + persistID := nf.persistID + nf.base.layers + err := nf.base.flush(nf.db, nf.clean, persistID) + if err != nil { + log.Crit("failed to flush base node buffer to disk", "error", err) + } + nf.isFlushing.Store(false) + nf.base.reset() + nf.persistID = persistID + return nil +} + +// setSize sets the buffer size to the provided number, and invokes a flush +// operation if the current memory usage exceeds the new limit. +func (nf *nodebufferlist) setSize(size int, db ethdb.KeyValueStore, clean *fastcache.Cache, id uint64) error { + return errors.New("node buffer list not supported") +} + +// reset cleans up the disk cache. +func (nf *nodebufferlist) reset() { + nf.mux.Lock() + nf.baseMux.Lock() + defer nf.mux.Unlock() + defer nf.baseMux.Unlock() + + mf := newMultiDifflayer(nf.limit, 0, common.Hash{}, make(map[common.Hash]map[string]*trienode.Node), 0) + nf.head = mf + nf.tail = mf + nf.size = 0 + nf.count = 1 + nf.layers = 0 + nf.base.reset() +} + +// empty returns an indicator if trienodebuffer contains any state transition inside +func (nf *nodebufferlist) empty() bool { + return nf.getLayers() == 0 +} + +// getSize return the trienodebuffer used size. +func (nf *nodebufferlist) getSize() (uint64, uint64) { + // no lock, the return vals are used to log, not strictly correct + return nf.size, nf.base.size +} + +// getAllNodes return all the trie nodes are cached in trienodebuffer. +func (nf *nodebufferlist) getAllNodes() map[common.Hash]map[string]*trienode.Node { + nf.mux.Lock() + nf.baseMux.Lock() + defer nf.mux.Unlock() + defer nf.baseMux.Unlock() + + nc := newMultiDifflayer(nf.limit, 0, common.Hash{}, make(map[common.Hash]map[string]*trienode.Node), 0) + if err := nc.commit(nf.base.root, nf.base.id, nf.base.block, nf.layers, nf.base.nodes); err != nil { + log.Crit("failed to commit nodes to node buffer", "error", err) + } + merge := func(buffer *multiDifflayer) bool { + if err := nc.commit(buffer.root, buffer.id, buffer.block, buffer.layers, buffer.nodes); err != nil { + log.Crit("failed to commit nodes to node buffer", "error", err) + } + return true + } + nf.traverseReverse(merge) + return nc.nodes +} + +// getLayers return the size of cached difflayers. +func (nf *nodebufferlist) getLayers() uint64 { + nf.mux.RLock() + nf.baseMux.RLock() + defer nf.mux.RUnlock() + defer nf.baseMux.RUnlock() + + return nf.layers + nf.base.layers +} + +// waitAndStopFlushing will block unit writing the trie nodes of trienodebuffer to disk. +func (nf *nodebufferlist) waitAndStopFlushing() { + close(nf.stopCh) + <-nf.waitStopCh + nf.stopFlushing.Store(true) + for nf.isFlushing.Load() { + time.Sleep(time.Second) + log.Warn("waiting background node buffer to be flushed to disk") + } +} + +// setClean sets fastcache to trienodebuffer for cache the trie nodes, used for nodebufferlist. +func (nf *nodebufferlist) setClean(clean *fastcache.Cache) { + nf.clean = clean +} + +// pushFront push cache to the nodebufferlist head. +func (nf *nodebufferlist) pushFront(cache *multiDifflayer) { + if cache == nil { + return + } + if nf.head == nil { + nf.head = cache + nf.tail = cache + cache.next = nil + cache.pre = nil + return + } + cache.pre = nil + cache.next = nf.head + nf.head.pre = cache + nf.head = cache + + nf.size += cache.size + nf.layers += cache.layers + nf.count++ + + return +} + +// pop the nodebufferlist tail element. +func (nf *nodebufferlist) popBack() *multiDifflayer { + if nf.tail == nil { + return nil + } + if nf.head == nf.tail { + nf.head = nil + nf.tail = nil + return nil + } + tag := nf.tail + nf.tail = nf.tail.pre + if nf.tail != nil { + nf.tail.next = nil + } + + nf.size -= tag.size + if nf.size < 0 { + log.Warn("node buffer list size less 0", "old", nf.size, "dealt", tag.size) + nf.size = 0 + } + nf.layers -= tag.layers + if nf.layers < 0 { + log.Warn("node buffer list layers less 0", "old", nf.layers, "dealt", tag.layers) + nf.layers = 0 + } + nf.count-- + if nf.count < 0 { + log.Warn("node buffer list count less 0", "old", nf.count) + nf.count = 0 + } + + return tag +} + +// traverse iterates the nodebufferlist and call the cb. +func (nf *nodebufferlist) traverse(cb func(*multiDifflayer) bool) { + cursor := nf.head + for { + if cursor == nil { + return + } + next := cursor.next + if !cb(cursor) { + break + } + cursor = next + } + return +} + +// traverseReverse iterates the nodebufferlist in reverse and call the cb. +func (nf *nodebufferlist) traverseReverse(cb func(*multiDifflayer) bool) { + cursor := nf.tail + for { + if cursor == nil { + return + } + pre := cursor.pre + if !cb(cursor) { + break + } + cursor = pre + } + return +} + +// diffToBase calls traverseReverse and merges the multiDifflayer's nodes to +// base node buffer, if up to limit size and flush to disk. It is called +// periodically in the background +func (nf *nodebufferlist) diffToBase() { + commitFunc := func(buffer *multiDifflayer) bool { + if nf.base.size >= nf.base.limit { + log.Debug("base node buffer need write disk immediately") + return false + } + if nf.count <= nf.rsevMdNum { + log.Debug("node buffer list less, waiting more difflayer to be committed") + return false + } + if buffer.block%nf.dlInMd != 0 { + log.Crit("committed block number misaligned", "block", buffer.block) + } + + if nf.keepFunc != nil { // keep in background flush stage + nf.keepFunc(&KeepRecord{ + BlockID: buffer.block, + StateRoot: buffer.root, + KeepInterval: nf.wpBlocks, + PinnedInnerTrieReader: &proposedBlockReader{ + nf: nf, + diff: buffer, + }}) + } + + nf.baseMux.Lock() + err := nf.base.commit(buffer.root, buffer.id, buffer.block, buffer.layers, buffer.nodes) + nf.baseMux.Unlock() + if err != nil { + log.Error("failed to commit nodes to base node buffer", "error", err) + return false + } + + nf.mux.Lock() + _ = nf.popBack() + nodeBufferListSizeGauge.Update(int64(nf.size)) + nodeBufferListCountGauge.Update(int64(nf.count)) + nodeBufferListLayerGauge.Update(int64(nf.layers)) + if nf.layers > 0 { + nodeBufferListDifflayerAvgSize.Update(int64(nf.size / nf.layers)) + } + nf.mux.Unlock() + baseNodeBufferSizeGauge.Update(int64(nf.base.size)) + baseNodeBufferLayerGauge.Update(int64(nf.base.layers)) + if nf.base.layers > 0 { + baseNodeBufferDifflayerAvgSize.Update(int64(nf.base.size / nf.base.layers)) + } + nf.report() + + return true + } + nf.traverseReverse(commitFunc) +} + +// backgroundFlush flush base node buffer to disk. +func (nf *nodebufferlist) backgroundFlush() { + nf.flushMux.Lock() + defer nf.flushMux.Unlock() + nf.baseMux.RLock() + persistID := nf.persistID + nf.base.layers + nf.baseMux.RUnlock() + err := nf.base.flush(nf.db, nf.clean, persistID) + if err != nil { + log.Error("failed to flush base node buffer to disk", "error", err) + return + } + nf.baseMux.Lock() + nf.base.reset() + nf.persistID = persistID + nf.baseMux.Unlock() + + baseNodeBufferSizeGauge.Update(int64(nf.base.size)) + baseNodeBufferLayerGauge.Update(int64(nf.base.layers)) + nodeBufferListPersistIDGauge.Update(int64(nf.persistID)) +} + +// loop runs the background task, collects the nodes for writing to disk. +func (nf *nodebufferlist) loop() { + mergeTicker := time.NewTicker(time.Second * mergeMultiDifflayerInterval) + defer mergeTicker.Stop() + for { + select { + case <-nf.stopCh: + if nf.keepFunc != nil { // keep in stop stage + nf.mux.RLock() + traverseKeepFunc := func(buffer *multiDifflayer) bool { + nf.keepFunc(&KeepRecord{ + BlockID: buffer.block, + StateRoot: buffer.root, + KeepInterval: nf.wpBlocks, + PinnedInnerTrieReader: &proposedBlockReader{ + nf: nf, + diff: buffer, + }}) + return true + } + nf.traverseReverse(traverseKeepFunc) + nf.mux.RUnlock() + } + nf.waitStopCh <- struct{}{} + return + + case <-nf.forceKeepCh: + if nf.keepFunc != nil { // keep in force flush stage + nf.mux.RLock() + traverseKeepFunc := func(buffer *multiDifflayer) bool { + nf.keepFunc(&KeepRecord{ + BlockID: buffer.block, + StateRoot: buffer.root, + KeepInterval: nf.wpBlocks, + PinnedInnerTrieReader: &proposedBlockReader{ + nf: nf, + diff: buffer, + }}) + return true + } + nf.traverseReverse(traverseKeepFunc) + nf.mux.RUnlock() + } + nf.waitForceKeepCh <- struct{}{} + + case <-mergeTicker.C: + if nf.stopFlushing.Load() { + continue + } + if nf.isFlushing.Swap(true) { + continue + } + nf.diffToBase() + if nf.base.size >= nf.base.limit { + nf.backgroundFlush() + } + nf.isFlushing.Swap(false) + } + } +} + +// proposedBlockReader return the world state Reader of block that is proposed to L1. +func (nf *nodebufferlist) proposedBlockReader(blockRoot common.Hash) (layer, error) { + nf.mux.RLock() + defer nf.mux.RUnlock() + + var diff *multiDifflayer + context := []interface{}{ + "root", blockRoot, + } + find := func(buffer *multiDifflayer) bool { + context = append(context, []interface{}{"multi_difflayer_number", buffer.block}...) + context = append(context, []interface{}{"multi_difflayer_root", buffer.root}...) + if buffer.block%nf.wpBlocks == 0 { + if buffer.root == blockRoot { + diff = buffer + return false + } + } + return true + } + nf.traverse(find) + if diff == nil { + proposedBlockReaderMismatch.Mark(1) + log.Debug("proposed block state is not available", context...) + return nil, fmt.Errorf("proposed block proof state %#x is not available", blockRoot) + } + proposedBlockReaderSuccess.Mark(1) + return &proposedBlockReader{ + nf: nf, + diff: diff, + }, nil +} + +// report logs the nodebufferlist info for monitor. +func (nf *nodebufferlist) report() { + context := []interface{}{ + "number", nf.block, "count", nf.count, "layers", nf.layers, + "stateid", nf.stateId, "persist", nf.persistID, "size", common.StorageSize(nf.size), + "basesize", common.StorageSize(nf.base.size), "baselayers", nf.base.layers, + } + log.Info("node buffer list info", context...) +} + +var _ layer = &proposedBlockReader{} + +// proposedBlockReader implements the layer interface used to read the status of proposed +// blocks, which supports get withdrawal proof. It only needs to implement the Node function +// of the Reader interface. +type proposedBlockReader struct { + nf *nodebufferlist + diff *multiDifflayer +} + +func (w *proposedBlockReader) Node(owner common.Hash, path []byte, hash common.Hash) ([]byte, error) { + w.nf.mux.RLock() + defer w.nf.mux.RUnlock() + + current := w.diff + for { + if current == nil { + break + } + node, err := current.node(owner, path, hash) + if err != nil { + return nil, err + } + if node != nil { + return node.Blob, nil + } + current = current.next + } + + w.nf.baseMux.RLock() + node, err := w.nf.base.node(owner, path, hash) + w.nf.baseMux.RUnlock() + if err != nil { + return nil, err + } + if node != nil { + return node.Blob, nil + } + + key := cacheKey(owner, path) + if w.nf.clean != nil { + if blob := w.nf.clean.Get(nil, key); len(blob) > 0 { + h := newHasher() + defer h.release() + + got := h.hash(blob) + if got == hash { + cleanHitMeter.Mark(1) + cleanReadMeter.Mark(int64(len(blob))) + return blob, nil + } + cleanFalseMeter.Mark(1) + log.Error("Unexpected trie node in clean cache", "owner", owner, "path", path, "expect", hash, "got", got) + } + cleanMissMeter.Mark(1) + } + + var ( + nBlob []byte + nHash common.Hash + ) + if owner == (common.Hash{}) { + nBlob, nHash = rawdb.ReadAccountTrieNode(w.nf.db, path) + } else { + nBlob, nHash = rawdb.ReadStorageTrieNode(w.nf.db, owner, path) + } + if nHash != hash { + diskFalseMeter.Mark(1) + log.Error("Unexpected trie node in disk", "owner", owner, "path", path, "expect", hash, "got", nHash) + return nil, newUnexpectedNodeError("disk", hash, nHash, owner, path, nBlob) + } + if w.nf.clean != nil && len(nBlob) > 0 { + w.nf.clean.Set(key, nBlob) + cleanWriteMeter.Mark(int64(len(nBlob))) + } + return nBlob, nil +} +func (w *proposedBlockReader) rootHash() common.Hash { return w.diff.root } +func (w *proposedBlockReader) stateID() uint64 { + return w.diff.id +} +func (w *proposedBlockReader) parentLayer() layer { return nil } +func (w *proposedBlockReader) update(root common.Hash, id uint64, block uint64, nodes map[common.Hash]map[string]*trienode.Node, states *triestate.Set) *diffLayer { + return nil +} +func (w *proposedBlockReader) journal(io.Writer, JournalType) error { return nil } + +// multiDifflayer compresses several difflayers in one map. As an element of nodebufferlist +// it is the smallest unit for storing trie nodes. +type multiDifflayer struct { + root common.Hash // Corresponding last root hash to which this layer diff belongs to + id uint64 // Corresponding last update state id + block uint64 // Corresponding last update block number + layers uint64 // The number of diff layers aggregated inside + size uint64 // The size of aggregated writes + limit uint64 // The maximum memory allowance in bytes + nodes map[common.Hash]map[string]*trienode.Node // The dirty node set, mapped by owner and path + + pre *multiDifflayer + next *multiDifflayer +} + +// newMultiDifflayer initializes the multiDifflayer with the provided nodes +func newMultiDifflayer(limit, size uint64, root common.Hash, nodes map[common.Hash]map[string]*trienode.Node, layers uint64) *multiDifflayer { + return &multiDifflayer{ + root: root, + layers: layers, + size: size, + limit: limit, + nodes: nodes, + } +} + +// node retrieves the trie node with given node info. +func (mf *multiDifflayer) node(owner common.Hash, path []byte, hash common.Hash) (*trienode.Node, error) { + subset, ok := mf.nodes[owner] + if !ok { + return nil, nil + } + n, ok := subset[string(path)] + if !ok { + return nil, nil + } + if n.Hash != hash { + dirtyFalseMeter.Mark(1) + log.Error("Unexpected trie node in async node buffer", "owner", owner, "path", path, "expect", hash, "got", n.Hash) + return nil, newUnexpectedNodeError("dirty", hash, n.Hash, owner, path, n.Blob) + } + return n, nil +} + +// commit merges the dirty nodes into the newMultiDifflayer. This operation won't +// take the ownership of the nodes map which belongs to the bottom-most diff layer. +// It will just hold the node references from the given map which are safe to copy. +func (mf *multiDifflayer) commit(root common.Hash, id uint64, block uint64, layers uint64, nodes map[common.Hash]map[string]*trienode.Node) error { + if mf.id != 0 && mf.id >= id { + log.Warn("state id out of order", "pre_stateId", mf.id, "capping_stateId", id) + } + if mf.block != 0 && mf.block >= block { + log.Warn("block number out of order", "pre_block", mf.block, "capping_block", block) + } + + mf.root = root + mf.block = block + mf.id = id + + var ( + delta int64 + overwrite int64 + overwriteSize int64 + ) + for owner, subset := range nodes { + current, exist := mf.nodes[owner] + if !exist { + // Allocate a new map for the subset instead of claiming it directly + // from the passed map to avoid potential concurrent map read/write. + // The nodes belong to original diff layer are still accessible even + // after merging, thus the ownership of nodes map should still belong + // to original layer and any mutation on it should be prevented. + current = make(map[string]*trienode.Node) + for path, n := range subset { + current[path] = n + delta += int64(len(n.Blob) + len(path)) + } + mf.nodes[owner] = current + continue + } + for path, n := range subset { + if orig, exist := current[path]; !exist { + delta += int64(len(n.Blob) + len(path)) + } else { + delta += int64(len(n.Blob) - len(orig.Blob)) + overwrite++ + overwriteSize += int64(len(orig.Blob) + len(path)) + } + current[path] = n + } + mf.nodes[owner] = current + } + mf.updateSize(delta) + mf.layers += layers + gcNodesMeter.Mark(overwrite) + gcBytesMeter.Mark(overwriteSize) + return nil +} + +// updateSize updates the size of newMultiDifflayer. +func (mf *multiDifflayer) updateSize(delta int64) { + size := int64(mf.size) + delta + if size >= 0 { + mf.size = uint64(size) + return + } + s := mf.size + mf.size = 0 + log.Warn("Invalid pathdb buffer size", "prev", common.StorageSize(s), "delta", common.StorageSize(delta)) +} + +// reset clears the newMultiDifflayer. +func (mf *multiDifflayer) reset() { + mf.root = common.Hash{} + mf.id = 0 + mf.block = 0 + mf.layers = 0 + mf.size = 0 + mf.pre = nil + mf.next = nil + mf.nodes = make(map[common.Hash]map[string]*trienode.Node) +} + +// empty returns an indicator if multiDifflayer contains any state transition inside. +func (mf *multiDifflayer) empty() bool { + return mf.layers == 0 +} + +// flush persists the in-memory dirty trie node into the disk if the configured +// memory threshold is reached. Note, all data must be written atomically. +func (mf *multiDifflayer) flush(db ethdb.KeyValueStore, clean *fastcache.Cache, id uint64) error { + // Ensure the target state id is aligned with the internal counter. + head := rawdb.ReadPersistentStateID(db) + if head+mf.layers != id { + return fmt.Errorf("buffer layers (%d) cannot be applied on top of persisted state id (%d) to reach requested state id (%d)", mf.layers, head, id) + } + var ( + start = time.Now() + batch = db.NewBatchWithSize(int(float64(mf.size) * DefaultBatchRedundancyRate)) + ) + nodes := writeNodes(batch, mf.nodes, clean) + rawdb.WritePersistentStateID(batch, id) + + // Flush all mutations in a single batch + size := batch.ValueSize() + if err := batch.Write(); err != nil { + return err + } + commitBytesMeter.Mark(int64(size)) + commitNodesMeter.Mark(int64(nodes)) + commitTimeTimer.UpdateSince(start) + log.Info("Persisted pathdb nodes", "nodes", len(mf.nodes), "bytes", common.StorageSize(size), "state_id", id, "elapsed", common.PrettyDuration(time.Since(start))) + return nil +} + +// revert is the reverse operation of commit. It also merges the provided nodes +// into the multiDifflayer, the difference is that the provided node set should +// revert the changes made by the last state transition. +func (mf *multiDifflayer) revert(db ethdb.KeyValueReader, nodes map[common.Hash]map[string]*trienode.Node) error { + // Short circuit if no embedded state transition to revert. + if mf.layers == 0 { + return errStateUnrecoverable + } + mf.layers-- + + // Reset the entire buffer if only a single transition left. + if mf.layers == 0 { + mf.reset() + return nil + } + var delta int64 + for owner, subset := range nodes { + current, ok := mf.nodes[owner] + if !ok { + panic(fmt.Sprintf("non-existent subset (%x)", owner)) + } + for path, n := range subset { + orig, ok := current[path] + if !ok { + // There is a special case in MPT that one child is removed from + // a fullNode which only has two children, and then a new child + // with different position is immediately inserted into the fullNode. + // In this case, the clean child of the fullNode will also be + // marked as dirty because of node collapse and expansion. + // + // In case of database rollback, don't panic if this "clean" + // node occurs which is not present in buffer. + var nhash common.Hash + if owner == (common.Hash{}) { + _, nhash = rawdb.ReadAccountTrieNode(db, []byte(path)) + } else { + _, nhash = rawdb.ReadStorageTrieNode(db, owner, []byte(path)) + } + // Ignore the clean node in the case described above. + if nhash == n.Hash { + continue + } + panic(fmt.Sprintf("non-existent node (%x %v) blob: %v", owner, path, crypto.Keccak256Hash(n.Blob).Hex())) + } + current[path] = n + delta += int64(len(n.Blob)) - int64(len(orig.Blob)) + } + } + mf.updateSize(delta) + return nil +} diff --git a/trie/trienode/node.go b/trie/trienode/node.go index 98d5588b6d..95315c2e9a 100644 --- a/trie/trienode/node.go +++ b/trie/trienode/node.go @@ -39,7 +39,7 @@ func (n *Node) Size() int { // IsDeleted returns the indicator if the node is marked as deleted. func (n *Node) IsDeleted() bool { - return n.Hash == (common.Hash{}) + return len(n.Blob) == 0 } // New constructs a node with provided node information. diff --git a/trie/utils/verkle.go b/trie/utils/verkle.go new file mode 100644 index 0000000000..ce059edc64 --- /dev/null +++ b/trie/utils/verkle.go @@ -0,0 +1,342 @@ +// Copyright 2023 go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package utils + +import ( + "encoding/binary" + "sync" + + "github.com/crate-crypto/go-ipa/bandersnatch/fr" + "github.com/ethereum/go-ethereum/common/lru" + "github.com/ethereum/go-ethereum/metrics" + "github.com/gballet/go-verkle" + "github.com/holiman/uint256" +) + +const ( + // The spec of verkle key encoding can be found here. + // https://notes.ethereum.org/@vbuterin/verkle_tree_eip#Tree-embedding + VersionLeafKey = 0 + BalanceLeafKey = 1 + NonceLeafKey = 2 + CodeKeccakLeafKey = 3 + CodeSizeLeafKey = 4 +) + +var ( + zero = uint256.NewInt(0) + verkleNodeWidthLog2 = 8 + headerStorageOffset = uint256.NewInt(64) + mainStorageOffsetLshVerkleNodeWidth = new(uint256.Int).Lsh(uint256.NewInt(256), 31-uint(verkleNodeWidthLog2)) + codeOffset = uint256.NewInt(128) + verkleNodeWidth = uint256.NewInt(256) + codeStorageDelta = uint256.NewInt(0).Sub(codeOffset, headerStorageOffset) + + index0Point *verkle.Point // pre-computed commitment of polynomial [2+256*64] + + // cacheHitGauge is the metric to track how many cache hit occurred. + cacheHitGauge = metrics.NewRegisteredGauge("trie/verkle/cache/hit", nil) + + // cacheMissGauge is the metric to track how many cache miss occurred. + cacheMissGauge = metrics.NewRegisteredGauge("trie/verkle/cache/miss", nil) +) + +func init() { + // The byte array is the Marshalled output of the point computed as such: + // + // var ( + // config = verkle.GetConfig() + // fr verkle.Fr + // ) + // verkle.FromLEBytes(&fr, []byte{2, 64}) + // point := config.CommitToPoly([]verkle.Fr{fr}, 1) + index0Point = new(verkle.Point) + err := index0Point.SetBytes([]byte{34, 25, 109, 242, 193, 5, 144, 224, 76, 52, 189, 92, 197, 126, 9, 145, 27, 152, 199, 130, 165, 3, 210, 27, 193, 131, 142, 28, 110, 26, 16, 191}) + if err != nil { + panic(err) + } +} + +// PointCache is the LRU cache for storing evaluated address commitment. +type PointCache struct { + lru lru.BasicLRU[string, *verkle.Point] + lock sync.RWMutex +} + +// NewPointCache returns the cache with specified size. +func NewPointCache(maxItems int) *PointCache { + return &PointCache{ + lru: lru.NewBasicLRU[string, *verkle.Point](maxItems), + } +} + +// Get returns the cached commitment for the specified address, or computing +// it on the flight. +func (c *PointCache) Get(addr []byte) *verkle.Point { + c.lock.Lock() + defer c.lock.Unlock() + + p, ok := c.lru.Get(string(addr)) + if ok { + cacheHitGauge.Inc(1) + return p + } + cacheMissGauge.Inc(1) + p = evaluateAddressPoint(addr) + c.lru.Add(string(addr), p) + return p +} + +// GetStem returns the first 31 bytes of the tree key as the tree stem. It only +// works for the account metadata whose treeIndex is 0. +func (c *PointCache) GetStem(addr []byte) []byte { + p := c.Get(addr) + return pointToHash(p, 0)[:31] +} + +// GetTreeKey performs both the work of the spec's get_tree_key function, and that +// of pedersen_hash: it builds the polynomial in pedersen_hash without having to +// create a mostly zero-filled buffer and "type cast" it to a 128-long 16-byte +// array. Since at most the first 5 coefficients of the polynomial will be non-zero, +// these 5 coefficients are created directly. +func GetTreeKey(address []byte, treeIndex *uint256.Int, subIndex byte) []byte { + if len(address) < 32 { + var aligned [32]byte + address = append(aligned[:32-len(address)], address...) + } + // poly = [2+256*64, address_le_low, address_le_high, tree_index_le_low, tree_index_le_high] + var poly [5]fr.Element + + // 32-byte address, interpreted as two little endian + // 16-byte numbers. + verkle.FromLEBytes(&poly[1], address[:16]) + verkle.FromLEBytes(&poly[2], address[16:]) + + // treeIndex must be interpreted as a 32-byte aligned little-endian integer. + // e.g: if treeIndex is 0xAABBCC, we need the byte representation to be 0xCCBBAA00...00. + // poly[3] = LE({CC,BB,AA,00...0}) (16 bytes), poly[4]=LE({00,00,...}) (16 bytes). + // + // To avoid unnecessary endianness conversions for go-ipa, we do some trick: + // - poly[3]'s byte representation is the same as the *top* 16 bytes (trieIndexBytes[16:]) of + // 32-byte aligned big-endian representation (BE({00,...,AA,BB,CC})). + // - poly[4]'s byte representation is the same as the *low* 16 bytes (trieIndexBytes[:16]) of + // the 32-byte aligned big-endian representation (BE({00,00,...}). + trieIndexBytes := treeIndex.Bytes32() + verkle.FromBytes(&poly[3], trieIndexBytes[16:]) + verkle.FromBytes(&poly[4], trieIndexBytes[:16]) + + cfg := verkle.GetConfig() + ret := cfg.CommitToPoly(poly[:], 0) + + // add a constant point corresponding to poly[0]=[2+256*64]. + ret.Add(ret, index0Point) + + return pointToHash(ret, subIndex) +} + +// GetTreeKeyWithEvaluatedAddress is basically identical to GetTreeKey, the only +// difference is a part of polynomial is already evaluated. +// +// Specifically, poly = [2+256*64, address_le_low, address_le_high] is already +// evaluated. +func GetTreeKeyWithEvaluatedAddress(evaluated *verkle.Point, treeIndex *uint256.Int, subIndex byte) []byte { + var poly [5]fr.Element + + poly[0].SetZero() + poly[1].SetZero() + poly[2].SetZero() + + // little-endian, 32-byte aligned treeIndex + var index [32]byte + for i := 0; i < len(treeIndex); i++ { + binary.LittleEndian.PutUint64(index[i*8:(i+1)*8], treeIndex[i]) + } + verkle.FromLEBytes(&poly[3], index[:16]) + verkle.FromLEBytes(&poly[4], index[16:]) + + cfg := verkle.GetConfig() + ret := cfg.CommitToPoly(poly[:], 0) + + // add the pre-evaluated address + ret.Add(ret, evaluated) + + return pointToHash(ret, subIndex) +} + +// VersionKey returns the verkle tree key of the version field for the specified account. +func VersionKey(address []byte) []byte { + return GetTreeKey(address, zero, VersionLeafKey) +} + +// BalanceKey returns the verkle tree key of the balance field for the specified account. +func BalanceKey(address []byte) []byte { + return GetTreeKey(address, zero, BalanceLeafKey) +} + +// NonceKey returns the verkle tree key of the nonce field for the specified account. +func NonceKey(address []byte) []byte { + return GetTreeKey(address, zero, NonceLeafKey) +} + +// CodeKeccakKey returns the verkle tree key of the code keccak field for +// the specified account. +func CodeKeccakKey(address []byte) []byte { + return GetTreeKey(address, zero, CodeKeccakLeafKey) +} + +// CodeSizeKey returns the verkle tree key of the code size field for the +// specified account. +func CodeSizeKey(address []byte) []byte { + return GetTreeKey(address, zero, CodeSizeLeafKey) +} + +func codeChunkIndex(chunk *uint256.Int) (*uint256.Int, byte) { + var ( + chunkOffset = new(uint256.Int).Add(codeOffset, chunk) + treeIndex = new(uint256.Int).Div(chunkOffset, verkleNodeWidth) + subIndexMod = new(uint256.Int).Mod(chunkOffset, verkleNodeWidth) + ) + var subIndex byte + if len(subIndexMod) != 0 { + subIndex = byte(subIndexMod[0]) + } + return treeIndex, subIndex +} + +// CodeChunkKey returns the verkle tree key of the code chunk for the +// specified account. +func CodeChunkKey(address []byte, chunk *uint256.Int) []byte { + treeIndex, subIndex := codeChunkIndex(chunk) + return GetTreeKey(address, treeIndex, subIndex) +} + +func storageIndex(bytes []byte) (*uint256.Int, byte) { + // If the storage slot is in the header, we need to add the header offset. + var key uint256.Int + key.SetBytes(bytes) + if key.Cmp(codeStorageDelta) < 0 { + // This addition is always safe; it can't ever overflow since pos + +package utils + +import ( + "bytes" + "testing" + + "github.com/gballet/go-verkle" + "github.com/holiman/uint256" +) + +func TestTreeKey(t *testing.T) { + var ( + address = []byte{0x01} + addressEval = evaluateAddressPoint(address) + smallIndex = uint256.NewInt(1) + largeIndex = uint256.NewInt(10000) + smallStorage = []byte{0x1} + largeStorage = bytes.Repeat([]byte{0xff}, 16) + ) + if !bytes.Equal(VersionKey(address), VersionKeyWithEvaluatedAddress(addressEval)) { + t.Fatal("Unmatched version key") + } + if !bytes.Equal(BalanceKey(address), BalanceKeyWithEvaluatedAddress(addressEval)) { + t.Fatal("Unmatched balance key") + } + if !bytes.Equal(NonceKey(address), NonceKeyWithEvaluatedAddress(addressEval)) { + t.Fatal("Unmatched nonce key") + } + if !bytes.Equal(CodeKeccakKey(address), CodeKeccakKeyWithEvaluatedAddress(addressEval)) { + t.Fatal("Unmatched code keccak key") + } + if !bytes.Equal(CodeSizeKey(address), CodeSizeKeyWithEvaluatedAddress(addressEval)) { + t.Fatal("Unmatched code size key") + } + if !bytes.Equal(CodeChunkKey(address, smallIndex), CodeChunkKeyWithEvaluatedAddress(addressEval, smallIndex)) { + t.Fatal("Unmatched code chunk key") + } + if !bytes.Equal(CodeChunkKey(address, largeIndex), CodeChunkKeyWithEvaluatedAddress(addressEval, largeIndex)) { + t.Fatal("Unmatched code chunk key") + } + if !bytes.Equal(StorageSlotKey(address, smallStorage), StorageSlotKeyWithEvaluatedAddress(addressEval, smallStorage)) { + t.Fatal("Unmatched storage slot key") + } + if !bytes.Equal(StorageSlotKey(address, largeStorage), StorageSlotKeyWithEvaluatedAddress(addressEval, largeStorage)) { + t.Fatal("Unmatched storage slot key") + } +} + +// goos: darwin +// goarch: amd64 +// pkg: github.com/ethereum/go-ethereum/trie/utils +// cpu: VirtualApple @ 2.50GHz +// BenchmarkTreeKey +// BenchmarkTreeKey-8 398731 2961 ns/op 32 B/op 1 allocs/op +func BenchmarkTreeKey(b *testing.B) { + // Initialize the IPA settings which can be pretty expensive. + verkle.GetConfig() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + BalanceKey([]byte{0x01}) + } +} + +// goos: darwin +// goarch: amd64 +// pkg: github.com/ethereum/go-ethereum/trie/utils +// cpu: VirtualApple @ 2.50GHz +// BenchmarkTreeKeyWithEvaluation +// BenchmarkTreeKeyWithEvaluation-8 513855 2324 ns/op 32 B/op 1 allocs/op +func BenchmarkTreeKeyWithEvaluation(b *testing.B) { + // Initialize the IPA settings which can be pretty expensive. + verkle.GetConfig() + + addr := []byte{0x01} + eval := evaluateAddressPoint(addr) + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + BalanceKeyWithEvaluatedAddress(eval) + } +} + +// goos: darwin +// goarch: amd64 +// pkg: github.com/ethereum/go-ethereum/trie/utils +// cpu: VirtualApple @ 2.50GHz +// BenchmarkStorageKey +// BenchmarkStorageKey-8 230516 4584 ns/op 96 B/op 3 allocs/op +func BenchmarkStorageKey(b *testing.B) { + // Initialize the IPA settings which can be pretty expensive. + verkle.GetConfig() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + StorageSlotKey([]byte{0x01}, bytes.Repeat([]byte{0xff}, 32)) + } +} + +// goos: darwin +// goarch: amd64 +// pkg: github.com/ethereum/go-ethereum/trie/utils +// cpu: VirtualApple @ 2.50GHz +// BenchmarkStorageKeyWithEvaluation +// BenchmarkStorageKeyWithEvaluation-8 320125 3753 ns/op 96 B/op 3 allocs/op +func BenchmarkStorageKeyWithEvaluation(b *testing.B) { + // Initialize the IPA settings which can be pretty expensive. + verkle.GetConfig() + + addr := []byte{0x01} + eval := evaluateAddressPoint(addr) + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + StorageSlotKeyWithEvaluatedAddress(eval, bytes.Repeat([]byte{0xff}, 32)) + } +} diff --git a/trie/verkle.go b/trie/verkle.go new file mode 100644 index 0000000000..89e2e53408 --- /dev/null +++ b/trie/verkle.go @@ -0,0 +1,375 @@ +// Copyright 2023 go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package trie + +import ( + "encoding/binary" + "errors" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/trie/trienode" + "github.com/ethereum/go-ethereum/trie/utils" + "github.com/gballet/go-verkle" + "github.com/holiman/uint256" +) + +var ( + zero [32]byte + errInvalidRootType = errors.New("invalid node type for root") +) + +// VerkleTrie is a wrapper around VerkleNode that implements the trie.Trie +// interface so that Verkle trees can be reused verbatim. +type VerkleTrie struct { + root verkle.VerkleNode + db *Database + cache *utils.PointCache + reader *trieReader +} + +// NewVerkleTrie constructs a verkle tree based on the specified root hash. +func NewVerkleTrie(root common.Hash, db *Database, cache *utils.PointCache) (*VerkleTrie, error) { + reader, err := newTrieReader(root, common.Hash{}, db) + if err != nil { + return nil, err + } + // Parse the root verkle node if it's not empty. + node := verkle.New() + if root != types.EmptyVerkleHash && root != types.EmptyRootHash { + blob, err := reader.node(nil, common.Hash{}) + if err != nil { + return nil, err + } + node, err = verkle.ParseNode(blob, 0) + if err != nil { + return nil, err + } + } + return &VerkleTrie{ + root: node, + db: db, + cache: cache, + reader: reader, + }, nil +} + +// GetKey returns the sha3 preimage of a hashed key that was previously used +// to store a value. +func (t *VerkleTrie) GetKey(key []byte) []byte { + return key +} + +// GetAccount implements state.Trie, retrieving the account with the specified +// account address. If the specified account is not in the verkle tree, nil will +// be returned. If the tree is corrupted, an error will be returned. +func (t *VerkleTrie) GetAccount(addr common.Address) (*types.StateAccount, error) { + var ( + acc = &types.StateAccount{} + values [][]byte + err error + ) + switch n := t.root.(type) { + case *verkle.InternalNode: + values, err = n.GetValuesAtStem(t.cache.GetStem(addr[:]), t.nodeResolver) + if err != nil { + return nil, fmt.Errorf("GetAccount (%x) error: %v", addr, err) + } + default: + return nil, errInvalidRootType + } + if values == nil { + return nil, nil + } + // Decode nonce in little-endian + if len(values[utils.NonceLeafKey]) > 0 { + acc.Nonce = binary.LittleEndian.Uint64(values[utils.NonceLeafKey]) + } + // Decode balance in little-endian + var balance [32]byte + copy(balance[:], values[utils.BalanceLeafKey]) + for i := 0; i < len(balance)/2; i++ { + balance[len(balance)-i-1], balance[i] = balance[i], balance[len(balance)-i-1] + } + acc.Balance = new(big.Int).SetBytes(balance[:]) + + // Decode codehash + acc.CodeHash = values[utils.CodeKeccakLeafKey] + + // TODO account.Root is leave as empty. How should we handle the legacy account? + return acc, nil +} + +// GetStorage implements state.Trie, retrieving the storage slot with the specified +// account address and storage key. If the specified slot is not in the verkle tree, +// nil will be returned. If the tree is corrupted, an error will be returned. +func (t *VerkleTrie) GetStorage(addr common.Address, key []byte) ([]byte, error) { + k := utils.StorageSlotKeyWithEvaluatedAddress(t.cache.Get(addr.Bytes()), key) + val, err := t.root.Get(k, t.nodeResolver) + if err != nil { + return nil, err + } + return common.TrimLeftZeroes(val), nil +} + +// UpdateAccount implements state.Trie, writing the provided account into the tree. +// If the tree is corrupted, an error will be returned. +func (t *VerkleTrie) UpdateAccount(addr common.Address, acc *types.StateAccount) error { + var ( + err error + nonce, balance [32]byte + values = make([][]byte, verkle.NodeWidth) + ) + values[utils.VersionLeafKey] = zero[:] + values[utils.CodeKeccakLeafKey] = acc.CodeHash[:] + + // Encode nonce in little-endian + binary.LittleEndian.PutUint64(nonce[:], acc.Nonce) + values[utils.NonceLeafKey] = nonce[:] + + // Encode balance in little-endian + bytes := acc.Balance.Bytes() + if len(bytes) > 0 { + for i, b := range bytes { + balance[len(bytes)-i-1] = b + } + } + values[utils.BalanceLeafKey] = balance[:] + + switch n := t.root.(type) { + case *verkle.InternalNode: + err = n.InsertValuesAtStem(t.cache.GetStem(addr[:]), values, t.nodeResolver) + if err != nil { + return fmt.Errorf("UpdateAccount (%x) error: %v", addr, err) + } + default: + return errInvalidRootType + } + // TODO figure out if the code size needs to be updated, too + return nil +} + +// UpdateStorage implements state.Trie, writing the provided storage slot into +// the tree. If the tree is corrupted, an error will be returned. +func (t *VerkleTrie) UpdateStorage(address common.Address, key, value []byte) error { + // Left padding the slot value to 32 bytes. + var v [32]byte + if len(value) >= 32 { + copy(v[:], value[:32]) + } else { + copy(v[32-len(value):], value[:]) + } + k := utils.StorageSlotKeyWithEvaluatedAddress(t.cache.Get(address.Bytes()), key) + return t.root.Insert(k, v[:], t.nodeResolver) +} + +// DeleteAccount implements state.Trie, deleting the specified account from the +// trie. If the account was not existent in the trie, no error will be returned. +// If the trie is corrupted, an error will be returned. +func (t *VerkleTrie) DeleteAccount(addr common.Address) error { + var ( + err error + values = make([][]byte, verkle.NodeWidth) + ) + for i := 0; i < verkle.NodeWidth; i++ { + values[i] = zero[:] + } + switch n := t.root.(type) { + case *verkle.InternalNode: + err = n.InsertValuesAtStem(t.cache.GetStem(addr.Bytes()), values, t.nodeResolver) + if err != nil { + return fmt.Errorf("DeleteAccount (%x) error: %v", addr, err) + } + default: + return errInvalidRootType + } + return nil +} + +// DeleteStorage implements state.Trie, deleting the specified storage slot from +// the trie. If the storage slot was not existent in the trie, no error will be +// returned. If the trie is corrupted, an error will be returned. +func (t *VerkleTrie) DeleteStorage(addr common.Address, key []byte) error { + var zero [32]byte + k := utils.StorageSlotKeyWithEvaluatedAddress(t.cache.Get(addr.Bytes()), key) + return t.root.Insert(k, zero[:], t.nodeResolver) +} + +// Hash returns the root hash of the tree. It does not write to the database and +// can be used even if the tree doesn't have one. +func (t *VerkleTrie) Hash() common.Hash { + return t.root.Commit().Bytes() +} + +// Commit writes all nodes to the tree's memory database. +func (t *VerkleTrie) Commit(_ bool) (common.Hash, *trienode.NodeSet, error) { + root, ok := t.root.(*verkle.InternalNode) + if !ok { + return common.Hash{}, nil, errors.New("unexpected root node type") + } + nodes, err := root.BatchSerialize() + if err != nil { + return common.Hash{}, nil, fmt.Errorf("serializing tree nodes: %s", err) + } + nodeset := trienode.NewNodeSet(common.Hash{}) + for _, node := range nodes { + // hash parameter is not used in pathdb + nodeset.AddNode(node.Path, trienode.New(common.Hash{}, node.SerializedBytes)) + } + // Serialize root commitment form + return t.Hash(), nodeset, nil +} + +// NodeIterator implements state.Trie, returning an iterator that returns +// nodes of the trie. Iteration starts at the key after the given start key. +// +// TODO(gballet, rjl493456442) implement it. +func (t *VerkleTrie) NodeIterator(startKey []byte) (NodeIterator, error) { + panic("not implemented") +} + +// Prove implements state.Trie, constructing a Merkle proof for key. The result +// contains all encoded nodes on the path to the value at key. The value itself +// is also included in the last node and can be retrieved by verifying the proof. +// +// If the trie does not contain a value for key, the returned proof contains all +// nodes of the longest existing prefix of the key (at least the root), ending +// with the node that proves the absence of the key. +// +// TODO(gballet, rjl493456442) implement it. +func (t *VerkleTrie) Prove(key []byte, proofDb ethdb.KeyValueWriter) error { + panic("not implemented") +} + +// Copy returns a deep-copied verkle tree. +func (t *VerkleTrie) Copy() *VerkleTrie { + return &VerkleTrie{ + root: t.root.Copy(), + db: t.db, + cache: t.cache, + reader: t.reader, + } +} + +// IsVerkle indicates if the trie is a Verkle trie. +func (t *VerkleTrie) IsVerkle() bool { + return true +} + +// ChunkedCode represents a sequence of 32-bytes chunks of code (31 bytes of which +// are actual code, and 1 byte is the pushdata offset). +type ChunkedCode []byte + +// Copy the values here so as to avoid an import cycle +const ( + PUSH1 = byte(0x60) + PUSH32 = byte(0x7f) +) + +// ChunkifyCode generates the chunked version of an array representing EVM bytecode +func ChunkifyCode(code []byte) ChunkedCode { + var ( + chunkOffset = 0 // offset in the chunk + chunkCount = len(code) / 31 + codeOffset = 0 // offset in the code + ) + if len(code)%31 != 0 { + chunkCount++ + } + chunks := make([]byte, chunkCount*32) + for i := 0; i < chunkCount; i++ { + // number of bytes to copy, 31 unless the end of the code has been reached. + end := 31 * (i + 1) + if len(code) < end { + end = len(code) + } + copy(chunks[i*32+1:], code[31*i:end]) // copy the code itself + + // chunk offset = taken from the last chunk. + if chunkOffset > 31 { + // skip offset calculation if push data covers the whole chunk + chunks[i*32] = 31 + chunkOffset = 1 + continue + } + chunks[32*i] = byte(chunkOffset) + chunkOffset = 0 + + // Check each instruction and update the offset it should be 0 unless + // a PUSH-N overflows. + for ; codeOffset < end; codeOffset++ { + if code[codeOffset] >= PUSH1 && code[codeOffset] <= PUSH32 { + codeOffset += int(code[codeOffset] - PUSH1 + 1) + if codeOffset+1 >= 31*(i+1) { + codeOffset++ + chunkOffset = codeOffset - 31*(i+1) + break + } + } + } + } + return chunks +} + +// UpdateContractCode implements state.Trie, writing the provided contract code +// into the trie. +func (t *VerkleTrie) UpdateContractCode(addr common.Address, codeHash common.Hash, code []byte) error { + var ( + chunks = ChunkifyCode(code) + values [][]byte + key []byte + err error + ) + for i, chunknr := 0, uint64(0); i < len(chunks); i, chunknr = i+32, chunknr+1 { + groupOffset := (chunknr + 128) % 256 + if groupOffset == 0 /* start of new group */ || chunknr == 0 /* first chunk in header group */ { + values = make([][]byte, verkle.NodeWidth) + key = utils.CodeChunkKeyWithEvaluatedAddress(t.cache.Get(addr.Bytes()), uint256.NewInt(chunknr)) + } + values[groupOffset] = chunks[i : i+32] + + // Reuse the calculated key to also update the code size. + if i == 0 { + cs := make([]byte, 32) + binary.LittleEndian.PutUint64(cs, uint64(len(code))) + values[utils.CodeSizeLeafKey] = cs + } + if groupOffset == 255 || len(chunks)-i <= 32 { + switch root := t.root.(type) { + case *verkle.InternalNode: + err = root.InsertValuesAtStem(key[:31], values, t.nodeResolver) + if err != nil { + return fmt.Errorf("UpdateContractCode (addr=%x) error: %w", addr[:], err) + } + default: + return errInvalidRootType + } + } + } + return nil +} + +func (t *VerkleTrie) ToDot() string { + return verkle.ToDot(t.root) +} + +func (t *VerkleTrie) nodeResolver(path []byte) ([]byte, error) { + return t.reader.node(path, common.Hash{}) +} diff --git a/trie/verkle_test.go b/trie/verkle_test.go new file mode 100644 index 0000000000..bd31ea3879 --- /dev/null +++ b/trie/verkle_test.go @@ -0,0 +1,97 @@ +// Copyright 2023 go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package trie + +import ( + "bytes" + "math/big" + "reflect" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/trie/triedb/pathdb" + "github.com/ethereum/go-ethereum/trie/utils" +) + +var ( + accounts = map[common.Address]*types.StateAccount{ + {1}: { + Nonce: 100, + Balance: big.NewInt(100), + CodeHash: common.Hash{0x1}.Bytes(), + }, + {2}: { + Nonce: 200, + Balance: big.NewInt(200), + CodeHash: common.Hash{0x2}.Bytes(), + }, + } + storages = map[common.Address]map[common.Hash][]byte{ + {1}: { + common.Hash{10}: []byte{10}, + common.Hash{11}: []byte{11}, + common.MaxHash: []byte{0xff}, + }, + {2}: { + common.Hash{20}: []byte{20}, + common.Hash{21}: []byte{21}, + common.MaxHash: []byte{0xff}, + }, + } +) + +func TestVerkleTreeReadWrite(t *testing.T) { + db := NewDatabase(rawdb.NewMemoryDatabase(), &Config{ + IsVerkle: true, + PathDB: pathdb.Defaults, + }) + defer db.Close() + + tr, _ := NewVerkleTrie(types.EmptyVerkleHash, db, utils.NewPointCache(100)) + + for addr, acct := range accounts { + if err := tr.UpdateAccount(addr, acct); err != nil { + t.Fatalf("Failed to update account, %v", err) + } + for key, val := range storages[addr] { + if err := tr.UpdateStorage(addr, key.Bytes(), val); err != nil { + t.Fatalf("Failed to update account, %v", err) + } + } + } + + for addr, acct := range accounts { + stored, err := tr.GetAccount(addr) + if err != nil { + t.Fatalf("Failed to get account, %v", err) + } + if !reflect.DeepEqual(stored, acct) { + t.Fatal("account is not matched") + } + for key, val := range storages[addr] { + stored, err := tr.GetStorage(addr, key.Bytes()) + if err != nil { + t.Fatalf("Failed to get storage, %v", err) + } + if !bytes.Equal(stored, val) { + t.Fatal("storage is not matched") + } + } + } +}

    2. Rwe5mQNduVF*9o}2p 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

    51%8SXvG8u1mftO)WWjpNVwM4qe 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 Q&t*d8ZZ1#= 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�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

BUlu*YmpL9FoEf$3g&@_?xj1~>XJ8%0Z+ETB z{XEnsO*?9XdhuIy%Ie{|wSCZ`NOcA|+E%QPl5xPO-HuLSer+j>$CPb1_yDQyN3oWr zwB!u!G)DN&wjnY0n2YT&QNU|-4U_WGpuITh^ZJ4_*WJiG=PxsxG}>>gmP+$zvXGYA z5Nm8bLtE8mo@WH^UF{$sL#etjPtWB+W+yCNi4G?t@kuX6m#*vXqG7GlDN-GMeSpA^ z_lIx@QlZcuOJCAQUcC@~b*=I9@)SuCTCS}YlB8Aw_vAt(g->A&v|NW)qu9{aRi-sTR>)ixCiE4~7DI6WaZ$yZC;LfLBicomy<4c{du? z;riAAjk5Tg!%ypP-@=yV{phtEig}1sq=BNJ&Ze$WG-(rJ%dFxkzU)L>>Jd_qq-Np(hJEAw(! zc6B3{*o-onIeQx4AgV?QhGG@Dd z9%p{>lpyGN2SNVZPsC6zfrmb!2iwDT|FMCEe?SnL0l}(ZSy+$1EC>aA&JWT+9M))W zb7&tLzf?j@aoAz@!b`u@fPS&X;Sj`s$^NA+tT*VdANfn$UrZ1WjsAQcMRakPwB z_a|D0`$#)G;c^jELh^-5cOmEdMXuf~_O>>wRF+p3{-HXoP^9wlMXWyoQY8c26n!7{ zztxW|*yL5EhV^!8dnwQc)y$3J*sin{GxZj{ugpZhJP zCM5^MeJy)W$dd&7Yx^2*zs?)=90#-%7%*k zeHWOoBRsz+a(9DY9O;C5jdH1$kz!bQAZ7CfGl9d!U{_WuS;SH# zL+_#JL)BubP*~r z*cV|O3Q|o8ZayhHx>$X)W$fgu%d*ptA}tRiRLOw9i$>uy?lT%`bK+-ISq7e{W?SAM zGpA&v=t#EA=}wIVyu!swR#4ak1{lv?%IaY@ewtVgJQ>F;c4UKJZW4YuiT|fe5I6;GP94h~XXH{~^>JulfNo9Osd_zJjo0)kT=&>8-sFFfhJtCZa-HDAg~1G2vTEhxs$cnvPv_g!=ea7m+p#iEG;weEDPGpo>s}eSHzQ|2Li@^$1?q z_>eBj8?T*CkoM#2c`e=LdgM)nlB8*ZXAd9C0$5LiTcZZU-(Wu)Hpj|}V}b)S>I8JM zG-*B|{BSwU3%0OC6Li8UV-;SCI$ZxPJ20zBm^$J$Ik{)C39+U)SBMfGJiUgmbV4@uC(rJ@W}m+gyqYk-?96_>?zb$LSs9) z(oh=t8RdcE2$ZMbs3AWf$j?s}g5S%-3ZWIy1fv&(Uk|WX4&6eErGMuB(W2fj1^q`Y zB))V|hy?qMAV>R?bkOP7wtoqci67KZgTQHfgFBR`438sbc*wK!^HfA+otl}uell}W zjT^T5@{?roHu;V4rkv&P%*tpWVxHk!lGST|gcF$bZPlesU`&8l7;SqS{MjT2Q$-VG zWCdM>3hd_#|LH_PWorw**LZ2!H6&eGOs))w6O0TOlmkV!(zr=|el& zSW0d>eb@cv*p+}+?5dghuT^(!N)_^?+4K&93N9|OH|#4@j#CEdi1AH+@>wy5XI?~g zHWmaU;|?r!C!HW@`UYphg8SkJ+HY+958%@(6Na9?~$QEWqB+S7ygNegWB=o z{W|UZD+X>TxgAa(w_JSQ^741Axq1E`%-`?WisW8@Wn7=p2!@k zSJ)y{?G5+IdPa}ryv1mDpjx>`a6+G}lsH_@hMn^<0X~ka znJ@L3q{=ltxGN!T-|6CgM4$0l0*b-!LvA>^VHGa>*ha0ds}+qEN=r|C`urJ{Oxw`*}T#K*iYP3`a7bT5HG2E5+bT{S=^WAAF2O=#c zXM?3BS^u^O71$r%7v2L3S5~wOqWp~JY%^7UEn20d4Io5|%doeog68^f7J~1Hos){A zzV<0eUl`;a&5Ju&onQUxgMBqZJRqX=!sjkaRK^GU*3FgZAGo*T1&k%h?Fk>k^P|N0 zye&M$s$1QS0_!fGRIhK=_e)NGa&^EX;B*pR7u3D$^|FI2bN7V0MKpb!CuWi0YdTMV zOSYyhZ_BeTjkkv*q7ke`1(dMV9Qm~!+29nbAnyib!gLG4D$ir7RuO>H7}IU(+>&Tq z3a}VdM-ELw@4M6JVIbK<*Lrv7f0pz$$0#6swjys&tgr*z5y2LtgW; z+#jrnw*yeqvd}*R9$!uXr}Xsi%33_dsy}gxS^I-H6srP`r7zkeuU?40 zlH$>4K1r{tM>BpFYQdSW;OZP*R60XB$nB2e?Z=0g48y7bUwFFz4Xa9WwnQ0R$K>Z$ zi0{K^-f8Dm>+J*AVS&Bu6fwpoq1?l_uzxfQCj|n2Lk^kR^jzJ$;@s zNpGxkI{P9gu(8pqPn4f&gR(J0rcU{$Q<+9%;C<`L~V*~16 zyNE+F&|ep6f2MU1v;dmKAwMASlf5Axid7NE5HtA4pJ=&(O0b4l8ExRD>XOmB*YfqF zHtbfu%Pz~1c}$GER7CQiQ7Z5~@a_qq3IK}Vw>y5(p=t$3gcr;y*G zjmnY>kUtBsZYmPJMN|snsq+7xYLzX8;bhoQ_Hy3QmCqVo4(S{0CN&rOhXFThWrW_* z#DL<|_a$E_e5XE)Hc5T-`IhNbz)DX>`>g4N3QksYk=~Jhb%iza%pCjqfv-vCjXWL8 za{iO}p+;iPh%@UFvBCHS>ZE4t$4LOolho8n16U+ej^(Mya4W{qG3` z&ffROP^d~cj)W)vM8dUpKM1IzT}5gx*@P-Rz7Qq%#iYfOKnii`jsIuSrOUUW&;5Y| z!IMWJ)eFCRT->Iavv)1DjfxtR*Ksp;QCrtD-^XG{H2m18=K*vVF*9Cno97H)RBHi^ zGdacg<6?u>i~Fg`I{#GS0N5~hpAM5 zp(Xy>3Dqj|V#(br`WZDXr&JRw5*pQ;dAp~?sg<|wY3qGtH1I+I1#QEgKzkYP-A~P1 zV;fQh!p%JA32ND9NI|k3o~l>ZPGeO6U8&Go5IASg-$Icp{WxNM{wHF!27lb#HQFWi!G|K^=NGftZ;%?;Y7s?Em zgno%oncmtVZdb+mR8=Nm;q@pq_FC%l$Zi*J#)}Hf1mq0%WWd3m$WZYPBFA`jh3jtl zjPa+EhZbrxMw|G8A7|HITJl3tN_P`M5SVve2t{7Q2p^V6&&egqCRY!q(PVi}Li>Z& z$xsDH{mKdT`Yq*A+;wBwd#*gDZ&s|~%<@xfJaWs%$mO+5q+_n9Qylqy9ogU%r679E zh3OT7QU%9RYaT%7Nbjb8xm^rdARM0JDk81OxkvhT=BBt+SGO{rPKUcd?sTvC&7)_q zykODsiq^%t)I#QPhqYJt>~^|EcFso?_J&VTlEO!hM)Lx#fAt-c{(3hjpq)oPQ2j$E z5`?5+%lSTA5w>Sklrcm6GJ^BHBWrNG1E>OFu7e#6V{{H<< z>`lz)rzG_!zA$fpzSBAa9SP&JIUjy_y#xb# zo0v}Hm)cO#tN2Yuc6MBmpFE;;POl$)=&c=+#rez|>L+0wHS7-`u4@{SOwh@$ATwE3 zT1YI|IWy}-C;R?!-GtZ7>h5}IN$^v z1)0tF&LSH347;f!@VY!G#TNNT0Xh5UpxiCyiI@u2{`Xn{AAyl5y*5YnYes+#OZl_U z;7AI1nqPUPwCKv^wl}p?Pz7g0?@a4Z&ecjkd@9 zCA*u9!@;WU9p@RTE@iCxbOffAJFje5Y?y=ZJO6iz0swjmsT&$t(Z%(`(~o<~KHnVg z<`au1TDXm~F?4aBO}PWOFuI_gba(v{seaT~`dd2@j|bBr7e&2vZP>jnOFQC6P^}hk zA_xJ|LUdf5Kl+(1lw^KP8Km*Fv1F3y({@O=> zg_`rbNJm=0j@qp9?fFV3xC87~ZzTgfJ?xTVgr&U{7Mq!lhv zhr7N(d*gQ1Erbp0gSDr?q41Vap3<{*m(wT=^O4(*et?ASFX{pR?lJ7usr#l(*Zhb# zlr0_$5*WqT{y>(deI6$LqPjaKi0WRNJuSfWUeD3ad+z#+@Kw3U3f2KZxAC*Ik>M%? zOE?4dzLjK9&FX9-2mpP+_E{y&N)H|zk5YAZdL6Q+jPi!WPsC*;nOw;mQddu?S+Zs) zv~u=$S*o2;p(F7cvaHHV4Hc-U(j3NRC4#wC=Z^f+j%;vBQV^0Vf@u~)Qj^C}tUdsb z%8>k&Zem?D5BZD6^&MJ4Ia|w{Z#R7i{W7@g{gE{wce+iJa}n;^pLg)TZeC-GwU=$> z9cE{ubVeVi>jCJlF1SKLiU2wK+oosWbM&_>u8;JuhNi9eSv(I!fq+yCbm)GE%79ob zGLPT)BCI?1bJ+^#`nv_;kVu*_;w4KKCv>|LO3U@KcLP-eq9dcjleU|ja}g}7xp$Q> zFI#GxmGRolkF5cYmew1T?;i9gK2d!6Qny_-&Cc`k&HU6)tz5=ed07WIPeJOhuJ506 zAaL>i&TUTTGzr&x2}?tQn1I>~zIz#ebiF*dK>)ih1W@NHHEwK0LeOyVhF@qS}1Y%bQ|UTe1l=4Tgc4||e(i1u>~tZf9cp@6TqID?R9 zi`)Y)vDDaRPz#r4#FFOSG=!o)K@rOzEQJ{2uo#cTU(n`1!b)g=0T*g$e@W;D_Fy3N z!*JoyU~gFMQxr9{4wC*FuG%a6%a-~u2RgK1pZ>D~^3gvt(9haSe>*e?T(UQ?Low>x zF@!AlCqmBJQL1@fYs%%`lFwxH-5T%XjmI(A)AbU5kAm;o(mf2=@Yrwzhs&P;q5wej zOajnu+gi5ye!J_DJr?$igevv;g8d5aoOsNYo! z+;vg3=FXfn!e*hC2wIxUB#rDcSh@Id*U~g@TJ8Wj-((WpuI;?bR5T6s<~Iy?2}rgz;?TgCG;P;GLGt>2gw;gy7UiCz&Ru0dXB z76MVIXvdH$|DQ-T@Di?aztN6Tg{*NkQW7~L(=5V{3ZL|yBr9TGmnu2M4XceC;79=| zI5Ec1*tcv?V83%;GgyETQ-|kn|!&QMa1rylbW=LCsK} zkdK^T7C_1k@1g(77WwfUKC?*G9P1SY9>S~|WKXm)6NfF=CpJ*E!tkj)5H-yc@s-dS z@<^mtuW#EFu~MQEnGC zrGCDQchfjWeqBd4`1_r~!72PdvYVvB2qrp{5(7q zp9qnogE);#qg8?Tc1sw3H%wX=%y;hGIKU^Z@*Mom?fL*mpJ_Ma`;|IIb(HdB+oP?z zwK2&`g4rx5l$K5=H(Qd2|Jkc3SB) z+@dWwV@zZ4L*X2Hz)M8eRgD(2>lF7mMp%ZDYGL>k#s0tGQ!+q0gUm;yV1LtyyH|bT zJn4MXFq7Kod0(+xF^Z4tw8c9C&Lvm;cpMa&_VTuo2&VP(MyfrZXP>^~DXqaBCiH(! z19g%xd@35=8n`*+bwwvywl|X=4j)GPSoe z$La%Aoj)Ep-=F$q+_NEE7xLvgR&kHkGd)E*!5LCAUy@DsJtqnJhx0AISN1p7fP)u5 zfGNm)6x2Wa?a|3$!Cp6L_OR%0HYB^3AWf;^#Nnv-`ROO-95jIJsejsgNB(6U;Jqqn z@4vDe66BzegaijUBFuv3{+=L51A!~|hI9x%p)wpp$Vaa(4-xXxy^OPE73_9ykq^VF z@q2u$47&z7cH8Dt#=h#^;SV&1;nM@A6W~)az)sP5S9vSj{c5Cp>2R{2Gw2%!hjZ@L zvI?$_h0K{L96&_O^os8|VTllyrn)J4Tl&k(UH;Z4xAh`xMjEiNi6C>6p35~8xHsjld|#W3uy{M3WC^LX z12l@qgiW5)`$H56;N@fTf%`#$oSTq?$CquefJ(lZ^c;Qwp7sHVpvFe`6rcVs*#FFf zz*YO67=llzT*nabAFWTZJ{{s!xcYqnr|F9|t9OKjCYWK34m~v&8{6et5DUr>44%$y_%K*mRtjtKd-7`Gb{NVgA zpAnkQ1!%&RZ#zUUsFG6D848}pp#D>ve=h-ntM_~@6rTi-AyukBxoL3WC6<2jZH)fv z98D;p zHJg+dko%4AoNR`9?X5Lhb6MZnas4H#PyF}WzoNp;*ajZ?r5)Me6rv#a2Q@IwLLf@| z7>XqavJ$*Q0xGv|db^C2W8BfkAU(%}gsLwr!C@4E<9L+@jARaT1&FU2&TY`|qbCgz_cHaYt>J-9_ zUFkLpBzJKlD`-aYH>pW|dv_6Mvp?gis!7hB$rDOzmtY}j!RUuCL7dKtAlNMEx`Kh@ zxktVaMHXIhQi;?j1H0v1chD~=!IuzW#Nb`%VpML}>h2wU(va7fm((iu&VwjK%YKMQexbZ;W;`LVy<1GJSr;!F z22ru3{|iI`0OJkc5fvlrB9Q*I2%5I<7)Bvql z^PTG=rm1GkGow%DeK<7=mbphmt{;+n> z`b#b7uo7<1q{cn?m_4F82w3gsV9k+!9`c~^&%^xXUkn1*?G5Zuh|)QRkdJ;&0wQFA zHfwVeSC-~4b>%sE90Xi$RkuqL%NMPRaLGo8?ta0BK~x;k2_Omp?jg%ZC?-XaGpqDA zD%k8sZIvNKPGV4P*J+a57}l_t0%|I&TyWWn_5~}cFV0<3d@;OJy39LZZb$9RqV>9- z6E>+7>_I*vg#a+n7m^@yxv<2|UZI2ahk{_kOoSS1=}3Hk3wh`X^}B`hu_OVGIj#}s z%#AEBnlTl?hrP;Bl$YgO?RLc@8+>45Y_Xj-c|*OC#p?lDv-)SmEb(ve45%+xUCq8) z{54+Y6rz3=?LXTfaQ(g~hC-C-F$7HbC!W|L)#1v73qb&X3i?{4tf6K@FL?jF}&lvFF_wLu0vk|X0k zzM+A?`X*SlMI}W(ge0_Vb}TKQ3P7yHe$*of^|i1V6q#0*h`48hAuStq9AP3STdh2X zos{S3f0F63GdY-mvImz=uG)lg2Q6?Khy(=d zQ7hApm<#1tiRa$ySTB&tSeh!~E_dY;B`|HooyMU4S)ad_g1}Grd@U5BY>pw-KU$=h zC?v&*e(A|G(N9_wZj5n>_-DsHQco4E5WlhVe3g%b2#Z0*!`9`M^GA~xu0JR++-jU5$R3kpiK4)Cf92W4M|r}23l3#kcINs*-nRx6q&dJ zoZAA=tt|>Y1UGFd;jK;EqqYsbZ$5r%M%wZAqP_!H${{|X_G*(;oT*vsGT=-J3kbcn z&6083`(3?Wp~-jfEf>Ru6RLHvcl#c>pltLgPC~MbFwX5O;rv@)WZv+;^z7G|<|sux z^2$E4!6`mL@Tmc&RtP>hA499Szz-~)tpGWJYG$|6@JMaci&gV(Xm`k3o~D|CZMs$tJ0A*6-UKc6ESKO13^aaswiMfxh2qmW z^M*uf65Z7D$ukG|G)jb4Fiv@IN$s<3EZ>HkEUSs=mHN>R;+)G79-8P^W=<$AC6d%` zY!h=sB~S6`SC{wCHVE9fKWIbo38II8ZuYY@@W4DeybL+oxtWW1izL#~tb03h zqx=T)MenyfOEF!;6j@dGlm0lN0mG++Gye-dB?EL?d?KOuvziPwyzPA)8FR5g{5M|Z ze%cr|R3a}i4`2iE((WZp>6L0NXa+Ixv-)I)80Z=3<9pn`>Z~U617jiJ5TDSf-4GLZ z>(_$~T5pe)dBwH{PA*`gb0#52PNGKybjqAi$wLlirEY3$s=Bop_U6@HVp%A0Gw`fJ z23M0_1%}pX!vTGYSFF3_+XSvYLfgE-K6DXRcio|1NBz~6R@W&LRQhtDsg*ka(fIuZ zH3gq6{DHfVn>RN#MeoCX{b3_ZeuLQKxItu>pGhjoMuzoO6o$Qu zfZ@|4oD<+vGQdNpNvRu4Z`r{hEMZfIU?9stU)B2Z9+8uMoDGj&C^bNWEm$6x#D)HF zJ61Bm=>-ls$1haj}M&zUxkp5oJQ6@6F%0ypn_VkkaEA49-ceT?^cf4DDSMuwUTnBm-FkKf!l_aumLbVEu zL4^;n)z?l{jXPx25?D%Hn3QqQQFWOdBE{Y+4R!d!m3%_2a_l%*@O4Cq>3uW}G4~sZwd==lEbWIbCBawPbGO#qHA= z)S)DQYkM=YPGzL{5CQDKz0eK4)PBHSrGbb8#RAm|1dr+R0Vj*9{@|s)J(F6RRAfV+% zp+!dx2sQE~38(8g8)yJRD<5t>(TIB=a1AecoR7FG&-wiYbbf_+JGjPTb@6j9hY)qq z{B9*eX^Ye*Dy?U5{ypyE%*ve%+^d{3KN|Tlw;I2mP_rMh=(XcHkkdk>vfN#3%mcN% zn}j}S;8$E+GrdIfgFf`gFYU+%zq>#9?HT_6uL1;q4$~|IqMjT>u^50>qGd$&jn?Ta z1dH$$SIcQznG<~w>vB4{M4#T+sAtZB+#N(V&3$fNk5(DV+3D7B`F2gkmYMl}(i&4n zk~FCyDpdg#qKJ^Aduedt1KHW8to_wzE?2Zxu2Y)$9YB<|c<(^u6H{6L@6@jeGViWM zer2Lav(p`9q(95hcKzN-=ZL;Xkn)^mgZF$v%-IXH4}0j(b7NAcDB6jC>o{wYKqeJOyzFZPFSC`6SULtW@c zUbzr;r8G0Xc~sAF`GMjW_>OXvF-me2`zNHi#hVxr2)dxOXE2CL!ua1HievD`=l(3S z)!UN>l+xO|4<__&*1XY0aUK~qT74{ZP6gy6XDudsc}tW`cc*+@e26otkeCO?0{T5xO^JyYo8yPZCzPl%ind&15nAIf`G!DM{KzKqYNvpbq z*W+f4?K~K9t^L7870&KrTmhV5Z+jQ5MoT z>R!Rar)J`Q(XU_-m5hD@hys9Trf+Xu4)5q$EV>#D&%zUW?}rM9`ubh5 zODLw#FX|XS0vJX_F7L!@*ePX6>GQzZiw;L5I3Nza&<~XwqfDN2U^s-REVX+60A7wH zL+v+!i)r|$hPup>OzjD3y*_NmM~DWrC)Dqg?&=p;9NC)@%%=TQ_dao)jN`=ve;bK4UR@smsR?{)cWI&b)G`hp=y6?fWR&L zo)`*IFaK=;cT#3Io~;)&x3ft0f6*i=*>sMoB@T&DWJT_ICe6e*6&OST=tn_RfL}9b zvz`V)rA``~-u1J^MVcCM&tCrkh!MU{D_+&f}E z36k$)AL-!UI`6V^8iV?+L=P)K;MP4~3x%kje_N_Wscfd#dS0q4GuL${HAH8qI@+>X z5@II&5P9oxZar=s7K2Jbhk}!*eqXQj&iLiKD4#l#=dkAVvA-Mr5`#Lsid&?{TP66w z?gN^#1taH!vI^Ph^YvfgZ^D=6iJL_NLJF*wf?qpC+uz-2eKMQq+^pNpW?-~K(MmCk zV(B(hb%;-AhUe_Sc#j-Eye~lV>!#62ov3<&sBw*slI810G(Aee3DtTv@a%bdS?o(o zt$d>;!Oz33^B!awb`;f>6~ns=0P*Qx2ooq~SU}1K$fhW`flh88~8v zUNNLtg+E?_;uA4)v`QuS(>Hg1v<~TiTGFb%M4Z5s6m@`4TvC8&Kkp;RgB+uco&{H) zAit@_lpqtkHaKVUFe=zy|Af*)|K`e78C55ca}x`{5jP;aVJWyjFCcPY=`k;cX_Ex(;L#~7%6?+j|B+@a{$hvD^;lF*QihnsHPYP3FzHj z*Eb)>pu9#iiK|g15Q_zfBPA|-h?_P%HOboIjO`4L(GcZtbZI+_dFMX-%zc|VL zH-}*7d_O`XejtE719XsuPzfYN^^=A6c;sg_HKZZ*=g$%~q#5*QKm9Vhp7=qT_#Op8 z^01HEgR-CSbkGdC2SGQ#FcP%Ye#?Wn6E!uo&0Ye5JNAZjC_a7uw}reI>dcH-PhSPc zH@rI!M*;*01fVSrnW8m?V`#gY;@sG9-*5$|L4-`D0|I488N;a=!x>Yn=^Kk1!%-Vk zgRUCG!$+tYL(CLC6GmKIV|49<2ThWN-4j0bYP6?Q8J~YpR_FQ#51!i^jDGdbfV|fT zcc3dE6DC8bphRkRS+&3|?>z2xYB}ecY-_RTm&2rR7sVFJ4(TaDTQ5t`2rbo#n-E@N zx8;+U?L&%e$8$Byv13%BxTwP?l<#OPuYn%-iq0oTdNYD3jpttj=Hv6>imoMa?FtO^ zrg{O)Rwba-fX-X)ycqf4`3Z*nAK9oGzM7I=?5Hy2cW}IWN>2wO{rw&U?%a38PJ>ARZz7lt!0+(975Us{q7P`PVfF`*{=0D0QzmCtd z75!R!i5?ah##NPM$DEXYuzzA4_x3hA4@2qyXPIhn&w+EjHYt>yeh{P6lH1qfwKhAj%tWbEt!s7k6S_yhZM{vuTh{z+#hU0Oy&pYCqnvi>Ij;=cGaN@XBDSyhfb)=!P&9+PPz? z>kn2bb%!2{GS*q8F0&CNE3X@ z5rg#Vr6$`=0V!$MBJgTQt;t2Jq0698g%1F?-5G_CW<^@kmSoXkz-)Hx6w1ovoow{T zHnUw(_ux#ZlZ1t!lFX*ECdeGD;NKA>Zb`;OeF>#O&C$BqKD$yiO%=a1dO{~j=vEKe%NOhp3(r3W(i(I73CoOh*_`IP;fZsVfqL!SO)>NWh;z!iVE{pAwL8Nn7 z;eAH!`x!Isu|Tg(@YSsLP_}yl*#55rVr~ntj+v=!%?xHu7bOs~%@RVLB=vuuZAj?m zmq++;VOdx!TwD-r58F`hBgtX)LAdFl2?B((kRXj{_6o!g%K!Tw@+(0THEavpi2pRH zf13NB4*E+88tz_4@t>u?TGYQ}_Ftv~fqV7_b_heEQUBXQP70%^Bv`jrzUAW1{!-jw zT#heKfRVNAp+|Se8md6&H&_TN>m&>X0I|upL?YU6ns$s{_{3DH#>(t<*E=Dd5~lz& z*{*Gz5*}bwMhtGiOy;bylQ&YE(XxUsjBYd6r%k^}Qc$a2)_m;{qLjmIFFc82wam7P zVhX#Q8+UGu@9QY(YzbXto#_y1i{1(KtN9Q+xN*K=*sTmTCbRc^7XBN%(QLlFsbv&7CL_8vdy>xAEn;eFWjt#LDZ8YASxNS?AV;$ zx4las85S%ghVDkJM%&&mW#QsgHStpF{^&Dp06%z;Mt~d+hnR+RWH()3B9^mV>ZxA_ z)^vP-y)^1KMW|L`A*e!839)B^QyHq^mLjX5+wUltS0`lDI+urDS}>jaKD%>5t*Wt~ zF$$gfqK}YolGd<%pS7p^PHsCQo-NHrp{~R2ACBx20;NhSY3c9_#GuXFKdzFu6$mQ2d8! zcyH?v5yJCxWsL2x5L7k{ocuSvk%l!|De`ERy8YeXf{C!vUj7n-((sN^Eq{40^+V80 z+b4#eJ=R&ypZY7_&BflZrOih4EdrQ21k1iKnq-u7eVa5~#W8BrepQDkxfz0#!{qz9 z4W;A|pE61*+;b!=pJH7CzVm4l_i0FMBE)K9;a=1eJ)>ks<9R~0j(QER*3^A1eU3UM zQMTy(fSFc4nSeo0HoPJ?FozAcQ1X`31 zId~us4&Vt)BA!rM6%HyCj!zfRP32JiY%O+cY053f^oQas?oS0Pydx$~2keoB;wHJd zGe6^3%FN+{ZEKhlUg~>{mXA4E;eABznK{L$qZJ1N59|-xP<)aKdPYjU)gB!6*6$$NW8Nc3y@l!S=W4j%V#j?v(9c-8sK$nyJ1iUvb4Yrs@zHCI5NNyqhd8` zG<4hbY+ViBnOpN?h*CKZI5o?IcH>8clAh`O^WT`LA?N>)i6D>!f`dMPw~s5(%3ss| zBXZRHWuU`&4|L9QNT0(4{o3i!{`Fb9!@`3ukYoKWLDtCKs}kSaL4Ucsd**+9BtE1Z z@;Un*4jLWoLEyo?AsvcOYX7#7?WS+uk+HqKD8qrYL8v$xUsQ<0nEYYltJgr+CKDxo z77U+qPliwTTP($(76kk~j$0y?@M7Ic};F zm1-2%rTQaSWsG}pxievz`JLhBKE$VwWh|XEVE7M-w*m#ZMNnHDZ+Z8WaIZL?(N9cp zx^QLng!;YFZs+}Ign+AgE5dmG{$x>vfq&amh5|Xadn)`wJLdpaUfG-raCa@o#NAhN`Joxfrs`zF%+K+{%rwE4WA8{-=e}-WHy~x zBY06(wJ4!`W4WBE(AIq#G^8^N!>7C>@Cg9;)Y8%8+A6DGObmnv#$&&Aa3a#c5*Nwu zxZ_-vo;|PzxWc=}Y02V=6FpT#`95ix5SJix?lu?&Y2Av4?hyuS5>%^2&~QIqp;mjCx}IFderJ~Mt+E+OP#Tdc zUH9u$frYx}CcQA=%XeDGugHN-B(Fs(tkjelsclfCFE+9Wo@ZAD?RJ{cp2nbluhD}V z5O{dc*Fy2h;@_5PIVLONml`>*vG!Qs3ChBk)(`R8UeuGmkIj9$?2)2ewqaXkgRo(B zxExgeUJOb?foAr6mhQXV544&$=Xipn22(^~uR$SsaHAJmjs>7aNB3iMYh@;I=Ws;|HG+5eu!l;p&Sb`je=$ z1o}WvOW(n_4IUX`IvD$6~}J8UiPex_2{k8 zarTs*-&yx@Qs9l@e%qo5VW_6dyb&~V3n?`CRFcYFN)Z=?-)|d>3D9=edYJ~7w2nbT zP-Mu_g(QOa-}b!Q5_pd%H=Fd`AYa^BQvp~O5}snW381)yK}M3?$hNt*Aprkx!xi0GsqPqs)Xl9^G25m=52Zh5es%HnW9xI=v#{T@|`zB>+6F9U|0H z0%s~mh{LN1_D#7*SIZ7fw75luwISW#OoL7(Ar3p))UfTI4Kokm24T+--y3()See0#`myXtQa* zfH73zNf;^_C{2I-mb2|ETk%_r8>S+9q}F8ms|n#mylqRlLRyll{eV$Z`>ouY5BPlD zw={WJHZrIRP$aY$T0)#hyDVxKHG2;kYBPI8Jc@*fjm4O4D=B|>yjalkg`WJRd`hAa z(TJgt>2eW76g8??}?!d74~lnIK8f>;^NpKTa^)F zl6(_h2F-l5;-fc(ZeyOH5(Ju=z3I%0j$o){Aegm2V27-XLnA!B?796J8`~ZsIk?St zsRVU)y*}{P!hrKggX1j+mbJ6A0ib83T@TMz^J9d(2r?Ke;l;CKRPcdn6&8Y8i}#bo zP>S>JUPNF(ow!x3F9Jqf57QYIU3{j?rT*sS3AIY`Sc2o*Rdn|ZQI*y;#|L>kYKXom z&tGM>C2SUHceQD?;DJEp({Cna7%qva$=0 zbaibg0)&28+enoDaG0NBV`lt(ZLPoGm z&UD!fNFcnhe|~o7nmJ`$@V5uTa>mq|CseB+_BLmAUM0IQVkR*e!p)C$Z&Px=OEIK?N(TTo*#wLQ8~Ovrt+jKlu%wZP`g4@SGtihUw^$-TyU1>MRW5u=2$m}RWzG6 zLNE|6pK_D#K8C$R1PhwxO})^YA#xuLZaTgq)782C+E}6=;J&Tp=@7PLP%mcxJbQse zKP+*GDjey|*mb|rB^?aptG{)U;(HRHh6a)L$mzG506}WR;o!LThzXj5LxFDKAPecj z!am}#+#y}<oZ6Px~ena}%g=Gj%>f=}UKsMg&KwQ#I(k7P}dDA&+{B0Z< zK9!yfpSpT76SFg)#ko&8Dv1;60S*`ew>K{d&*V&uq<1-Ur~}LxdM~^=F9hl4bq`v)8^fB<#%MV(6*3f5o=fos_Y1S0)Sa<%Vpo`H%1)tqgK|ay$!3Do>|{@B|z8+ zDbEw+z-0hVDYh1!LR+K+7aXGZ8J{Z8`)F0c@AcAzOV8OWnuU=;wF-L;s*4kGo&xTIZ%(My5hiafryJK};JhaqcF|aqZwD-s74cDW z+oW>fzoZGb1kAHM-^?ly+k>1oH9Iozq6fmE)ff^wfN6s;?q$B0Q9TVo{Z64j%R%6& zJzopOr}lqasvh5BBA!?TiL~629*HB0=0MMDj{ltPFrO6>_Si}RPxbGwL6z@?pq4It z$+#!I;Lf9IkR3oXFrUHp0WzUPBRmjaTzvjx#Y6(Z_(%0PhFdBm>s8(;-kW-?t+`p% zzI5_{*7RrWkQpx?&UZGn1KCeG83=CG2n{D^{*a5nc`$MN zx>A-z?B5{}_5avA>$oVo_hHlB(%lFGA`MDPD-8l7NQJG_)TgQ51;b9I4f*L3nK`7OMK#DMz8JAi0>PZSWCtwvl zrZYn(8YN~I3G{P=)?6&A=!yqWn$ddbrui@N2N6C6_?CxwVZ{W~F+N+;ThFJ>WY`lh zga3m1)-@^rnFqqS0H8%FiAT8`dnvX}=DQzHKT}3<0sZVM2iEe(kucy9f4`s~s|}=|8ajv?^2@xCM4w0zI-wm>{lpX#YXjz;2S?h!C2VW`U zN|`-bxTA1eIbAOL>lL~|C93#z5_P?~^>%vwoVH9S`n<5eenUd==HTqU?}JA-9>3K3 zjGYdMN3#X8sBHr3yLQ9IGF}EiOYWVL7pNxUE;^4ATW?%GmZ$)yI#bGyR5%nq`~+Xs zBzsz>;&QR&Rr5DBJSZd>!nUX6H$jVcuvVhqKiScF42FLxVz9)-a3#*5`^Ne`cia|v=EJB-8-iCX^M z05`L|5prVOCu|6L|J@A`%Ib?SB8?85uV?SrJ!%(K+1w%=QxV8g^LzS8}Tq!s;Dl#_n>xq znq?4tmV^3dMvrMggs%f)j#fyvraX&sPjMeAX$B=W?b`C%-g6?vsa;Hdvofaej%ef1ywD zB|sPDka+|-Gci4FKaDPJ?r>tVT6~9dB$|D&RW~hEpUVD|J^_Gr;L8xgo=1^gIw(A8 zD74!gs=Qeg51A#tFJ^|s-ERQjfGoYP?0(!j2%py$p7IGcEsgA#@k?Sh_ub~{RGlc@ zFd#t^s!xjFw>$HixuO_g1ze2xXeiv!H*Q`Y^1n1%-O$$%bN%v)r%90xZM*OChP0yc z}4$Kdw$YT|wd?N}PS=zbwW7ku8^o_o8EAKlRMY!u=X!9kMxA1^j4xCaF7#S#4> zIzNU(JqqQ>PL2m34LGzG(SvQ#!xFMZ4OxNjw+B4{r2f;an$_3 zOX$ObejXzVeHNn7roXBd$bITyN(bu`D(UYAnE_{m!3+*tn&)d3t-|G+$+rqO)-^o| z7VjEjf4%;7ixH|%<)_gn09e4%diyW{&0cc-w(pe<%3Qhq1X+T(`^F_*Q^>q-Prn1G zH#M8&{lB=IwfZaIZuY(gghT|`=c!1l($SUX2nf86^=XM$QEb0e#C}Bbm7#*7K|lZ6 z8`ZfjSG03IwlThz!<(n%SKBVVx_jojQGCAn-S^EK*0V3+hy$Nv^S;@w@FT>Ms{=+V zu1n`up}zaWy@Wrc@}%C8B)_c0J))hBv&k7?n29bEHm~>; z9sGXcFb9<+Ew7P(qr^BVzO^`#t~XhsN4|9NMxRdCl;H+pSt96^tcsk&;6}}%RzYZ2 zFxMV!ULIH1>Wps)++ozk=Z(SAG6E(@UfXmL?7>zmSBA>I^!lXH=S8ve!5(Kz`BNsr zDD}0o9Ms?Q`Ex7CedZw6g7pcN{dc2EK6{N0`*QRCdLxO898Z&W#Jdl>1hYpAxR2%6qNb5IQ)VS)^UchcI5@z>D5sBMU) zGvCXfQ)z2w#TPbX;!*;fB6%V)?9?e1bP&$>MLe297kD-FDX2b;G1of4`$eGbWfKC~<#p>dB1TW1Xoy5n zA%;tC2oZfj=iUJ*OI9W2v$@k9dPR>Us!?WoqYv3uEIrJNrg6+`#Q*d?r`dcNR;?5(e*DR>K+!6x)JGB zm%tA`!}O^=*r3g6pxw3am21HauLNh}8dRdH{*y!{0Osl4*28%YiD~A0n=0WX#X_b# zq#1Jyk)$;*e1j3j8UZy!-HB3S&E7{Q;a71#P<5@jat4iV4+l(e7z&`K--bPws86Z6 zSe5Fgm}v-{#W&WUDh8L7x8(48%6uzcbP3o}qC6$Zh-vJwAi+qtjpvUNW;VLf$v8qY z3pFv^98iX{nxv?XD=KkxI2FxdNtV}6J z`R36GnqPZr>sKz`%gecU9}g-~)u)lD1VGKx!5-(~`Xz&n%LA<2r~^aKQ9ksWboF{J zJ+@Gm+_MJEFSOH&l#|)Q>MN}|*XL3NwA{k(ge?yxEC*fptwxJFmMA1C>nEca(F~5S zr8N=~w>0j5B7E+U9&4bbRGUfI;&a-2L{}v4eXrOlCqj4TP6$mdy*R=d+4pwWsJV~% zmaG{gDIri4zHRY^>FpbTjH~K)HkU9fso@0PJ{xr%4A1duW`B)+CQ%SV|MvoNUpS1! z5Q)0+y8(Wo>q~8zzAM&gBc96-|M1QX!UNuVrk%yIo^zdq3nK|oiF$K_L?r+Ldk6}J z4+2$#ZO8O#Z#ltkDqeH3io=sE8}fbA>lVWaT%g%Aro8=9hbr(J^}t3myfZ6SbX3^) z0?C!AdN=WuMF^|V9MprCSa)@+IdLj8a{L7oRk-bXX?NAF)X8`CtSUB;Ke?YW)_S}^ z>o8ePRE>T3dSJuDDQm8oV!o)g;7M#y$24OoA0wb+^Xa>E*&tC=@D)$WOXxY3Ynt>^ z2wog)Qgg7mmu~Q%<)HpIr;uKd`{F^Yg-Dd%??x5;N4X_il#0sm8+B~aUZz^>sSCj9 zO>IGIbol;WJ`sPsc}rR;#w@PYEo`M+|faZDG~@*G@r|v<_j;*F(ck@!;j3Y)^e3| zS=S{x)~8;SEKv*|@_AWal7^Rs7G|Tp=%1z{#$p>dSe&WfiqxEvR;?n;YTwUqCJ^6_ z+_ro|w#{EvBW)t|9qIDa3>=nh6w8TrbmD+BeFD?E1f>uY-keBxK71u% z!BvNy53vMCYlf_ho5JI}RL3L|HdvozyXBOnhp1Fg-lM(>&$BctL=^~9WVl6rN%_(g z&3YyH=No!^s1d`v7N6g`xfx4e{|%w>VN{33OH|mqNBVSbcV7&tn=U3xWnPEU3?9|Z zvS$!N2-=@(9^S2~urHW(}x)gT8ga{F~jiXS5z94hg3u*_+|3sjFlvODFZ@g^&@{ zSDCu|6Ek};VuX1~I+>_a!9W~VFw01^4WjxzV)F{xhKqUrcXxz|8og)UpA)80DS{vt+`ZG{{wix}Q=V%rE-&}C0_=0e?_Rl$}_XjyB zrmUgCy~psfWpgE|aoQd1f`ZWB;R}w!^1k@|cC68LQUVXc~7j!~X9@q99Lj0IhT zD(r|SI?{;)j@};}UBLejOOX3_D6?RRivJ~IZ{FN2!=%aD?;-W-vdcs>u5GZ;G_1DU zp|t+w9%ltY14~rfB+YiWlRQ8BprQXQO3V3ecOEve%&0z<{&OoFBOKtrZ}#@kAcntu z9qn&kWqU2VPxrZsH1804ec$MjL@kk!(V3!+N#^G$Zi}?3pr+?6EYwqSL}8L%x2^Fk z96n_@BuuJZA!d4%gl@OO>Jn{ozn2vsHHdd`Om$Rw>C!t=6M!OTt7hcVt$6tC_525! zqqT0;#@kDCpLVf=Y>J1QHAv4S>g3l7$bJ2A>V`;E+Aq=dFC^;fW~Ox-pFq~^jaogK z2P%Sfebvn<<>xO&AhXOccLwf3C93W}N))3^OS~pSK93gd&72Gulpz_plJg9*y%;-` zD0(XIE=&T{YMTe)%$435lWA37+5y9NY|h9;#yeu|%uFbaugQFw zg1Hi?AuN`0{;p}&2fi|@3l5-fT(&-^B$=7~Rz@OzWpOpLx#BAEg)qzycSCeD@kp8q ziGzZtGqQl^Ca6N{g(#>y@jQl$U8OK~OQK^%FDqVjFvovUvuokJqVIVT5+r+N7w&QVc-svKPZ1zD(H@IM^baR7kKlq zdT=x`rM0Umv@d9a2w{e0wOoq}{6EPrl-bqBYD4m+U*H4OF7n{c3? zx4;hwUO?^}2NOF)qF(-Pkkw|kLKS?R3_o3c!Q{dfe#v!Ygx%1XOtWYPD`eP@`Xf}L z>Q5t40FWS?1{=i3JIxa_v}Pix(fTDmf7yAr2T4PT(;&5C#~WZ_bfngVyS0ahSQUA_ zA^XzDHJle28+WRgFWK6?5^iHXmMGfK-^f17n%{fFVC~cUxJvD#l%7mfWUTJslun@C z*B!G{^2?Jj-t24_Ss;0P09m^>r1P%pRg;={(Lw75o<5A}`UybU7B46JZhqH=-F;Iy zy6Al(hB2P9vDo5WAs0@6vCGD167@5$e_sc=ZyrWsh(wkBZh)VQU5`=trfkqzOkC^c z#WVM=fh#=Ou}KWx`OZ0$hg2V+67}IkiMskFCpML&H*qpii+J9=0=pNa->;{s<=pFq z`UFPyHu!C%?jV^+O~LKuM5p*i^MYOVy7W7!XmVIGE6-A%J9QXBScT@Gi0%+!W-Q%@ zvGY-OgHaJnr1mzVmrxG)M%F6W;X1m|dP-L7IZ*DqV(eDEiQ{+rzS3a)}sG(DfPMxQI^rcKhO0Uv#qjMBTx6|SiZ%jGthWRr8)w3Mb-}Cu%E69E8 zAl5=8s`huIdiBPlZ8@C^f7U`i7lN_73=QgiCa()tn6UZ zzf4lUP_F5NF8l`L{N0F>;~Z21fNGj+zyB87S*elx=?&c2JPP+04ve1dHFGe^(yOM7 z;eg)S5*n=TlgG)ZPetD~Uj_#5!dY&*72J`52|$SoB>eGfx`aZtYXz#^+Xe=P#9}my z0sZ=Bc3(FZq5}D+sI+5r$4^P?U7-?gwJ=M}?2b6@At6@T0japEt9)Ct;{I?!n34A4 zC)&}81J3jb{LWw-N-J2OT7HSu<|@IV9cNsvg5K{HmPKaivFo4i<@k6n-7q7%EgMIb z2i7MVoprk`-e96R5phHxeS1HVGKR?>P5|9UJw6rLKez&-Pqc{P2qm2g)Z++^{RpM~ z!FL>MZc8S09O+YV+@+xFJrskguKOabBQc$NaXfBlF;^2t&D_NJa}%x2i2#h)96zIU|s66 zxg8g5qm?nB_FRk_wlOjRGq0wB`5G1qkyxfsEC4@;=PlIFbG_9WJ4hLqcc1HKkmC1p zx3CtHk*Fw)s0YXTbWh*3S0L37vrR@zhumk6h^K#klm>UWoMmWa`uWml=Tq_<;`G&^ z)h#w`wyj--)eKc+PeALM@htHzC9UD~e1WSr0KA7ZU#OD3jE2`959oVPgFyt(tvp9~ zQmY&qoX?pTOwaV`uXz8t1?0YW7>ObJH2b>&wx-QxSjWBwpOo~H3^#gOBhvpP)|w;IYBkPQwz7>ey{#+2}*fEek96H8UeDY^6xQqtkRwmj@n~l%gB;Tq_1J zH1ar~dwx(;?7efulRMm$M!3dCm|vsii70~`WG}QPo#mkZOy*y=LGJqpu@<6F-+wo% zOH{+GrH@-4*bcaui?a&)FAta3m6#JGZW**bFPr?{`sW|&G7rSZXM-DfGx&@uEmc|WZg^$m#uN;cD#3xHOhEPBvt z%9P)Ewh$@f+aKJ$HNWQhwb1*9I%V>Q>?T8))!Kv;1e%stgl-T{M=!l<#j9+W?9`SE z4Z2?Pa!V|&(lH>pspFK)Muia9b^-|f*TZqxxVs_-1?3xRYAZTiNnxl!5&YsPCpyxJ z1CHMx{PkM?|Iz~TfQ5lV3-UmN`6Xn9UrLs8qL(F^$MT-t^*(MbAHF$h z_LntTutk+O*hh}}Y+zTx6XsmS?!q@?ej68RAhTCx=h7=0I5z;XC_2P&=>av2@RnkP zB!0WMc=x}Uzbtv-1h%LTn{Yw^Y=Q2l=EV?y_G`+*^J$q+l%*V+EG?0GdB1p5)zbDg zo{}x~FIx!ISKiFcWbwfEsz)s&~uRC9w;u?S>8N&x0^saRG%478w zj-yfEz8Y6xR%O8G{rs`LsShPoqgwu>M)}z>ZY-njOK`?13A)-^--vrc9Ihz=YfS2C z;{Pp*yc!U_bZt0|c)DwgCQP{VMcyNKDe7-kTTf-qm%8UaMKuzGgvqK+xGR9n#&y)m zuF9bO&L_J5g0yHOC;`uYVIJ|JFi|iJ(5Hi5@qAj%zTWgDe*G0B{h; z0sn(^A0@ATJ~Fr&x={aI9BhalG###wMFwy0&pfI7SDNJ*wiTyG{!{QdaE60^q{zh4gR%r7eCMZ zmzV}^qoq>(lFdxB;$K8 z4N|^s+a1k<0eK-#&8^u01is~GI%sDe1)=nRFJOS-4`VS{q|hjTH^B;^-Ai=483hRG zd<`@hP3YMTx|@QvSV%1icDS(gjJ41_RNDz6l>oSoi&F1;0D(+=L!TmD&GaJPoYy2I z@mVx5&vEUb18D$gpX62z7HGw~M&I;NyhZWGWo%_hDq-1;{*07R|19J&1lDXwv^8E! zc0`|_?4fm^*c0|Bp~z*yUwA_KY|Tpxvx~Xp6Xz*m6|$YmKxeCNK&^|4w&Ne2da?Y9 zDcut%q5MhQiaq*g04T2F#KXtc>w6M9ZPxUWVl@MfaJ{Bnfv1shPyCK|Sld}1>VJa@ z=>@}za1d?5CWUtXce9#Th#C1>jYDQ23_;s~$K|cRQQH@IJBx2QSO})idOSR!iKupH zBI-r=py76k%}f)OaIgy{@xx*Q7OS5UQ3!9_LFcyp5!FgEQ)TCkQj@Pl&vlRCX-GKB zcjmjX3<0`=d}D*N=fm=M`D>#u^H?zU6=s!`lv&@%CM}(iX7oRHsK!EVxeDTnjW4g| zzR53v24Lo<2aqo&jj?wtUO=tmbvq@l0m|Y;~>EXuQkyARp8D13azbIQs>C81#KZF`->-D zYhoZjC0m?3Pdz%crtgJR*@({a42^LYPN?TG)TEGI{K~EJ(JmK2^NnB7HnLumD;ns# zL1p{xZMIFRk3w6RUml_Z`HeQ8Glx3)bpU1y>2ThLIMkJ2!s}l+)H@T{DShrRT;G^p zMt@Nv>-uR)xyCDsl{7{Sq1+U_ zdoQ{rGt8B41Ni7Jvea0-^A;h<=+gXEkv?T2+N|qWt>=v`kaqNS?2v%fiG*2$K>o^l zl6%fy*Q1IRwi~4UQ(9|v@Zf#^YbATuBYXgdhzuR;WF z`Ew&Qv2(*(aRQ1OM&jqLzp0D7Un<@CXp1xu(y zb)Lqd5`au9LHyTMBew{K_S<*LKDArU;3H}O}?}5u*iD5 z&-)=j#5{hb!iSe5mO@0zz+74N*r7JHyVFwIyUBxL#>L5A&GxfgBcY|$&lF>8y3R*A zO}chUfY}SK&MCDynNyUr5?p^r)A~|cJuE*ysq;oC{j?JbJQje!N{FK=Yxv}ml5E~8 zVL!HnA&ui4-LqY;XO?=wG5s-T4t0d-KbK&DQ4V7<#G#aaH^FWG4>UhMQwdRn|Gqla z_x5JH|1_1SjApgWY%Xv0W5sBwLv@|#P^vt7+jO;>!!RLiWi2bnQ=rIRDx!E<$-tPe z^NrIhoxmkYl%_=WCGd^Z7M7B9yH?czXHmHiY{Kb$k(IG4c+fBJy@oiHX=QA|ND=KQ zh}jwetvis+4I#jWrMtkwNz1^vdt++nl(1Tv4&MImzmd!!0e-7eLCBmkVRNUZuz^1I z-Kc23&U74L=}!6N**^bM;(l$JFz?(LI?IoW(#FlS)pr@mrfs<;&XQ684Czr17*^DS zXbW+uo4=dY;izXxj&hevM_hP8;R8l!dGGO+SPWAAr4*FL#?ZJc|D28LKFCI8KiBV8 zD2jYU!-|yoN)3hi;$zKPa5f4S@C{U!qawiJ;u$e%Gq|NtBX<|z27PjE5)v6%-Q>hU z10J2jo_oTI?;+)id(miHYXlL=U*+9Xm@6Uv2HLV=U$Kr&YFEE}W);pVl`LdyZ|4q0 zts0i+RSVCVxc8Li7YO=w8cqqVwC4k^&KW z_KBi&;(+6~2uGLj|GyFpEgBSBut^#H60%%52&%fs=g~@xZA2to6aB5_CZ~jA#6$8U zZ!^TwiTi;~ir}#lUzZK*2y6oE-GOd@P1(znd_v4atuN367p1;^Dub9517i4_Yuc|; zU(X1~cY)NX`%^R8x%#w^Oe)h~fQ62$eIq5h4x2pM>z)q!zH4_XePJTWn)J(08u6!O ztF5$OyM<7}xWInRaX$<`E{AL)AdpJy_J*v*MW;J^DF7$lXvR7vd5*x~*!7^g&bZ)# zsqv%$cq$b%B7KLgrO`8!I{CE%W()mr_J)|0)i2@oFHC9|-yrP?M}!&IXwj`8B2tvZ zOQ_EETWg;;(beIzIEvz-CiUq*nN$M6#r($I{6*da%r++hUiYkB#+t=MnvYv_A$qQu z#GDgifO1<~0TYa*;n1o&`xu#fQX`dExy)o~F15a@dyQ&u{;^3Vi|COjQ-t*(yuORT z>L?Ox{qXTalJn2X!*t!tsOFwbpAzM!KzxK`YK}37Bm*C>wFg{#PxH+^gCE;Vlhs&y zJBo1vYqqz^UR4s1z)yPVQ&YUmdm`i1{iG?;%=5F#co1UKBw+j&$d;UY$E2a}vxs4< z&-$sh!=>*-Z&Zavg6uPz8@CR_&kX;XcTKAyy z&~A=K9vvCyFTw>K@k6No?uP3>9ZU4+fZ+1rm_N5bJC7dfSlpFuCV@WcQW~w_1GawuPG1=hKrH}%^gYjTai7}|7-=AL z@xgz_wywIOk9llT%sO9^-*`}=ULYtKqkZxH=<f8ErMO0ry#iv*t&C`M4Cs-M{ps^fG+7~Y@Ox(_}q5m z^_}Y__-#9a9A_qVgzG<-V1O|XV==^}JbpL9?~KTjBH#6;%`L_mwk@@`>?%uAmA~^W z0z%6k$!!#7a2jJ_iV-RTbl1XK$j zvbjEA-_g5R#fas^jI1}AQ^&m-`^wjf6;nO02?8rL8zn0hhQe()z@?@HVkyLkf@3#) zN6Bfu-csp!4@8gKFMLW^bF74FtAk7tWL~5(U#u_v{*?KxRdJ7M4C}cTjHeUrEr3cd zamav#uA|N7_pY5cJ0=kqUEa;W6KTzls>v*Ij)$LRqy8DvqaHA8q}}5e9F>A*qk5s)DC5hQ^S=ab$ZJyuZ~Dm1 zE=6ECk^hv9T6*98jmL}T-ub|!`uaT68`J1FEHB6vyhI~u3dfh1vH+;B-f<-taEeUY zNLIf}ss(h{V!u(Hs?|2Nl~TOo@E-hmtiwcwT{G_jDEdTrmxFTD&dG{=s)Qo8`2oqKy25yR;jbk};tWG}}!u4I;DwYj3m z4Urrt8q&{$LGR!{!Hv+|Wi6&GD7Io%Ci7BUM-QD*u!Y zWL8vts6+MrM~8~Kh~WQGF^JJI3H6(r2Ihq1#bogZidmEr#d&vL%gBR&9L?GTS#k5O z?Tro-(%#K8B>=&0=YDQjZ-oohB=bGLXoD$_lczZTq6Xt==43<0d=Ss~{u;qkpL|G`BHdiJ1?lTtxoq^+o8O3n* z#+5pHG!v?qqo`B4>$VK@XIo*)U|-=11M;TZaa-f|{t=FAX(E!Ecc!(%W@+`eI+C;{ zAIhU%bon_<9*f6cFFWX<31S_G)#LJ@=f_$UQiZJOVPOB@T|Ze6WXK4eYo** zII%1nTd0(D;;2a!f}gXavIgE71%xsfr8|4s&YO0Z);{bF&SMmIoVl~Cg+pq*e`B7q zx%$|l=tP4^>xC(LYtnff%6mR#+{x8tye0(9niYaUsKs@C!zX`$h5Vw!I&(Xys&t6S6eiPeRb_ zFFSLnV~GE;0tOiGFcw1`s^E7MEXVg|?6ztGd*c?y1m(9L^oBjIZ7%{(o{1}wW zSCl0GJ&ld1k-njC7CrCQs9UX8?y}QaHtHW4J?;R*dhQ_FLL92rX7CRuT9;VDZJ2pu*bY9^^$~U-Jjh1%yvH=~NGy|H zOycHfcPQU3X20MC%|>12*rT2-QLrN4d?>VFllt&W$kL8|y5pFhdy^49qE0-UgQ0F@IuK1oI$fm()pb1h`Zn04(uGT0 zBpb}}sA6Bbzlo^cOo`vS$)|Y9D%Q*d)moL=7GhFNh~fPcjFY6cG|7)gkQbhN%0=D0 zrV?;uQhL`f2Udt84&0S7@T+N zy_$M`zA~SEm@tmoy!~-ygbQ4lFYsMKmNiV()OsyLMtfo1^98IV@gq&|LH-cfwecsH z^GVK3>SXA^Y!MvJ-Vl@O_$9plg-L~oR-FGn$KIbQqpyigx!ef&Xs+etdT4;IeT^d{?_Y#Bbs~xZXcWP2f z-E%hzTTp9IPlVYXyw@C*l`P{IY!FXy&0aZf}Si*z39b!@gznkP)igVXx zKaL|- zA?IaUHp%T^+KX%-ba7nn0-(IIQOqfvMc1u%C5Vq*f%sa@JWf!SntI7I(cY$a94N;o zH6Ay(iq*1A6Mto7`5pn@?E*GBf%+SE8zTdnwo(%`9)qtI4|^PNW+`P0hrrlfkiA5RCB`#ytx^JjRfb)Tj=zGM$;! z0j>XQ4UWY`hp`x9Qscjy;7c4S9}uGIZax~%rvC2Z7g4E=XlQAEtzAgpvI$m;k`QWA zBPW_vkC@!Ea50+4HH5yGRX;q)J)dKNdFLrsow)!am7}<55TMFDQ;dQUYc|El4nnwR z?zk?cAyp%Lp0J4Fc2i1^>_Z5w&}@_lR>9>h+5`mI_EI~;3nQd==PV585-%2!Z3tcr z7`ozpN?7Hai2J7>)s_yNdyPWGmh}9!-B;9`)&XYoW6un_8wTxxyy6dc9$qw}+;8ai z_ae??U7EZ1EW5l0?S4Yd#Q={>56`ku{|nQDJ}|7r2hkQ{Qj5Qv)#l;uf{Uz`%vpFE zcloj3zVds<#PYsV$-MI$sD^#z)ZDkQ1$mXID5QW*4@^B;G?*2HTD`A@tdyd0vwA}F!fRdX?n~X>^)xGiDaw8mJbl7D| zkGu8QP2ulHGX>`3f{q;uuclT)y6@)lq!1sioX0IjU(DAsLK>W-WpDhw_pXd>of6lk z%7!s2j3FksV03^%qN}6IyU9sYH5FDx-X0xhR#)T1WYdWQe*QD-$yfIO^V4~e`VGokhY?NHP&rK5@6u%{1?tFSKfh@~YzKCz2i&Y~4D+t-xmKmE z3b)28vToEz=O&x0UvIjUruT&|58_bg5yNvei${VOO+Zt^QiicCk9>D0{H%{0iWT7M zd>8TLLvmmmOrV^EDSnUS4c+btHR4wcyH!$fBd265brll_M$$)cm*XidiAColQyco6 z_p{gaom zTcn5cHrS!i5q=4;f8kKy*KaGQsK}6WC_UGivg(^WADTuL0QVu#2D9FyaFMDW>QG<* zqeHRCx2K>y>GW-BU2R0YsquAbioT?65-Xzap?=l-yldP5+JKcM^H96J<$u5*9Ql+{&lvfODzhm^EY%+7+2x;>x})9|Z&$5oG0 zqU>~c)G}@cFZ;E$wNd=~mg^;h>;5X|lnc4O!7-z|d@%v?rHtUPzq2ir_I@Gt*I1~V6+u-``TUPGkKI&!_BaFR5IqTwl z&Ta0|8_g77LXu!MK-*MawV;{2Z?`Pk%~zqcmMz8MaWqfZ{5j%{^aRg^^<#&swjoho zW0X#~e$y;mJ-jb_UpcesygTiV!Zg7nH^y4?Qv%H9EPPQo^>d8`U6K?z6;X;|oGp;F zYNMgiC;{s)WHe4)KOpFV*U4HJ{PJAM_C0Q?S)2%y7RiFW-&|=Lmg`LM2GUx z(B*lsyS07myuZ4@eZBiiJyMnK`3O~mnN}-<+|P4>E7|WPbyOmW@ zJCXwk>Fa%a_Ekm=5Lltvs5KvU0YluPX!js?xVo5nCluppL+XLMvQMKjH+F+8GfxTY z0H)}aRVFQ*y2LA&x3pU&%e;xHZPkf@lT{jM=aLCIAjFBIX`<_ai}aRi#gx9RQ+=_( zG<%L`7{m6(Kn%ip^s{W#{{|J(3x<{AAliZ*3Z3?Mv-;jBGe+csgdxNH9Wf~md)Ptm znFpwhW>Mo2qvfcB{%e2EMvWb0qw-j-3Gmt*tA_IMo+Dj-az#T7oPLCSH|pJ`d+DNO zM#%TFGq&%>GR3snzLv6xT4H>`-DBQQyG96z(9;qXp%vM#sN^cs$NJa<-1Evs1vzqJ z1)VUpK@V4tO$s}!5gC^(a$I4Rf#^!U-JIRZmy&tz`OjJ+lVKPMGOnkD))M_eoHx&~ zZ$n$9;yxQOrg!@O6Ar4k8X6*t6Av=PcTNq#C85R+m?4A)s#y7o3~{<_fg&=9`XY;&URq|1>>G57Fsp}zJ@evL#OpjT}^ zs@Cth*jlYNgoh*TP={lHrQ*mM||C+;2?= zaF`m%4P7_$rIB>#?&dJh!?dGMZiZxfHtBk9mcyWhoSD?W3W!vPvp2+~cz+46e_>LV z&JXNcn&B;_(e4tdZ$^8eBF42NXvCwj&1o)4(CJA+O=|oStNqo zH33v`*98tq`(I7C*67-bj)orw@Jjf_iYYaAFH7J~W|U8cM0Ts^ptuKxbkmpT`17MX z9h;O_X*aH7D2^B z^tkP4uOr!kew2?I+I_q$+>g$~3=yRNP_hnw3+iAG=x%>pfetsJx95Y_#SdCUVZdF- z7IZiYT>NzI&_?jXi2msPa}9iE)Q~m=5Oi**KA77fCMEj2Nfxt1`1}l}+U9v2SW1X)i_z8cuk=>;xp8hYkv0;P`ir!P6?}w?8x2V z+t;Eni(fr%r}bj7_F}|E^z#fJt@U52yX;#8IM;H0+xw(kOv%~o_O+TFV=C+dTRmxb zUeCuDxMa)36=&I~6G#PjgJGpTh_(=uQv2Pk21&6AX%j6HIKPFNc>JZLBZt#qeA$+N z>ruQx8S_+KC^Q>217%ET>NfIw`d$T@ML=jXy&PD-1gwV~j5C>YFGBbFt zY5BXrZDV#!mh!;W(Dd<)wvSap0KzDFiFD>Uvba~^-{~8??PT#T+uuzxwxkB>9H@(k zX8+isB3WtUV5k@NVH`|MS^d^U_$$1(SUg+hRM08!AhopVo)T9>Zag~zUi8MI83A}K zwU;{jT}B$#1)B*~Eq6t>^pJ2)RHPFJoH-N(S2`%JV29HEC0Hv_O)GAw4K^BSeb|w* z`&iAg6U^%m#CI#7J_5^TWv2X=?UV*Ra?**1nk|eb*rl zdkb+W7R2ykib-V0Wk)X0weDm%zYT?~i^M5M4%M?{H^?(6rxP`H4mEXm#>z%;;qkj$ z&)H0H>{M@U^t?SKTV|?*IE5Ve!wGX{awB__J2bfDn&KpcQ}y>k%scin)5!V~4tt zB3pgSwanWr*tAgRS@}x~%)!q0Yfon7A}%>$!_+@JCCVP(&&}IVjNE3eOG!jlLLXF; zTq=ucVdAH~$StDhzAz31)7fAIkvw{L%|x^;j%ocIh@rQXA!K>OD+T-U==hq z&Z}PB4f3%L0lKCOUxV3oOr4(th93eI@Lqe&h}v}o zU#wfPxJNXH`ShD*b?+xZo}kFA>|=+LOodBLIsf#EruMo1K@^Sc)%}{O^QGd2Qx?(L zbEHJPrv#Xp;-XW2@-qwW#8-7zcNuB#(^8rFU&xjS;v1Jw;z9}st`f;IWq*nLygza0 zfz^m>K1v2w^ae?E9bxS?o+wml?=y!wqW7OmFu;t5u^8e|F29@LTS>~Io}sUAu7;B= z&GvEyQeC^brE2;9VV2sLZ}WHYyPys=d!j>Sx_`>Ne4fsaE0sm~@@<$cIv7zF+KV`E zCM3@h=WkFl0JI|K_FEc47w7CkhsDS=d028RnOxhgT+!6WvNYfl{UESHvr#as5)T}| zm|@9RF@6>BbpL$+4x_hPD5Y-)`YV;UM!qp@}8sE@X*->fRxpR-YO2id49 z;ptczE|jKA+$~5!4uw`O40$BrY!nC}LFUWuOiGIGPTMroYw6Y>;~ji<$HFVT!qR54 zBm-R!U=?+`10!{H1`q*7-kz2vm$P8##k`r&eZ@?_h}mZ1{jo{mgNkhUJ7zq!s&UxA z;gJkwIGBB}-|G|(mXU4==Q6H6CA5JE_gLO=UH+Olo+~w)d1+7atB9Iroo}pL4+xW< z@WT5OMd`!=XC?)Ci*OzaE!d<&ehFC**>bk3uY*Im&&#}Hcw&NCumogZ$cCan4QOwS z%6%CCHmOhS?~{xXl)jo}+ays)E%6qs^E(3lmI~tfI40tMaty&F;ou5#BW0(Yc&p$4IkeP#lpq~dr`XTOw`=gN>Qib@-@dDlNj{^4N z19s3+)ZjJL$qsMAE(&cuOdf%c_R}dsRZA2+8U#&o9UI%>9tXu=T8|$c+5-a1p9d_< z!Q2ipsg&PMGVc^xS>xpP1fFrwy_@fXGumK@7u5G|O#AY3nZior`$0`=;WQ?d01SZk z45^!82U&^)#RpNJUrZfI6CH0J4*JC1h;iSeG6A^8qmMkEM&Y9}F+jh__%x%En#X9b zgDu6pq4(nr456-LlOkCLYz$+T=(-*m=zLRr{b_r8fbn&Vu&tDmSzCF zTHmnp+|Ok;1N`?XVO9EOY%;sSjeJxC*#oHI7^d;SSyGeBu&azQ|%jX{&!LYI(L|ceSmHcj2 zGjFOtslI4Be2dz$N-{$>a3rHJX+D%r`vIzrdo(|Q1IwQ99TzC*tC8iBI{MDyNXWVQkyL8tz z4jgJyQ99W6b1q}}+|01bIrdR(gfr2fY;74H-{wi9dh@;En7H077mIsj5`-OfS2!s% zUa?0V&RH6#cvd=JnIa^O-c{^KMLKf8&u*r>8pE|m!D*2)WdRv4TD@Rg88_j+;3e-G_#)DoVW_q@eJYp5t zuKAuD9DE6|Xa{B|GB-<0j>{GXr}XnlqaM1I%bzqoim)iMgj2CzqWZtT{+YBmi=qag zUdIud=Wnbdc_-)*V%F`WJN13Gui}YRu!jwAtd?uzi9;Rz8vZf`5Ms}=O_e~S$2B#1M13Y&Kz{l{QhSM9N#_D1%lXgm82o%+UoR`Ey;fuvdirKu z%=rU{a`TNqMroB3aKb5@i>6(8N1}VN?dxX7Qz34@9#^dRGsi?(y(?T;KGDFAa`x;=9;Zt{slBQBpyRXH2+aU;`+w$o;009VbTrG%?*6v1)&!oVnh(h z*i#T#BedthL7+A8!@=U^ZhI}TT+e}Xf%cjY?I0oq`GIXeSr)WOYp>_<=k%~Z;70IC z1^4@Y?7<6H{HVZz4vld;)V^PYjuqUmK^=-2HmgG%>cgKVIRlBnABmmnEGlKDuLR%6 zySeaP<7b~^-(`^6(yOc)DTX@Km*Y9q+g&5;&B{W=LUS3aTbb{L-PEsKU|4bQxEbpr z5IVxs1_;y?Eb^JF2jP-}`io}nKFwivQhm`M*%Y|zU@aWVk$m7#ygReJaOjm6*wa72 zm$sizG0xWxz|9~lBK35}>L%_!?kD$ONnoZHTqZgFIkZ7*nWU;)>@IfcSUS9sO~K3W zo|m<)tpVtgn=Q_0!NrO6AY4QQ{9 zaW{S%@;+QG20!lEt2p=SOxtBr{q)(C2gYly@W8D6J@Qur)Q?z2mN zS7ZZjQI<1wBL13Qqn3GuGFWLj;GV79zVG;W+?4?4=s4;ln^a9stJ-Uj z3#sX^`DjvbL{BnA$ZNk`6|5~gQk0GyaOf?TYM_8N+j*LQIMgIl}e9jhE&w>~xF?$hZYg3pya2Z$kSf6*@B-8)xU`F~>pCUoW=G zNgv($yfAp6HMwM+NhiPSxRx&LSO%B$k@ZTR*p|n)x9!wb`CR!UTl2GkwTAa+W7i#v?w**`(Z45Pw%GP&Z-`0l{1#sS z!lZHqBwfbJwG;HPqPsrcl4;H+HC|I=ec3X6EAQf+L9!{RNqzlKCY1y@-m+_7YC(D( z_@b8tEo;$Hp;o&1ng@AVAfAGVKW9EQaK;w-%8cK|xa(_g(CV#BxM+n!)W~${GKMne z>B7=KV;-2);ON54*6P%*bY;5tHDR3{yN8t04rMb;SDW zdO{sP%lm6QMt8Vk-C9x&HK}jMF)0AxySKx zMlgkYrT~EzdT*2!D0IYqwX^b3EAeUat7Fv3^GI@@WlDw5aOn{`Tdpb|6V~Yaj3W;N zzL5|}I&n_RQ);hjeqA}Oc*kHOV(#pmm$?gYL+`!Fk_TaVUt_!6B6F{Z(=?e$3g^Rj zSW=r8OfU9loMfZ^hR$D_z_4<_qAl2@&R+b}tnP-~J74v+6SdR1w*=S58_~kM_)Oj{ zi&~vT>-8o1u3OM-)CM#gb)Jm}?`2wEhiSHAGE$+!wr;Br>!EDa%K5};{?PGd0XBX?j#Y1N2-v&fkCE4gMydS)5ZHoeI_p>_Ck{81=c+k2q=u zaiKR(t85@}0}t2QNW3J&>_1%|m@Jtk6XbQ}Td{RNs~_BJ4DY5laNL#pG#9#-Ka?d* zZe}|M67%l3btYAU6co!Sv!x<-HD#rq9H~f04mfcr$VXK;p}4xapQZXOSX)?{-kr4y zQ|J1$n+uz^GKuqMxDu zaI0^HTb{_HtMb@n5v8*hBgYJd!xDmcMlrhHejndCowYC%ut&t_$VGp6ife92zflo? z70|X@(2!6-0s6n8t4WN)*IwBeI#YQ;=lqVn*o6Kp^M@0M`X%oDO%==**WSDhcBr!~ zzlGPoaH!9|B&DL6)>oc(%d~P%uG2s4jIPF3O5`dkJ*%0Yd&d&$P@DhJp|l^BmYk)- zKwf7V2`w$144A~8xj(t-oPk;BxIFVFp9nxv3aY!P()46{wa&P=v{7bmL33a#rz1mf zK#xjGN0j%#p|Z-kwqgx1blRFt1k?*DJ*2BafxTt2FESJ#(aL_l`T3YA-)mwKf48f| z;9oIDnA=W&{>DWvW*M{jmcmk`NcBFiH$YSDmn+Zn4WcMDgLCenz1BwL37Vn^=IXh^ z>Z|i5`y&tVRwb{Gug}kiE^|FBdW~(lArtZLE2~eUYnb2M^XP2?ehHI@73aWjez6!N z*w;Y`f~kNFfs`N{)OFmTMMy#jQUV*;kJCW<-5^arHq<>q68zBwDS-~$2vR#Z0ufR> zya^tz9Fz~n@3ri|g8lu$KN5PlAQ)^Qvv2@q4wcm47REjEOr9?J*5;yRLz1iBTj3l58Bf&sk4 z1|{Ig_kL^U6K&hgCx{QL)#$#*O~Q{wMUV?=pv=witusD9aHz}tw@1u;jjDsQRZ+x7 zKW|3eRX%5N1ipx%%7&CVqy0aVB#x$sy;~0fb9O?k;e=L9j=H83N5Qh@^ z(*&O?)aU9{P(`o-uh|$t3B2WLvuAE0@$DzeZzb~ue^njSp|+23s3f3|7WLCTBfV(lz?3aGfv+%$J^?&y_Y!aB$LQ& z^NOWPA+SQTQ5+54&y||*J*PooNm(~;?=4%fd>y5qYW)uLtlhaCRfc22iUWE{?3bRz z`oZ;*^^BKp;jJQk?T5j!S*MU6X>a4=Gy_s70$BtNwh_ZDK4OJ~sDdDpbE)I!zPl)J zwfG3d6VIPyqyCZ6gAOpPJg{gBaj2Vrn$_9Cz(hK) zP?H)Ly~|FPV5UW;Q*Wr!lOhqB;-7t5xm>Jb!@H-qx!}0jC_V6+8DceqTxel*mepLY zb5>+2`MaB=qUS7XF*@XBI*t^jBM1EQ7UAGZ{vRrUq2+}_3pOd`-$K^27I{XCqkxip zQ6-1Ds&wJn?Qa`sczP1IY2(@##ZuD1CS@JMKadba&7Ez(p~>~&yRQau@#QIPyiGpz z^e+jRExx_k8)8yAzlGPo zFsWSi_C^qnZ+?Bu#R08PCXJV~!{_UK-f6^3 zf>^J!9+=cpf52B~q~{WgPaH2=t@GrF2Kw+`xr!m`brrw!DLlz>|KOAl%x~PXHpL$4 z1HJ3=F7&!Dbjseobk_h~lnYaRx~2f29I?xooF`r#vB|9waGQbm>-Tk0%n4cBCLCC|N zgB&hHn*VOwKX^}P{*wCvA0zSC<3NxmEZ8yoA_P7Y*uB8FPPsukAsbZHVEHEyv;l5! z2Tn2l-4lV^1i?T1Cj_71=TWfN3Pzb9Hn&4e%Jff@Y?PiHj~9>3K8_YMre)z|N`v8Y zMYF_drSRi-r8-r#XsAi;9>=5rfF}v=y)}t!lQki45q|tDgd5({2;=OoG_FBoZZ7Os z$pLZQMcwS6L4ho%R*O`>Ge+AHx7aZ6^f415=s$aEjZp*vIBNre4~P@*d^9|G?o~e1 zqb(Ler;>mOcn(ga3#b-&-YI0T5q&L`=Jryb4#D#Ma zGWc#?(f~|ckp}7fWw@$jrFLIlA57A)SjVF%QPNb92QZUf}*CQBUfxTD^ zF)7#5%-~J|_@-l`Wx403C$9#+22o+| zqJ9t@!S}WlA2Xm-6X>02IY~$TFHT{7U|I!X;TED&;CGTo9pbw`0OiOx{ou28O@6Si z>b$HIL(ozpEL$TU-NrFQCps|o#=)3fjQFw4R1Q_=;zF2YQ;Y=o3nMWz-aB6L-|9-JkNDzIyhgd&01#?5P~P-TI@SJ! z>Z;YVV5c{+b2!cEG_vZ#=vSVznPMDR)Ue**7yK8d9i7M%BiBRkteP$i;Ip#L?w01e z7LnhfFgqr%$b&UCJyR|>i9HN`d+;8zx}oFnnlO$kmUcwhYQ_ZW9`q%?m%h^HD7mC=M8f;pJ{0$Cx_X`?mLkI)5-_bD9%>Qz<^)PZ z1Ln^zes49hClp{_Rk%=a-#Vb%&B`wxVo@x}5!st27;r%dsLNVZFFPEhP%uK0g1{El z1ev*4w&XO*ydNdbY{}MwHtbp5*OMIU{X1ykI2a4f60VUSlP!%M)Shdvb44jIYtRw0 z%(#E0@5&`}4W0rxgEa~SRtHj8(+uf4^F=6eE@cvEckAj`uOp2*GZ<~3 zSk!*p`sY2EE#bYH8)8urzlGPouqaZT#t4o~X<-MWvNXVLzLut(g2L~f04F)C_e;Uy zmm2F{>mKg#2>(%|*4vH9P8SGwaDT;gUUXsK#vfBo81)yZ6P*&6`$&^71~}yR`NCCx zmo*-_u9PqF)lph=dzGtEjL#j|5t2!goq)v2O31waP}QJY?yh!SHyTJ&Bd{Dh>c+cy zEc^Ldc1k20VDZz+FT8--n}btS;R&AOc&midW8nA`;tdPys{Y;-pz;YVOsiuoxM|(40 zWA=F^VY+>QI}QE%T|ww|hB}HC?2^N511wMA|G*Lg^$_p_)TZ{N1pe@153r+tdfeA3 zL1-)Zgl-2mb}(-5R0s9H7H}a=Zim`oCM9^N1yTe->sWi91+Bmy+zyq06rs<%{{kU# z@)~SjhiFvdpGLX0SkLc_CCc|0WMfL}hegjj&^*L%R1%E@o16(QXI+pku42zVPnOhxr8K!IIZp zl}54S-*Sk9#eHy*-tuPp!yR~3BNEpWC&4@DoD$7W;ah%7Sfz2N%E>rN2n%(iLoQ4l zcjZ(ram}PyTQ;SX>Bu41rO_9hT6X0u63_T3E9c~He`*&16#aA-hHu^I4KPC?zEOFn z!fxTJTGWTu^I^-jwjS8Kt0x}ygWG>9fe9Abi^dR-%J|a=2UOmam#!3bo3GEbCcJK? zX65m%WUIKRcld?(v$okyPnbs`9qCbe64)CUaw;hF>4{IqpEf)0c&mJh8SahjknGr| z-+?y(05^qU1`--1A<26ct zK-NfBzH~|(d#BeM{y|ZG1%HQ63f0|X#@l|O37Y9=fgI$Xg-WabHw6;;(R1IZ+snMY zb2D8n$^8;Qi~k}8zj83q#Qt7uAtNQamvIk8H&4S5b`(k0mh)@#la$myG5Vt&Osgm? z-a%tkqD0 zhA+Q6JTlCwa0qL?xvc2JzGR->VCl-PHfM=Jg65=jb4s!b;U%xU7+9~xQu(ml_X%Y9 zWSOT+>`p;p`ig4|ptQ7B(e>EtT{xlN^UKq^o>qdY^hD{mM;X6Rn`RbLZywlG;1+Kd zE8@FrBpuqbb7-`?ZEEgQn`&@!@J1OG9A`omj!A9VfV^rQ%T*S5VV5kPq;)p5PfgJ^ zy4X?uIs>M>s;a0*%F>YoPHYPDE)LY#G+Z3jL+#5R#rrU%YRmxV$IA3K+TnS>mCEup?4rK(H_}4;giWND+ zSeMM_N!CWiYyECE!|k`)%(@rL_H8PA(Pb*{^lHhi8gy@_0%4;^IZQMtqx55jxcnI{ z%6Bl2$<~^Ds9-w>N>_$|Etg-xYD)bZW0WNt1> zDcX8hBJ^rCkgi2n(QV$X#&O=o6YVz4rcV7wo62*R!>!)*-vzaIO(mcg>~dUOtKrK< zz0_ct5Z6_k83ia`^xE8#+(eOYaMhd0LGmHZx^9(Oc_;Qoxx*8lO9+$)Hl=-++Q>4l zy`qQhyNMISdn~R&T%@H*SD9Lt?7%46SI1q~H17(+yQkhv48wx2mpoh2#@&HZ9-gX- zIfJltoZ1e{&wv{)LCM*Ymv5~rs)cg!oLcLhXl3=C@GUW?hdC^h6%+xvOUBcQw&EPd z{H&!Ecw97WR7x{& zDd;D$5(Gio|6xM~vn&Cd-61yh?oXrKFKgJ?$lc()O>LDY`N40Q@cy*c@L1gyqHJB~ z=T8#dVK#+w9Ge0Fyo__WFRE^CTWM~@ln!oChZGqqk!Z#b39}iBR%p$c15zry-xaB5 zR>={cOcWwuXfqB8%5Sn>TD$O(etl><_{D)uakngtw)l7_>wjoo!^vx;x0=7$vh_Kk zi}AgHCrHfO_?Xd{PAp6;AybU+vKX7}f8BDO`UNnZ-RR5nwSilOSt%^cy zIWHn;Y!*}DfuhdJ2RtiXo7xB1qIlT~YA~BZJ;J5{U}I^p29rqVRlPxW_#kPeOlU~J zTbWzC-0X~>Igpw3D*$vZB!TD8g$4yuN?h_zmr0(PV7mCN?u-F4VjE_8h*=wiR%ll0 zB0LlEb2dpfw*1&#*=B$2Gq~<#&z4sL`N&?LbI*Tw+$H-&C_>m;YLkZTUcNWaE+~zCR8O^@fn}vm zL+_Fzy)9;K`amd`KLlu)7H=MYs2J;gC@VGJB}ixL5QTkH$_vy}DR8O^J&9rgby&*( zdnNKq2}ftZ@U7Ge1zpev{tFdB#RX(Vq6Y{>6`3Wo(SjQp6Jlo2J5ZsY?YntdRe;0a z>dF8@&jgYT$;wN7$?NCNnO;ILPw0B`#Y_B{(Us+^T*E*?N&Z(83)ZjS(E{Bs?x-XHwK<^2D?8O-YqD6e3TTKFwm{e#!S2TQzEGMZ4I*IZX= z*}0oKtf=PH%2IlL#vsD|G1#LlM83f(2)q}ba&a1nSi&*EH13lKLcO1n9m;K0I?O%| z@uC;|#p$J+oyuJ z)-OeC+xyO8H!v|#5XF2_7%VN*=UEhsIPs{Xe>K2tN$t(t5RY2_Exi7PM}6gX{bo{P z$ukoq?r{MRtFtlsLTe|TAfH<0vnPYBr|@AOh4vpks>s5lDxLsyD{ZJM@^Rv`w`L4; zDAtknLB0$QD5oMNq5!&QUOeB+`kNNMhwkcFq7*h86uyl-qu7Z@;Hk2yl=E zC-y7|EItR;^<(&6C%EBIC-@-Pihi(hf>2F^od`1O$1$+}UmxM&K!=+k>rl8IZrFDy za2u@shm#5ZJnnD}%(66WUI%*=I>Mhu`DsvjOw16TpUlN4TO zVkA|e>oAWxb3Bil&=7d_AVq0zaCO+Mo_M9)MguoH$AqFG*wS!dr2Ro5aDI1Il~u*K zTZK>wtG@p87YVVTEc-r|?)af9t&8t7^$t8LQ@<_rZb&K;wV#>Qsc3UMfvD&R&XyOs zeXViGr)+GGd!JO}^X?jNP9ZHbhF2EzktEcTcNX!r*9e&wwc9cs1A7txF8?IXaNL@r zN2GC7LV8YbZ>5Muv|rht^n0Q+S|%#*bmCEmS^fJmnBbdx(HQJe=x6^l!YbqNxjdO4 zYjg5OFpbQZjIRU}&0TAm&Zi8#bY&>W_7=>e&K}`WNr2EaZRDuJH5w(w9toVgQ3KPy z_tV;@l9$GVGrvBSS=RwvXRR&iP-1-_k#83fKDI;8B5*cZSUGq{kUJmEB}$nw;2CLFJ^r9&8MG{ zqI=Umt_(^qv!3E9ULj z{*skKhh?Q=C+N*QQIu-93fmr;gqwr68UaL{n-9la(7}nmb#s5h$eL1 zJ~reC8ga7AzDqG)*V6THHuIxA&k>yN+qWrFZ#Qd-sn+RLT0z?;(;Fa^?EKEGw5A-Y z$O-=(v5>%Hveo(4Trq?&3vs|@+Q7jJMd;=7H{IId2>Dq2_fphfo2vjE?k^-%i9YIQ z-`|(PY{~A;-(Z_Ur~56u{)J6B;o_G| zaFy^h+J`m`He-3)lx~*D3}NPB6DJPUjbEdN*%Zcqw5i*fE~L3;RlL_}bKqZg&dyjE zEmy3I6a<9($cuH0N{Ioa%4FN$D4v<1@u1S()frz7ds43#mt17x{#Ll1)uvSCz^0t$ z)CKQ;lCQ4KnSV-_VSBUO!H7E@HEi+Bo1zVkySa|XWcic)#S*UeVz?xBKBwtn#0G)s z7&|vdlE%mz+_WhlSeAjh{^H6NyIXob?s3NbD19>(*$iKv_sQVegk!ke!eb}^GU|jZ z##rC<dC}*ITG6<yBz!)0@Q@{hhCHS&gU| zl3+H4c|4mMwtq!nb;WnnPwwM8ltmKa0*W(NG;d)Vt>h(qeIe+H0-V;V(s}Dz_o`CI zF^d5Wjy=JVX#1X>O*1z^ltUNh3gLlGVV5Ur%fGYIR&&9LA2+u;D_A8l#Fj>T zMnvxQbH^mOOVdXhPQ`hPaEXJbv^a!K=@V1q%LTs`-^*U-5*&DGfh;GBT$!LmvI}vd zwlh+N0W4zI6zQabSRX`nHwkH9nmMtleSrUY4<=ZCFB(H^ivLd|JZ-mf2Y=PD3Mlk? zEKL$d!?~t$vDY&Z7gORoH3FB$3e2XkjU+#?|e{Z9#ng(%&YL+5q;J!g(d>!zC3BBDZmp+Gc`oYy5O5fY+G?@rzO zLtIKP^r_!BKLKQ4wNE8adv!_%)b9qX$swNV(@zZwEud#qS#Yhr~vaZxZMgHdH zcdSnUmk;hv0<%{}Kok=hZw2X-x=eT88RUx_7qwhk`rsb*9(dIA-r#@^@7Gk)Q^RX0 zU(eDyI@}^2_>8%#Qg^btv2o?rzR~hF+~DaAf_NXMo~^uV|OLyW5fJa!WZLu4VTZGVp5n zIHPGf4J6;2iF|tEQAbk;W=m;r=7xBb`fuU&FFfjTwrWoiWAC-BX0I`?r`>EMaON9b zVfj-@1q-c<#Iz|ekHYy+9+d?6NE>}Q^~&5AED(E5)vl047 zz$k>)$EkR@aUm>~?*7sm_1V`~2{^vz_LHF6c2#RXC^_(`l9w)1-)e(hNR4oPln5C4 zo}|C4z7!F}pfpb9aeI6I@iAH6z%u2%)%rl$pNk%-`HKAYqid^BaDVmNo?#vgi*=$T zK)vVm)%Of?vm%RUJp-H(2U<3LdQhdgI7HPZ+Mlv=lmRFJ{NS5~`i`k*S5QBYw%?H@ zx)o<@2w%iT_)M68DNx`q9`)0;|LN`{h~o%Cy1}CKPZISbuk=^Zf*ynA1~~&90@Py; zp9KWgAy^WL1u_6!{ml*hfj&3LOM{&RDpv>Rcl&X!{cdmzY$fi>Hlez z5mMRX`6mShMpt-q;#ane*q-NdewIoQlCJwIia(PS4fCjT$ML8nz;lC$%qB#NrptTt z@l^3As!j*eL|XnkD~2q$KgPxzGXt^@KqAEm*_@i%cd9--%c$-O_Mx<~Jl749(!CZr0$v=7hw*iOoe z_J)U(q^EB(VQA@^npK(TCqugU`v4-fvLXY~Pyi1?W>cz&KA)92-R@{NCMV7Lfw#Qz zyzfpt>Ib|3R00#Mycdlj9%b>T5!P`O`d+@8DgUrvL)IIIXC1Yg@Rj7qkbtaa#(OEk zHtP>)UEIqzKm_v_kKddU&Zy57R?esJYEtZ^_-*!0$dAr$kv; zCZAF`#RmZox?|GH{|)1#_6_b&IMf$bD=ZLswKI~~9MY&?={YY)koQTR1Ds;=DR$zg zD(NJ2+?<33sVTZLq{HK=#)lY9)Tqf{#-3!Q{)y2a?O<9}VDT2>Q4W6^)+(RpW=_wP zKXF`e#CxbB_Sj}k(LHt17D>;7TM*|mRnK3tQh2beRMA6QUFl)z2!y%k5>$8c#XFo{ zWzoliMq)$^<+4F2P8Z!sH$7}szWZ!meeQH1P;QJ-~uDsv$Vy3pn1lBo*z5X@k(O?^v! zP*vkB5&C&cX_m2y%l!W7j{5j4Q&;j=(qn2;h6WIux`G@LxXM(*gG;qS$5Ku%ABkAL z&gF4--=?%O$fCDQc${M;apsKQc!;6uj!CWt(tPk2ec4@!_IUM}Y~jb#B+FyZv)-sm zm5a^kZ?%8_-DIx+*+jT4N(AbAmww=uKgWX)pp??W$T&5*wo&F`k`F5_lv^QK7D1wY zz7l>XHg)tb1(+?hz4;qrQ^CK5*T1l-i!TL>dxK-zO61GL@)5s};-P9)Ab%o?RV^KD z#7)PugxM7Sf3hh6&`UwEtSic{Q+GK}p_lWvhT!?#sz*kThvSAg>rxv8-T{dAjL)XB z=%Q)VB|R3GKGSAuex%_Qwirb6lTYv>(glFUn z%_)QjvKl3$R0QKj68yQ?-0blr2;O)othxXkey+11!Np?iJile1#7QK#U#|TRJ%V;XxTBQ4I)lt$fMrc)R_QgG$ zv0d`SrVc>;#{!t(JA2U>VpA!98sUjV8^e-GjLAuo(msWd#=IQO)oXXw-YZeONZ6Qi zHw}Z?6v2@;g`b=k6uq-}vlR73*Lj|f29>xQ?;0SqLbFnm{^&AZ!7bmJKcDyHL8_vI8_B3yFvj2z zinxDuY1X;)n6z@!c1R*EX`+T)pP$ZB_Lu*fCjD}ix5pKMT0|Ay$-^7i2tDub#)!*s zXHz9dHa$}11vZ^}B*Ubmr5$KjyLG|oBrElgkREh^Y1M$mTZm0%|7lojmkpWq7DU@D z2p23=K4^vzoka^V+_>f;gz0imY(?(@EGtC_%}R}Yl)D`mH4?F@ZHYjbsE-Z*aGv2H zE0qKwU`!Vd>z! zuR=a1uSWb;Y#5vTCz}iKjJ~HL0u+;j@yhe6S<)t=`hv5*9;y{itq4C^Vz0pnMO_uUDb3G7nlt9(q z_b7F%F)CJk-do>Zt75>(vO3`?yFHv^i)9CyD^saVoLd9 zXRFhOi-MnqgU-9)Vo%nt6%oK=nK-2HI;joL0_uw=nWs_i2K%PoiRsvmFt$U<06CAJ zc+}CqBw)6*_GWH~M^*h6UjM?Q@?Cuu*#jiC^}9mva=t3QH)2n)GG(XSn;t;C&}L4l z4D+Z9|Iwq+zwJJM5PVnjR&D<1B@^~4t~&1Q*LB=wL6&C)YOlhN1L)3t@n!aBm_Q~h zy0JGDt2@8c%n(#5r=e=%_t49TsvUUL7h8;-a;8sP_Ur$0A-cCfu#xM_O<76t8Lc+`K$c*h}-O{TQcgr00Jh<$7AyZuU0zG zmfkBdbyirI#iW=Se_Xur2JTXaKPq4oU<`*oYhq7cQ5Qd@vvk^#95Uf7?AB;O_6$E!2RNTN7*alUjy)tZ#bHTkD zWCszN{Skj7H_(v>CxzC2df0yvhZ=u9i{PQYLoX203W7rg|F_o4RL!^g zO2UChMS2b~V}L%tthtZHoorYa=^J3Q7&N&f*e=9lbhq&;-!Tc!PK%V&R83vB#vQvZ zFo>RuDae_;fQD1~yy8s>SyGTGkQq&|Y;DbOwL!EGTjiXS>rU7D1M1oKU5&-i;o>i$ zw@y6jCyf8L0w!2zFB(HUs{2nP%-rqEGxyfZSMb0{}M@|ob!dNWKtwALSycL zvr_N?zGdj>$DKaa!Z%c^@++$0A5=bdo0rU$RzI4=BXXa+2v9wepRQkI!@i=#PwPP) zWki0;M~}(%(s@c2-galY;PL~TDv2MWt}KvOLlECt+i{EDzNxj6Tz@@w;4=6-uJb-k z+&(6?FN~;Un3$%KL`l=4(L}jtr;^la)O)K3a|sQxqP)*nA1O;m4mfz1@Y99-KUD!! zdlyPA*ruj_i`iCO9=e+Qcq$a%cGuEZ?r=pX1_o22Pgt`ia6J>2&A$$|DR-;!(;UVK z0YN6Eqp8@lTm*#`&e=v-*Kb;}x+rE&L_=(f6FK559y48UCSTS1I^{}6ht7w7u_@Ah zn=0=T5TEePXbe2_N>-YG7w7A8^KEqQ&lj@bPWkl?UH@`SwhR;le9|xX&)@%4GVidc zOZBWGMtW6WQkuCwAu&_7p#iutM3b(FOsV*AEm>EBr0psl!?@qPtJT#dhvLrr_xLeR zZ0hJ=6EItPd-FHMrdECnuYX}v$q_yGgq-t6oe`cQT@T|uBYA7;k>?q;`|{qoT6U>7 z<6$;M@}F!f2`E7I&I;lnXSA2_6j2V0qUPWcnNQEYVCZ7mjI6bej=ujsd$5&)OBiicb3;fT-p zTdGjd!nfWU8ZBS1G$=7J#Av?$rKlXdXqIv3r`PLLg)K9c?}%jrr5&s6h$2i?x3N^2 zKz(?skT?n2ccFc|fw>M$SPt6Upj1Gs8K8Yaz*TsNUhSL7emi831wQfqnGd)BZQD-+ zz|wZGfeuRG!rwg&xLNS<7)TkqjQYXw!{!D1=j{E{1fhE{%lfd{9b!}4e;VZ!#qq>g z>gu~JWN`#Bq7mC9{p%rP&fU~uSfH({K1vjrO_3hYrfM~4DR7MLzFp1mbd`FUVX<;u zOkr5gfv;(^Q=*IOSrLF99^N<&lBuXzzwYs3ID2SAl?`5%kLJeh!2D&Mi>ej}HuZwe zYVm9JPN%Uh7jeQQ<;_^H={l9oP6k95f9%=FcejoijmdgiX;~M#_y!Q89i1OHIn>(K zk#uHLvf^oWmC^K(%qRC5$dHE?_*dsbAs# zYaL9m!Co{5+Z4vBKaH?`RD_9d*z7wUUOS(m(`#stlJ3zCr#AC)u&iO!*4wneYzlOQ zO(g-(N-U8PW<{6oDOecX@GW3q`QE6P!r+~LTJwq$?UorfKpd)Cf%Q4@9cK=0s`0~j zd1i8b!;FrLpvip3SJmz300^zntQ4!nRSH@ZLpvkd5)VC;D07N*oArB~6d+XDf|(SZ zY>s2nisN6?UBff=fL9Eo%VT)w*@W)c{3WLe_6AV-9^L9-6+o zWwfK*4(Wk?v1|glQYu7I`bcef)o>Bs>m9tF7vzzE8#n>)sZ-=ftS zh!g6Mr@@fS#E3V!6?(I5KsSR40iFI6_eVx_?sJ#H9(9l6f`&Xg2^GoGnj5<7id-%4 zCkbyAs)HP(7L4~m@ z+Pmzl3Bng{$3IFijLG-Rm3|eCk2G@5?U-ymj~`A^r5!I-TY4JirgWCR{fax!!(PUK zXvx@)R&pO6Aifvx0tJl*CxLS6I+ZzbY46RK_ROlEh8Aa&eV>D}icUQ0*U0zRI+!iv zy_p;AQ5Y1zh1b9EsO`<9^D65D#xA0C-^4Sm+Ifg1xyj7RFAtD?t7)T-Z-aRh`G52% z_9+RHPfRu*W+YOL{)-Q}O&Td2t#gZ0^^@Bo%bt$!05)ENOh#*7#mK zw`xcDZG;M(epM@vNpav&nDIWZ=@U?zg>XSvo#6Zo@TUTyFq;Sq@}%?B!@aHwuD0|&iA4Sj}%Cpbo+6A z1%DKOF8yjSZa;T}4p$GYcMcEs7MQvm9snu3{gjtF$UlK!4tPTqgzlh2V5J|cL>!#% z(9=N19D0Qyh{1t>;13&?Ah-#9>r?UIx9!d?yG}k-;F~_sMD&7U@v*~ z^OO80sqm3A(rExZyZh;9;$;^URS>Sd#}A;NJ=H|}QX8p5q*PAJqF{UmLNN6EdEdV7 z@pj+3$Zyl+exdcFz`b`8*2L_V%TxFI@vK=V&c`%OSWBD{V6C2`(P; z1D-D0bj($*3c;QicHi^BD_QMjrLyqIP08KZs@Tj`>t~F6S)NBx$Lb_2^}k7l^nz(MgT-5jM+yIFSPSlUBrxVVYqkfGq47xFRkwy{am6sF@H__lzNPR^S8SzSO8j7@_ic>gur)~ka7xX3=BL8XBRQ` z;i=hn0RFL=F&+rD(9igNt}S3Cxc%)O7Hcn;5CV;#MI~jHC5A@elgXV=iBGnNk4f!n z`l^=U&Fo=MGQY4eVqG?VzqE`UxkqC>^fZ@GzqX1#QkIS!aAH#sYR#e4f^ACbx0r2> zesHBD_}wzgyef@udI9@uy7APACoV&`vQ2q&--@0A+tdo^KIm>xYuyrIxCaSYyrqTh zF7N#<-%Nem*X^Gs1h^nJbrm^+5b44PD<2uWGC`r58_FbkRo<~#`!=<_eil(3RZBs2 z*3<8jwz}G@mJWI3p@s~{gji{r*dX;|vL*6$yzx7`T=9ir8@l@pnP2g#a%WO7{JLGo za63kX#6^L54Ux5xk@J^wIGk2+N@kzb*J+mNp z`YpWvg-r=fZBFvA`k=p3FrP8UE)M_L)c;MI`So4P)vpcDX1a7>HbwQHYzhF-)yM2O z*|n84glw~xEM6NF&xG`XaDOqN|c z9t(O!4dC-#axtU)dLuNOzDh`0?qBb;I0e!xs*mTCT zA&D8YCmU3ar>p6Wfgk~7cZp8j0Sz-VyP*xz&N+CGmGUpspM>*#(%5{*ss0it!KwjP z8@Hbj5d5hIslXqW7qGXSf{g${4?dg)g0;g&gTUQCZ~I;YdqQycz7qZD`1yc6J#zb{ z74AT>z#X7NozT3~X*WpA-@Ga}a0hsOc6WFS*z69mDXl+^@=XV2+v){o0yZi~wO-ZQ z+af8-t$dc285wWYeI8=jrNC^8`ZzWP0H~XJ{b;A)1n1K3d78I;c=9+*#J%>M%JLji zQ(&EKn>!#)kC0Q-B<>dioUIrTy}WAKqEW*1DVD{^dFZSq>*db}Hg$uF|8^7W=4ted zGQ-fO58HH|L#q0(xfOL=#UEVpbl~gJFP(1EPI-xn!sNtv zDn1Yg|1E&s+R{}l6{z9)X%kkMi#7YNelHwl}x9rA-$hE2BbWY6L^6XQ#xcvrh_;->UD>x7E9YU zM}+-t5oK})y7);}>VK08=>^kj1&g;3o4Ws}VcpboPf*Cpkci?$e!L_k#3!?yJ?MYl z9lIb3mAZOey%Ls{qJ?IqGUh*<}_4}Yggpq~7c94}y0(4AzquqVWmU}E8 zQ*CA9MSpk}oD-q$ha~o>$4!nKc?dueiD+HppiAc~j)_2sDt2^BpVQ)8n`em7iYOWJ zza)O(QTQCq!Za5&9&WtCra5xeg! zUA<0c>kVhN+oBYeH7Jj`Agsa%_Ne|l+c^EWGn<{+bht`2LUo3`<}QNiwMuaf1no^9 z2A@DYiW@nC{spb#sb{KWg(0Nfm^_&HAKsZ9d_QlcPJ_T;Z~onYod*1AYJ_W-c*N_^ zWy(Ij+~VGY@xJD`tL*2z&QM7w@Lr97OLni!R5q2)!F)H|-l8C;`{UQqOciHoCt183dC`&x)aHHCpX(`n)`kD~ie9+d=mHF^m;r?M*7a_>kbU}cDP zx2wGZy}^V}S}$5i*g|jw9#l=ET}OzUQJfj!LBC2xq=S@J{c3y)m1}lkt?9d{DI`up zJ&HZ{G~w1mZ)tbw9(HwQ?xez|#HI3hg}8|TtVt%Pz~incHJ+wVijIk!@QK&haAu$| zk+p@T-JC$@k=Tx#T^y-E8Q_^3P-D6MewnR%(tJ6^`9+PjmNCC_rsa6Vc;6O24L=Ya zrRu2OOmJJBMv(li$K>LxynF40D(X~lM0nAbyZLQkk8=BQxqsCcuzR3l!S4+K?MVz+ zvko@FgVJ8%=QDu2_g5=FJaFHZ4!400S0H61_g`E7rVf6(zdPB%NRj;#&fW+9Aax{2 zUJ3;55d^tCyuA}>Z*H_IlUjvg(=*x?xY2p1BN4>5_5NPv4Nu^_dUEJ(nKPHu z==I%Yf!v11FQ29v=i&{7k_C1I3UGg{IT6}`9jnpKaqkPKI6L`<5A#s=O?pCZCbU!P z--fmBN`@cvohh0-+l^7UMHb$RJdq{z_pUlGa}`g_Ug~ApVlj$ZeiH{sso4z6Yhm5E zwiX~}PjTk)#WOru0=%mNp~&9uWPL9$pLi4$)c^SaCfIf_8bdrP{!b(P&Sy5_1G{tP zWu~i0IX%11@4j1=P?Vg{_=KJda+iIX0P`q@BRmQKWRqHrKQc+eceieL<||>Isyrti zAo>Vv=-KBak>dGt5de=|oP32Tl5A>`$Qt5#u@>SYhOIH4D8>}yT^VQLM~jen3%yq= z|I(H_X7QI+wZM>_H@NUKpJ|jQ*Cvv-28Jwch?Z-PduLzp1G~42OmBP<-dwvlBw`zU z{gzq0XgyVb!aaAb~ zMu==7du3#0B`bUHO&q%<*`w@{nUK9@M0O-IzdKN$_4Uc8zkUzr^ZDHKUgz9%Kj-Q7 zzR&wQ_gpvPRhAjaPw4c^ZexN`HHBwcss9Noq!UD|Jv82eJu35e!&-q)CFMm(e>LQd zsFtq6j7vLSu^Vr1h;H7XbkiH|Xz3-rS|M4f z_)&v!VnIst=}hnP9m}S>Os@ma@wF$?+TSy+=L=`u1t>B<@wGAI%?PSWNw&Sd;>94~ zbzPVvxvk0C7x~fm3!rbh9A>3nP0b#>YJTTAkgfHkzl5@IGHCnJ@IjFn?84=QItte6 zQ^wfyu3xyHp*uZ~{;qI){lop(8BJd4O0$b-4Q%82=pJ>WCnlXv9PpP1#!g#(1 zv-&zz5|3%;dS+F+&NVTU!&de*Dw6vn7=k|S930?9h`iiv;y>2;^2yc(qC6M#nu9#F znd+mg6r=6K>3~*)X2Uru*lxV@>aB}ffrHGi^%T2z0%fs-ubh&tdpWQeGzf*X<&H9& z--2!%D2e*gv2h}k1aHKod1DTb0b$j&t1$UBw+hzx;J4AmD@qlV6z_1irfeqEj|Sr8 zv7On}$$tqTwjLeM-(Z`1{Y!ZL3!9S0w9{ZTfn9C#d6Un3QM*=G9Nt%exrh8S=Q-D` zsSG`+O)>o^n*spb3w}}ERx_5ufqd*wCAd*n_n&;Aa1F&xu2X-C6xO!_5Y#>s>HQ$j zH}w#C^&OMgT;EFE^95Usht#cCjC$i=c^%u7eMzHRY-3Wh7{c7z71t_%jv)D$-yYpk zar(qOnqE{J{StT+rg*D9?|bfS>WW27V66 z;ecAO!98H31Fs>=@$-S3j-LhE50Rw9aer7Hy*j}^v>sPLEIUGHcd$)0{BD#t*GBxX z@8YpUJKUR>Gr>VHt8(YXUq}dDUUsBUB%YXn+7$EYY^u}Hf`HD!S&GPd++O7dCKz&! zpC5t3)cokf;)_ZasY0DF*?QmG73JS^7q;6P63%yI6`hh`LRVHiO1I!ogw!xMMYFf# zn;kv)VwSxq4N3;8?jb6F2j*;4WsH%0?aM<;u7&8CEj*+5Sqfv;+8d+d4!{&B9XqqB zV^IIG03!JDVKfHYRLAc|n53Gp6b&v`)|q^lEwI*TFz>OCI0wELyvwDBrow}9T~M34 zc7jbM1I#W7ge~UUWt9Y!CzAsgRL+Og?D(m_$yK`C zN6=@+o@v%17N#*A7gu|R+NXRcm3Qz%xjICm+BjNkQ@zr}@3O@xkg!RqK z3K}y#z!A$V@=0en_NYuwcuqRQN5Mk{2xb~XBYGn^p>NlCzm6)x1e0RwFLs@hS2H~c zS_u)(Zw*7a)1U9fJrSr!G+BSdqJEA{aDVNJ&A^G8bmD+Bj{<+%>I~r(dbY%$^p~FsjD375>r{s9Yr%4#yz8UK0FY*EGQKCx?R1#0or7AFcJ)H4F+k|RD z;EZW+j2rg33nx;8KJ6SF;6sRvPHBA;GkH_e{PL{lsHpXXNZrlPM;=At^X9zbJQMHR z)ge3sy-QF0Ysp{U&yKdCbyj31Rb&=9C0p>DLihsiZ$62t@w~fEbs5(y-fgfbC0;qs zPIT%L304dMhY-?SU8S|Ydl61}SIp{Mg_}Pd7u)NHJ&LiP1kiQM&OGWkv%0 zNQ%vL54Exsi`PZjV~-jYdly^3x=!>hPn+gOx=R9TO2c#$xyhQz2Y@7p_dx5EEMIwh z^N*26OtajO}_CAIza=-Cnj=HH|kKyDVp)a}+1Z|M67+ zspCjW{?rVu9(Mj?K1t}Ot-wm;hIZ5-cx+O5;0}-(k;Aw_Iw6vDEK^W-g7!eVVPFKo zYjW@d)Th9u|Fu9yLG}YWTsIgu5X-L6c^&Lgo4*@neq3DI;@5Zz^69cwv&pD?4)2+s z>#G+JtXt%XaIBU%K|PA?G#&*2Yr~bEIC0$>Bqf&+-b*?v%kF!8{_cg>`BGy3X%QOw zML>}PUPu_{Wsk?#PuwmEvGW>i53~;$4M|_@J)u?%+PZb@QEowfdI(Z*boZ4c=(+E$ zyA{~!0J#s@o?kV_Lo$B#=Cs!cYz1A_h$d3>VZgDSbPPkXmP&nxmKs>fiu#f{l)p)O z0npko-!hPxK+U<*Ab3+7$xcE?W51k5rKDv>Lt176kLk>#{uj&8J`llfhtU}1QJ65l z8{yIDLiIa46?5pser<5UmUdz75y)v0mB`rB5W(Z zQ@gupU|JzrDesDBp$8%Ab1mLBT3joVJ{@?jtvNMg;UTw!ij3bpmpo;>r3$Rz7{75# zMbU;cJ`5q6fwFoXQy}L01x5Ap*2#$n2LQ=8c2e;YN}Y`rq?J_NMD5QlqAni3D8i{< zsfJ}k>@S>UrT!JIPoVJ@Qxd$G zaVp>VOIC^lnw8>hzxv?T!RIlx##aKLa{7H_-DglCSt)LonNOWeouVGnY4L)g9(CHg zEf4CHYX@o9EQQ3Eb4vgUd1Kh~g`Y-4&h?WN&f>?ai#Rc%_wAu@*HRDPJogmy*rq%# zGI=uOXF2uY2ixQRg{V;)k76QtS5=-)E9h=2P!yH7u;Oiv}5%VwM?OD7IEdY5qW$^Cyj0u*E2A=J9LW8(Z0vuuS~tMj-p+@DnY z1arz}HC{gNjEyaa^LRmNxf-pGX9BXRP4=rF2#i{)HV*((v$gQy%bk9t1K)Kp%DS?% zVrYh7!8XN@5V@~u9_WSnD)lvGM6;ZD1ai%4%cmooDk#5Ield~j93de3sU)WUU z-6VJJM|E{MN)zn8;(2d*01A|g9JYgNs&iRJuIJjIHpTg$Yzp)#>HU@SQwkLe*p)F} zMv*S5FQ-FjwLE=$29e`UG``BT0;HJ;t^H$NW=0}aiel_nR>W$y;39&q4O=hEa4cYa zqB*vyMO7UtdNEnyHudi?b=DY+h}wZQRr_lcUYpn#$Hq9*PRX)Qc2L%pJBs)DrN=+1 zGUCg**|Jf4R0{&H*z>F>%X(V@j!ukjM9T-^kLC%m>5z>I9fI$r8uHY38xRIw<@43~ z0+=$mKK)9v5)jEiyBSJR>8F_9dBMHH;X64#X%kmp$~$nJ1pNzDlH>CZu_E&0Drf|` z8?*-L`O)!ni5yaaXv!Z-w|)$|1vVve@WWr1Llpua%#X$G_`sk~e6;r;yMVO2fpb^? z)ea}Miq$x*KC5wfx26M#!Ft}Rb>iUzuryrW1Aw#KzR5T=k~|$TCaRDch|~Ei!7xo^zC1t^5W!H- z(!7Fyt`JuSf!e5pomd%3aW{U?_=z-TvQxsDO&!7e&ub9DUWd^bY*Vbi8{u@RIoQe= zZ+iQCF#YJ8{pamEUx#@`&EeptI+OBSjLk!Bit9w1iceTge3j>H5>sxSR)ml;dTpdH zQX_se^L;om1yPOIB)}I_m=|O;)xK9I7|h*05reN&8>&@lNw+JXvZl8iz7D1pl9l4= ze~tBeDZkuH`5n0tn#z~;^lbF;YP*)ywu(i9pqCk^q_uI#<@=S)PBAyQFqzbP_9|p- zvSQKml0-JISAz{M$b|zB_3+_KB#CuxlnR<;K1TyBQmFSD9C=2?C@-zqTum)L%S!z- zrAIv=TD_t17Hm^|zZ=#L{IyT7l3kuXPoQ-hc#JzxhI)UO{h~q27)2^?Q;+X=>b3Mw9$C zZOc3FO635fdN#SuZ*K<2)D<~4TSu^7YeufOwF@pQNSHY=$MusPdsOP!tCut6FwXs5 zv<=+!n2b4&Sst1FrGBNlgive#`%tBy#VOI4DoLXW@MHWkGc zs`ZDdsGX=uCk{CCC~#KF2f{1Jqr`rRR&hlYB;uP*fEGHpF45d|1!u|lXYb=NJ1Kjl zaq}bS0ze)mHAuGbB52(nEy`AVmO#`0>r)0{Bp>BQ>UZ|W3z1xrV2=_&h}@1@q7=l= zXB8;O1Zv_BM)z>M^WI zqr*-4n@BwEat~xOA2yG=K|PA+KYG+G+F+E;8`%Dohp9D zOyEm)%~fJiZ!5m%^`t-PEF?~1!MH(Awcw#!K<;48jnh`68`(1HY)C%l1h|xOkE>JgOg5@+4;^;kK#Rz zM_L^~-PpF8z z(^5smD*TP#<%X%iQVDP=K|PA^M2`~Vx1rVgKJUB?X!8yg`nmJ@)^NwH+4a;*$Vof& z3^xF#G11H26h$zRV;>f8Jg=-qvDL}B;g7?-qItzn(mi?%Oe-WS70(_tQr!QRpZ(_D zYyR(huMkb&ygFIg$#5ITL!KzA|Fpk6F*Cqma{!!7F}uT+x8aa z+)SucBCxvYI`TvcJ%(G|Fop_ys(zW0Qb#kIVy;s&URs@r8RIM~^^cGqcYtUOfW}*} zN16X_Sh379!|fkmYhy^|%ScuVlarz&G@qN#Gf6EP%S}U1+WbpaivRGtQcrUh$JY7+ z3l$qOYH-J$O8S(lL0KtSz~Yr)s06a^LRy{kchqyJB3Ih|dc=cU1v*2yxeOFn9|Hy! zHbnZ3w~%wxjFlD9Z#d>QU#OPZvE~L^(OiqLiu#Ui>aG+_ixsz#FpVkfuDp8`KSa=)E^onzp?a<{nU6hTkAy@kB#uYNA_taiT1p zIN;2tz%~^Kp%!FQ4!^`K-pJ?dJe8S9DV%7lmTD5b3m@?dx=1>WOlhYsn2%DZgKSDd z@@;2?{elV7f$h^xVrt}BO=YX={I+K9v$rZky$3IWZR!R>3zriJ3Flg6+FoI*KU6bKbZMqR?{w79b9p*=ag)fIV}cy4u^S} z$4@b=;T1`gwUOwwPKKtq=T?_#7?XwoM#Bhlz9JvKHK*OtIPIdm`{Cb=M`l|d5}(Tv zAoo~T@SSang4&e8f3zvYd)*UvarYB8=W~|g#5)^qEO+utbz*fyxCd&AJ}>eB2t^V? zYJ>HX6GLmw{0qqw2%fNpe3hwxMfgS~j}(QFq$xv2e%5zTo4Rotn*sp*N_Lf^ zvYVy8l~#%75*aHm@tx8nb}lbRTtvH{S$jDXP*q>78t#;imUIbxM)MU$XEJ}y^fPOV zp%JEY#asS22gf#L=CkFxYyn#pV=TZ<@J(}{)#b8}&1)H^f#l+oCpqV(p9kOTq@StOR1EVk;jgoX(53gr zr`^k{yY~d{J=CTIPq3+EU>H%=Sqi!J#!3S6+t}!iO<5JMqFdFS6LJepIws6&mjI^> z1Y%=gq1BN@?4VAwtg$hA=C0Vd zAZx)=p$6vL9DN`3k|O3)(%Oxc?e+luUKBa1?_NDUhil$-_x8)CBU%Kv-Kg}!@R$MN zV0G$5TSKeoSOIsuYIpg%>E)Anu5OOY$UY{1qUq^#mX-Q@LVs=r(HaVkw_uwBemAVr zTPXbW6&MX4pD|9;+LPL+A}Z@dK9qb|$8JCQd|GY`nw1iQWTn=mLr3Uv*Y<2V_Y7M@ z9x5|0FLnKtm69a5NOCQYT>`81Qv>NtZ5@kM16=qAnRxe>rjGRw9wvaQKNrVK!gKZg zFL47^4$$*4um^Ig)(J*C@hMA%O@Xo&CV1|e2kz~72bZ)#fxT&B zB39ok{^n^Zr~TEwZ_b`?LhVc46vN%LP_jQa@AqGQ`65F^pZWn&G+RFl|B0G(;(#-c z0((>#gjbM9W&aYbS4k0vRG+iZjf`VYY=rF_ioiY{%igsP#bS9-WoD2+J zgK4{6*)=R=)ot84Hcw>lSAC5MP#LsfXL%=lw=tr>;n90QLsDY4va3O&sX1gd9S7lp z*qKND9QFRb3}P$%aOMVkRM9Wt^)Eci>R}HBY6kUkhp7}{zUhn0_bs+_tlm7ug9*sT z;naNe1?o}4|H-2O;B~=^hU7a27a~{;oz(|5a(9ClZ#tDmoflgxe-^sZQwkVxYkPg& z4DB<9F-3TtuZ;7=T;#oPwZz^y>Rpv}{n?abkGlQ3kXY`zZDnui_9fgK2lnsr;BKNV zbyPKZ~jdxQ(6(2+ZmM!ou<`u;0w?OId%^bBZxE;V6Q`oZt5! zCF;a%=KE@k4T_V;>H?LHqm&fn#Di3X{Fnep|FHobHvi+D9*#F77X%lPL0dze3HtN7 zaBkq%zi}t1Y5h@v{`{oSO(BnNkjLZK@RuHlOM!0F_ao~i_+t#@fIuuqK<9O^M^*i9 zl>LkYg!*$VKN-cCBwOd2h*{z&SEvniiPhaw^h9Za!G(I%&C_`limNy}a-mH-DKN3P z>q$mAyN1vZ8*d`?g_DpK=EBA>VCKnU!ySpY@jQ5@7$5cKwcQ4vcA^m(qpbzL)JHp> zxW^u)U)?cWQpB=u3Fo9qg|lO+V1D~$?nvg-X!IvamiZYtrzALf-thi;<98Mzd{KGT zt!dYzp5`fiDPoPiI10Bt!+|6WWOu@%Af4-?{#asWQ7wc}eLgDvRjtmv(7yL--hGNo zBWE7<1J{2lfe4N~jK*M(YX02_t81$j!v`fv%C!<)s^77MUC|J_S8$FaFRD>e@GZsg z0o0>JPVguINba;`Y$e8`dHUYNn;{t~mf-HQ6qRIwK5yau=29DncK~hvMvM|=lt;5j zsd$YbH8G9V$ajw&n(^yBZ*~>+?&^bSg=D29FTRi`ytJ?ED(X`;6=u_TJN>ST(KUce z@dfCf!l@HOr=-;tKoTRRORLnY*DRqfs-+}!>FVQw$pfOI<=brTos$OO2g~tx?c;3-+k)-wkUR{WB@+Bv<1M zc?L`JVU>@Mx7teJna;r?*0gnbRil>uB`YNg%}Q}1TD@pM-Dk^%37d1dn_N#`ox~6M zu2cf5hz&{8Y#XL8VPaYc?zuZJg!BgyRD3;To?I@ax$Og7;YwQ^lFzNUPW@JM@*TX+ zvwp}crp1>FuR|LqWSTgw^DB|)IYBgHkA0}55 zxE~tuk;@?P+0}sM*oRvbs$iQELWnfLqSUnEf9UR?{*8x)?TKe-r7!uBO$||B_>OrM z?V;!XPCDcBK^9tLMA0Qz-r^$v!fF;J1f5f|wV<{9`gtXmP7HjX`CiPn0$2US)s6~U ztST|)Z1K@OJwR+ZwI-`=MT&}NbR-%fZ9C+Y7MbGYs{v+`HV+q7o z%;EeEwyD`)!s}nyl)JZ3#b=_o%NOY@xJQ6jqqU^>jn;=Q_Pmj^Y!tfdjSjUbvHxUK z$-pP0-r=pQzA6>(A|2s5q+l-Ree^&Hv7PSkkGNGQ-5Ld;O2ebvR9$^ycU=W-Z3%m% zTSq!|PSh5kz0bZ);hpZm1G z%9A|;OFWkt)JOMKKeBY~Y2cHaxU<&KkXLOA_(#!=vYBe z4Z1)T>L>4lKYIS-Y!sH;;aJeC0~g7U^J0)Ps0FlRci33y><+f6)!&V>3zGckfFAc( z>_sAdXWotSVl>eylov^sVI)~r`igl9P@57zolRl95L8v>qYS}*_vl@dlTzd>_2O;& zpcgmeKljJSH4ViBSmFkp*1-we_AhT=snaU$z3X6%Q)H|;`O#vcQD7twbg4+TBSVg8;xHYax4tNAfHQM~G$+9DNDZdiV6ol_N7oxSa+ zyG)6VMM!};K|lpasr%z|sKdoR@fkA=nAv5bwNTzI^fU0>i1Kw8uA2XLW>X+YPgp<% z#~nsvuubj!ZiHC|A0k}v6Mdi>JE1O%o~cB^rGF=IczRK9+kyh0uOtO(Q@2jAsbqi! z9Hrf<b$F{Uz1nkR5%&bc_v9L>) zAX$E<-Bg~HF=Y;gT;m7HN?A5t(BpD;r}+}M1h?->WAUgTd5!e>MSi->e1T7LA5~BJ z-obS<-~WoPhdEyBV3awsFvCqWn!q8sFNDI3x}IT(X668c|L8Y%p14P_rg~p2GqrOT z?E|&kV!ooYwkoyW(H-m(Ksy)5XBY&o$pPhs&<9cquhgEdl6o@19_A~uM$qh3RMxBOWy8`R`^ws z`?Znl7yUx$UV9BFNN-&Mdz3IjWVieK#JlQ6n;lk@ruqs6CeJ=dDja!~G9)ufYC+ zwSH%xMD`pHpnjEYw@td0KiN0HOh{<)@#d{o>qLyu_A91{O_*aNXTQ(;Fa91tY$YDf z+#rv_BKRe|{)I;|VM0w_(8}7QGiBD7MeG zBeYWVkdnFPZl7k)u}9_EKL3PUDAe<0{N)X}15|9DXYl-zAEmVrY_g~lYtDnd``<1- zH`b)#_`<8$sHDB;(g$o&qDX(6i>oQZ`+_|Y;*o#%KOG>$W_0^T_!BRkHR$(82A1xKPkc!_5$wT*JAIZw$~dVe4>V3fe_TrN?~VbYS4SP>(88aL2n!-K zhkZvw|FCvDthqr_U=&Av(0w1u58Pkni5%wK;ZVV&P5$mXRgeuK`=b0Y3{ryZ`loHd zjgWyq$rpHDe+r$~K^}!g`MXh`EE9Ovz?v+K9nIxH(;Nmfz&JvwcQCLJao^2EX|RkJ z>QPds^C-vlYY4B3*9rsimlzAmc+g1D&EH*nA;XG->)xBTxIhOWSJ&84J_xQxz2e>Y zSEZ0gF3>z&WNo?n0Vp^1>RX~Q3@m#S0PuQzGu zcKXbdQxc3J$*_=}MjFXV%cj-)=q{sqpa1JrOWnvkuJ$~%&$D-c#BpL*FMIWj+Q)_Q z>3P9O`cFtF?@i)Ro32SmI^HT4IrAt8$^Y{KL~zn!GzNJT)|KClu=LP}2iCfy;joRB zyylZ)s zW?d9*{qKs@fb-L}@ECrR!%|p9>!w^Q_peT`UkmBexWmnEvA2r%ei%$EBrEkne*AN1 zmBd!cmv2#bLdT^9ZhCCJEEd##F#u15itMm|N?L0r+C>}$G#cMlJ-w5&$Mlq+W&De) zXVm8#bvb*KEC_f2OIGxaKo0d=yS<$$+^g@sMm=kETM#1+g|KtauY{7(on@u|C#aB4 z5Ut73cnkI@&fg6yt{I}uwAok_0)hyiym8N!$N4g|HJIM1+`6lNh;3zJf5}QoL$gx8 z26r$XPudb1y?GA1WJ&GFR~jb>`L0w}0_L`-;X_0cqRjSZI<-Vy^>G?IKJlb)EUS;CAHi=q$Zvegk^RsvU?peMvrN=qc91{&g17?c%$>R z+bZuwSvqmRnN5M;B>)g=K{h4$OU&AgU%=D6Gmf7y;^p0qvmwdeBoH#XwX8ibcCS2+ zr(hUlQ{#>1Z|ewv0C5sq7YygQ(Xo~}W&s!DWB7tq{CPHM&qv27x#s?_A zN@U>*DlrusPQdXU{FKF~)7j$-mM)LhZeokH+#wX_u)Nd*PnyZt=wNVXarl&MS%f@# zv@@n0-oLMjsjDzCg-nAZd}*U%w~r6|%Q&Ks1%P$gIEBsxair&#FaJi^2Ia>~C}Q4U ze3&~hUku%5ltMbY#_wN6#FWGN8*EdOzl7Jnuqkd0LrnVyP9%hPHC2A9NQ(s5V!lc2 z)CQPm!->|ygxWxDO6EV=6aakB)FXu3TTs?*RY217dGiJXbFd%>#H*A!Ho#s zf;&rAuwfOsx&8$TaW~##{<^q5(kl zeGjt_>eA9aaBqs%w{?=DY@Q!ztYx@6M7^wby<1`hqpcxQTRq($&U&UbVJ zr;HCMq(hhH+?#5}?Vxeejr{18AL$FIestX&s1M{ThpyxHW9ZQ)e^?)?(T_GaXptPW zIxIpPzypt-0owB8D!k*7KTD4wcsSPa{-GuYBY1dR;9UrUA7DZMxPc2t%kdUR4aaLi zXbBW2Q=zjv*rpVJH_Dzhh%i1wSE7b{@jJhaO7CVNhGj%CPs0bYVEE40nBRfg)Sc7V zR5B2> zph$G1Rep#rj1jpEiBV<&=^1G@kno`d#|^-#`$v5W3GFYpv!3aa$?k9wVDb0k`U)K=E5eS zU}#S#`@nD`=dm{7)}$kx+0-$w|5yMKoOT$E!8WD&yAj?PkK~ij@7+x#dq{sf>!ymc zN0?0A19P?n+ACuvS7*GTHYIz4O##3gb>bw+B<~U~;<+2*<^sE-W#TNF^&eeuITaF8 z=`n=?mu0EP3FzpxWe;C}CCt3Pp?$BdjG>P(r&KgnL5-ub3rs5{E0y!qAiNM|ergfj zFKH<8owIDPr-4F_q|Z=*Fj^cw>xEO&x+3dKU{CIb&cCQP{ZUD~nY(pBzBDUpKPlF3 znE@`}1mGBu-7~(o>~wLJW3#rU)*dVNN-J)|`b?fw=Hds+8*67-segp@xC2CMIyByb zZR-B-hV^`rosJD&l()dv(|e4{hDO#~R#n8cBkzsXLH7rLL(>P%O36X8QsT41EvZ}Z zanZN;0l$g-uS}g^osY9p$w0l+<>w?O6-yKZN~wLlQyyO>GY`@+4balRb*{ODEz!z=)ls8YT zU&aUn| zhVDNUK)hx^cm;Ws^)JziH2QH}DUhk*Hg$QHX1L@FP&6*CY8ce6A8JP{}i~ETBw@hOd6{A&Paa{h=-BTNTO13hVH+pR>;88A+ z5(X56?;}>nx1>lnvA61JBT$)J3ETs&volrA)v?nWvy|~`Eo%p{7e6okxL2;*YCczG zb`!n)%%e_*4#ZaG;mi&8D5qb->tA?O!bQGDva8&;4m|RR_|1Jc;iff~;be@zjUx+)FAHJk@|MIRU~HD$@Y+3HCt|GKr2O4+%%x+Gq9yCJ9+)G^RL);DxYgs`ad~^6I|&J$ z2R5yeuC8an>69!hdJpt8;3k!D#n==%+VxI}PZg5B53dOxN}?fUL0oMIzNEp>QO zFb(RjD^Mu)@6xA2GkSZqP_|!4kEF7$AE>EuM)53@oo%n1c+zcN%h7OE-aMiBk{O|o zgS0^+Qtw|rZ#wi7au5T8f8pSV*Bt2!IrKt0RM1d}6&-H=cgdr}z5SinAR`_<)vdz< zIcO~ig8;p2#PLp#M*YLu4b%=g3UbJi{4@r%J@l%qnnfGCJ;qY!-bV7yt}Qi{VdP<$5$1kH7?L5>qZCf#QJ`O#&c)0TOgB1E>%yEM z_6StIgMQ7@DFCj@Ku^?@UiJGZ;K&~<{EcFuO(ZgP++x$Op*BgRxtR=>pDa3>swY;q z;Mk+0Eo@h&-|-7s^^7`K8Hn=V$WJmb)i2a4D0_3BF{5p6Vk5yuA zMbA9yFVOy_0Yvb#!)OflsLz9xTAL&NLnB+0H z?#>ZpU3jnWl}d6hsLi?<1{1!IA51GGD;1t4xYSj#yvr=%5^AEQP=OU57#eE)+OAMc zZ>YM4EbNrD=J3_p?wm9Esq_Z1%pQX*eXnu!t;Bl6f`U{+YX#mms92#%I9u@z)VPzSQDQMXO5VBbmCEpfc(`eys#op|?iR>MjY@4YmzFY5fQc6u|b|961G3NOb>QK0`$x!eL$9 z>)*-0DF2{=aVkQJW2+ z7GzWDzr<|&qjT%Hb{QFxxbqKSmHE9iG8+t+$jkK5?ghUsA4CUdr9|)syw)Xq9tkFt zPiXpziJByQ`Xr`Qp5CwQA7q6Jn1F3c6d|&x;-WcO(dYAQf}N(g?)DAO6dW%e+0?e) zEhIYxX}8#Gb^I|Ne7j#_$ZB@rGrvpNe5TIQ*=ji@TgXB}I#HNkZ&)DQp!05cn95Wf z1t46VAnU&ExK=@%kpsAf)AH@b3n^*G_=E-Nr-~3zr)o({k#ZhHC(!T3&mf=K)X9Gu zAhuo{&fj30%Kat0{)J8D>bm;ErJG$;*%5w5kJ-g(o=OzhQQNL7BMe6)-pB<9wJGKQ zXj9Cl@!}(m8e!LvHPQEVw3bmj(hczGFg_!VZ!Meb3r+!K^?Y#YM#B%TwSP4kD1O7b zFYz+o!EpF4hT~mAA2~mYW1E_5e!X--S*`7<;RUWF@B!b)aOqG3LIvQ&dC)Jchwnvk+AOf_MpvmUvcEU?znxw=&eBtTgo5DgKKWb-%F7lP2egP!Jx zvmJH+SpV@54mFGXNB<881nmW)d_RuE?dM_OXMt`GVmSvoyMt}2?02K=r!!Z^A9l;N zo{`_=iz$ibV?nIZAh?i80|KY?!H(!4_qdcF&GAggQ#79wa=De3i^8S2$J_G5kA1ZC(*c&tlFEmEF@v?m0PpV`zOsQudt zh~Srp(HLw~b-x?oIwtN_3hjFq{Lzjp*H^0r^Pbw9<_HW6>vxVIaV5lxLbFnLPqe92 zuWTKyX}2baIHwFt)w0pWd&?MVk&6iL;QY^ZO1^vn*h;Lv9UJ_9Zb7i`Wo-oAB~mHJyi|Ii4cH5VFh!8X)v!n(Z>#GR!S9;m8wS=HQPht`>siNrx{A-Ypr$;3y{f@V9*qG?Z%eJvryB}c&d5Nk#OjWYtJ*v zYHeK8u;<4f<)wb5jTojMeGm?21L=5;_40}cEE9naPnh-I(^K-=;;N}P2^Yu2 z;2FO&X!GRrlOT%gNMmwp?-Cj7#NKUcov2AC4mk5D@TaY>AiRP+s_&O*C2UW6^&!aa z`N7vA5_^>o#sLdgXQYNV*gKG8N9vn~`am8P$^U4YHNkspM!@ZEG@;U$yi|lefw9jF zxr(pRD2vcQ*WeEhh#^FB2H07UNxJQS|v$fJamCa*3Nl`rATJ6I`u zQkN|lk;A8ctWC_1w1nT&I*)Nmwi5AO4ddyZLM2U1dhrc1!b~tw`D5=E_}Hio7_lElV5NNLkh;3NBtq}{cQ!rR^H*v4fd#s zU&8BOc$A^4o8?fc=d?dA@AljJ8Rx*~j7tXLtL5`ArjSz{msX)3rS=~^%As$+LYNB6 zoJ{o=&w;9q*Am9UHYLlWi}DPJ5!R12=Ku~LQx?neXF>I0Tl}rf$o>lkmpLysNr%X; zb$!V1@MJ#rs6OrV5Jav!F4KZnsR;S(x;KFHUabnbu^vUsd`L71-lt?awhMMM#4+Oy zKH7dC+>`!{`dl`(JU&dH%HmH~YAAcPfJH=}N9mI51Wa5>$KkS?g z3R=J#2igm)Ah-hZz9*pn++p*f^E%k0KL2i%b3&#U!c?q%Sme}Q$tf*Vogch^C+zT|}dMVC@Hi+_ESFtdUJ?f#Lly1@03KK(kTt**ZbFVA) zg}1~vv}kMgQr0sGw3OR;sPyhpa zxHzJ;?<&3a0>(QKb^{k*KIfiUo!{0+!;t#*oN-{5e;U*%O zR!CMVmbK!R$PModw`ALwVXc4=EGN&+LYR*AID)b4IaL|tQ_^~_o6T*(1g@C*{epYV z_k991SQ+cAjSw2z%PxNt3gB;_C`%^}IDVIK^4b0WIs!y(5rkSd_Y26s#H>vj)7A6uwx6^VbC@LR zuNGXA`AlUN<}=Y%6V$Z1Et3YascUjTrzOc{F3y5xI7D>wS^6htUMAF;SDSbXzU)Pm z6M$_>93fKfGGUOvyX!=gZv)DwZbbk6*_+%)Hf2sj=oD$qn{L%9v5Cx3iE4gdn7Uy3 zX-KARe()MjcpDNf?29k zqqvo}l9{frqU}~il5Euoo9qgx?~&u)dTX88)X9GlAhwDR=WmcrUBLb&y#9qviDY07 zA$NakjXo#jEv`nV=C6V&>_=wZt(-w8(MAyH1+^*7|7cVA5teYgRE+IkG;YP!eTn1b z;MF3&{_NXZgBf+(t@B@E0D{a1Buw9sm|YtsSDkT}YGvN5S$)N-vOz<^M8?Gr`EqPi z#jCBnqURdV2fs+vd#+9%N%Km_L>=Ap{w%9l{nyaeoKv#=ycmN%&_t^8a;EAFsYT$F;uM%k+78}R%MU8CRiUC4I z;c>MWwgejJtoa@o57S;0n{G@gU@tcR&Jv^;=F@f*C*co81^!TYAPJpg4&aVUCl%oS zG}P^<4ZypG>=*O^?*^)X7DyemjUc23esF{Nn|n|k_x`B>QZ#Z<)1gs;HU(7!yHPgRMvTXf!`RlY$#K`}99$5|ZCMa{ioRN> z;Yfm4=l%(5Q(C97sbqjd>ZznSYGv-zG*}N-qUhp%l#1xug%1}W^XbXfkp_JPXnd@7 z^JPZ7Nb%bM`8>)|EUtaI6@$gs2PmUR1QzGij&16DF!5qK7eQMH)14NXmu8<8p6$!2 zeW@@?i^shyQ~&O?p9j1&u^wYHiOp?r>0zmM=I*_2bAg(LRY^CRt?fAxOiU%vfz74W z;v>{}k;Y0}Q6f7O#>-I8vNk`HbR_pOLATA>uk;>)`ajknf=dshG03Ja(EM(M?~;t$ zE3{l%Mf1B8q*lNv&h~ym#-C)iXnkZ8&wJoyC9|0SE8t>-(u zc{hEsEJw3lHQH}OEx3+=L2~OTa>29(Kr`t1ub-R z&$3eg1JlDU5Upjygz;n<#f{2%Jbl5*SSh|dryHN ziUyjM(t%{9Fek2muc&{yO`tBr(DV6bE%mCb#PN5f0Kh=HJ~`sqqw?HF{|@Hi-Ub&g zzTB%gYw5}6E&K`zbK!uctQy9bxf=*Bu_D90=0hkFgsy0kj1MsB9}VMU?WIG$1E9JM z#{*2%W6Alr1l_RERg5)AI>4rKUediPq_nv&Dd8(WtrLDqUJYa8qNsy{$|`w-b3B^t zuE?_ThES|!kFLLjLw@y^CFn#=I&r|!`-78D>;KykAYRKMyn;N6=a*} zHLdJx!FaEM>V`bb?rVrq_ZG-6&!jHQcz-BDA6_Hr7k- z;>`9mLj~yD_=5wt5F$S$MBcT(Kximvkkm||RIwg2O?YtRQS(EL{F}Rt3w!=+n_|!mavw@IqiGT^~YBcp8DuVxN!?%*4-r&kJ!DFX!v4dD~-}_RGaON zG;qg~cf}EO5L>SgXKt`ZiTn~? z|H7k)zn8t!P@e3DD_W$J`@$60_tNi`zYGj%9!@D$cb^0m)T4C&qeoRcsP@nB6uWN_ zB+IVeXZ^AhqbK1ZTgu&^XYRW0;MxCcVE$x%+hNmhvjn0IC=T=d&X$~O>vs( zi#XJH#?{#C;TlsB0_Ux`^t!S#_e=pQb#5Kz{QGgaYrT5hB5W(I8KKSni(N4^qM)~> z!?pQ9i}N(1Lx5qtyO76Fsa{#@vse$S+?2I|=-K@37h|93L2(kSGUQMbAqS;xAZGJ} z0OY@z2WY4ps9*5Mm_L_5U57Fw2o)vBfFr*-HW~6iZwKA+kJjTu`EiT$qfXF49PbDG zWYB$qHh{hm@Y4!{rRr}M(CDK>f%Jk{egmD?!5$^^yHS2g$ycpPW_8e=#7u0YPp8jz zaq8JzR%hPqWdfpW;#J{LkJ3AhM*#ra<(NJI)tP}^p&EfN2-nAE;Hr75d|j{po1Ty) zUn&CNf=})iRe^2d>p)x^Lu0~H2R{y;I0S20OSyn^g@H{Z#~ziz-!#Hg?>cH+HF_aQ z?jpBsL-p+5JCaAxv(0r{We>iPkVLW-3%M##L77D zYQ6g9V2mI^jD(o7E;?AlZ?YN_avN`T0DQN{*Hh+kx7oBSlhSD#^(kJz4ZwSgp5$kZ z$U6TFp71Oy^(Qp{rV6695*ly89;N%cVJ(u4%jK=Y-w<+k7LFq75mxUoSQ|D@Q_Q^c zxsOQs+JnDjr3|21DfkCXs4}l9#CaDUL~0MXmA&sXya@TORD6`o0TG5ODvv`cRf*5r z7m-3w;!t88(3RUcBAVdi%mJaGa#M|31Xq(bSa*>vroP1qe%~5blTSvU7p6*cB7DHq zLTpNK=Q@EOS0#G_e)GeSM}U=r02-$GD=Cr(hB$k#{GYC$$-_Djru9d3Q3?zo%RdC3Sa zMTASMORLx-=4-@-PvTsq_{sIjAe(y1XmCAINhcF&Tsk*^b1}=8AZJlTX+ivb`gI^b z5+8C0KM90LvrN?Rwyi){`9}^T1U!_VY;2X}j%;eVn#$MEQ;`W-SLSBGPIn{ISXX+u zDH|JatFy&=F139K|-d0E+k3!Gn@LG5csDi5L?xU^EcS0?0yNae_>O1 zl?oLf@GcHL(C81;7u;eq!?ig+`ohk66Le-Z=S2a;rPR*?b5d_RC~n_mq~fEtI3>$b-=D`-xi-HCCYzt9 zpx5&wvEx_!92f@=6|%ma3~tv3m>f(9_xjp3K2{{Zc&yfyn!Dob5I1)7n~a9>i}I_* zUx4@YTLdXpD3p5$cHOdw=QieF_$N^ldJlx*W5(S;3qk!;oCIkLNJq$_XZu)YemeP3 zS#kT}BhW!V%mzI6heNsjwCRuHvCIhm>_kWXSKN(V@bU zgKB@j9NN`iIJSEfX_ri9qsY;WeHf3}=o3c?Qh>KAXP5So2O0<++L>m73&SP%w%vJ^@ z0|skn(ro}q3OP3C-7rt1gi!w8epTf zewB|5*S|#-a4YX7+7ugWQ|YaFi&r~MTVhLU$P$R z@3<>w<+6U|Rl>uD^n#55l!?76fZ-F~B!J(P_`>5F#!iWQXU)xk%SBbdOYXLk>g+QkGU>qo|@V5ntMOb-h6gu)#e`46t(Uy(&5i1 z;aHzp=mVJyPm-IO60gQ+7_%Ia)=vcUD4uTH6U7KX;jmmP8*NiL)`s&^?)mnLQX$PK zSAdjXV3T&V=&t9K%XCdi-&JrGyEVz%KpZk|?z{nmv7zIv)IU?Y-vgnw5*}}%HWl=z zVU?O8URJg#p#JnSvAC1y)N9kF&ABrMU`%|k=TdYh@NwZ;sRyvE6t+yJbAg ze6W8F|1WJJyjH<@g?LotZ_$eTU=)FPz{^jQGt087^Wl>b<`I^HX=0LE!!V~w+n6tq zPY3Vs7&vd2ZkV5xzxkv%$2q2qQDS0hYgTgD)^V$9lw%T_m6AXW!e-hy&vdfYp!=3} zxU0Nq{@O>!k$sO6Q|+3=?#I6*vPIdAp353H)Oz--YCR#w>g@~S)gU6DBgVqu;@Slx z^`NRNw^}u2dg*!YaeWSW%O`kUKj1CpLuO;q>!3NKQ|<57QURWY z%M28Sw+ZAfMJplocCs#Fng-RTY>$5xEaj!L)r&dss5(5-w+<$FFIs5YuQhk9e?3>d z@Nv3Wq-mK?Rm%ji{__!8CiH!5F48>d<2g1ht1nQ}GyjOSWE_DBMUtF+Rp@Cy3Xn-C zEu0ahq4XYH-q?^r<8~kVGl{BJ&$iI82r4O%)ek-c=@5ea`^y5}tAqa14yg+L+5|c3{tH1n zVYf@cM}eW6eZLZdRv-%)wuY|ud-hun(o{bl?#CS<`#`!tFpK)Df59H74mlzSHU|3l zrW*LX4)v(Fe;Q@tcCakd%TH?o({uMuZBYnUCa-4qA*Yv+&4cx$r*-_{9%XnGkBS1! zG?QZ2iB@%|y}#X)_{jaqwjA%g_9A&=No_`$aCET*AXg^fsAsdV*>}^9BTQZ9VgO#+ zqH1Wdc_ZcLiu(_k)ebz$*rbrI1Viouq1+tL`{J&*WXfYrTQAby-j2zvN|z<@J0ii( z);qKnR`{jyJ7rgEY%7Rz9M4*wO^o(2x=WutTzsh)=nOVnS9$;4bC+YagsK za0}|fFlyoivGuL&;2vdkh(`gywBV>}aB`~*<_%Ixv!WY7#)>2rQ-SnzXMfy1P z0Ih+cM>jF0>}$v8Omr?-)p#rk%h-Vu=di9A==NIlH$Z8HWu??MYmIEqc#!(8beRiz z+Ise&Q3A`tR+cWWTCTlOUOs(9TKg|PkiWlTwFQ3pk&KP6K8O2Kh6plJ0o80}o5^sa zLo84?aUGqLVL3W%$ks@2dd1wi;BNQb^8raTRKy9nqwGq@S*b%%g>*w`t%Ju~s7KZQ zX;?>cvD7wMKk`gprN_j&{CRK+VSu)>uWcvkx#v2gSt(<9R!S_FJTv9}9d?H4 zv^4k83#_Ad&F5iRDO;%-HFvA4e4J;;U-Jc<-6iLLgE=`Iz;TOy;>o-bf)8LSAbH`; z2*{P zcS6hS6Z0(|Pxfspqglnu^c_yG6)=)u9Pq6O;cY5I@O>;iN{-~~_TFU(O&AU!ip*^09(RR=*m&qlwm4;DDxdR9`gGb z*jc*>2MfNaQXF~%iIb2=g@gX)ibF&M<|03Kfq$$(%R+x?fY{f8yL|7%hmJx-IC$te z0vPEBQ-U7?1m8f`;Dgd%&fv$6AI8965d(HEe>VhjPCsa&5cK%4!4TVmEfALL;j=r` zrbhlW%8%o-hv~G+*h0I+#w2-y`!|a#Ha4k@7lG?Jl$^FL58*atdNiB5$0AdWHZAo? zM}%l_)aQn^)8#t9_!^osCDGyM@dLQK0nWTDDSolJO<3xrh*G#Nfvcsr)v={Mv*+xh zD@L`t(jVB=qa~d;H}7B0Y2pm9Us~^&&_D^h{c&0>F5Lk=gK^}n(Gdw&#!q)gySRG} z<+@P3;FTO)Qws!InsScxhW-&+vafsrKuig{V%)=0T_kT2*>Ur9om4*Om{-|>8zxsI z)$#%Km}8sT!}Nb_AOtt;MPsN<&HibGcg+f%I5M8nO*~FZEHp_LBjrSresRrIFR zM+Acl7j9E#huYL#Od>k<0y~G8S$WjaP~!>CP>FsGmUca#fnhwh)imZ`KTysQP%~dhaT|+}=j+e4u6Ag3o3oU*;^QuQa4t>;vCA$K*2Y45Sh!j)2 z+QHp0l9SruI<&@XUWRqPK=8#wN=I`3_?hFZ)c?SAuM0x!2Y9@N+SJ;ghShS=z0cws z%SfrjY^gx{J7LPT*b5(999v4x-dGF_BiMU_pE)cmp{s=TJfPo2R?mIPB<^%0-6uUp z!VRtx9t_da0V$j;Ex9&h@u zt{jn9Uw!Ni+!bCr`N?EPThqZxVbNZBPr-#ty4T0lI9@PK9jZx(4mkEGsQov>cm=!R zBK;PvJ3cc=Vw~m0(mS4K#;q%)WZCuDEp<#iWi^~Hp1uB63F1*R#P@25%S8j9zqN{O zMO7S;zvaX}okxqkf)_+=IfhFB^(ZOSAaOGyifKfGImtR9A(fT#MfV_+6Z;<3-KyW8 zT%;Rk7Hhy8Jg4HMqbgW7F)UAq&o$p`aG87YsBBrr2wKnHmVRB!PaWT`dxxxHHZ6p) zP$kXX&QU~!!3gl9L$!O2>gGr`V^dDa-o!18crEWq1hx>?JuGAHSta3PkNQ`!uxW4R zhIkb2>EFWZUwD+-W}3jw5cc9RnKL@ivplsCtbMP?K8@_Fert~|Wv|x;_b7}1=uyg+ zI6>}g@k{LjC;=%?T>@VUV8;3k_DC98TT%82`m6vr90SjTo(f-a@zgJ;p?t4?Wr);R z#*a&HsQG%mXPQ;mfk)M#zxYbWfkN6{W|ib(+xhG=`T~MN@R#-Hsu)QL?j@Q>WH~qa zMU&~{r?Sj+T}|ybh;PTY#OB(VV=OkQZDp||b3_4Mn^(u(xlBUVhyAhSJ;$}aX=BOi zkPQ$>O^8__R01x5YSz`p6H%U_gp$ZiIz5)w%<|sY)eZpb zvDczW_e}ELf+mTE^-aG8uZwVxvOJ1M0f5Hy$=uk_Bg9wJBwvLPNL0x`cqgx6oY0FB zbn+~!da^wrpD_IO!H^~P>%KLi1{}AgnB2@Kk21;f+0;TW2u`l19C*}&7%h^8C$8_j zd@uPo+uakSM{tcJY$u}ZQoU1!*S=_cM1q&4YMAUYCp|OWs7{!D)Y`H`Kefx@h;T-u zh6AA$C;ksXSmG}$P}1dpjf1;Ri)3%Ch@iF6|m*%B4s_^L-oSaTB%gYuf~Y8AyKc3 zMN8&Aue~ovi0g4y>K`FJ=z!4L3XiuCkHV$<)383p-`2lpvFcMFD06R*TA!);dbS&lEtm86b9%y&Zvq~IE4q?pok7=Qh%7>Fvl~TRar;(I?ntm zJ<{rdO@Zn|KVCTz>ktiAmP7Z{9aQcSA|z zu@`Tn4I^y(02XwJZ^o1se~hPM2(c-dipS2^G%FeUKIm%;P)kM{qfBE93X$Nsghx-m zM+{wp+LSbEkeT6#mbiP^c(?@(<(KJD$}}g`#C@A;ttC{qihK5^o3?jgTGVqs$IOq^ z6)iXw*W0+D2_t&yh-?+C$Oln-V4f-a+KIwr!+fPVf|-I*K=>W^$^?aP8 z4F#)!m(h$%(ME zrQFw&Bp5QWYLH|(xb#t&Sp)!mdq?X&jIqgW*9a-0N7S3K#Dj+1K29^m=oqL5Q@Ozh zHZ@BhB2bJ_$y+AdQRVi*&I>`88_E5;!2n%2X{WyD8uk%cW+BS;vpfIxRYSd$>2gT& zpr6sKEK-Pc5!;;P9T&Oh=0G>k4(swd4p)SXlyU4yhtmuj@r47O>3)nk>+*Pg93KFL z&CKE+Dx=PbqHp8U!i(pIFG$} zEJq+{s^@1-fixT}drz;}e@Y;v9j;1y17H>C-g`&bPlo+)9zPU+PKAM?$N2G;5q~^0 z(Eg#IqkdV0;D>^++yzuTlfqPDcEBvgVWbST)8Kh!dFA?3xNsGx$zDha<(7)c&Z2C&Bk^{TVdx8`w37bSTeGjIt zvO4j_c&z5RpxD4!D%omhfZgj;{8r}ru}%HL?Jo@wg4_3^G1R8y|1`o%o=5~xis$$Wop0N zB{s^(V75A@kR!v+KfXGH?Okq<9yb;N4l#zSd^Wu;sQ zjoW1iw_1jgZiU<*C^~TpZE0AoP*prLr<#e&5rgfB@wQ>I;0Ce%cH2`PbF{^Cp`2pP zi%a(E%OvQOA77v6ex3^?q4!oKQ+zTZvB{*{lw*?Cd>J38Z9OUM>Q>gsKO3uboR#_o z&R-fJw06MbE!3ve{xqz3&O1skSwGi^x!uNQ=+c%fw8-oP>e`F9L|&;&_JldW@0GHL zWu-j)W|I?xf}GQ4MI_d4BZU{-@n~A+q2}6ilf1Q z_9;e(g{LuLBdbp}MXX9|SU=6#>zC^?kI1WrD5GrjEsz6lsA<7F>?i7jFR7oWp=fhX zhs%zf6YnEARFe)JaO_b~kLrZ+3h^kt-=fv)$$*^Fa?|>NDS7`*-VMScZ14wfOg`2H zF7C$GxJfsNM{S-Y)qB0XQcM-7EDG)v;|@{@xbLi~a3`JPZvCk<_w1k^C4(9?I!!`r zVoX4s5bH}`?9f7;9~~pU?@>cd+llY38Ly*3_e`#Rp&n)STX_8oj|!fR(Nqt>nSJEW8g|X= z89~iyL{R?XMZr|00IHhZwbO8qa`=xPrRJOVbQ2M{&+0*H$%GJt>Ql zV}2-Yk35W@dpeJxpTua{ikI{WTK^GQZt=PH#2^2$b}drrGtaPXBZh2Riyg+fuVmRw zr8}`pC_p$qgMDVUg@M5tqaDfJ7_Y+Ms!lRl!&i5z*R+;R5v&0g$M{0&ZH|dWt)`^G zW!dFtfyA+DtApv(Zv0noG1?0MO`HTDT59n%Hl<9CnT_k6K-{hE_&&o?n%Z^q4}g&(Q#!F~ zXTaS)ay-^L%SZ9UM#mntPw+o)Aq02tMPsN(J^s@O56zD#Ik%!V^K})=O{Iv4Eh~P> z@(kE9 z0hq`pZ8}kp5c261B$1=TMX%f42+75xDZJY263>G<0sDm>SXL^wa0z#}P3UuBQ+8`q zC7v$h#Q9m}VD?S*XSR9Vy;Mj2MvDy7?#Yv zp1}oj8JcBHQaMC#oK_pqv}x?|+)+oyLV9CyoR#`#O80vpwD!Q`E!3l) z{%KgnzoB(W-}xjvYBa`l;tt28gg@VMNRkf5eKP~dO{x~2zhtGH;8`irFIht;7rF{n z_-#c{W}nS8hUn8nvQmh^r`%VRhO7MflBv1GcOGT--oV#S+d}+k-!FBd{o|+2IDpHq z$Ce?5Etr4ZUbFe>To3y||7}r(Gg!QzV?0YNXIY>z7WM?cge!Mv-ab<1Hqwaq@v$)+ za0dy5`@KRm!O-58@m-=rJ7SFGA0OR)psA^f^dg{PVp7iH3OFKIk)m5x(0j;q=XOWL zp|W)7fWP^auzxlGuWTXIet}U7v8mACVzzHue&~%jZ6Vg`It7@VDh2yCeY;4b=0&WW zEq&K4KN^TlsogS{qV5L+$D<|#Kd{# zsf*XiK*U9Xo@I5OF=wPs`hA-!ULJ__S3LjnDc5vd)3pSdbEp%75``pu<3ru5{d4TP_sslge4Z$n)MwJ{qm(soXMHxj|F9 zjwUMdO6v@YSEC9F&f<`?9^2I6?+^%Ey?gUF)TUy73$K4+Qy}56uPJ^z3N%2z_S;j2 zQj-dC4?4d1NwU^?@Q5c1vcql4`9Ikd00c%vnO;0Yoqf|XJ#_$0V})qGXKR_V(a8TB zal}?c82~VD``6AVxPf@{H`~jWI45{L8I#RsNLAvrBYPX{-|`*URC|TK%1bfrbkrxK zyK6faOgRfvExX!+TxT8zxqo@~4zZeGr(sKe@TxDD*a9+c;4&ak>4;*BkSOdqJS&dI zJQG!vNJ@mVQ`(ojG%=jaoKgmjlRt=u(4KQZqy-FyW3b=*gEc`r;AR8MWr1K018Mla z{2)C--&^6X1BUJkU4&q3=xYBp5Kv%Gg@CuiMj;)HfxrG=&f=i=9}0*F;JqIBjz65& z!5$En`{1)X)TUnlX_WJ1CXE-H6lbH*!l&MNE+KJQu2CVlx}MGR9ei&dYCj6MDVL+z z6ae(^3@UPHy=kG&X}?ahFia!u-?dF$Ap6;{A08-axQWwbUlJ&0OJSuN3PR2AWf z1P7A$JtNR-&v(_jcuw8-+05{~OU4B1o!VnW2jB#{%M3Wl&NE%n-k^EqpAe5pXx_X zkO@Y?z52{;t(HOrIZd2exY$^(<9B{g?UrGr|lpq$8rVoGF!)!>TlK}gITLr_{_S*fn=2a?>o%tGAk zHwzOQ7B7xjv!8TA$DCO<)6JtoNpCtLt)fhFie_n1!HWEM#9lr5>L{zPZWgbnrC=41 zNkHS}69%LW*9|TqoZ@ZvWgB~N#?@#L-8WJ$thRWx0p(3Dt;Cb#tkge3de8x(bpRf3 zp*B_ir(vzVmHG7*p`mGyN3EmFQ09|mM%>!Rd`=qv;|nZZEJoe%tduJ(D|IvMLD;T# zax~zS1kQNoYjwxvE5i?2sX2qT=Z!6rB8wEM6AhuGAuh=N0hS}VT<34LNnxCcFaTV> zP?gK3K0SHMV-Eb<`&IPI4Hy&c+~7=jiL+Z%4IGMfEGehObH^= zF!Tj%-h#)>@l`nN(%&DE*Es5UEm2Z*nlJcr`5bbay6g2Hg%SqoMilU4%eQV+mmI1| zhYmRQDCl2X2VuNIJgWY;XuTjDg$6=Vc0*bavFnc0UHf+TvEj~Qz$r3O7wjM& z1q}FpTU@NZn99K7d2W}1xngEcl4fv|XN*$Eje57(5b9AkQG;q665=ie+M@9h)hK=% zzRcl2=J0agqlPrIH(Q+8mgisS)L2~bZWt*&Ysds#zV)FfXh?C|5$*qHMBQ#Lp`ePxA6KG9`)XyG2XL3)RKIwOfli2klWV)MI_zV zm02I^)k@S(6ZXM9%I!aT)DsVZTuI!zYoogKQ_84@9m-tZ9@GvNZ*J>3U03Q%#0T)M zh18%iUO)Wjo!W?y`Np7Y2=ubCp`mTWAC-Sg=t_<>8K z?tE5ubLH>xA+Z;b7 ze@i~yCp@#BQdnym5+`B4f&xMS?OpBf>hjCwhxv{W0^-3CFmwoP1uY;T_`^4_HSD-Q z)M2``XH3}NlUe&_1lbDxGt;2L!B>OT$NuN*kpego|MgkZIw4he06{+uv` z1$$T04K&r`N0`d81o$nXLPBCaKjwb{Ofp%qeWBi4Fp`(Y3UAY!;n6YaCqfR$SOz>K@Ka zzCZ})SAMCEEUtRL}2MJ~A2R7l+6e?9&Eb+K`K(LAbC zfO(CbT9a9%NN-S&^5g7L`QdAE;#!+A?A0#?lfyB!*P*n+vQo-5Va@~RB)_lK;kEp+3Hk}TE}rn zC?u17gT2zfDs%BudH)5}AXF7A12RpsfZp1(2R0Soev9<|qo&QFP?5m^*&sLNJPh{v zi3q<2B)7r!p0aO8q;~viS!H4vvNHHA(;b$_#2e2>M3lrgcHAy4@i6P8JqbBfmJS_o zY*Wxr31cv7AvU%3Tg)y#-=-y$?iaIad)TC9x)>fdTdQgLsfo`Yd6)32Ft-E5rZlEP zjj}@k9s2v?@^dGmyYVmgu+rE_+A?Oyt$a(FI0>~WIn*Fl@@3C@^{dPw7y%<6E?07i z2m8kC+thtsy#j$#r|)8X?2AOb9y~dc3~=-kvNyy*WsH-WGi2O7Jv9j?4z}y zwpY@rA6v|X2`8v&Sdj|ex~40j#RLFO?d6GAtMI%&&p*i7pmb~%Bi;3T{m=+x@E zQR={YY*YU#B7WVQzach-hxS`|{R^9_L7-N$dh*$o>V3;snjYDz=O@l{nGo`RmG9NJ zN4$Ub1Kg(E|C3Ec0lhVLqZR&|R~XBiI8^S1*5Gc1ON`rQX07MnLyR@_&jCd02$;jT zrN&6J3Z@FCBh_TJ1XIGjESkY<0o$Ub;bjLlRgPM1RM2Nu<=l%joUX-}pF2W`X0@?d z!jXiucK6bS+#|9ayU>{We%h79kc4H33g=E%Y-sZc`pdv#E&3B{!-y`v!Rc(r6sRc);CA zn%A!&oX_NG4NgS&A~_(|WrJODiUUhi)2jUCo!-r-tMj?i_5Cuv_!->OR`K7Thn_mB z(#Bp)Noz0!dD>Kqvcmo%gEmYNoP zv!T^jLThIINl^eb1L*nI*rZO-%prxr)#Zhg^!!9+zfQAdx7U*y=PpeXcU4I`S6ZsAcJC$*H&lg?H`cL&T2iMK@s5kD9{79DbGV~ z%5~?>&P%xe>91jJr z=ZLh%wm(1hbpxCJA!kJZ__Xf3e6V5XyK<>7$ilH7y(c%W00Ma_J@fsX!rM4k-jl_z z+$CgH#A4bavYkKcMER1WkMTGw^}k7l_Cjc#gvVQmP2o}hX;{IiberdS=gIU-Z>O*B z=*lI^8aff&u^j$PdYPD)0+a~PN_oMuQrRwMc~+g^s_8q`I1B3}Zh-~;5QFj{9xb|D zf(-zluAJ^%rqB>b>Pz9eoD-nsa%Vo!I_l(<@8=y^%D7%NK<{DZEDAnyL(Hg_Cw)Oi zHD9|%#+4U%Mh}5D@0qc}4m{aYC2n3EPzDsFNocua}>h zKP_`qUgwcz^AlCnEIa#2>c=uw$nSGq@@aQM-5{Cw)kU0a5<66r4ju68=Yzv9@c(Bc zAiPe&cm=!RG5r>;4#}qe-qSaRZp0(zubmi5=MnXFW)qO3vgAgMeo1EU0r9BVOnX+g z8E(-i>JDy`<|H>qNpj(g#*@Ap>u9D_m^Ri>kCI0X5@ap?5JG8ug{bV7beAcwrTV~J z#lA=BMebZ_daIU!UvODiCWQcGc3)R>fTsPFch8!W=u+#mBgVq;N0@1dj|j~NAFW;s zGpa_wyLXCB7S~M7d(MY@oX>{{z$}|cAlkV(ZGBUae=xY!;wj(KtsN`-+GS=MnlIuz zF~=Tt_!|Mj*7V-Y4fQCV-@@x(c+^+~r=Vn&yK8o-Z+lVGz3g!k-eAwnTuRj!Jdzk+ z-etl)%KJZh)P$IJ_Fx1VvwK>fN2FANZr)5hUc7MOMLa_@?36)5S3tl?WwCUz2sme! zr)E}+iGJoqQBs&x6t0;%oxCgInd=80^*oRc8FyD#oWhDXlHp^pavkdVSS#o2$!Iyk z=+)b2pC6IsTEZHOQqk_%&dDKhVw=&fRR!(yA;!|t*a>O0B^#g401EeKnhe>9TW^j~ za$#PMBG+VYH8@}9k*Is`4w`iG&Rf9FpSh?dDOGnRk98jZj=HIsOH}u;wV4H1^U6Kc zQ)N^8aS{Z*=5W0MLyOP_4EeWj9nktu3tUp*S|bGOft7!Dm;aeX`dNvTsr<#QB|iUKxU@XxNaayFf~ z@rf_4wD8tM-lAufbI64}tp?5U9-=$9 z4uQ)qP=Zs}k@x}moI9mh7nowbK2XdNxow-(%gC%C6F*wXdv(HTm{;eh&+>QHGHo7y zQ}4j~x0aH>((^i|cczq~%;oNM$1wX0wLyr%4b^ zO;xt~>_*%bjy>upSpT*HA$WE#8bduw>Q5v5rQ^ZWH^H3J;uj2q?;J*u`S2E;HU)ZW6uJ5{n!_4e~4)ZWCj($*%W8`W0X1tY5pMnlvY?)O2MotDo%fn17|@9`IN+|sD?~6 z)sW0UfPgU4H_M=AelSfyL1 z0!g|IShtlCEQtnggP%Fr%%e}mZ7C9>F7``S$`78EGU1n_3#8c)uB$%>LK8Ay z^HP}!gk`0|PR71Nt<}R02~%MwA~IG=&RVDBwI})Uc zbK%Aq;TyeZ_fzO|XV$fWEJxa6*i%wrHl-r&YrABjtsL(@5vJ&}L37!1-b@8eR#161 zlTKYfJNt;#vaNI#Q<@D&49BSP`#og6eeau-Kn^a`^n^)2abiC0nL}mi&;k3O5`Mal z|F zjXW6#s;0qgc-rX5m#L|(KSr6~yAMGHubt?9H04aioDiUNgO@^^;0 zt|aY!$M5NXw5iYT1~TSx--$ z@6)fSBbgYo0a1_bB?_PQ<_R+;1rJmLBk1^+g2BZ!3`Dt}$>f{H=!p1R53A;0csguw z>Sw6l?AGSaH7NleE6ye_x6#rr5Uy35%>#$=SoZR>Jy%HF5E^dem@Yx+|Q&xW( z<@1i%t|QgH-<+=GZ0lsoaoVaYTpsBz3Y2LLt($Om>Vn(Uv!mHmFRns_*x5MT>nb>U zO^pjv8i{x6z|UVr8iq0kUr70K9x!yhGBRu=cilS5U!U28Dk_ymF5z-jLFi=HE3C99 zDzJO`VK%jz#=mAepZMB12*W9Bao{ZYqU4DaW3FYdoG3gZ=KAj*k>C=ZN{91l>iN7W zpS@q{ljt%M;d7p+?sR|4x4>ePMVbKc?2NS4;)f=;xGVe+jxj7HdB`C(b9;6xU55ngc3Kb!JRlAaXhEh$yzAaA?sH;D>O#l)IlH&xHZklhIarn`BO)T?Vx zG}-!D&$gr}y11 z&kH)-V|Vi(e^fFj(JzQ|>4XJXdouX05j-mu0Lw}dWIRB?ckp1zX%ZmMWfx>$ktzD| zUa2QpmDb}dmB#g9PS4dHL7)r};;CtLbf1 zd?E8@7}T||8OTGN`Ul}aIQc>qRpCKsGkb=lLjf2_!@(y?374KsdV~i#Ew0$Lmn#LodLOw;d=Og z^Y{M$>n?u;I5_wKz~w*MPZ{k207NzOHrMUWT1#`CZqJ5z~Mc~TeiQ*!EYrd3V$I4 zK{?3KUoTK@I0!X*sP1bqCdLZvIIW3N{9j2AcMOaWC-9v2G9n8&VqjvnlUW!vy+3%jPD zJgm7p2EWMsg?e$o28a}7VQup6Ekf(1{qYg}9;oIq!O~Jla|?I$=;N&!PXYDwDc57* z_uyB=>MQ)mVQNs?V`99-X7SRPc4ECto-(XEh%e5ZNxN)@{yoe_s4(5B8X_&k0L&h2 zkNA(hZxsNPfRkN}tftV!N@JeBeB@P6H2$F%KzD!45uddsJ>*>?&@Qa>-JE!H_7(og z)!v2t;nzQjC5xLBU!M*=ElLS~hs*P;^NLJYw0!T3o3;QPTd0zhSrt0VRAJT216I}@!e9t+aR zed%zQy&!HQ`KoFs`9~KBf9^VFnuDu%tN#-#Sw-JtytCKTWc$N9|C(j|kQ0^mJEA%C z$9GulXN92De;>}A>oHa{9~7@2!o^w?+=?8hl01h|gkt9(@A7K@Cq!I`0hm5mANfZA z69BX#I`U%_S3_d2%qBFV_wJmxMO)Qh)grm>&u=N@N}N@I7%Sp$_JXHg-s*ca)3Pgw z$=*?GKz)|ze)3Vu?)T$1R|~;Y75j2ktR-tG^$$k1=rw9%kA{LhkPKEdw9jb+L522K z&QVUHXXAqErVw!<24MPNeUxi`1Xlp4G0uqQED7P5?CZF>%C1HYLtJNdeD`NjF(?-AHg>X#U~ z&B#b0#HdMDC8z?Qy19e)`t&geRjNJF{D&sQCm`ZN48Zik`l#3Xh*AI$wdk)=P6s^N z`QRc7IPm~IU6WS}e>XCvTLa!n3PoS^04+%4$#dbRWpDM3UlH2ZB2Rbpv2pMh5W3!x z_~DdmJ-h|4YAk^wdY&|rMg%k=_p(#> zzyI`BUs`_O!TXIa$~0xqtWr68oI43Z%!uj(TN^3)nevy4kx=UA%39WDlC9c?X8$?N zaZ*5=t9?wZp&a*ah-Efz0X|?4A}+)LOdqU|eyxuz2>{_KPU?#L3oyo#YyDoEGsiR- zU+-45j5Wx_!gzwjn5qx7l#4d1Hq7h3)qnmd(3Bk4=9L6so5mhs{?yzg@At-D7@nPg zt-r}c>N=GAjwq3LdFj{_nD60*oii_GMwuUJfT@>?j$+}kyw9QC_f;%b)`~(D1~H|MbK2OA5R9zASDlv{>=vGQXj$Ma{(Xbyk1r09=;MFs%8GlbUx z0MrcO;kAv7@^DSyE*FtB;I0-GLsvJ>rGI^9!v56c#?`dxDhxMsmwTi%Zipyh@YAfk z5J-4ok33f1a!f$Lq4^4NeGl9ZD@;wf`}hj(RR*7DUgLO6vc4Qr1(&Ap7bn2j-GkU z3F0&YF#sEB;E{%PJ6nON~UV3Z^n-KGKc)(fIot8SzY>$!?2`BP=#s~*K z9@g$MnPM)!-OD^S4yUdDwfUBL)EnPqe<2HSw2)oAeAJ^osF&8_M`zYkFpqV5N zvuvyqTG(0H=Yry%vW4Wd;F_0r11%cegf%%dk8kzS2J6cz1il@*^+f`=ddZJ#@ZV`}s<%0@F3M=#}P?4aQ%qvHpOF3o!uG z2kYZp>tnqDfU=~OB#^>3BYd1-yC zpIZE8JZNXMJyZ1V{C!U0H?b{Z)|G;#SnH!&Q;Z3Mu2AaBMJN}J%d_f#?AXGtu%o@> zo!!ifgsfL2&&P*LoHOwdA}+)LOdqU&=UN{J7XaFK#Tu25t>_<~EO8C$vf@!CX@6n; zW1A_Wp3j%LX_F7AFp;`C#DPaf z{@gXS0P+K)R;`nu(Z@-0qC98BnrwhNmh(sUOY!wCu~>LbryYaQ;%{2So8SsWE9-CE>hcIgAS(PgCi*f02S&= zA@E)@>DjPxUd^rksKtZo{*^T|is8JrMvHMo8^koz=dH}r3U%ft<8U9upwzd-e4v8& zSWR26#Od?V;1h-Sq|(Ao7CDBzqn^`v-#bDe;zA6-^uhZ0*ZPDQm!B!9f8eGv_!xgsrLlu2>*1?nWi1GDTjW*PlE44G|Y& z0HzPtC%D!p76*XtHKn+-a^Ihg^Y%JBGv1|qPV?_R0z@pf(g<`H;F~UtXm0IL z?^}J!WgHU&%oD^^OxwE8>gq$HRz#_2e2x#?>&T2A0?-hl)X&F#yG6cS`s;W-DDg0E zc@E{L@o2WJUN{`?Vy%Ra-~mKjhyj>BSfB7(|6VEpWSQy9XulmR;~U*J6`5zFM?)8r zT^MRiXGnBf8YQx_541jd_O~=?e&|vk;qBGBV)Yw5OfB32v`@NPRSFDA<9Do0O(``z zv$kGv{LZm8UxiY?Ac6b9x1nKficv18rWE_xJ(HD3N8aCF4=`v}vWG`|feyP#=wj@n zR40mx5P07C6yrr3=M0`3-|KZe|xB_ zAN;qC;-Bw?|LdLC_x*Dh=)e3#_`lr#e|gx;r}p2U&ehWZKbfoN0tcXgW4-zc-oW=< z-MTu2j3@wbbqgLr-;Wd@06NS8MJhD{3uY@g_9R21k3=!l8nk_>b3S+*1@U{2$OFj> zY!=cpI_eI?4nq;Z>x%GnJpe!*x0oTEvLT!yg|g1oq9W1NZ?x(DorLxZtHm zbPc%6dz3C$A1`x;!iI1ZQR;rlAs{vNY7?T4`8)KD9I`F4!pqMyHdIdod^ss!ezdjY z`qBVG{H{y8DJOa|9%Xa-TI??)iapkn)!7p#w}OxR!d*LhH*1ew>3>G(rw#pIsebX^ z|2CAV-s2>IMJl;V^-;SyQzLW_%F(#*vCi@5PYL*jxl2jl=qge0d;}0slK5C&T4JD=-hq zDei5aInW!-gHoU7uf4Z3I?L^{{5k%#Ale zsShgMBLJ%BC!DSDi!57@>FdiJBds|OFbYU_pwWQvF(6Lt5CgE8AFNMutxrP?0AVZy z?l_9ZZcNYAQl!l2n{ti>GuiYzU`(IS1W`);=>{^R7JBsYM7iGTmr^a~G6>`6MkG=q zP&_ZsOFj*ITJC&e6;r@$YEt=v7D|0wV>!f*8smsbGYJouLU9ULcvAE@r5>A-lgu=> z6yyMixDW#{eX#!hYkm4h01*C?lWNl!KyVV9{~C_?p9>pzMYL*y%EtSQoQDg)S$+c1 znkvj})<*ud`ox)0Lpv6NfoGb*lYY?1|Cr%ttURT?bwH}t=;)dPbp@3A86;)}BeN*k z1|TQXaj}hh)_RdGzqMB!TH2@k?O}(x5OE;}VESNv(rbN2IRFS#N7Z*tkNHV7uTprE zB6gbouPtBh?3fIj>wns`A9oJg2-bcembce_JndE}7f2je3q*DEXZ-GyGjOXv z*Ca;?M>V!XpBc~4$7h(XW57sBY)_-;k0C8Z1y%AJJiPq}qFGmpBt&O)aFQ|35 z5PcEtVn6t{a}>x?ZnBh!KxcWYza#Q0Z{Oxg&KldkG?6iPYxr2Dq&rghu$r3{9`W96 z3zYhBu@mT=;b|pdkA{uPS&6j8zH=&C`gk1G2w|iPR{1qU#Dy4u>4WtjT#LWOV_M`Bd6XR>R`4@4!R%JHOMQgRtF_0w@k6pj z3TxTO^+*NlQH;oF(#&3w8g}ZkvqG78wd(j#>R;p)yuvjxfAlqHT~!{vM2GrrRJY6C zeKab>UoM}2@g;+*SPhQ?7f+wZ1k<+U83IowYOs5Wy!>(6_-*G(sY@h4%$U+<6qSu# zl|Fd*7ZGe6MCyc7VCTjEn1BK1y7-QyNo z)7-319Mq7w#7f1(!^}V}x4``ip!#T0MkUVM-oxLA8;Jj`JsQAWu01ASEjE%|t}1dP z0&Z>^!tofw?dlLmM|CNg@D<_jL@)jMT6Il~hWA&uKzX5CR1Qyw; z%$qSB&+lUdN6l@0kIExF7aYNr_KVB97-9A?a}9JJIDVUWb!26B#<`8!CbMEuXCq5Q z1v0>4e}O|+s8f9Y%W7ulDIo!feZa(5$CIG9#|nPtFS$s5a|z?evDVqK;cTM{~a=S>cBd{9?+EO&)v*`P>(M?&7oFSM`)Q_`+2W%JE+RAx18lMyi2$>ZKV@ znu?#>ABX53TEQ=JwJc3?;lSq*Co_lv*mwtzcZ%!TPT&UsRMjg%iMi0;{Q^)@LhCt| zTB!Jt-3nc|Ux|#i9xDlr5a_L697Ay)rE$BjWBh6+;o|3oI|K4Nr`J^JyKoHImLJv} z!KxOYY{#=qf>K|1;v(ASeo&B1g$dkeoD)6|i$YV%QxeX%tcLa>iLs&(aUlj^`e1#^ zYkiSs04T^RYLY*iFnx&59q};{J$F&QXHmj=q_fKM=%Ypwb9Lau$Gs^n@1D@!>Z9dx zF!cSYa8toK&Afv#^3>c{pxhu6e!(uk#E^(B?=h76c6zOr5d+8oiQZ&~pr4IJL&Sv`fa!zvA6@H9Gyp)v>$+~sm?w9BknY}n<{wAePo}x?0{%R* zd|kB3$7rSw=+NMk2v=IXdaEy+X7W?QSMcxGAg>dzFLng0qx!Tj_w(I%UY3kwJOV61 zsUPVVv1R1h*V)y1WSbDEHd!Y%(?xZ(*>ajzx}ZMw7k0+>^sywGXcS$JhEVumGUx=+#ATl%T2itz>|kEqnTb0Z?}4^a zOSBb_6S84hD)3=c7R7S)te*iUC=8UJ-w(W7k}LJDA0jTq08AgOPkpVgYzzQ-_&MT_ z$DNP79_93;G*^j8acV6>2PP(4C5=?ze&SpPqT>Y6!@HV<-0F+b`8kuEXt~HESiN}P z_$WvaEf~)>m%%Vsu#L6eKzws#s;mWJg}z0kWcEYBDo%pcc07|cVkCFnRdF67tpF7t zbuzIk*l6AAZzetQ%{Q;h?BT;d+I+}Dcw!Ne@CEY$h0~DQL+4k-1rr0~{$pKHjf z2z;WR78x^RVBvp)4QFHMDw?KUJfZy=A}+)LOdqUId#$fy2>``MuA4iFI=v}v2dPvn zvK>bXea1GAbU9v#XyGWQ{nHGjKbSZ<=!yPttFNG)<)N}IHuOt~1C#HZywYP(wJ}rn zaLW*JS}v!)7TR;^&@`rm;JY^&yguKt9R5nk8B{d?$1u0Tfd%f##2fQoL5R2z12BEC zKHasx;XMGTx$M*=N{QIZV4D1gNc+frwZv}|^3uOM3x$nzN+u0Ofb1UFKOHNSe_ZM# zm>$6&f|!a>_jNAfxq6)$&BK-lrk$-kNsP+km+D(a5x@23Lc8BzrqQ=lg!ht8{Ihd7 zaru`O3(qdcj31%%cPmhyDA$;QMvl&l2o-ihqB2}axaU6+dJ<7WyY-&GGtq?;a)@uqJI_6z**Tk8;J#J{hRS^`=l|LFm#`edlym#>=bATam6 z_1t%Eg7E5wyUqf=^6eCeVV>I`Ky(KZh2MGJm#P#o*e~M25kFo%vCRadg8c+N-#5n|F05-{hCmDw8Nycgz08#)V&(X48?AaD3lb)!sf(?Lstx8jG~^>Q!f*&fPEg$7M3o@OPP9YGjFJJQ=xd$mO|TI~&2<9^KrDD@FC$?U7Pkz?O4vHX5egpUP? z$Vlr8a$LnHUQ#+fvL}X!3o!uG2kSFl>$@NUKzZev3Q5Xnnsw)s>pQvkCTxVlT|&q; zkx)dJ&JA9^k_Y0t4rpz|+cn4Wu|uJzx@06=iw zOj{pZxQ`K?FNUA*$o2SDH2>Le`Jg{@tg+_l_+bEOv`3nRb-#4@R^QX)%`fBC0it`% z4Ufw}$d8EQ5Kb9CxQYt8SqmpGp>RW~PeGm6ZW8_1!)uFgwf{a^*jB(+jmP^vtfDcw z12c(09f-IP12BECKJ&G{cL@Nb$U8#QFQ3x)B>&(WFJ708bB;1@89l}E?5Cro9t?4B zAZ>891^-fW^sT<{L5=F-Q^FzLr+$9+zy!S(5>u;n9pm{#lT3rxJ)}NR>Ju@U#yKp| zmAXC8ah}q1V$2hpO>$V{ijXxrY82J9goB6+F#yvC>$6m%^SA3GIS?b=aE?M88{GRF-2PeJ3cri{&%{qJQF>lvYmH;S zg+FRFJi`gBszY6%v!Meh_33y2R>e#%3ku@mDx!p+wFOBn3664+=$Ii7esZqOnt_N5 zF#yvC>$6_#hYVhxC?mUzx>Kv8iy8Tyc@3}RPg$#eIM%Y$l=at5e&!6X7$AR~$Tq*o z->KW$CuH4!8uj(ptK+3T&aH-Lb)~LROV~9<_MF&UkK!#6D52DEYwF(3_27Ik)x#|2 zNs8cH7Ed1(Q@wgmJ%^B|F@z@*A}+)LOdqWO^jbeM0ssmoJx11zeln@_Q~c3>UtKrO z{1+jjixVzWQCdA|Pd#Ixs4Yc-%nQ$d9Wt3Z)lCd9m|XG4uukE-_89zq{pFtz#Nm}2 zF4!JOZypOnsc*~{^^(Y(zqcpCmi@5K9IIR}sR2MrRt2{->1vCw=L!)QVgRNO)_-=b z|IQi!dPLP^P`-42FGvfuY?l6WhNQsnFAmx5c5hGTE^_guVu1G?52+A+B<3z_|DQIH zlxKfakfbo@JK~fBaA+9F1jQARCBIC(_~GUnj0sehf>K|OT}k9ko`Jab7m@u{l|;J9 z$@^V2&F1s_%oL^p#8_OQ)4(#`5uha2>AH8S9yz?=m$e1nCMQ!KQ;$@BKh$a$SQ|(< zh}+eoA{$sA+y*km6aeB}*h}-Q+y<8Telyu%b=UR^G4pGVU*(Ka*C8ayu_Ob+xvj73 zjZ;=%wSh#2+y*iPB$6~E8m;T1y1+469jW8yi}X_dXgHTxwNt3H)vFyK2~uVe^_l)j zPg5>j&2{Xs-dj)aNwn(moIu1wSUs87ef4Htv0bZR@FIj?ZjkTIZhWziMQqy0sMW)X zQm0kreodmHU?@jg!cnV~ZvJeJ)ReIoa&r=qGTl3>@p}K7Rpf%q+C;PW5T_A{0oXhP zo@dyv=b3a*07xAzJ^R4#K5;mI7OpEoY}_%CtQcj_{c-DiA%kCecO!vJBljnkJbJZn zUt^e`>t=hFD#mF#9&x{RA3wE_*7jg&iGH1}Hb23)nX3w=ezRA@S5?_>tIvtB)hs5S z6Kp4;QQs>)nP8VN5Y}bwg*63%IEnl(0$1}4$F+WL1puT+n_o=)>9`c1zsCxzEaA=j zIz7TkHHpt~;XbFFGSAZ}mTdCg00&2X+|rKV=rkmHHw#n(K=i{xDdl zER*hOY85h+`kh-(6*2V-aLPdD~1XD~%O(bZQ+;$I_%tgFDqlKsCOhBo>a6lis@NC*j`4!cIY`Bx21Vb$D z;=!ZNtkwPJW#I?K5OE;}VESNvu510O*8q_DJG8a6qkFP88R2>ZinfG*3is5RaZuONiFBC>{brOgg9(byg8S@FkV12X81foJ^K?% zeH9r}kCqb+e0g)@ykLAXnopb~sLd(3lPUS+VPwy?Js{#j48Zik`rOz0jc5Q6;ilr? zo=8{B`<0?ir9vuUR&$Pu2_L&3pMQ4*o$QT21|qd5g)rRDiMiEpV=lv0enNgn(%YQP zeQ#sRIK$)5qM_dQ&pIMh+SDj_DD|^GZ?NYSUWC)&CdsfY2(su!cy@Sc;_%!}X)tE0 zHt>ar3o!uG2kY}(>$lZhUbd2P5h+Y$<#ZW7bt|EWEmg)m*}w+(F~;=r_F>cSB2M7l z!W!Gsnxdz-`mT?*G;|QXG`CQB-|{!*_G{_{cGIE}MqvY5>uksNI4s$^Z4L z?`g8oCRd7|bQSrZ{2#Is>J?KnTyun$nuoI2wsmvc~(e zk-7}s*iYf3g@p=Vs8}(o~T$vp< zOBjevOC*i#K|LLi#7}=TX{7h+vJd~XfrJ-Y+6|?BqsJ+h(6WN68(<#BhR-tmJ_S$l ztKn0e5-KS5s{~c8I$v2Rn4Nj@1Nx?%pF8QzIDmWvPY<4>-Jf7D0ok0UWO5FMt<1Bs zl#giF5Z!-*GWDi19xQnC-hG*#(!EuUcR^f zXS@A#6gT($zka<;{FDBl(f{#uZXV?F@BANW@Kb^Z;9fnw+YJEL7YG1c-UDs}Ig<Hn^E|(s%3;v+4LlEeF8doy81jM#l&f|P(UUSt366OD@4P*+z zsNmED-v!&($VlU7qx~K{Zz7}QhgBTzP{Qd~e5(QxJ`6fi;m2cia*>uxbfsVI4^)4w zA0qhYORsc<7mYf={BzG8Nk8_FVokYFj>a7` zxbUyhT^=7JfCrX;RW42u?#<)aO8BU9dp&1z(Pe}<)j$l~jK*7?|Nq^%T741>09^jV z0e*|K08nBZuI<=1Ir@cRr01@VZO^k#CQm0-0xIPVX^sXdSz4gJ|8b14kge|R>kwOq z(Y7u9Pq7Vq7c4$#Z&Zp%IrGjk_v)YI_X%aRgy%u2pY()p(>Ol_8)15?z>;0c+KWmU z*!x!Af7I2 z{h}}Urh52e0_Z{##)k5~-RoALKGF|URF3CjI^(alWi)-3cXZ7!i^3F3IH@QDblrqZ zDD_*CG8*)MO*s%G66=X$>y?Y2Q0DIUL>M6G)$z{GI7mXog&2V8gY|{4^>=08oFJUfS-~JwOr%b1$fk$cQ@6;lc`ZNA- zJ^a&vjD(&G$An0>g1o7?MAMxVD)Q9yBst#puv29(ch>*$cD3IZ4FFs|4!|EC@jd|b z*a+nfT}SEXY0VErsFvMsuIRb~d`Q1ml)q<9;&CE61BK@d^EX+@J8$`MzqSGHH|34I ze4|XZ%i8><_)M*-y*Vk%xgtL>jf}GdN`4EG2Y1(fchKEBpX~fGOy!~I663_vIcdUn zQOkR^f&B?$Z9@#eiXUA3VmJI4e*qww6jj7C4E~uyhHnoi)9#h^`~Dd>oKZhSN; zC!ZY*lqE6FobC01zvagoiQnU5Ji-xH`}p}8e22nce!Bqn#PGmgdint>wGe36pBfK# zc7D_s9@vZhDfW0RU<-=qwwpSk6P0}^xRRE~=m$|3VgSYu<`=)=$KSZ@kMyHyC6#rY zXg+&T(2(L;+#BDF8LelA^0G9mN0MYS%Rn!q*pZ@ef81MsG;^RxPCTll68SuDuvG91 zm-wyqQ%v7F^_Kie>&`jS)W^+x?_>Un+Q>my%WdgtJ6Kll{c?qWu4OVKlk zx)1{}elWkp4L>OY0L0cPw_;U~{Ag6p26E&jcJ!f!%@jW)P)#;@q_s#Z}_P=0iZWq=X0~PN?G-PO*I*NresUi z3Wt^-iXsus?&B1Rsto`MOUmKMBTEi1`4N5}!5@P>DHcsQi{_jS$POxb#Gk7^(42ER z!#BkB3mGr9^!kPhC4c4CBNxwfd!UP%;7E6^a8&%0qq2MvCTkzhMeg%{<6ofKS0s`w z!S@!nxlA$N{usyGjPRT=e7gHx8rx|0sa%#5sKkG#xnU)k?!~N=usQv)LiVBaUr=H1 z#?GX5O4lRIei%QP|2df7A6{$SAN~mt0CL!z{&J+5csPm}MK`6)5K0%WvqkV}x~(rr z{P%}6D>b0%C!F`L3?y_{%^*?#cg-Lx1QOKnQ0M2(`e@T5To5ROv<~QHyZJO~cF2!` zn-6Jan$(FThmr{AY-GrL7~eYOjhByE8EAZ?+GO|wXDTj4woxLnDp+!SH_+1?aiwqf zs7lttDTypd&B~UySHnZKYH4cmkL^f}&PXJMKtAFNuZ;(&VWD@^0=LM53#SZ^t}b;G zm-kqj-=Zyw{x61=iQ9``k-Xbn<8O?NHM=amOhH%+AX4^&rM;-40HO1N1yzbpvfjUr zYC2E*K1(AVyqzQT^tpMjvnY})eEh_ZbsTBm+JBW#ug4=b_f95DDqmyO!}S#9`%n(} zL{(P3sch@yjl>kCIh$@Ay6$-#jv5qiFFr~-&d6ONh|?Lw0Bpd62fWnHe8+ZpxyZ@h z_ijP>`HH{PA-0@sdgF5nl&laugBFs~c}{^PM|B`Mw)ys~70&nD-JQ`VWj;@xNL%|# zv6c!;_X12BFtzw`}1e-Hrl>YKl61AcMfQva}eE7Q6=0x4*HgT}9lfX?l1)-e;+O`^NXlx&mj6NcOZ9N`69T+@R$2 zlj%Pt%dZR+o#8CPw3)@-{o8WMrwai6-tQplLJYw8!Td5e{1VRqps-|hXM(No-H%%g zEyT)lw-G2mQFa%9f1(ajNoUw?wgOu^__`&?LH~jLamzUbU=UHp^QA?m5AvCs%;0f4I*x$>-i=qA=PxPRBUP4~+0N>KFm8 z4~L=XBuRZ9(C+(->hI-C6wJt&-y;pYLl%ho9Rn?uErZf4bCdbQg81iZh`JC1Fn%z< z{0+as+T~G}Z0zksUav;oGgf1HtNyAip8Zg6`izxK{q0#de`1jj@E-ag+sAoMa6?cq z|2d7P8rA2=Ml$Jx(FcFuOF!U|bQS9%DQV(%?`dd4Z-8?07sK$v6tz@;H9>B1fVGw0 zLu~OD4W~jTYo$s?E!ZmM1fnj)0E{2Z|Kf(<3I_mUj7;^H&fR-4vM)5b_AxE(lsvkB zx)Z*ygBhWi3aM5fXg}R(O{!qZeLMM+KVA-<^HX`~^^wrCyT{cF-Pp&y`;S;Q3&o@T zM})DdQ1aIod*XGn3gieK5c#hhqB`TP#xGTBH+LoBJrwYmbBA>Thx_)T1F-4`SHI#7zem~S;Voh>0BXH!T#7C>2tX0nWP58pagEgBGOIR2 zvShrCvRzr0*e_qgzndw5Py3ieZ!b{%>S-^9)RBm=9L=$+H+PI>i8X5M);{o4tMP_wsHX9^DJ z#@z=xQgh0`b!NJ{u--q%(GB4iU*rfJJ=ByHvJ^8TH>aF`h~(zCi%xq+L-maWiw;VD z{`cympHpO?hZ<3NNvDXe;`s|utni?44B<@8Ve__pfT#;G0OJSqtKIMyDFZ<0V~m-& zax%JD)!vCffl@ZCsnE>XjjtL8WW{X-Mu6~Uh{?^3HBWWb^IWDY8(Ycj~ z{ajGz{WQawT&kn8Ula9WTj5{SBLW@ghO{K^FcREW|5^EjuhQsCH6+G{iMoW%xtQYn z$e84O=qH`(whq@-A~<%u?pw-S|#~ozjOmndi^j*;>m+*JNl}AnHO4 z!1%%Znm7DkegQ!B!|#?W2${{`xdtoUtvaIPOA-?rmPKqwjL+kL9yUD%-u2yS5g2f4 zy5-+1%*@hA8M&t<@*<6w*TDfa%J)+7v&d@w+Ic?n#N%Bk`R{gD?d`)=W9^a_$62-_ z=sj;=9eqhD(vI@w!z%M#Y<`Hk5CbrNFu&Ff|EM|uH2wD=R)5TP$s53&(#J41t4wzP#7K~3 zMZL@zgRmvRMH?OYngXaU!3W8Z&^cS?Y0TFI{$XI_^eZdV^2fv?rDo>8$X(@N{UPBX zZdWh;bin*q{UQC~*TMjxZ2p&K)4O|IR4QD$QL)(gBLuc%D-B0jsrT?j+Z}5zfDaKe zq>*d_rmh-9qW^CiMB>OZwqbj09@xeKiKAoR$cM)Gue4UXeEmx)7pwIIUl1hG9$M4< zhsl>hSEV^~v#four0%rLc3P4*i9eZ{m@fO~P38u*CxMGWYD_>HPO>c5eR=1w6%Bsn ziEmP$aJW74N#vm%YMw92%15YsbOy1-e*XR*{}reE#Y#}KVOzQ74Jya<;hxms+Y&>e?P>NcOKI#Deg|&5m8?qkt&g*2#|3&!p7amtDF1+q|eMx zWa@ncK2I0?DfUqC-=)X<);alvu06Vp}5 zI3(~}rE%%g8%Cx*1c6lFl4poj`bTE*;t=;E5CgCs4R}YRcg>Fg#|r@2_h9CfSiOu^__`&@8H~g4_08lM+^*&aYD5;~@J&s@ESO~jZi7L3&7H96?(`*_Cv&w)rL>`8{ z65-%05P++{?~}ho*u=5xuI9TvY360L`^tw8#UGoV7mjX?y+bAlfs#J}LyUc(X~FTi zZFox+37e5z?ob zEob^f4lic0%(cWCpJnMRT~ZW(TirHQ2O29j1+-V5vai(UGkN|lAGK?ELo@Q&GVg3B zxUNVcyu$3@Vh)`Y1W^}a0LBmIH@e|xJO_Xxd?)yIVkdK{CGuN(xYY)COdd|T+OFwj zW{MX8v6s|=FA$j!i|QWd-15(O#WXQ$KO!|_(j!PPOi!S~@{FYj!K8PT6EJ*x9KQ!; z^=mMnJ?h@2!tTe)NtMo?Q=9iUV0|(?XQ)+`+DIsr&kIo(VgSYu<~P3K=XM8xn0<2H zr`a(+-WR8>;uD{)dV2>U#b1}K=x*@pp2H7iQlJ=$R-Jl!J-93ME&OheR#7=ZDE`Au&4#R&l*jyBI}A|@o603iY^GOK_$A6k_vJ3qcq&t0f{81KC! z2NYsbv$R6|^{+G69%81jhoemsVOXzHJ*sR=UDTLvjzXBK&;Ky{O3g6O56bEfjn8bM zQ$(z8M?H~une8zZD=p*5>-Wu(M+!be$4P$*Q5RwW#t-H(^b}hu#vA z)%Lr#`ficm{i>+>m2`1_C*d_u)P5rXil2Mu2Jx_JTu%N7VOJ}Rm6XIziM{A7R;LtQ ze)PW{cp?gt53>LCM~;e;sOl1e_Sk~Dc+(ixeeS!`o`aDrb6pwY9z7l9DGT@LX4rjx z{ajW6J@zG@@_nYbW+=eDx};m|G)3P$O?x7_g^;Qo7+gYx8VLuv&pNbjD9zffAjUa zkK|1c$$yi$y6ZZ1{Zqn!z5=el1%J6rP+Z=)e9C~U@8RLlD6YQVY?li<|9$)C4m3D; z;eXwKwd`XS0Jyy4s#Bytf=9D9K@H^62Z#*$I|(^Ki>ZLzuN7Ve9pn8R%PKzgdM0-9B1&z}tW3IrLW=3BAmL z<*{~QCYR`gRoZ92Kg)K!fO0lE*!;fM_-$qEE@SH>RkR6d+vd)?P>MSXvV2Hw!$0f`> z&awljSy5`2c{BjN4kq}u$k?Z)Z{ib7By1?w(Guo4BwuKSrSzV9*9Z4>3C4HEZ9vK2 zOWw_*ukJ*X$Jf419lpM=5QskRVt23vUnkc%p2m3x;=TrA;NQ$f(EmsNfAddX@mmA{ zE}#4*zjGb{B)U%YGFe7TQ2m(d_3}PB!bVAm0JSX@WpBBg#-gSI7m&d;@=o_V>VF;R z79wnr_5AXpT!mP20oiR*iF$w`L|uph7(e*6h~*8x&jbKOBxuNBlV_ILJ*0?PRjSjS6`>~_ zGCLwqf|wvqIa;U%bV){2TamI=zI`K_LajO#t^VPWcrBYtpWg- zk8@f5VKe~H@?AQ8`!cd}j@ah}&-X6wOOFsS?5J`jEE8|)R#@o#1#+VS?4*t>`fvHg zPksPAaO^&}2-nXf-1!<3bN}TNBdzzE?sV21A6C2GLdj3=lQ*a8s86gO7-8V8*fH_U z?r-Ellv7^FlhVx*Y=S0;#SJk4tA23xTi@^}##~;fDuamzkOlW3(;V2@B~$pxu)9r> z{?N#l@wlaRa#?HghWx`x7tKv&?*ob4ItD4mgeF6Ib`m$vIYZ2|z7 zk8@f5*<=9F?0Dg`-$DnO7mguaueuy;JvbiO{^HOMq-eJLf|m|R2f~*uhPlL{3g1>g z(WrM9^Xe-a&w>U4L*y7_Jj?^<{RjOyu8af%^3C|TP*%TGeT_fhlf&Pr$a^pBPQM;Y zVxIl^3fjgG$rqG*<`n{Kp!6TxUp~MUzij~E^42APc?STb06^s-@Gi$YU--gtC&IRZ zTk1#M=q z{f0wrwl@duA~fXE_%a zchQ)6o_nG(jVn?cuE6&FmnHijZ&%fC7XY|?oXhI(wF7`~KCbm@I{!qIb6p~MotiTi z;rI3{d|0_%x%`jLlGXY>;A?IaF$ zPqk9vi{Qi`8Zc4>CI0~5qU;XJFH_7%i5y>~y9!B{ODQqwa48N+)_IW{R!}s7hYBxc=?!vqldm9jp4<{ z`ndP$aB7Bf8Laxj)o%~xziby-=#Mbr0051nS|QQk*<;1DWImbm=X!jSrKyLM&?{Z$ zUX6l2{TTyDQWAd==e9g|)h-hAf7dRuEpT_8ji@aArI+?PwFu~&e+NRJYqEROEBbo- zoVRr82URBb;A{w!S0i(o6_b_>;S$Kszlg{B^BP-oS4aNhtaYK)EnDHB7uFJ=I3meQ zR^@RBjv<(7>`fup7tQ-EsH2KNSWLFg7Zcz1?7#@~T~A zRp%Q;f)we~!T8!=4sBm>nAz6j4%G}^F5NL~Iqi@`0HG?mB-F;YM$OVDA-6XB$U85Q z`6R$^TT6L{y zf$GzzJ+EGLFPqQ4CKpWj-vZrg?uUH{Yfxyd$tnOk?Y<@c)7|l}JAeCLrvd}H#by-!?fWl$Ed4^2`uzh*sq`PZTm^XMUn8Mg%R$NSzF$;k z?!K@`(4|C};d&gYp!+(QTohS8+SNbRRNB)FqAtV$j33PJbj^W=ph0hRm zAqHUlV1DNte(Wp&$V<|FtiGw<9|bkp8u9UJla*PFk%5+#z;ANJKWdA*&w#I^ohAZR zYQPs|27ky!84@Zrd*)`e!bM_vvJ51{{-pc1sPj8g$UVn+8JoyjDEX5`7!;)kR@&}u zp)sT94`ZZROBU>&hb+4C`$!Q#@mq$d3o!uW2lKn!@RRaiwv5Wywr$4WqQ%K{9*|M} zML@esz!xrXaUP}Fl+U^$+1k!a<7?f) zI5UoMdFrA?qz)zjF>g>UpRtkuHl+aGoPb}U*zw?c8L<6znUT2ZuTL4U54qs}54Nkf zy032d>2@xAxiCp)`1M52B`1e|`a9~RLztod(r}tUWqFy(a`QRz2GG@ierk=hBkPtQ z@K_HaqPvH9vXaa`c~J6CqHhnMMyoRam`HtHM>+Nql>8=Lp;#=P!2=~p_Or2xvZsKk zQg0f8J-H}r6{3p=4o@H!H^cy}`oY!jdc)7z1ppD>w+fYm!<2mGp5b;(B|L(nQE+PF z@6siWfx-xE#J~sooX5E9Exi2KOTX$L&CC*F>nQVm!RH@RQ4i~X3E8F5eH{(p78W7J z6n+FHf0wQBS4EK-V}AA5+9kd8r4o}J^zX^yR4g9fLB`&Shg}!t|DgE6{BAe=;&lMf z_cB4G?Dv)W`EBqiVG~a8xbVvBRN#(DH25owdV_v`11bjRZ+1LsC%vuy0Bi-H1dW-K zi`KD80nawWdms8Y=wFz}U7%XNUl9HH14@4JcSD%Whs+|yUxXhisBlI9j;Qo6`FVaK zcf`I#MY0_OvA7`yVAT)ie|^KR+yelSJY4*(@sf)G-|Jg73cjgSVk`fH4wBl@v3qs4 z317a+0r~i4KB^2EEnM>d(=PH=@CzU1KQaFgdv_fbRogZUpAzZrl1`;lX%G;Q?k)jo zB%~Qi29S~z6b3;WDFtZ(5d=h98l}6t{6@G2pXYtwwdP)PU;lk`x~^du4hOIG+sAS4 zy=U*^q#oWyUUgyEePNeg>(GFzeIQrDh0FU;H5W$y59>K1LO>RThrvF3D2``55+<@S z%sTDpn5GjB$Y_|eAk`bqI0YYA@o!RT<`O5qPB*vJkWJd8KAXmQJe>Wc*$Un+5_*03 zGxvL6^8aZUiEMTN03i}pk|7z}89A;_ugkiXgn8WSqkgJ#Mg;mXmNq9^wgkkICmRc1 zls@>=E)omUE)sWM)q%MT>(r!D3WM8XI|ZMWjO(ghWC!{zdLG_lL+e)@y9nC5tj@QH zLD=lu!APX}v$w-nc|e+IS--6{M5(;ZsCk55zxY7v$iP2JtkyKFoN}KeD76l9dNF5Q zb7#&9Ylc|siI^`Zae?3@jqx@HJt-0>&KjTV2-c=CUmZB5=J|QP{IF0#dPoq0hpxG< z)X(0|3*cbnqpnc)fm%hN2EfbAWts7Tlo@Af0O*YTPFzH%*9Ts_SCl%r7$&}sRJUrQ z2Hd^+q6Utbo*4oq4d(7zeDwc&9i2D{rvvY7cGIjTVveAPp_5}#AOAD7gXf$V1`dU| z^l>nj8T%kar+!-c4B@0uKkE`^maqC<$|1uSZ*0$o+osv@(V*%=4S@4s^7}&g{fohO z^YV5iNuQE}&=8Nx8J&Nhm3RpaN#s2DaM!B9qQg4P0+PHGokVtH;=SI5HZiZa=#st4ZeuYP zNqG3#VKP~6xbkiW>Z8rgR*mQ=RgMucplHgu9`5dH@ijle%8)x%u)@?+d+)Z2RAe;7 zUvhCFR;U}fMYb)r_;0LW%>M3oAwRtbFN_O;gd?wRZ@ha`VyTO%bkWMS;)d^$_X)lp z1;W2D{_JB0K==zX03gF9Eut>Ai`CWRFHV{E0i|^7?~Kn9?uGkz?^9fGrAGtrJJ-1k zo0GBu z(iZG_16_lVpQ)BmP>{ZT68PxF&uI=jh0H(v=f{Xgpj#ON`nr+L80as%Dprl@=uy$W zjn?kfuf3$Be&qN;1J(}&s$kj&UfoYPg-?x^%%Uz7pj1(i*UBS4Z}rrHUQaqLML)BorPV@9cGf2$K-CZJ1{ z@%_;L+gN!|3OD43Aj$H^v013RPy^upSN=f||6y?X=kMrC(YoCm2-+JwHn8~hCD{nKB>Tr9Q^?2q*L81WQT z5L(EKucfhmr{;&ELjNpdtymph4&f3>_3U0s)S@yvjQ(j4=Nt@bb>8ojYcih*vzk-k z2V8(|s{-{NrAtvf?^g!B>9i!zw={KHjq{iDzw7Zh^of7vn;c^`cIr}B>fG#sclj&ZnAU!dJYqm*jOtRaWkdVW~U>_m_)55x|- zIO=Jm75URL68k@C8F`LQ*pNe)@=(4e@n+70oo3^Zy#vA+daiY4os$;Xcak7xAGBo^ zk^VOGeSk%kY;yi-y3&R`s|dcX*^1dqLAC2z<8$`4^3+R1rUl`oQGA+#dOiRbw7qa7QtaTDpqV zy2?1oVPW;+t%cEO&`veNua z6iwhS*VP$FsGDtdqJ z-ONXx38R0*uhTTD{t^s>2~M_ndpyPv>zLU{P3CgHWff%lvcq1eyifz+{#X7$h`$W@ zVwN_7?*UDU`|Y=^%ID4KV$o{)ZnBVIA{0435&0oV{PPF!uJ9Nx@lE;5wNEeWfAOat zBc{4@@oI*G?wNWyof*odQ|ZWtILa((rBzRRZ5aJssOiu>^j8ukSH-e5ER%fr@~Ms6 zqldySRv5Q#8@W7z$_q6B?tkSU0rA%aU(06b)6nXJ5j9NB_VyWHvfDl4neTovw*||{ zR(Vf^YCFCI1HAMK^&em?Ug!VUKwe$aNUfG*Y=o7~XsG?&k>?@k|WfA{SfB@eUi$*G0WzZMt3?8>$E zwu_W5ub1my_rZtLuCV$3m6dKb`+H%Z-$CVt8UXjd@_!ET4+Y=Il2I2YQ=;%YBcr*o zhmZ(W(Z6_l;_x9lk5xm;czwnsI*>k9Q}b)CM-Ak%V-n3ESSArB1MJhiXoWSV+Kw0n2#l&lgo7~dW^Ca$)^@^bi>26P-iPUUH(x?Xi z1`VT#{BUs*xR1~*)yGF^>{r<1hZ-3)uz!y@_;g$>-4Zlj*IFAaPIRMR{|)Y>3Xa)f zfL&GvZ`pyMn#sw@PME+Se_Dj=0l-6${O23Ae|kvLUjGom?7EvH`1IWWHU9RT1ivSE zpdixz`SPC($$x_Wz6JOW`v374|NOdte&uDz|Kr!wUWcP0pn#uWe-HQ{&o5)Z{U-m{ zxIF%k4h4W;ylftck_5h$EubPFy*iZ#_1@5@Bip)+d^ttRLDu3yRFxZwC@17wPQY9D zBV@meV!i&;JQC;MY99F@Cg?`(R>P~hJ`L7!Dy<=I(>7t_CSa2;b=+*Es~rW1?7=3r zyCZc2u_)#^l5_%HUsznW%2&(a#J#Kl`zcOA$Y-BevkR|`q85%n-Tbks#;5WIcl=v( z+&2IhJ1Tlw+~-fQF2-&WpBBpmdYpoH)XnlaVSrSau!%DT=&8uPvz&cOOc3!*d9mqt^!vrB%B)_DDx1qwvk zk`WqAeZ8KKa^-iF*Q&?O?u(IXE#TBPj#4?P*M_&*Chs%8DVSuBfw3N)&S@vpk>_UU zRAqLi|J3VOTl@KgA-?!d)Ei;kJn|j*XJ6nN@?Ve3dK4Q90KXB~zY2U;Jut|Rrj%=Z zQ}Z|7_?ob~^JKJqdVCYxNm35`djs!J{6GzdDehP46PHV6ULKFmzt-p1Pg-@pCFa$O zVSpT)^V|=+?gF7AXteu)M=1%`WwLDnU)vkOjRaKFy?=8ixJ}| z*{pQ~_QcQ>g^I59wg>sthV^?W(%AD9Ke4-^@I8ze;M3FtX&4@S2mfoVr!N7jK1A_#g}t~LVe~KCl{l<+tCi?NI>gS zPgd_q3X*Goy7efjG-ooO&O>*T1G2iK_7@cQe1hK~vFiK#e9~3`!kGWqq^?JibqqVN z$}-+M43zBxYR^tu-s3L2sf2&(F>A$wn%+v{`R zt=A-z{}>1wH#(e2IT+zqAh8Bj0{P2T4}t5p`PcsG4i4z}3>s6%G-TCJ)H4JK>bnu+ z$nrj9HH?Vp4Mu*3(cf|yl+fwzO&;-u+k3Xj4}~;DghJOw34JL5FF6aFu>>kF)Bw2u zm4D(t{x`6|EkwuNT}z9HSEt03X=g>~=R*v8dGj9eOp(d&aVlVAlXC%`A6tTs`3QZk z{W)4!mW01~38rU#ZDgvO{*+f2<})BWaqOxvad4GC)g$+x18)Sbd)#v^_c7{)^7g&F|&zw%Fp_;Z09 zi2EouIiQHfBzSyr(6fkE(Iu(++S&;425+ayU(wTXgr@V?y;ndKa?O zSi2a`sxtLN(wgl=_3e?{9;m2mZD-Uj{R=&258VICKjqRN+(vRW!hi}7$={FUhdT%UtZM*w)0#AdE3zfpl^>?B^n%RhIA4g?0YFm75 z$8XpvQSivm>-)XQ9Su<9arz=;9ZUsP{W}t@qbcvYCOOI#XIp)V^{X z&KCr|Uyf@K%I8Ju4Ne=L8~kY_=`y-Lj9hImG!97SPVo^`)cm-uiYrlM1PL8sG&}X2uve+p!BOc4>Z{B|F~0Zu7jE*faCcaAZ+_G2Z3TIq()e zllllBQQ7s3XXU|0!ihDkP+F?~imq9aWVD24YQvO&8zFs$;g~3!1xEjX_!tVAoA~Y; zvK#A8RjiR{3vJoU8$$?`sOpmCC!X+|z5WIMtBUs$;%^0BFDaItZ0ajFF5j<=Lhh`| zfTp34IQ*aWCaZImi+BvhQUyTV{jd1*t#^rlUSkiwZu7t9p9b;w z1h3r|DDQ`Csh$~HI10#gM=LJrSEmWtHa63|pZff}p7CY{5YI5efchle`PyF=xJ*p5 z<;9Q|R(GL$XZuUN^7M~Cp{k6XPA{B(Irn*pZ4bqhm$T0Pca@?yi zbl_IniqdJ%OMtpV3pD_~$8(kc=@5S)c=blIoyQ@c?s{2yuFi6V^Kkn_GRcc~4SY@? z9Ty|~;ONs2G*f(n@_YRJ&nNI#cYC5z23K;JR)3PMLGdGXzk}v`;LOi7SMti~R9-Ou zjanLv{)Aap23Q|aaev{bYV@VMx;0|SZ@dUGW38`t=n2{Dn1{*>H305^<^KxepAKHU zHI+~>x;(mXaPlOH1V?8AZ(M)Ijw=N#MhK71PjMfR2vnw#NbK#{KfLyrOpE(IZuHE< zf}KI@v<)4bs!8u7|D8rIonKs}Szp?>VDv|j8C}?&3TV!)Lclno#pN0c*cJoRu;fiE%!uMs+ZOodQJ08dg$)kh^U({&>Oq60sxDR8W{cawR1%x zL8ZZ8upRT6Tq9dvysEo-d#6{fquxD_g-aj4bT`7kFfRB1Ga&v=;HBFM%RRg@HfBKY zbV!vd73sytdJQkEv;z|~Nk>JBs3g6n(zlzmT#?6G zGB?csruCt9fUZpkig_oD{!-2OZM$7rH@IRDWiY?@i6WqJPqk^?Zwv^N2za|u7XvlD zp$5S7|0@48A^!a!0EjIW(;-X0Fd?zm;7cEB!Cju0p`nND6-iACbl$s)Ssg$>ZehMt z6rQu|{P&6_bEXvO4$)_-Igc~hq*2z=QM3v9{?1~Dr8-R+PynO9#ysbe$mHQs`u#cC zUvp1)lW0*ewGE;X7wvLsvER3^LFI)S0QbN02SNPj%>W=@esO;{epfa;`4|G@7luCv zEt9PU7c89e-DWafv^Jgq@3BNBmE~EUg8h-K|E%7ff^NpZ^og)GJ8+0Cw8qHH%)07r zFkwGFA<1A!@{-vujQ)HscdE{YJzi_9#7GYzFID~;2<@w!c&}X`BeIU&xz#d6SsU^wZ=0^zkm{<1kig&X-@ZPS;qqL&mV}BY-;z1fp%Jt08FHQI| zevFhg*L)oG#Dx}5;!i`#2++_&+OFqqLGS8(eN0z;pHVp6+C%{QSktQSmVV)AZE^yk z)vf)`mU8tlsBwB_D^_|jZb5H_n}+(c%lVNfhcd_(a-b0-A+U`eO0YDrLw{qXrQ7bYyeJWSVo?I{Yi zjzA577n-X=^X8vIgNk_<05U~+mWA+iPv~Ytt^=s@(}{;XqxP$|;O8Ar+MdmjzCi)1 zJW%Xdl3yXeo@hWKcE5dwTxU}zrxicmJJ>I+JM*AF*?N1I$niPtJ~ga`29e_-5J44z z!p{5a2(J`F&|Jns7oUV0A!k{O3`@4L9#mea0dW5-|7?gqjTQiuKOfwT9@(W?@#R}n zdx9zIlxK$4a}${oRoASr#|+N8?`S2o6wrp$5SH zul#c${yfhCAap*asef`KYzhn14`}2!!nMYgB#_n>R{|>TFZTI4) zLlS)YNj~o!W_(Ms>VEa`rFf6@4BdWx7AlPX`x*LH!7cLRrqTU7DhlLkWyY1HV{arB zRmr4lwn%o_pr$v}0C@gi<$oT;-+l=I>O+2jVTo(1$cTfvM4=JyBB0GaIQ7OnBaX)J z9>Y7Ddq5Ibq{d&19)I`$GX1J+%L%8+lHz`{%TXqLr-|*C8cLc)oBpP9Ylqwo))NhU zJ+_XGd$=9boKHA*gzpGA+$?89i?T`l$il}=@=MhMDlgOkxc`-ZKEyvT6##maSd{+l zlP_&hd7}lxwpX+U4psI`{`k`x&^Oik9EE-^Vux1B8yI#_aydg!o7 zeQv?%{Gd=Tju^esGnHudylEQ7{4WV`2smw`OO31f&a~vY>;8Pyp+}M+Dl}=cMaAyJ z*)CLGr~z>QEB^wBe}XjtB(AW9rxQt>>4;(!so~{}6^X;9L6zw;_zGj5&ng7IsX?z{PQ%xCmK0a3ZLs1$9O3oN#;m< zlM;v{-1{80*eNl@d|)Y7Q41uH*D;pLTeAV@|5aPbGaZ1ijYYHUfv;VmX6kBl2aA(k zrq+EGlauQ1B)j*pu3N-Nry1(Hwo7rCKzhL|sh99Vc=0aQEmyP~Oa!~Fk2eTG&(FQ6 zC?}^xH1{$$)bgiL?IG5d*u1<^%KU;xRT~rUZlQHu1IxQXph&R9enGS0(?4w`@&A*ylGULt^>hoP z_mm!EHFW!{a1_?3pD~I2HaJ?sk-YPHi3eoc{4pR*o@xehC&p(*V}7U;fq*TqQ&F;` z+U%``^`0o?Tx09w>|E!95Rbmcj=z1_FwVXxGL^GDOnGFpJ(yNcM8OMVt#MgadvN6M z-J&;7r}8qTTt{O#mwc>eOFqWbRXpSin=90*1Zn_$uDP0PiXpY;dnmYt?Ym*;1;x_$ zmbMP39A>&X0dEm2J8bp|aUSX{<4sEJ1L;ofkB;4tdaw625X@e8$snNh3?^nf)yDsd z7*mS7yE~jS>9DK(HrW%Y6h?m#?Z6i+N163lIk~C4Vh?8`TFDn=^t8_z+7X7GWUfJr`ZeK*lZO!b~N4#Zkn)?j!8+153%_jhb)sV-; zq^F#6xcd?z8&f4g(lSbC0s zQeEy;@9o^I2mSi}T2WMi2j(>i_{+wShdvENqDMo<`La#3o@zScx~WE3h6{VsJu`E;Qm+sHoGU~}`GoHT|3@!kY2gO5>VX@l_3 znh^elak>Bh9^&tQ2ENwlUWl8%6kl^!Y4hjxdlT9W>$iV2Xv|`5JA90`L#%Zn8TTm2sUm5MwFxjwhiIA+Jdy}92UJp_Kuo3ZL zwD=nBTF?U`dpf${(B;^@r;3~gK-y#9vtzEXy%}7MiV@}Bp(QkVmH&VGF#Z{|myiGF z1LUXw=j;FX_q2as0(X8yLO{80;fRC)`1`Z}-81s~bu@&3+DiWO3nl;jB=q{n|NF`H zKT7h?>xi`Ahd)E%>I?W0{M*5gfa~x7#}hR0KklDj1^#;J{~`2G1}nd&yo6Dxzb#_Rjk-h6R2eAp)4(jK3?iS<=#^;X_n zz0>2}cJf3$$oU9%6!HfEZCvkjEQ6YnIGlI$hWn8#i+;w0o?`cCSztc*Z7EhYeejzN zBo|ICdM`^Vm?tmeJsVbvkFv^Qnyv;aGSuk?Y5;sby4oJAF1JTO$j!`W08rs%3e#|1 z@`g4^Ii-KYW;d6STr_Plql>pX}JE{Lq~O&&0@x%`eI;VEH_dnb?GV92lh$61OFVvtM-78fI zl^1FN-2ckI2IBuy5CEF&bUaeDk$tR+;YOKkyTo?8y*KhXjxEoRjf%jpfC|yBEqS^@$wBWkC@q; zRz@Gy_w~1?cA6Xz3%pCxfw~$QJN{lYh&q zTTDkrwe=3HZSG&2pEX6lF#|!<9I;0twY3&|86YEX2e#>c+d`?nZ%;lvH^en1r>VA+yah?B+ zcoOX%dF)fFkMH9q(%QYF%oeuO?@ruFh{xc((WILTWBzNYx8vm$3@#x6c-PtavTvhf zlk4b7AW&zj83;(aef5FL3pD`lf8}2f@u%AZfa)3JY&TJkH)17t(WW11Ui^5)*jq{W zG#gkhYs)8}y$rlxB*-@?z=D14uZ&-R&%{d6JlyW61;a4vuCR+neS*3^XXhlnQuwfo zDUAMv31_H1`oQ}oy)2@t(Q{JVl1vz3qxNe)y8=~g+vWmLd7%ct{jdBRApXJ>0FXwR zJ(;j#QEa#DYU^h7aQ`d+Mu@+P2>?{}4(%hlofXSM$nZ?nOKY-(u1LEb)`8Yv%pJ1^k0U04 z0dE((A5G!Rf&H)AN-DD_*#sU{83jKuk#+OOkxDZO*YU}H+p=Y-Lp+xeqk zyck`E*=hLsn9=$8Yb7$?JJhX>vAoQc>f;`HAmx0}u<2`$Q?)arL4n5!&z9459Vgs^ zaBcA=;_BUn2jFcb5ulFCiT~57RoOew6OzFbCPPr+WTZXFstYYEOHb zQu>eGt)vPnlh6|=Ki(vyPG#ZDRVc46o1!1gqOCts*}<1yrjJ`vl@+JIk?`V>4MPRs zl~DM5kE8EUO>4n7c3w2X=d**UKWWy5zv!A}M)T%D{e#&WpluL70#VS10w?`ePQqZC z;Iv54U4@*m4ek(NJO1k=y(hEklEd9;Uvp4juUhJbiSqc~1-VvJ6RCJ{-E=PEo*H`? z@oDyHTW_$Sac2I~tA{(>%Bheuo{jlafq_0LKXqs<*f7*bzaQbpnw%e%lw_mLNIvv1 z%Y$)?kNvbEkc`*+)b}Fk)9t`HwSw;pQYPW;baDt((I3Oau%Q+-r~&YbcUAE|K`NfF zB={4UEPMXgWos5!&HksJTVHGsT5FYT@D1(lzYe~`eYwsDB^zLc+&1`G4Dr)s5;()-c*6-0c1wK!l+OLWwf2Xj|Di@vkh>s&DdhfziLd zGDSx{Jo{HCLx0zDT@8IRm#J40T?Dr6c9~b_yu~A^yifz+{#X7j5dZu%0LU&jUw8jj z2$L?UNa~Q0F0Wv8JVPmRoXj&jn-{LZPH{liS^51gy8Lg~`7in5f@!0;TLKU5KEjsU z!j}i3A52Z#L*A@vGWqlf(cgg4pNV|Xb0!aax5(GeW`j*>mUDWMVkbOCBAL1{XhcU3 zzOXC8zc4QMcv>O;P3{1YDDns+Xa=crf+009liQkV>Xwujfk&8knafVkIU+3Nm57hB2Dp}?GgVbv;QF;)a>d50PRum4y6 zZ4m$UU;v0}KqvpR+gb;E=nwFvblAQ2`WN#aJm!%?%Y)3SdAUD;Pi7Z5K0a0Ty7uR0 z9xfO)3<<%+-8V-doMqC|QKj|3$YOFjdgI9qna1(Kwb^7l=9C zs+mSMGJ0l)V&m1!9`t_WBqXso>xk1me z!orT}azDXGnLt5gp0@IR@Ch%-@!#WBC)2g6=|-gP@(Y*m6tUY|IQIw5k&RI*s0~^Y znnhvsZ|2EcJbzcdFy4I1AVW&e6nA;Dr;wHJFkjQ%~Oxr+3UEw)vEYnfA@K2P5&kX`#;o7F}f zC&4FdLw64^XvJ;5VTqtAh&>3>XVv+-Tti`t4( zdJTwZN2GUSVX_eHf7MnJ)Lm}07<$j=8^RKbuq{WS17_o|qc=Mla=5SRI%GM#Vf0_U zuvgt+(D;$N*ye}8@%!nH8y}#Ctx!okrMbplfy5cKe!xmxD{rF|qxrktj{mV-Ym`TV z^XuoNo$w|E?tk*l8){5;2~l=|FE zkZYh4jGt9U-Mu|{0(3S{JH3mPmiVWwBoU;oBm<@ItrP7w;$F(=MNV5kKL1Ih_g8Ht zz2$ln(Xw+lZ;S6OvRAH>D{g*6#LD?Ft<_d(D@^l36~tH6@c0=oNYOj1&Q?5h%hUG; zNfW08#-NyXkrkeR6E9?!fKO{FAu!IC?LaifE1K@?`s?c;o3XMet07UM8 z`z%1KGD+`+i|f~@DV-M*wgm;%W9JGPymasRFFpWo0$eWm*x8G(CmPz&-|k1`_xdRJ z7T=DTD$^`jE%1*tHs*euV(n+|uo;8VU)(9TiRST~pLA?d)W9F>&pm=QAbK9p+&Fvb5AX0oUT0&)q82SK3FCa}_U07+2z9z17Q0e=E82 zTlomK^Hd(G<(S|T$A`25-)f~jhNb(lR}EF5@RT4u>(i-p3U|nC3Htb8Zm1I&V6bG$gXsKs#dgcQC(bn^n!N_OYd=8hp}tdG zjOy9PMhC{!nE9z&3_&pFKS7pL2<4aZ;L7$VMUwPA>3!+HH71S%w`R~c%WCnr;g?n- z{0rl9N8=mBzt9c<8fv+C{rYRk>Ctq3z&XhL0+igTz$Y(7`84-sR~F@~Y@m>qO|Maz zxWsk-|9(AN@~c~Esc2;H*_M^pZJJ{;GyRV~i>+d5TB_(tb+?ui zOF@|D(Vex)3}T88L?|u>L1)YwP}3V~06hP%^1lb--x31=@qSJMaO+GJbqH;9E}#d@ zqmJ!bq!oVI4w^;mQ($A%0NSv=RHLk7e|_yw+?dgQig5o>^quX41k%RD6kw#)MdOPv zyh8D}mGs`j+UjLXRTDT7z`STB{mxvpAJzTd$>EUVWE~RXiC?BF&}{`OFVq0I|CK+u z!wxr}?OZ-H(DhkCvm6N2x0LPGoEGn@J8J+0+vl^S|w2Kccon=It@g+v37c zy+8BZ{i6x{V@?IuiEeS*7;{18g&F|&zw+;e`0sLqZ>>tZh&eA6pk8_=rZbO0CCdF0 z1GDPDnNnU1UAe+b!U!mhrXGSgzhZFhk3ygPZX{(->4`))7v17q@r%fjTsELmDU2e_Q?Z@t-M( zL>n}hy_ibl$BJ+WrT>cgQ?5EpnEipT2l0pzjQ$wMK08qX)Vuv*M`(J%H+THG^Iv-a zzdSc2X&kCN9AAXW3pD`lf92l~@n=*7fCOap*){^OOn9x)DJ(CWeBwmaN?|qAxT^X zYg=K!L~N|X!ma096($zz0yN(4WWs#yPPHl0vPJzK!I~PyjgWvaKYB7zzM%Q{hHY25B)>XX##j z$mg#<;p+q0@j0*G+w$+rp7Pi90XZ`rqf_;A^#8P#B>qp@O14Xn?TqXi9iQyvShu8(vwM+>yKT<+cV0!O)%nfLPtS>>tv#h?-S#-RKS` z)u4Q>nKm@~<#B*W+Wm$K174uSkEj+R1Er-MX>P^dRmmKImE9 zA??!+`D0v4y>S@*-+%WG_!T!0FSOK8iYY`!A%LYu`Zll$^@E{JnFUime64hFefY1( zWvv+s1%TfO?C;bM08M`n+luI=btkR-p@=KNU7Rlbq$?y^fZa_BfyHydm>7uUuOz|I zLHYNh)>q(M{L&5=FVO+cj*#eWI;`Dr~&Z&zsmn%h=2G30Az6o<1p+e`#mo1q37o6 zi-wl?nKRyJ4cVv9sO&(@_$WZUhYq1uf?|JskpVyg1Su)mmewgm(@%(E{CW5H-+0u&>V3y{kt51e^Nm>)DC7>T>i~?9ULR{B z(ukx-=}29CV{tDx8D0D&f0sMUlU6%m=cd$$Tb{*5Fy=qQQ15}8VC23-Mr%iD-H|~Q zsre^`;shHzWR(`>Cu{KeA6&El>v38CM?wMMHv-rHT3Y~!Z~87x_UVU_WeL%rCyg=n zL*}Z}d~Kk_XgU0XqD3tPpjZ>P{xq&n^0hzfvxkqvZ1PaqWbw-;`_E0*?n?@_`n+{E zvL+PNx}i)7qkrU1x1_A55;u=nbbtwI!VgbZ3XNm?+8fo@vu>t(V#QF?8)^VN|F80Y z6yiTH3;?AVxdgp>K7-USSTkYsVE!QoS=jH#^QSBGE_ocFg8XHmF17Xr#!uSdYySyh zZ(Q0cY~{^-U|?t1C!J03ZNQB#XK47(6dAv)a_zwAZxl|%vd!D0zF(qJ(Mn}z|Fymb zmo4jT{BTj%3gsOt{5D>2&i>cqGXKXy0pK?R=l{9|0927oydzJdN0r2{FhW$ZbV|SC z5aVW=-#|R8WgP_UDgpZOQU>(5@c&&a{aHz0p2-)C*!vB<<_4+e;=ifwJ_5cRgsCrW zaNaiH(1g*ydJK{3B2KUw5eKzdxMd6Ra1tt|g$;5OY|LnbF?Lc)2y^V)dm$ zr)2Dr<9&gNhc{Pow4m}r4S@S!`A#0xj(yP)$Mm~R9lkRDR$ zz71Gqa<1TI2g-_~i>Hax;e!3I+DdMv_AQy>5uK9@BsCPE3E6JV9?-4L6{Y)zN$jWX z_`ur6r_$SuVopBqwK2UO`^kBb0Xe~q#|#PT^z`y9dhAxb%b;=3;%`Ymh=$lolap&C z4pZ!JeVg7tbh3TAzg0g{V(121sLnMCnhsig&2*UA9@Vi(>8laRS0gM)*@}k8Q@Jhq zKl~BF1@LM}{%tS`>And50Ra5!b(_e`Z?B^N_anGt%PlVjr_wz@)((zT4`$BCEfy@9WpF2=_p$5SHuj#NX*B05pE@hQP~(B%@%}{8lIDd(UNW6F#@0FMUBXDZ++%|i@XgMhzk$9> z<^{hhO=_?6e{iMk{#Z`wv~gH~6kY5>}!n2w*tgbKjGr6rL8_2dh*(>FT(Lb^tzd#p=KK=41k5a%vDE5F04dO9i*2vUdd=zDKZR%?W%N8|m~k<*%PI^j{5&jpS@_nBTxwsRDqcM5 zD;WJrk<}!;iKzQVzRs6lXeQVf3ZRjG63xj=?WrUGK;{jAn%+X5?5*!qn3H#I88;S6%iodK0UFd`wcEbRL%8-Y4}Zfh5prK@ zitfI-%srLqp!oRxyCvQwORfS-?HErLVf2?dHXYQeSw-(^V2Nt*w^-7%K#wa5&Y42^ z(c4q2nnVtj7is|9|H^;_}&m>e61lF5c5g2%%1mST^Si3;^c{H&&3Fg{;XJ( zoO*7Bmd5c`x@hWa6WV8D0&iS<0{sAo4ZNM7TcGkn4S@S!`7c2H*+>8&rdP8TZA0ca z*R>3#nx>tlUU(#iOn4>La&|iO2(u*M0RuK9CW4EXzk>a*+DcA2I}%L)LMH;2>`F7$ zQzRb05L+ykPnr9~btu!6a?vES>=3#C-6GwzBR^WgtGm?-)LT zV=0$_h05CLa@8OCkI|E=;Qm+si)1ZYHq=vcv;fBT}8=47v)E zUqQL07+v{pYVI>WNI+3yYyXS;-GbR zh>N9)*sv<`l*bo4-W<+-n$FXPLq8Wr5s}qnDMqiFTTP&3@I&@H(L>(w!u!>^eW6rh z@0Y6b{;SeC71k3vry+LDY4Ltu9M(`;ar9I36EG5?oITUJhSi9CYFV@hU7<3b!{_Mm0Oq zw9o=^Vcg=qrOIx#6zHNG{&viHmVGge)NtIyQ-WUP-O)Tw)iDT z#WU3dfQ}7=DxtrNVmW+NqE*=CId)@_1Q!aN^V8m4?YXAT^Q-^1Eg zE(hy1;lm!Hb?c{=I0vb((1jNH-IruH9gdm1?@v)~(?U&er~&Z&zsmm=h<`Ex0K`T7 zTbab9^!c%7W~)lZIEMyTFR81Xnl%TB*Zq@_iYA~$#Q0L-8`6~cOK7bq{KU?A5H~i?sH5%m|J}P@}!xG|LB`g(b<9%0j zpnd!RmjG(x;I)4Woq;VM-Y_bgwS)}ypeL8aOGIsZ7TG7C7V2e4St9LV^uHMx^~=%g zb!n^7dWP*_aWfBa^6=TjPP?xyQsI}FCU{%ff1&(e`L99zzsUkX?h=@WD0dQV8#i11 z654$fdl?EMTI`9E2d3hAN-UCaffksXx#pksH~;#FM^gVX%)puSUUm0u8`f>PCy|!q zoUB>>)_`M8T%iF*e=D-e-mqcESEN(EX~TE=_7U_SYek9-j*w{LvEv{vyCoA(1P$4MoY<0;#@057_ytgG21b8M7Xc5NXUsgqbc1pyCoASr zpIBoBA673Pb!Sn{3%r4U;_VCaPG;x(b%9dacCG%Eh*n4KnH7-yPNt3QF77=0j!Jhp)bxfL0MGxc{NIH5({2Gk zNpi>Ht_s9!2`y!$h0(M}((Ojbx@2!qbAGdye@_#|1j-wq+>Z7g^uPB1;tewQl6H5U zF<3l#ujamyo5dCJ?sl`0O=O(Lnd}LyXFM&V<6jef#l$CZ#zPcD6g@`5nQ`c$N#EKg zjcKYk<2i=P3pD`lf91ag@fX7bfHZ$8bhU82^DcRhY=OcLLR9JNdFkWeMoFxH+CHOi z5(UH_LqWuN;kym?ziKOan1bEdY3L#$XYLg7})JTM?f{=1*&l-HlOl4Ov!lJB=@V&z1{WmG0ZJd`Q@4n??~#s0LF z1fOU;^E}h8VJx+wXSbRyG1YO_L#i9U_%c^jInjvAa$exi&4u`$)2BSnSD!yj@}$~x$H%fhX_H{`>3Ri> z8=6NLLERT8VWE$scS|>?IhZMh_bD?QpQ9`a#VX%f(1rIehQ1j=kGR~>b}lzGKnS)+ zApm6c$UJ3+ac>)uXty^fBkh&MfI6FArR(R8M^uV_??3+pDldQJ(*m?GUQaanq^yFd z9v^=EJl9~3Ho%FlFQDUgps*=W{<#!ps_|n9Mt@{)a@`H7S%*{|^`7@1_@nD|tD<%Z zaqajB5qqZgY9BzIN1z74Cz`8?W*6fBf)M~BGW%_kM0?V4Vds)DTloZCxDt1q8c92B z;s0arEyJQ}A9imV>F)0C?vzHlTe?#^h8`NE6p2AnP(me?6r>at5R?uj6cs^2L1LrK za6fxL?{lpGG5h}V9(&dYW-)Uz1DwBgUTfB@bzZN1-t*ae1%frlJn&O-ou2>We^^{O zPREsLH8MyI#=@pM=u}wk_;jtoY?gDY`|7wWoc{YsiTFw1!@TmUw)p*U4W9iDG8*pd z5C+HV+E3ZDREKc^?FAGd{J-#j59WVECkV1AY!yU7+W33gmq{u9xp&=F@thbJB_i|P z$mY1=Af7-l>*4wXOzvwFm;O&WT|Z;OznL{uy0Dh<31>glZ z{m-tJ(SO&KTiCdw+UG0`7JG^1dO#q8l02x^OySghbqUa3Kmo%43;*|F{=W=3zs^I8 z%988bSrR`jenU5zPoLr{bBjPzo?ln!r%6v{-7~Oc(%tUUhb{liUx9YarZdV!91(8t zoIK|VZsw?af7sbIoSukA8TMGMH^*@LFHSXiG}(GE)H}=6-MS$eZh~?XiOV&@6z5Tb zT4Z)p6`;L<0)+n;{vW{n|D*Pm1s1(O|{LBL~^^#1$S$b2HmsgVTThDTd!- zu9ChVw(6QoLv{A>jh61b43S+tJ=4cPW-1H-v=>l-@c+X9pHTnt(Ir8U=h!>X_0!c# zwTJX_1!t-Zmtz~2ZN$e}dJnEGCaoo>fwAWZKB;EpCtl`1=hnjw`>aUqqZ~SrYv066 z9W<*faM@$=tAfrUF*`}{Ry~yaag&&he!j&veY|hp(i`Zr>TF&8lHK*=>RAPQ%iJlT zy?_FQ{}=xMg89#^0fJPy**<6cFG$Lk zjYazUN9(iq&hqe{TJ3cMMXwi>qY-|5C;WG4;?j%pe%dc1_;dNJ*G`)jB(wqT1r#9s zzwrME=D&3x2ompK+1CGVVe)J%U;rC`VuOmok!` zmM2Mz;vP$0+$Ri@PW}RJ*y#?3+~|vb|F}m=&6M70qf35UQNDAmV}>f;5(D2PY|>_v z08uN61i1V?{`32<|9@*G@xysR5TpR6YgsY28|s*+0X5q@`W5)ZXDY1t!TciQul+{8 zh=9X!AB@wPx8VM%m8AMlY9+ssM!k$Y9jrF%3I6N?Zfi3P@&88mNxwz}NAAZ+(bflu zMhedk@@I*adx0NT-i`+52t?J1p~vZ5lPeBglkl)sf*osQRxNlV1kx=vw8PgpV+bSW z>u5wrL3ck!8GN~>PacZ~Cu?82Y$0iGtXlSxuGBfC#?HlW1t}b9nbB`aEz94^csmam zC4d4%)?8%GF)V8eAA=x|?T|rHgm(UJliR-L9Pg=jyKt?TnM@;F^^YrG_L?|=uQFzR z`nXg1>~gG8YPIH^E{egsKmOB~AXCPaF`<^B&xk5h=<@-nwH=%er~gfQiOwasdHQr4 zR-*n!2PzWd7M zb-hA0)JiN!9B}&2Jl$XR?c|EX6~PBK-Av}sC=cQ`p8LoQ^e#FK?$lV-#;$@-TVn3d`d$CIp7$ff@^ zIA+>=%Ub^T#ct?z^oVvX;|^h?;k!3WY0YXz`;=P3>Hqp8uYu&J)rGMVB)GgJ##+$= z_}^*R9>kBMc8pQ?Dp>*A3n)PNf8qZb%>Nyv^IFj?kdinqK8vR8h~X)>n-CtF#;#XM zh3{~CuovjpiXYhV?VcW0cL?nt|4$E*4+gV1|q`4|2PLm`eb> zY0ZBoKY!R%EoQ7~QhX!HT9jGcSH(25UFE9pZKM~PZ~`#)IZ+T@jK%4<|1J7&?~Vt^ zX(uXgi=mJ&aD*YF4V%3H^cPTo000UAG7JE|^AVsYJX0;#g+-yOS7|ELrPgiNvwxky zlyL96saaFXTAVD{`xvc?fO%c`5&+s0rc}K4-=e~U_cempu)#r#%D!SHJ`0mfj|!LH zOW48*06uqn&#vXzx59;uoTuB}F}j>1^vPNSqMeWObNkPR+5r6p6d(YA0)PSoK>K_b zFuiah#q&zfCO=MJ#)QH|9t$g*CgmN+vl#BHtfuh<6kysf`R@u2S0yh2IL_A8!+n4{ zVt5zJOW{VmjPDQJuu#>zZ2t5gAu+tg@HTnfE%*O{g8hpAYL;A*ioq(+HN3raoungE zd6Fkwx8J^L1oRhBfB*mr04fXs_w)CF$M?z5n(w}zp0yj8xua3(+! zMCW7E6|%}L%|qn{iP;-Fel57N-eM-fV#B?A#dR+M{RI>t0DuC31_JM9 z!-pMRz4hxl%0@OqQRuZ3PrrKeh2p#t2&Hla)6D5zBhW)~J_i6L^APzMqQyKo{0Uit z;q?cn<=-f7Hq)DjelkB&>4n72B=c8g2jB#Nw!>VU%co0Pp%j0|1PP36u z5HF5<*Qz1a->?7s!-{_j zBNdTAe?;dp(D|41<)0^mH9G#cO3A-E*o&V(!+%*|ukiO41bYDXoQkkJ{@lW(|MfnY z@W0;ocU_SadKXmj=YV4zGI|2&{O-Tyk_6S~2c35et|co!QSN6muDTk*8l}46-C@@K zuK)PN$JRS+a$OxPlxb~@dh-nOr(BZy-zk?&g-nF^KHkrq+s_b?v=PqD4whML`6$JA zl90*KW>@z>`3A&OZ3Lva*2`wkCcV6e>!fXb=WY5{IkM&LY2>lm16gy}yAtf-jAjzm zgdWBWqL!^-+qECEexJ)~V!7v?yeR@>@Zl{Nx!b!Id*!|-I5zHueqeZXG)rcKX5D*> z&F{tzXUBCinSg-h@j& z5dQ3^wQSH`xhLKFcBgzgH-2$xhE+Wud$B(krFiqM9lZM_o?f&DSRJQdr9iDqeA{`! z#Umz|i;4~(WTvZps>(6^0sRFOAOL^@a0LngA?o=_Fk+t=lIHH~X!uOeG?PkPp(FSD zK4$mz#0IEJ={3ML>a-?+Z6=0bB!AMczhW;qd>gmA> z$K-&i`j}k0| zDo%8ekr_`9CjbrG&O*vwm4f}L4OfVBiSb9RL`*#N(l#ad2@oq?KJOzXvP^n{-wmL~O7+Pk7bcp7Cct|g#6uaAkJ%8`LYm;^X{@_> zr2N5C-d6+fq#1IXaJT#GHvswzC_n%J1ppTY0OEcOQlCLZJOzh}|hAt@QIpGl2=?Co+a+(4>0 zL0`4iNCjsCyi4S|J4o-gb%r7oSQf4_N{9KGww!)3gt+j!*+(^-$AJC<3J?H50lQ3jb9C>m_8B7VAW;VlgJ5hCkIJ3(D}N?Exk!Kn zEj;|sMIjiO-)T4fp5WV?+U#B5$Ens3?>gL2^lG4h699dKSRw){Ar-9RS(k_e>DW&d zImgfMVm}tDVv*<6wQU0Q7f^rz015y;41k{VD{iCMG#FBJWph3rilV%C#$n>qFC)Lp z*_J*@c*-d#8?ps<&?bpK8wm|R2LNUJ&yh*J9#?VY$h%Lzp&PQ%rlfZ|=#)?SCHABx_Y|dH1P(sig|f+wW|^p+T0m zbz504&TTD}BYr(3qslq1Cw zzFGP!^|~SpX+rJ|q}Qf;a;y(*X!$<7y2hnwZsz zMiq9t57#kwc`x1-yuzxuVOM*z=JV6ca7n;14N!m>^q_+t5flI-`tzcpitoex%;-H8 z#o`ZZPQn^-Yu+lw1>C|OmYTA>PWt>E9#~AnphXbJ>(M0uU-61D7mnVA$xX%yJatj+ zaXqcH8hVVyYdd*&GY zZ@Tp6(|WkgD%VN7ujQd12gS=AfpN&5uY_s6lDGt5!Q!!<0w;@^wCf1^*`w*78(5=W z*;sw}tkHFbLpHtWZ~~A`=O1slG*GL1b*5v6WDd3F^{p$uG=AxK*F=zreK!!tJ^?rH z|3Gk&0HiPgV$QopMXDpz-d4-L>Z39wSn1lOhFr~Sbc^YK82tk8@Y%pDCfLmvM}aK` zui_E_{QIxWz7=lbfHv)v5+CL|hPBxdJbfM>|ID#plji3ac)Nzf=6ZB*>iwklXAni2 za-~9h=v?_YtT3OKdiE%|cOnV#@z;OgFQDWC05TW=kn^(PSsTX2#Ctc@Zu-mBwL39l zVl6%mXinivD)mb7Kb^pP0d_dEA&%=akGuq6T=YBsaim`CvZ`5Wv`+HCCymIVRH4#t z9Ez)q1O&?Ea3;Vw`BHec-M7wGt_>~UGE#v2t>w&{01UnfRPuLtPve;~L3 zfE)%u?|IueRa%lGf!uP|5`~&%a9~usOs4I``$`@p*&DMBUJ4SE;ILn}a66g>^DY6v zi^qAs9zSzrAV$-W(=F~Hka=C2o+s*ne55aJ)#F(ToB%Kr2p-5kre8<1P(HRyZ@$^{ zLJz4t*5zG5SG*T$%|SHa5DzFo>;pje0VrSqtej6b&>bw$dWzKZIefrX0BP+rVTl|P z??l6-QJ|lZ?aLzJc<}XYzj)nKsdtwEM0?s=_Is=4RY*VJBRvj#%Y?=pD(G@MIx_2d zVrp0KD>wl#_wk(bqDynut0Yxjdmk3N!+-Q$kCIQnFTrxb2=^8qpud0u1OQL~D4_rl zqnuB#()Ef8t!PkLtp1oG{=2<1&KCIlH&NdDr}rY(`kzIyz64V~$Q&;&<}N%30LAqX z`8UMgj+?lS@5Hcq8v9}T6MK4n(2jvCt6fKm#c8ZXi2%Gc5X3|}Efqo;QTGQvy{6x> zDz3l7_k^2WUo+1sJ#(}tq5_h;Lydv{a(+jr%h;hv)=vJuy(kIU5>;SW3xl&u?H~)H zZxVP6xEKPc{sQo)aFUqie3B(Jo%H3Vo)aCfvls6237WQfpyg28(ZpTbF6SmESYdo>2FnH_h%+>7639UNa{lyw3x3Maew!>PcwXVoN$n@hn> zIz|>qD06&qUT%f=89oXAd{qMB*W08VK*C01OR!d@I;rhk_55ZRU3|8s^!-ZdX)eD2 z?2u!x%*z|^x)_zzTL+AN9oX57+*rE4J!G*3TOMs=qACTz88yL=31_gwT^C2R&JGl7 z=-f|9vX?>GGMf~iYChL{BYOcR37`NGHPEP`hDD9)`DAWQ6kBn)u0CqZNg<8o+A{1m zv13ypP)<24RE<8pW?&TDh0MsWi zxaCb9);SF;dWb4m)Yl0U*#^dTIqfbySqcA=3~#q_M^*BxEPurVne)pHqVH$LilsS> zlje+;N9mChZ4L(^K4}LYNq`j>V+}0~fTTPSr1LC5imnXsy-_d@a)O}{EU0QJo zW-KE3O)=wKHI|4N%3p~Xu8h^h|jN)?de)uXpR#K@LDZw~R_yF*ITA^g0-`e&h5 zGMovpQRC|M$j%{NQ1MwevG@&=DLYx~Nk^*NsSkVP(4Kio0B+!b0z?8p6Mzl|K+O>d zl7pTg;4(LNfa^Sgp)lZFzB*m}%r^I@h8_cC8ehtT9jqK5az@V7lYa>SS=3dcYhH3% z7U6;K`wy{ag}zCx*QE2KM~@w^tpttCzzM*dPv`U@yP000Gm9tOb3`GoG;aX8Tl2?{-W56Nj>$Uc58g~z3JLv?m~R?jN? zjgYPg*waRL;0lY&+e-k#<>%t#s^|tft}WM{noTWv(IaCBB=g%WX-Re7G#EmH69B^i zA5pou`(OH$_D=eCcdB=Dx9_Cnkh#8F8A&8O+e5TY0tY;>;$jG3fC2D@5d;yW4m)eC z2~0z3k$4tl#akA!bc;Cu%Or_Nf+CrfH+>WsGcC{O-uBTy7lMzxxFznaB$My!hqd#b z8+U`m<1sdRSi-xCkbOdyg@{c!0boa;7v~s05b$8->2Rd^ZS37k(4eln;ySvEns;rN zI~#BV2NWO@0Ga@dPyk49mqCzbwj(#+Gz{J$5s${i8{0KE^D8KPuJxNfnie)<4Bbcr zBOPOB-H0^&+dKca3q+simMGyYwED>&(4Pv0OMQj zj(X(0ukfgagzhkg^gLWeS8?5Z*Tt5jbILu)K>_G5pa1~?6aXd|0Q}t`2-8kt?gnzN zn3ILBa^G;TQux?Vl#cYGQ*z}Mxs7x_Nw9wa^_%gq&OgP27pGgk4b(Wos$ztAfsU`5 zEJ;e3^L5x9p4s+`#z?F%R4BlE!u8`ww$3Yx)d{;Pp~s2w@24X+<@Q{-C^~++&|)D= zjCuh23n)MU00n><27vxk5QMS)Ez+q#PHbE0{Rj7wS6U1>e}D}ts-EICkGRwcybuNZ z$4f)>IA{9K0YLHibGoHWJF$KPb5_yQ__E(sM#WiO5b`R_%uu>H%9?jvk~)HLCcy5l z?Qpqk|MAry-(__zM6aH_{kHd3c6vDOGm_PunMoVOOP4aeC4`MBm``D~EA zoIX6or1AQZ7Z^%3Zj~>p7@x2 zs)RS>Pjud-y~v}<1|tdWE{E;Tq5Y|zqyw&=OoeQWE;JC$X%zXqk=_N>}i?A3b+t*qms=P}#6{<$n;Wflnqtq2z3HfitHu28B6OqeIlu(YwtCnqRc zevcgLm-p`A23PG~Riw_fgQ1vfPHWSi*E`@n(b0$VCoK&wfz%C}K1x%)&#g3AC@~TF zEsMj+ed*tnu@wQs1W7QzhrFBBZ~mr*_=?k#udJI%+_< z>c(2AxeE%JXcJgk{Rf@>#E|vnaHIZ7=1J%&fsx=oj~T&4w!5lj^s&3z=dO@Y4wuQS z`>JrJP5P*Ztz2zo&d)33oE7`xI=Kad!%8UgU#pCGzXxn&8UXqWC_n%J1%M3(K-+Z? z1azCa&Ck(@Q}f>LlS6XGS?24_pSH%Bq+gHOSIf&&x`Sn0SKr0x!Wf@~FhW8?GQ0c}8zn!II*Maqi$yiN&C66}t%o4ei zZWU;gzHaUO3g|DO0096L0CpGvGw;qX@H*)dYtWTtgkYp*x1cg9sWPi;&~#rRx$#WurkK9i_ZNhK{sIaR06+oYfB|sq27+WCjPFu2 zRHTPx`s>7Mw>0z+x;M=)sR|x5kTmv%*VlrbJQT&7IO_v10ig36e;Z00;W4}}rwyt$ zs4iz7GC-xBnXe!)=uxWp$^a(-@=V4?e1=Wk6^BB%8%uPl!L%6S4<{_Ei?sSgZ9um7 z0R06NAOL^@zzGF_lz|ci*(Agkl)7srU-c{E_*=l*ApP=JjiS$q1k^~S_#~UmZ@{>@ z@mmjR@)<4xn7V~4IsY_vd#uos)~o3N-_&Z(IFIfHzdMHv%_4Nd^I2In1a%2!mA z2qxY6EC;GmMxPGb|CyV{f<~y&BTV28=r5oE0RR*LE*Jnx>mZ0kh0oXt)op$@>E&n*FM zWNnOBz64I=3^Yn0?~n`gI|FXufC5AUKofum20-#W2r`{UJ(=X$h!oL0zT$8{JHfC~ zxcK^4wQJSiMHo#AI~u`(0^Zx4GZV;{0FVamx87NfwR%#V8?5ITXR&PA^s@z*#B0j!60gEKvVpL9N{WG!pMg62q ziM5XBU6cX_5BuN=9mljb7ynrYBcwMtN?sjOOm38L0)WQUo@rY&`1p)3EhXd5lV`My zUFwp(@_jD+{z!E+1=|paIhoa=gVrFwny3XXmt)Eo!aWfzB>^72(wFpi?|$8ee1GYc zO3TR^TVGpEps#8q(iZNJgapY5C_7g5L!KnqWI6xfsp@xb0Hvv>MkGt|Eik2d=UB~&|=ApyAv*M(2%bDT><_1%Jg^j z{0oRs@nQ(zO8}jJ`?r3Q^tBcUQXtY4sB?mf|sR)uE=diquj z!C>s&uJ|v#Gr522C+Yv4`pFc?xLs-w;pV1Mf#+`D}TP9P&i4M#lVRyQ431}$bKPw*3Pn_6 zpELA-y<7mvp8z_4CQv--PQ&>JVfr7J(-%03T~p?FA*|i1A*kP2YTYFFO;j}-EbhJw z0Bf-!->#RV`RD4Jg6m%(qPiOQCu~V` zS1k^6rjCwBK3^2-eJR&z9Qpz&MQC=ALyyb=M;t)G|C~tw*Zjbcuw6`^x>M5AEhuCz zRR=8h810d8_QLB+0Q}O=?xhzGU2~rP8BZDT?AZCb)9vfyG51ue&~-g1O3mN|;5&}W z9E3L^&#l*9vdrVN0`CUJD~WZ-)(PrXvF|w~qJaJa3J?H50T6)!Q0WAMu*>B-*0%|4 zaopHB6tvI?)^RiOxGvwQ^DHC#!@kseSulqWcVSSM{K_Q&OmWKS9+;I?W2O&9-{VoM zOybmazxe#?3Sn#DK(uOf5u5;ACru7w7AlCn!v8B#a%*ksE=o-KdMh|+bA8Vd9i1LA z4L8!iuw3i}ioyUGjyyjy$v&+iOX9RP$k%rDejEM-o;=3GUFj9smGaHLO=Y7!u+V-O z|9(R{(NR7ANk)n6|=*)6A2ELZ1jERMJY`(N-MngC)j0KPsvKPZunb?>zngN48Kc0fb? z5c;&cmx3(U(eJOJosNf?I(}fI6=K`hg)5IQ0Z=g*Y^!v%+7DRW(yevFT_}HO8^rdP=FW$ zpa6(N0U#&B06{#Y`o$aaGK6-UGTR6;j)~(361;cYqDTjkzImINOL&8AUJ&AYe-rjS z2jHT9($I<$gYTi?db9pVhrEj9dvTs$eg;3oFAy)T^Y31f2g3<~z(UU}uEn->9ls7H z77q8O>cmbIR)gau=0Wsd=`EP3knoq()OQ2ybs|#S3{&YmOJ3DkCsCVrRm|_6;^&v1 z@*(OcfivP_2$1*-z~A~waF(pD(LT_|1 z&toepcz*RJR(FIWPn9YfL_w1KiHh$@&I}ti7hbGwpk{U=ua0mdKYjZ#t=}7NfuCxyTN9Y-lilYd7fjy6@Zcnr zx{x{UgNa)UPhn?e{yNI1yzj(qfFJ^0jXk=~ z7_OQXOjO8`>hqfcMNQqQN1-#T%=>GTO3|Gh0$eo8NEcW$rIi6{%4gC4q`)mnzS zHO)!twp^XCTSVX;8`r30+1ViNdG@l5N(DfF0R;#Epa4k20H}xqK?nzThI~K12x5%V z-9_)vk}_a1{vAnXh_`V!--%kgx&cf(<8M_wwkmT8K!sxJ4U;X>r;gUV1L_lZWn4zT z+4o&tex$QpoBrtIyf>Tx=xXQjNoNk9)Ka%~rxv;#?%;&cqM5eqS)o{}ess2P1@sqC zfB*mrfD8$3xc9P!SHQ~e7uJ*lLC&9x4KY}4>$q%c~X5sq4;pe$0p-Z2A3{&GiA9r zSwX@i_k!3{q$3u@u}`FbVYzr0AP)mTVi5$X#8-0i`)Nubn&u%=!Rc{|WnqY#aqFoK zVWVRWx||Imn0??Ul9&2Tze@nvIZ;r3+TVWL)5B47%|S+6Wss3|pUJ%m zCjcz8WlE?xqcYz9CpY{#*RzjwxFjD{`{1dg7;9S@Ht7Ox;D7=|0zeZ$0S17LA_!u? z?1DX!Ve|7g_J^P}jO9f4DAHMiAJxNOZdH{u7a(zhl{W$&1RmhvUIH-9{!H0vMSQ8W z_n0AZo6eF(Qa4M>2jiqKZ^T5xR%;qg05Crk-N)y~E_(F>uM_0+R&$J=K4PPH%bW6b z`4Yunn{CYN}F&(UhpPVV^bK7PuSxSTm z+|m8&v@mDzEFGd;iKw3h9wRP>0HwbG{HdR$sI>(_9Pi$c!#J64x3OD~1x>By>;FK0 zj@?sX<@7E==pO#VNw79Gam358P2WHDlZ>$XN&TT9gJdP21*xpZUevr|bXMu^+86bc zY%w=0f+M$1Sqs9mmAgdpTfe!}j``X}9BwI$By2RrLVQS`-n8Tu^>{Hz4m#<7;WBb> zIHq4!Xprd3cdLNMsh?qo9D{}xDbVN1yrTOATB@}+ox`GX511r?0z}k6qedAPHLs~bkZYLl z^dE@Rdmlwg7k!JpHjYscU5%e!)WKtmeOk)=fflT`>G2u|lFfWM)-+gP8`T$gIqtzZ8(qLzU^Op5Z*eIBA40F4yVx;mCfU)tl9~|5qwo>WEa={PZ z&{Y5Cp6oXR>E`opR))i%s8YPNw?9=(@=5u7`aVV z!HDC)czFv)drHRC3eE)hN|NSwWxpud0u z1OQL~)L{UmgF%qDF^|iP-rzptc};JL`6#V57=X6sN{h(cPiNa00;DX!_aCRo-^!ZSb&| zOy|TtgY_G^e$ITYZ@#y+bX5>d0Kfqcthg8gG++Qc{B{0rQ`zuLphLk#kTnU9Y3qZj zA}89qraY20uQTJ4BTCf>SYvRWRJtrd_Y#1R2FDX;EfS)PH6{0YB24c_LQ!cH{nzCF zIFF0oPSr}l3BY08g64~+4$nXroVooc3dTL`&R`C&FE;644Hd9ud(i z2?Jmz2?S{|LMoUndsTbdb^3~xx7_$`Q-B{+V2L)3tQyq;E{0= zC1chn)y#~y18CbtU#$T83n)MU00lq`3IG+7@Oc@G84symB3geiX1TGW%~D>Xwp=M{ zs_F4fhdW0US!^3%d%O1F@9S-w=Kx&PPbxIMi7u6WDcTZ>O3kcCoi>NnzloY(vmxKD zg-qV`65b2J^V^ICYBjy;?&sMoQyazXj0J?GzZo{8fAgy=@KejjK8UgL*ynxY-xGTy zcxx{csJ=+Ar&~s_^dh;i+19s!Y~CU2Cy@Y`iy=V!F93h*C#l$vL68+SHOau#SGAf= z3YJL9JDMx9_iw&7*KqlPExFLmtE33l9Ytf2@!{C|Q$NY{pVUtpMv$D~9N#G9@35{e)`S-XtXxq5dfxVxIZT#;oB-ZoSr(YN4$A8LHG=5#Iuu75UO#>Soa7 zWnf1gg)!Jeq!ONVQ{EMKWS0@?Ui9;>@%zzahMYuLmMmoBY6 z&}`YghJIQY)0&2pyyc-jK78B*7$$%MMA|^pMhBKQx~m{ang3f}PRAP=Z?YOoDcmm7K4Z) z6WbURV3w?^#*i{FUi7P$FQPB~-1b{EN z!tm{DW8;~@*F^4^3|=yI0aiyTZ0uwQV7Fij=2Ki6{H|>1{e`CcHx8RZ1i8`urdDXFj zmIo&QZ6};GnxdUdTzT)j;u0`TC2m`@KckP-YUT-?G<)KRc*}|OFDw`P8+tGR`t?B& zY{JTN$;EzzG1oh`Q}4Yl-rGJK7w-w6oA6{oMi+9bMkZ ziBDgIE4Ew!H*i1!A_1TYpbrCJvk3$_>hOKPnMIJ`;fh9cc2q*Ol*!L^uZMzcqg9mQ z3B8F0n19HZhEF+#@)7`hwELuLqCX8Csn^lz@Q9^TjulQHHy><@{qi+Nx<%j!CjjOI zG~+A0tXkg}UzTqt#7*1=H;v!gu6hRWgivE=ISm2?d)~mq> zh)Hk$Jpc@007$(!KhZHD_g-JO!D=NqH&BDRWVUVY>%3P>%{99Ee!JcUw0bb|z4MQL z&M)7+1fU=4&5QKzAOdbavt#Irqs>)Fk z?E`9T@zG~-+>df6h)uDsPAG!?f`566HtQW-0$}fP3?gmJ;(xzLR8~8z73UYGpS{It z^{hVR7w^2WE*Kf)l8v}+4=06`&c_gaH21&{#&rl0i>ac zAETG>wpj!?xvHN|M!en~kJ({V&qI@gDz^0E(CYOvdxIi>k)UyDnGIkU)Re z|F%Xdp09!!|9*eI0=@nF2z34Y=Atd~qC@hJB=(<&plg3$3i^84|2%r}gO?fQ`H!GN6Tl<^bpGAn`bp|$LlA`3i};z%9TbeT)w3B-H(w;<61;`3J1b+T)@t?0SIM^L zo_gQJ(+dcd-k*6L2hpZ}N4@6Y#bhA%8o!-mEc=ehy2X`datUYWx@k|duyELsNn(~{ z<6};2eAQercVx~r-s-@ekTdN!*R%+~BpZ;QztN!^)%~Pd-Z-WPo{K@XqH)dScm4DZ`-$H z-~<2(W5k;feAKa#5L+C8j*%lh&U2_PM))Jq@8+#OLt?~Koc{)-7XX++0iZ#?b$&ji zvM_6y?#gsG#h7i}^-rVQalSFS3J=$Fm!EaHgBPg4270dqW0^3cF99&Q|AOtF0lkf! zud(Ak+N*Ct^j`dBTO<&#$3IF2*21#k1c2r7eneI1w9!sa$5{0swY#YfhZojr=ZS{g z6}h)W+9M`FH3zgeG*Tq4%H>l+c5&+_wj z)Y>qxp>nr4p-H;hB>>4k^h1`2J8T;jk~Te=Oxg{VRx~a6h?Om7Y z*Yw!ZhhoQ5JoO-3izT}`+M=1x*JT7l1Yklv3-zd+TJcK&eo=G9&+$gH@nY|l68tFU z!)bpX>F-@Cy{7BV$#@4W11A8zXt~_BI;W@;I>T5GR|*s3#b-Vxeigfg^3+v?a&FBM z&|g3S0strgmM{RqKY$=U1^eTz#_T)177jn!SBp#fstrEy2uHZOJrKWE%HbITHp=(4 z_DgS@yaXV|Hf7GkB92@X`^KBS&5U4eG_0(osAS61b=x$Zm#7a%uLdb`P=)~d3n)MU00qDb20%qR2y(kCCwcM72V(+W%g%hZ zZNUa9L)^OYdyZ-MVht>=PmzN$u2)z5%<}%zJ$5k}Z_=bKRe{B{{7tPd_|H(Yv2e}Y-5#y_SeOBtR6a8W;r z=Rm=`i~W)(9Bo0%bo_gDkrC6@N;IZalUzbQCmkQWr>J#oJdMPW3i0$V%b=m>ZSs!_ zczWfwJF-hqO`6p3RU{;cPhdPRi@55?9)*lT6lEsvI}Jv{V~b?F8xT%)H)W-AMExW% zA{Rq|-CqFy)=$!^+n>J^v~tOlTjum7i($^crZsdNu6Dm)t>!mf!of(iJp*wp7~9Qt zXIzw6;!ph~%f*pNJ0uXOy~y$WC8_L@ktI<Lm`l~QCXrO}Cw zGTpM>*)d(;<0PdljPc?=t^H;J9h0;^XuzNZGi7u(ZJlTu4riD4yWoIGu2ja-sdaE$ zQcY#_yeTUsq2?mCe?a#+{N_}@$F=?6-h8xK-ujGH=IAzDJiE6{wq_^-@=3$84Qi-u zQZqzk-+#ZME|wZslnT*3IR3@5i#@Q)S3=T?4Z$I!d^OQ(?{7vfggtWl<<1sF-zMqo zP>JqpT`0zzRkU)|b=fk3diiL7gCDyhVZVqJVS7EDcbpsu*KxJQd?i0JUav-xji;T= zGO;ugq0zhI_#GRe8}s!jjiWYN3$*8eV;Z0U zG3Y@v&mNX}evtFp38Y^pA<+QZXQE5Wn_~DC_cnrZx8=L^t-1g%U{+P;6PcQRc zUY<_)Yq_~wC03=I3=mjLw~d2KaZXh^_MNyS;GlHryDO7y9`qrZN!%4(Lok;ABS??{bCz1CV{pW9T0s0Fl zKmY&*;5rO|{%{avfIG3j|4DSydtNs0ucijCLv&7V;RHEj?4ehgy~E^70^=qj=hHbK z&|CuW@~t~bX<~}pX$?EB2IFi?PmT&wcE$2(A#24d-gGn#oB&9a4r|b2=k^j)hvq~m zNHzwhZll;Af;QUp4jRXsPm%%s1r#6vfCAtM1K=C!`ED<-`#o)wLcfUdQhj^E>`-lk z_@|kfX$m1;-F8(tH3%ouVZ$IFjpK0-%{) z7l77Y^hg6^e}f!_l5KJ~ZzbJzd=O>M+P_^dg#=Cjv{AzZom;(w?{I=KgvyZgT)Abh zs*qDK*^IQ1L-;7m0R06NAOL^@;0yym@h%8r#3jCpCgRyAFx~q7nJVF0e(2AW_yK{L z9V6E1iRWhhU?DZdaBgX)^h*HJ%snM^UiXg6v$}ov_!@56wvO{0?}rdN7JeP_RZ;mR zI02ARvpKYWZ5e;>y7{DZ{Km;0WqAf{31nO$+8bM5#TYz*{sIaR06+n7fdSxAaGn6H z+k z7xj607K}L-9}m%dA?{H+ZZP}O$lJvxuMQ^wM^o|;qA$u5ML5gfMjlVm8|Im;v_xVo z+h&d@f<8^s0Qw6kKmY&*z!e5SUM&bxGq8|Tu*hUbW2F}vH4w~VF|VOH@9(?4_>*h| z^mF|lSWvdWxyo!L{1Sk#&N^4_*4-fbz}7g)#oNA-Zaj@tS+bz#>*`Uh8d1OjCji*) zwb;Z1A%lBTYh}_KVV;Yhak=nIrHG6&#;~O{CHK+9D)!+ockvZe$HTyLrYe=0rPPy#d`#hzpcMYpvQ3dt(|-9!%Q;flQfv!q>x7sh~zTj z`Vpdxi5FVF`&oev;$$&t^+ubWjaApkOSgZ>amHj*CH*bsuO?;w5=nf=P1sno>M_v1 zK2u&aNn4>r!Q6mVKt`i&l8Q97M!{n3(|4c>Cu!VEc0VfV7X9O520i*9i~6hwucu}F z$c6mdrfIf~nKl8F1WA$nY=&Ci;7{CJ>RmyaKWs@ zgcE=TjOVM&?Vpp#xRu`t%_p`~Ob#^P*3i<6!~;ABYTThEoMrq!l67 z2AIM|JPl2WeBu&-%%+-0zFo9LMS8Ts&aV0o#(5PZ)pi2R=t`~M_Lpo2!wJB~&kr;u zyVPPhAc5Utq!0s60B*%-$OQ4Pmr;o=;%D$|H}7iKR40ltso*@$!+z37lm_T8 zpa1~?6aXI>0Np+yNSNwY&eC_T;X}O4eNR()8cIK5#o*4;xSv!H%UxS&Rlr)oqExm; zt4Wstj4eOnT=^{-Re08z|1S6m;S)DhSJ0vKOICgH`)e#8hv5X^1e7~N-DRfqX+A0M z?Va&rj^iJw&3LckxZaZ8E20lXbdV$c3(LjZ4PO`lpZ!3P?6UvG-d#sUwZDJEr$kyh zq&uZkl$361P(n%?qowPBv)TLFcNQWJ%$*ZE{A%19WRe#ZPwG1uDYSD1o~a)CeVGN48Fu9#;}Dcx z1Gw>xJlXhTbg2iO+`CPd0}^L0H$9B{7Y(36&x9~lH5V8GL}w)8l@?&wvo=qZ;GXTU zAr3QQb?Sc(silwZGo9mhgZcu88i02Ia0hS#1E3~+2>|tLo5X)vDaF~Y@mu_OOGRN_ zb8GQcXyZFjV5!wt1p_^xsOWb2PeH1tYXJTP%F>wTk+)S2Vq@zoj?v6Qws0SMtsjlV zPX9=trW}J2fXlp}tpt~dz{yyw_&nOWLHOE@$zb{gV@rkRgUgwi>rETH3a?oFACJ?N%YpK^Cf_*@sm0-HT44y5i#Dvhl1>ejKh|l$7|hMLBmxO(|Dvc zsq!!aV3s?JtBxvd?8ev&Tn7Y(5l#gZ@l8HDa+~@fw@Q}K0TShRQtMDtSDT~2{jj4l z9xMUUa5*Sm$P`JqL!ze@34o8EM1Z{1@L$LBz0mY0Mtu>v7o(PdxC<%Pj%N+`Fox88->gUFW%9|VYThFBk|ZTl0Qnh>u7_zb zq>Nga<#!7!ZW!RWpNb(e%?1@pM<%%4{0%wkSnRz?!mm1%jfKuox7J26BgRqn`Fyhx zIgMxG0o!(LGmO}*K{Z(20|nH0xl;@hNRA8$Xf%DMh2lbfKKzD2v)jf{n+enayxV}g zjq6`*fMDw8djOEcb_3HojVcR>>-;;JyLU%u_6gl64>F6yv$R|@#$H6AGI_*Yx&sLN zdbx2mdV`Wz@WNDj<<|V`#Y(O5EUEj7zC<>zjbY;4y0lC%0ti$nC&%T+7BadcH_=hE zG_tSxy{Uq2I{^=J`;E6v89EP_ z#EB~+cNSm-VDLh?uG1WM9NFuma}I^sG|672HAwp$pNF9=`c5q03Dg%j)BwB#fIEOY z7yu1fI{+l$@~A-d@fpY^G+9E-+J~z%AwDbXe)=x$H<^t1j*q=Ss>Lt$(^^3;*B#*P zuP@Cnl&1H}x4b1hLeo}bTVGAjy5k+LT1`YxC;5rN2%szQ5H>$+;Ksx4CrQU>pIeVD*+>b7X#E3+9HCBU&IPhDg76#UcAP@LGt6? zGcQmZMCg<3hx!7C8i02Ia0l>$07yLmfRyIOE#d}GTRqg4Ipu{(AD(`hNlC)aM%xD_ z%n0Z$ZvYL{dThu^jM}aN7)_HO<%?%ce&eLN&7DheL_j}$%IT&XZOpWElH61}4I_ZZ zLZ#*7G!b7-du#)JMi2Qi8NTu`MqpSBv&i*7-r)QUwZ2dTZ~$Nc-Vgv^r2wF?2bQ?s z>qvNr&p0)yNEq81CqlRQ1?H3#e(f1p3)tmr-G<29qMd_&dj4h8T53HKRQm6TA% zLqw?cg&KeZ00Z!W05~WBfatR$zmcKl%VxR*`2)54LcYw~e^T;Zb35giRN2Mdp#l2y zlimt(^-#P9(C`UUK72*}@zRf7YLj{t)fT%%K zd>iTEF!jgT8HoWU$zWN9>?iE`T%qd}Q0ogd00#gD;0p#oOV1AgnGy=y^QuYjoRrap zKAq!`yc?J?QNNSi)Fc`C;X%}97LcsAy2SkF!P`p!SK}u|E~qE&-qF*H!)W{2@6y(| zT*6PfRVI!bBRX?e9=#0Kt6c_J&Zjf&@|=0jnW;P7f0SNSY`v`azypwN*6KSUx!woG z6en0@Sp-hpZxRG zKi}c+qyPTqe@waj?+8bPWv|+ak^8$;4I+IB!Pp(n%XsuYR@6>)&OjAD z{$RAHy0L%8PcmIyfhT!L+_<01&!`0@~NQPNi^*0dap-Z!LaHEVi@Y zVqeQ&0sRaU*pfhoPHY|%`e}*lB}ou@rh}L38P-!}5sXqM)~|c5_^8flB|37_BM)gxq#F2hy>$tTUr&_q<$k1_o$<{-Tm}jVFT5(ILHy?${5Oe~IRVx+ zGPbGQx!IJGami>rE#<4<+N_q_h(1V%;ll_ZD72P50!K{vEuR)U@~fZKs^?=nVhGK@ ze*qX(NfmzxL9H*;02}}q0007D_!59Enc#5R1h3;rLX|69hCR0G?4oA%AbaZ(q_jQxKDjEJaP{bq8pXJq14Uj(!FjXIb4|)Sj|_jwfTVc2sd=aGy?XH$5fMfJ_ad++=RVRgof@T-5Ns-in@SWp+heTaq1)H9qC2uQ zL9H*;02}}qKoA4~_vIcb{|fW2Sh+zh!2f9m#oZ7ga!=d0h^j%}^cD`zc3+tdfX-5c zw{Y=Zi(dmkrXg7mit`@vLwf2O&glM_0e=(*q6x?MgWogiyE%phs|ih zad%l}DhGlpP)sl%sPVmPv)wXBF@{g!K=>E7tDV4L2mqtYA4`dCiRHO|nkuC7r}F)H z$bBzyGahTXoBZqpy`Rwj z+~bjviYc3+)g7`Dx5ZijDb)Hx4Zs0_0fa&T)Lb5#z9Cual3!`$NA%NX<+O4k#D~9w z25{4x(7ix3jw%^thq|HipFu~6}Y!90%~q#L@&V4P(t_@wyPx|3<6;3 z@|RPwLQZl?qa{swcbH#I*A@L3K)ZRcAh%YDj{eXilTOwVh?yQ{a$x6&aoGW`#!uc! zGboQaSVC8OmV}R*{szY;l0Mea*qSE6%RY}T@R$Qe05Uo;+bPP@;*^hQn8Xc*eFIDn zF1ELm8q%s?86eB}s(|wL?~6sKqI0auAlaylf3Uh?bP%!P^Z0<`N3JqWdaX04D0rvg z({ebA>hv=SOV$&$tRt5_P=43?&X~=cb~?;&@D2d(0O5ZD1S9IN1=AB={)XE2^>)fs zb8TeZ!Awv<`J%%wB7PMD|uevBOQ6-2#Fi>f5uNT|7YVTd2!ZF?d*Fe z>n5eV8#fV=cLMy2>@|QEqh_ulOCE|!Pb6D{ybVSs&t~kpUvg%Rd6bA#? zXAHkS?zaljBoASIgcyw=USuoXV!QAQU48nA(8nCwkyvSFDnBFJD01MBkV0+yr4L6O z{(_kGk$SGC%C7x+)W7h=2>zUv$;Og=R6klHKPp;OeKe-LdbZvcr>9nQM+s|SWQv^U z2Z*=^_gwjHLo{V1?cxQ;Zql8h9wJ-XT8D=@?^2R-jBi4YeR99yNn*vM#n+82e{HBb zeLyxWISE|*k?poe);kZ{tbmdH1De>WMNX5^Sn<+wB%zXTD^5idB!u*BUoRT#F`VS# zyS@KH%L9`Kf_oml)a5BTs!9ys`W}W;TPe0}@3kRh4>Z#*L?9z~y)gtXW5@s22Hpn* z9!@=Imb~8Uq5kB+v&X545E;K{;7~I_cA=BdvzPP@quf$$z~7m@3q}AcG$YITQnyde zhjj-yvX=UkMy*VlaO%bv$Q2JN^<7P%?$kgHz5q=v$6`b zF|(CrG~w}7zF(^G)lNCE^T9C%axGyiB!newUIX}!JZ}1lY}P1=*7-HxD^`kHthf0e zXo^2`dMck;{Tzvb5x}9Lt~RR&C$3!{I*zujCyAl4+%ERTyDR(poinIJp)e>ssna8f<^_En z6zjwxD9{xS%>|-UaD8md&X&6dz?g$L8VYEtA(X1r;^1*K9$n!_D6WanZ^HUM+;?-L zA4UMhwgnjz>Tm2r+~pEO!`L{pI+4Cx9`aDrC9D*iPMzCAeSt#_z&ilA1H6C$IK8|E zC?d6EDVeD6P%mL|(%p}67l=UgwA|0CONrZ@K+-(949GmF#9D2>WqS=^Qu3bio4uuG zRb!W*^S04)sNSpik~81MCG-@Vmnf$_U60KfpEzyKK7E-wU}NmK8d$~*Gy+)5!ycuHtV&bjKq;TbwhkM4^$ zZRWZTyw`Cu)PK?N&#%88&nOO3-B^DtFvo}Lz|E)IC03E(%dQ@nEr_ZVJK_)Pr8yG6 z(~o_(%5F6av~;MFWxE;Ju=LQ(-w0od?rm3;if({fU#I~%05E`P2mrmyOM%G(G7PZE z2?hCzyRCQ0RbE?8Mr`Qpw_Ff)alY=V?{Nc)?LD-tdy)Ll^ug2Tp+a4X^_wyuzoi1S zWHZ04Vz1&Y^Cab&db8H2j1j@u0r)b69r+pjvR?yjP+BTA)uL^d>G2R)zjV2$0DkIW z!j}Mqe_^{i^c4dE5PmrfK)|7ZZ7$JTZ?1TqO0)EP8s4$hIN8%JqKAkLvOoLz+=2Fd zk99JbU*%md0fQ7n*drS=Avhmcs?2Lp{6EClqLVhKEpFmb27e1RfOR62RHRdqs!C&Z z%Pl$2Nm9}7)YE9f0FFB8)pJL@Lq&&ts4sA+0eA-hcYv1=0F{^HK=P5j%w;%P54sL- zv#>=6ZQL}^@{uspM}6JNAHl~@LT?dQ9pKep0Ds0$GAv$> z1VX)8!D!nue&dCZhSGyDViJzkXGC`C5kd3KV$y=go%=um{5H~L?b+Es<0n}l<0tnK zHn$qaL8!llc`lU2CK9zxG$OCYPfiviAs@!DdMlkVV-EBDHt5u}A)xuv7bhc5m*FPx z=>|y7f9Rn|*0+=wT+2cCj0Tcr76q{bOF3n0%P-1i6Ydy74mo<$l>H>|Y;#f6txRGp z)(UFRVUK@0R@hXdx}C}GRVognG=!t2=CJ_3x~#lMu{$ON_ZHLM+5Cu+swBihWM0bj zorl^;Wgb_f=u=gjU z%$G;To7SQL6lwP~Q^e{ts-zbx^64{o+Rfyk))#634gd@w4gx^>a{6F3cDB_(1*MGB zn)Lu1xxl-!uP>rnG@T?Fg3+T6;yhV_A|RibfgGWKhR@N&4pL4$@18aDU1*(4+sv8E zijLOD4w0BaoNYR*A3lZ=K=)6!*+xcPnmtJ;DK$2NMP3qazGI&|X}YIUL2WmdXQ9>? zY5)!Z3?Lo?z~yrOsM;wdpt`zPtByba8kdB{;IZ=U%6wgB37-oWcx z*TTB)0A%TiHy(ONT4;Sa9G1`%jeVYAnC9{JqWfk9wHW%e$^eW2HYqkhSjP0dIzz{M z#26%-*ll*V?qY3NIVdt0RSd9LLai^<02}}qKmr87`^yQ$Q7uJ3zwY%l%{zD1mh(AA z2YK^HYXIMj(+JkgPQD6`)EiFa@;Qj>%F-A`e!#rg3y+Vd zKU#zl0C7w2Gkv@P`p;j75yL2$_O~{@56BT~UN|_plEpe=!6y(S{0rOF&zr9y0C+BM zc=A!!Axwz!yrnnXU5EnGYa&+ z7}QTjn~ol!$6G;w#$9cF9ZpazQhh3n0DkqK3Du@cSh?vTN#Mr%Y;36vnWPwz09kK| z7V|t}Fab@+m`AoLRZ-MRC;$BRm5~=KLwL@=Y0Ldt2S6hVxzPnaeiHf`akT`z`3vCh z_(`UwZUE@03iCxi_xuxC^A$iUpH??>?C`JCI@;gwtKE#_+Dd4EPez>W43K}F{24#V z3Vr-!1c*iN>O+O&G-+Sd^DF!P#Mt@uzZ++jDD7FzoUk8ua}$A8~9l2 z^(Wz$mUN8~-!nPrd)2q?#3{Ewp=sQ$-R3ue5r8z?9sv;+rxp4%iF@zUQ$&x4`r2_e z;^H4ezEU?$2QWjeFVp}W02n|j7yvWf+pFlvbm#5MWe zCJhi`xjQ%sL{qm=PtBqI=bk5lc}nyZa#C#lk|%+;CAD_S(!9gFj~`2H2wBJrpt#M$ z2mrwxr_c6OQ`vNiM7&ypz2t`rR`t`tR&vkod#8Q7Uv{9@7is_w01O}v0^s50jn<3S z(u%)IjwRHFwy(vytaHDq(LKGb^D@D8*3HZ}M4%MtaHQ$+N?>T`x&v5~EWDg+II!ik z93fk_K~ss+@~EsswrM!_ojuu_qiKK5uDwZUEehbR$I$QqcGkLy*+uJIP*^3 z#xsC46a#8~p$6apzyQ)A0D?gP(9~gWJHFhkr^l9QBp`VHCEgB>T|Mn!uQC6(LGJB1 zHlUt~FOq_b;y)e0w5wnp-#T2GL!`rk<`A1a!|Ii}Fg-nn|00{J!WpJ4i~wZnJ%n~k zsqRu`?PeU~^9bLn;%C0%eNjsN2JUVRyAeW3>60Kfo15CG*Sm!qfRB6$Lo#KWpw z0~l?a`;$pc>oq+Ja9_R^;0QcyzaRq|n<`?Ve2^))?f`V=DiWEoDeT^Po#V~K{R!Er zGA~ZD!zFD(+~`Ea6=K4-LnvRG$Hkxy78c*`D5}BYHknQbK&>y- z02}}qz&i+lMKJ&<#M5)GLhXoeTEg)@EjIC8`x}W=qPL0XftuYYUafjB z)vp0`&xty0@WllXmp}jf;1(~y?X(sBMB$(Y6?=M=PT&I{i~x|$9>}{5GMG`huQRT! zixBx0SH8e`eQedyYWS&eVL%0HeW3>60Kfp=g8{G*-@QD|=`~?$flrxaOgr9%W<`4i z2f_f!foPqDij|N6>TS(xpaC*T&>J9P_cegCv%6Kx)p14RgjzQC!uEUGrXKu7Vs^y* z-cDpk%HK3#1klre%yLQ)Ptay9V138SKB;-@RPu3_nsu%Xs`If=EeL9Tp$6apzyLBJ z0OYg)peOkc>XjY$1IX7rzPFM#l;Xd81WbP#ULY+P%mq?^@*C*+iu*_Efy}3C00-)c zNch0#w*aFa`*&1;d2`=_Lxo5k&L1#oWtf+HqQVFu^G>KRnf3GUV|ad&V z7XSbPWR4@k|J)=H5P_G|BqhMlgWvy;VUz#!i~fH4e`V1BXYB7xNx;>_%fFuke|Jdk zfBdBYkmvutN22*}4-pU$0hdo)&Y^@n{paC7k08$?AcXw+@am{zRtVtF$B0Nq!7Lx< z03g1$xspnnPNn01id~JsI&oHl=6&H2ZcM*7MZHrhRb@aFqn6~GM(uHb#!s^STjM7K zrO-kKZf91fe2njk>oB0*F8x*X^#GTv+UwTSJpZK^;2iFm%ZmM5b*3kS2G|-#$7>usp-Kts0{~d;D3R+h%yTKW3C(fqepLmo5G%nzO{!H2BpOay} z7ZlyuWpQWC;Y0i6tm@SqhGR2j9d(1era$%mkAOi87(3Ek=hMeeNC@ZT73Qh<=Ee+5 zy|g1(eDZGyy)JX74#?(&T3@IEH~?@*$^ipl#aaP?l+i!m@TyB({>>`RJBXXZkt1NC zdf;FkNa#U3`C#K)67aSYKt1=i4A=EOiS@mWzF&iHBi=s#>c(%$H={8*`D$6eAl`am zX~@>fy~D?F2JrdP>TIItyBTKC)D~v4Zs0_0pvme zh`k1YFkPq(u!q)Mc1SQCiFPYD)I(40dU;-rHIE!kQ8zu|0CH4uY50sD3|<3B`F_rE za!i$tUnPMQYF=|uY;P@|RkxqVg7UH%Lo<>PMgaV^Nfh>tEp<$LY^HjfTfY{WQ*R|` zH5`TOjZ*)P%4COHU#I~%05E_L5CBe=01(biD~gRXiZx}k*Mq3;j@0h5NAd++FOC=} zZ@cs>=J^7VS2u zRv$Ay4JZVXm18#$lW^P6+%5R9VPRjpMj9IE^xck^2Wowx2H*g|0P-LJ-aouN8>(eu z2nS8<4PTShOnek@L#!qy>II&8s!|r=XE_<|KA`NbTmis&GwB+DV|(kv22y>pvk!I~ zrgG^4{qEe2L1y*(;h9aTX3bQeU<5EBXZkL0O@@cfiv6Tc3E`!wlw@}zdhMalmvEol z3PoqA^@SRM0{{cahX5FS1OOQ-VZ8$+ET-4jw`+tlJFx3|t?4BneB_leOmaK5m`(xO zSL5B45OKbB4Zx&+oO7E8`Ar3JcGN50;a9i&Rvgi6CA8|Zf8LaPyASILu`W%*FL1xC z^&}PDQ&vHh4|^46W!9NFxMp{+CQG=EDiUgap$6apzyJ!s0N7AN03Z{p`S;{c`tg=m zTNWQxCFLcX95qXw5bt}xdLVT`uonPioS};S7!i+f4PYvZ4%AYUHY*q3G8<>eF9}*? zx$wQ{&2Nt%NVnq9zi!*lt0zj?eh%PD<+&7in&*$Iq;i8x% z(WijYCrWQ0sptJ_olgOhE(1O(1dU%@0=ODKsgg5unBPyTkx|gSQ>`+|Xc2(4{_A0x zYe~)G!<>`>dl&&^T{ONLQmJv5;YK%zD1A@J`9%#>aQFVPf%h8!Y>!|MNPX5U)yv>b z6}9TxO?;(N(a+vnm4en@=(vS_d{r(t(LkJ-3KleFwe4jAc=#95d;-UkPX0?}pMHE) z8_BgsPpE_g00Sug3m_QLfIXNkwFCfCA1u?0$u@Zz)RK#j^`hNNJ+nO3H2ufy22Ufu z`Tmd~&<0~7Q2*YD`=9ZX?El&LN!M7dd$k|T!&|>6zaLRjvFQ}ty6?*E8lG**haXN-y4%+;h9w}?r zlaweUl19lh&KV0QHsPT>nNScgW3{cR>DI z1ShRuKL2wqI08)`&cZXPNt)$c7FH^!e*CsAUUH;(=`~ZL5m9DcR~Q$)J)ZF!Xlr9} zYz}LKtm!6!{$w8g<=mU;6u%X{R z(E_fPfHDYxrwag3%7$)J)H~ycZ)JZGnfP@r25k~(vdXl)vV`T~arnd_y(oN8F@WXp)4q~yJg z#j($~g;P(?%wYsTA|v>wtlu-<&PuVEnv}a{cXIepi(H4MtG9Unb4AZDsP%;!fCB&n zsDJ?Ig*nd$O{=SwffLPmeNZv~KUYM7cbS0HpFe17jKou&m1_aZ`}=cq$Q& z6Z2Kv?szZJ9eoU=p@Ujqr~x z5D-QHPhzr~Mrj<|c{`iJRCTv)N6@lF$G^TDB5=JyeptTP1GTP}2H~9a ze_Mzsw36?!Ct@^{+G3_$W#J>Ym62rn+7`!D#0DdPrzNti2Ux=q?RG+akLBV&kD2Y? za$LomESW*3f91gv1hu|U18@Lf0M!rx)<6L07J1XiPllP`QyC<6cd&0rDgc{|BRpHfQ+AXO>@;u9DdJj;fPjhM<(No zhP;D!HGVSkMASPfkX1X!oNSC0xXebZ?Dj3iy|^&jgACu^zN!_ZPR1%n^a<4@oEPyY zGcTGBjvVTbI&Ap{5JhP)(xCV(q}9B@_#yLHk>iXRooLwkDJiK``k3QK1zck`&%oJAhF$Qd=q>1GSSt4ZvFsxYc}uw3yJKi$@EbLvis}4ZR6Qrb;x#Amc{7i4TN9>&>y#GUdSBSf^<4&u*#H_tM*GP=Vy%v z@+S$q&lHQV;b+@H?IZs|;HuTsf&tt?SqFe>YOq+u?#aETuP4r^eMVqH^=O%Rr{c>O z9CQ10w@1NeK>9Zs>PXzNsMk9i?av4daGz|uvV23QQHftk$}iD$l>1B_&RG5EiBmNK z9*h7wP>E4Bf=WxL%2$tgKfm(`S83d{Kj>{2Y8mMm;EuO~`T~a?cnZ4vYY@hx_ab^Hzf+0QR>5Ai~mv#BxKy_pLSOja>l~TDKC$sFKqGI4$R5 znNGAZ89;XZ4PWj1y8720;4`<`%gNhYB02=4{FrnJ-@P=dEsR=B%;}qGN9TR}*I)!t z(#&qDoAjWSi-0s>I)od0Nw$>9iRaM;GGcww9lD% z{5`#q#4_wo=OZMss0GO<2DN7TR@`}&4H@wt-vJHEs4EWdu{vG@n3tn^kNSxYPz$Ku z*nDb0CSO-frRpvIm9_wgeuHu02aEuMQZsZ{RA1LHPli3xsA}E8Wv-XFH)n#Bq5LFN zK}X>nYJH&w-~hk?8X*9NJ_A51_=LHB3-P~EvWROx143LrzEdGN4J(KPhKSPnCj`C# zDoktY$!-5;y#`?0(er!?KbhYCA*X+I&DL;2quSvwb&)dQhEG0|&fVWI0tggQP7QE! zNlXik04=`Ms|w7>@&7=%suGAJX-k7^Z4b4+Py=uPU;v-N05~xuF82YvCU6FRzi|nW z7ni4~YL+ind_cXeKAjU5{siBJCb0o1N?49i`H=4AHGpkyV<&M(Y>m)Sv?Hndmgkcy z)%a6WFJ1(s3%$%1$=QMtz^sxF37WN@|9#_xi87v|T~FUCE5QerXfeh#tpiS>@1fQg zY5)!Z44?@DKy3PQ0&61CR6Y5 z%E=P39s<4-_5*1|9q$&#rlQm#GC-dBSG%Ok8{Z{?E-!p?`!jy>&VMp~lE-$Kpqlhp zzZomEyDw;@;q@NZb_Gaxq4I@hi<^DZ8i-zE_YOBYprc*DLOxorRY{pbSCTi+a%hXJ zPv9M|d_3f+V-s_8HLaCwq0tCeJ45+1o10{}-tJ54Sl+EOqPpyCks zM<*YSFDpSl=TooE4=clp!z3=VVlLTYP@4(V0KD6PyG`p~Y=B_SDLVkjdzrG3j?Ek0 zd@StE>C6-ZFWKVnil!ca_vb9f8l;=6K;^g3Z;=3BRb4MPo~slMW?Sgz1S2#a<9d85 zO9B^9Bq^d%t7GTeP~zv7VFci*+RTVSllF7RbukBmi2LJ}p1_r=|9|Qo2=aLW#89z_0Y9{3n;@=Cfv=$V5v>v4+c9hSf<7-?2)Dpv% z7q?t0M@*T8H~TQopO?utfAHyY5)!Z44@qXK&}!1lHw4*=wyhV2y1;r$k-7< zp_Db=TJYgF{cZ?Trj%UsJkU4q{jHyFBlFh)oWpfXux?Qv=R2nQoiMrt|7ev%QyrMA z;vOdOE7S3Z^`s@$q-zU>eR#oW}*^*sdI1oXI2^8igA2C><))#634gd_G z0|LMg4FEFeTDs@&#TN0JNCYYPl#ddJmg2+1+3?6m1A}>5-)U-rqFU;X`XPO!*8qIN zBxdp&zmPbF;j0wRvwghJg|l2*)|2#DR(cJor~W349YE+KN(kPd5K7zco!-OSCXxXlT3huC)+*oY(=WZj|qcKr55@GJZf{)O%8Cyq`CfE82# z$OjAf)X*ZU;hX|zN4!fO(=elNqEPg zSm%9D?hpVULH#e(AKU@Hf&p+-mI6T0yM!BaPAt0mqr(jjsAe=c7B7ziorWCVO$)^H zXCik4$(`>ijo<0{=RCK8<9jg=*Q4YdQ7z8+TM_MLnVn;7Kil&UKglDS?)aGoBY^kG zEZ>{@#k=!KBe?<|7oPCFVMxOMk=5D=WMYV<;dFx9;h_fLO8^)^7X*N&F90<5C>Q?~ zE&qK!=UL%Eqhg=ia}tH5bBtvs-QTq+FyAHtpSDlPHWS&~Tz3Fh&D8|!-#@|&zH8Jj zG+Vum_hL}0ts1*8@8_QKYU+FzMgWVp^cb8o?;Zl0LFs3aZLE0TOU#D!`@QOZk4fQf z-1`Z&zEA^j0AK*!5C9S80MLnpRe*ou;~tBNA3qvRM~Y{I9Cy8#>17dqMJd$Xo+k(5 zdTn-Z%)P6*1aLKeGUc2$rr)w-j(EgeolZb>CHAGHb+gZ4*NQ^YQdI&jtk=6mEK~=g zivT^Sjb1c}3?cd#J-Zo5?%1LuAlqjv7P?IW!nX{d94n;7mfo)-6ZJ`ef$Y9F8{1aSGp-|>^&jW(Cp zJU&Zu4RS0s<9@c${l-{-UlP^gV{DJ;0z$K3AD}*c1!#13w z@>}d%T8S_-_-%0ya%A%U*z!x=wwKa}1S^ZV_sExr1B0>{39FqaYn;yv=R$2@>_~IH zzXrU{kJY}?$)OpwXtNC44IpN1QQ}0McKdds^uUixKv4bPyuSkZEd+4+O#s2%`_TZ< zd}dDMyihm#Q;B+$Gww7bbluOj`I}vML;$(hi)duwKr+(8-ye;Zo?kCXxYoKC?AVjC zB6qD9$a9a=8Z1kfqsIEFO0&hh8Y#rQU<7cgdfFOmxgKb4ZW5*4^GisMj0*5^7Q;{# z;8M4AV)_K?iUTzOUy{H}QZE<)5BvAaB`I<5)d9YT04~21AeiR~ zHvqJLdu)vJeM4c-%yHzLcOIbZ=f|gdztBpTbhQdNKXH}FKRB2^T95pAl`Pa;Wu;-1u1 z7VDp59o0L)NDcJ`4mAMp0N@VL2LbT9=<@2DcPuvDg!ghMZgPT*;{5Zm&ee0#e14Fl zCpVr~e4lE6-xq3qp$6apzySIo0D2VxpuVrh zU4r7Jck79Bd`K;%!c6XTs%GwU;^CFOZ4Qt=^8`BIvO`(J-u!Y6AVG#VNotl+uv1d( zq1`~SS(qf_%zUs?ZM9f{?2jl#Cl~=(M9E{H#JG^FL`wej6!=bGkG6|sN8GscyiCaw@4^TQKc>R?c5b zSq!FHjFa~RnL{Z0bAr8PuK}bIa8h(HJ_;4^-~7hwAh+IC#pX!R@zBc8)aHs)z2LN|~K?s0*lK{}` zCQjhDc*D3?KwWaBWT_L?VisyY3xVT{0k_5T(ho*JEcI6}i>WaF`Q=nUKl=#atrkNj zoeSQ#GvXDu-qSez)PVcP-3_?y-p^s}06Du|$@#}2=0s+m(eqfTQblJO*b^2j#+gN~ z&bQkZx}eq@; zrmf^4@l>bCxh5)uwj|bNHFND`&kpKwpr`JfHPO6a{Uv~_@snR3u0B)1L;vvz|A}nc z&DhVVn``}o`<}H`R4wSA*|vjV1n}UV^u{=r?OCe5X#I1>%%Fpey~L=8@g;kK&1W(( ziZLLi-MNEDDwEuyvq5Jfr~O*0=n+ztV;Za+l>>~V#Jj)Y<0mf{b|~A`KEOx_;4=4j z{3P!j>E$iiowHGV*L%j=A2TN3I#OW3eB|I2@;?84gc^GKO{d2fz{gYlt6y=ZasP~; zg0SpRFrNGC65O7)1iKHob&tddHAZdnGJBCrnut~$8+xN4kZ?we8{*J z8E0a1d28OSq{1JXh8w3NzPqMpQJVfvpMNb-iur{Gr9^O_P1`Lu>KjO0`2gF>rDCF$n9t zZbxDzP4O*GWdCfVL0JQ}r9lnAdmgywjs7JM2<9Vu3IMrZPL=4S1K3w&f8j>WCATgA z%9Tj=l6w^^m~&kJ>ADI~W?N>K#Pr~wGctlijl|Cf8uCKRHKn^SsScQGGmWD4pS}Ef zgHND@ITVutwEx30t=-?RoM?LQPbca$3SPQkjPy=uPU;twf z0P4e+GnW%3Sbg!btraXmb-E7RLkGSQ(=Xjcx7n5CoF!T+s)0|D3I+1m9Xqb~dP;?c zv9RKo@hejA@sKyYv6~U`n~~Ua?iZuMxk4^Vu_$kk_7`sE*Nnmk@~t zMgW-{C756C?OZ%QOIH_p!ClXqRK&4*D@YctCxFa=eoql60KfnyAOJpN0YIOE z7S3l5s~o6r1}Wm)l__vxcm4HY=NH4&xh%09BXOxpYyAdG+`{|!U(`FaI5ZZ ze#wrgg5pj3+E2f$s%K}?!;EH9EpzEP@l@BK))#634gd^b3Jids>k|O9oDy>suOj^1 zVUq6??HLgQ{d<1VD}^N*o=O69ss>ITQZbuk?<-`Bc4P2P&7o4VD1W%rVsZ zLJhzHfB{TH09Z9#j-XCYY|6>vQ9!e8y*Ez(!S83U8Db*NhOIw*lN2!i z`jC;`0T&dkL8MFPKTsO|nGI;zG_#KD5%tgfQNmz!vJJhbL0sY|h&nL@VTAH1x$*sh zk2$24&1p&GcVO%Qs;9Tg>DEAE6~pMb z3-f6T-NYDNlazu|WHGY#Tu z{G?1uz_*f5!1pAr?mFzx$kL7z@3R3f?f3V%RG@xR}frs)75 zKM9@4RR@^;3*gWANda7c0O-BQWbDRHc+*zX`TZGbDUL@U+#4?BO6NV@-@{u|peI~c<0pM~tUpiuQgME@Bk=ML zQ%w>=ETdru`PbhWVpK_lLsrxvM3bE@cW!wNQ>z)|5PpR;C8C7oydZtLCVOI}{6Pm**G##W-)HdqT|jpPJ#i&%?yodJuz>st0CeVxN{xz%zOH1w&g#(} z!j9&NwsEBE{hP`(?!^eU#{iJY(8))WfApUN4w-f6v-3lkpNiUpFqIGjrnvVhRZ%J* zGhPfK)iyNJX2A%+(D6kwN78B;>*4sCgUI8K&%y&lZgbnmg~Ju z*7}dkg%VUcD)!!HLc+obA>G<7SLX0aWF6X7@Wb(ol;m z?r(>&1CaEKz6d3Z>=Irtn3m^2l8H8| zeqX_SpMx_~S?3$n`a%uB0e}H4fdL3|5CcHSIPU)CU2(7Y4bd}iE-)yfV2Zt6?D_sc zq2DD}D94HzNX_v?mNEpT_Zq;Dr{7QxWleDE)l{^TzvQ+0>az;P>`B~be>|?apioQ* zV+V*sH1`;=Wt*|A{YhI*C0{HT*BGUguhf3y^0fO$5o*g&>kBmi2LJ}J3;|%l0s!f! z9oO3cgtBvs8D6n4O9vtK{vg3@@$p(NLq-jtxf@m|4 z1CJ!SpL~|&jJ8;;uyV`VufX)-5{gg(K6zfht0Kf{at*-4#UoHPNh?oYlR}Gb)wUoN zJ!vA5YR!5psxb|ZT-Odp0I?#J48KIM$+Otk2FXXuHahXfweImYMOT9O`((c9!RL=6 z{0rOFPXRx{0EF=H0ieqMA^iz9vzi{yFERJpf3}MkC%deCm8A2S*3ka{*t_ensQPz* z^hgL2(k=q#7GVe(jg2WjdZtwbcrBHNhuvtN_s{aaR07-erLXC z_WpC$bv-fzx1&DyYwpjQHEZ501^|!&KJ9YDWyW~x4F+%-KN(s)qj}phq}h>_ir`*@ zDX4FZOnB5xhm8feZpoDIs{kW_(!DSRKC_fZ&Fm~KyLO)UsBAyCHBtxQ*2cX$1FTJ%x4vI;p8?Ika#~QcE8zTzpX7laKN$*= zh&l)_pSMPgHBmG1&lSrsD@@pCMx7EspNiEYPiN``;b?2%5MohrKTHLTqHi<|kaMH{ zKyk@O>ZHSb7v)cJ?asMqE+XR2P963E#`{ZG9!V8mv% zY1Ziby4XR*$R`pfp_N(FE}S+x%D9j4Frz6#@_Pc*)dXq*e7S)vH=9?}CO{ehVtvf{ zUH3~FnY%F(=)FHHN~h}TQOlzl?O)}Yy(k-o{6LJDcMDzUBmLLQjp0J6MzpGwGStk1k0)TRepF<{7gjRK@v=p z2R_PW(LYVJvA+hu?ua7SwDkLX6giR7843aChnu>1dRxVqOsX=jwt7pjE;p~1ZX8Kv z@Y%kvtYMZN|8|FHIN8#i<&bIylVfq9dNB=Zf1wt@0YCt3Ujg{J4FHj%T|8cTOT>UQ ziq%{M_>oOEUm+*-Tbdb9c4VR7w&@L)pY$$T>NX4#! zfj8SR>m>eKH(wKu$QKxw0Ar+sUF5^B&Ix);4HHRU9lquduH0_>kX5|4oly6wj~{A( zp%%aaKmhDO0Nmr*1%MX9mWKp#qT&a_ThCNFe}1)_Gwl+&rIr)xD|JSMkt79VXKS7J z+w3^K27s7cr8o9t9cRosv|q*K^CNN$2}~0`EhM)$lB^A=3;-Ab+yp%qB4obFBM^aO zx&CqTK!>+c-fQs*TV=)3cQy3&1E~FlS^x(C0kC@oz#azx>J#vKus)-t6Vyo~C{(B8 zcQ0o5`zNJuwQOV!RI9%`JAni$NKg6mPe!i+NN=k0ETy?_AqnsmSI~5?_9DKgn-aHE z?IfNEGoPFhhY+q zB4y`+G*Yu;Q1apETbW8FM-+*68Ib|uH!uSDetSAVk+f?$U3mX1yEAnyU*J)BV)N5h zt%`3f$9VQeQ2PtD01f~G;NS{?b`t>9@xvd#HgenAK+lu(3oDs;qZ406^je=RS-8 zI_`1MGGT0DuN9oKHH$hv-^IOaXJR5pgG{1BIC{5z1+*kbR*Yw3DuHLs^=Kmeg6?)D zspyzZ4$tqy!I6@jZ%!a1;Hh!vE#4h0RPp(sJ+xVFpQMhGn|*?A4y#UUCxeuK0Q}2m z{G0cP@c*%at1mae)eUL{aqg?zmtX(JQvP2a>F;l&2G;?>|Ka_g0hZwJ{NFd}>mQ*Z zh+p5nykYY9pK$pn{!O3!`wKOs>d&43&p+t$sN-P(09^Pteo`pf830PgXTHm<_!!SZ z(F{3kIqVz=)Xt>Ao{&}uO_hJur{n>Yh$+L*A;8%C6Fg6W;N@CiR+xp9Uv4aT3M)2<1QmQ&rXVB4H5<6=GKH{ z2|M-)7P#WAXa>Q$Q%WQ8`SDVE_&2jWVO&>7)%{D*G$A5)x03u6y7y~bbI)#x{2U_~C%`D-a&Xq@=ZEJ7>lcY$ z%Vy$6_p3HnI~1K7>RDAipTl34f>)9M@pic+{R#kp9|_=pUqTK5GE*%MBqE=;w7eZZ zUiFZb^-;iAvm9=a%tPP$doLSJeS!9d&LG7p;(upDF;JRXBw5ZF7bn4ckRWhkI_1H~RWs5N?` zN?cC>2DG0Nle1Z&3ajee+02gj&v_~>aO+1S{g;x=0b4iRVVnS~p~pQBT`YiQmX_#% z#XQ-aGMv}#y}4+yIWXh@AKNF`yLG~T^Nw258ZB8 z?mH!l^_g2XLMWNAGlLO80cl!SEfL@87Gmg|B}PFto0=cT{*jd@pDbQH)_vfK0QCtD zwE#W=AQRy93cx-)0Q6L%GVkI12SQ1gLyejQ=AT-Yeq;HMOdoQ^&cBKBlrskk``rC} zYN~#6JpsY{?n20K>uw6Sx&e0TJ@QdHr-e(3hR2m-R)6fS$vpG(rSWI&3Y@5 z4QhX(7Qg{O09*tB!2kaN{=&JG;0*GGsILL|pBCP1)Ga2oXdJS}d41`mvB;?Z*qO{i z@SqRq=3_KpfAaeb4B#?;lDDE0=($A2h)VTiJLfR!cK?s$7+-yJF)rkQ>HWb7SdUD4 z9~kz$6N*cGZ7JpTPDSnHgC3o!mLH28lWTTo2|&IJw6hcOtHb%D)kxaX9iha>6K3(x zdC92J?YwuYj?k>cjNtK;|Ls}z-@b9V6Zks-0RG9}_(|bK1OUjL(&$M?WCy+z|G91E z<|FUL6l+FG+XSWN6mu6sn)q$t<9ndrUCquuf8r1sD6+4~7 zh`#ygU+Ix<4IhKTGg<7BWA4Y{BHz0wPo%?8|3J$13GVcdY9V1568XQms>Pp9y3?RJ_TD1MZ)94Kcko2E9rkjl!chNu&JHI z-6I?jax;#e+!@B1mw(Ga8(XbtjepLDZ1tDq7MAhj3lSg}gS_g{-Utc8sI(y9M<$xAiwn5Dt z$^U|9>`zjML*%eQtykG=CRL9J=t5Z^u<#c*T z`8`Ie5_i*T2;np6xx1C~{mrOFsQran00#g8aN`PqK6ue%K+-s`+z`Lh!NKfbh)faKYE|GytZN3Ibo$1-L3UF93BZb6|vGX zo;v+!%3T^vFaqEmnG8&M*E`PA#0kK9uy&?Zcr;_1li8NoIZ+f%ON*e?8AKRsyJpp`}IT(LS_r8uZUJR5MdFN^CQJ;~3M;8_Rlc4|O?t>rT z5&&`l0DK$Z{{S0&=!^SzamTrSIiW35cGdmQPD>Wni=OxVKo+*N{ z?BO%Ezovs}2ft34RDp6+F9P|o*^43Ue8Bo4P)kJq?Q~er1 zD4(v3Vqa1{PJH`eEN$}IcL{EURe1%G@JiO*#GSsU6cJ}o`wO)I4gdlG^$NfT@EhPy*~hmKTHDh)o#c(gZptz;Jdn$L zc!zeb0K5Ew*d~z_kQj(F@v9{v^BRD8UKzdJQWXjEhD4Lx$8mG7r&haVIqwgT-sU~n zjzV{U5kNFC6A*0yA>FxaxaM}gb1^e9_lUz=vIhIC;_r02fm%@e3$*|a00ICF0zecI zdzea=@QZaZ-n7GeE#rptEV_bvn?p6o@M_M^`i*h21S zeLuqw@t!MD%FLBTmxHK#$2UptV2SUupoT5W-AJ5TN}!ZJY_XI7G$470ahnz%KZyW! zyW9!9^%uaO_(@SQ@M&K}~^f8r-YL1O0#zaQr;lUm_6j@-b< zQ;eK#dUPzQs_DEX6lGJxy8;rO=5(+g$nX7Gn?hF-KeCEC!mHs3u&%uj_bz)r9Ui?b#D}=LD*=>h4#NM*$ZX-{gmhtiyVhFFKA7v4w>lg3TwyyNx9w zes+4~f&)Y3W9ca83fRqt=TIjJ)B^aZfs7jTt5M?xKKVCsrX%CvE;p%$AZ1d{YRKoQpgoPQGiy2H_`;#|+bFDfoM2msZFw#GO(*qN z822`R%Xu*M5sGWN`{^}U&FxGu&?xe4HF5yRe_YJ+lgH=xZBqNmNP|jD=9wJ zmP+`Q?%iCXd;b~_|1++K9{>BDP_xKGB^Uv?8S18JhJHmUr!83)q|?27P&gMB8;`21 zdLHQf;^$d6)c!&(fCGR4xP1k{8T>imfuF-(iA`o+Yt?)$n;Y4s52ll*-(`VhIKCAx zF>P-I0#S>9%h`*N|62m$U%2g+ll;;QRK8dy=LLU;@a_yn7ebXSu2rlK)fDpxtN=JI zNL~pl-(i>C6t3si7u%?db}9Fh+<%|iyCUbAmaY?nfRs5jmeG_V?YBWlI`RZbO8#+MJ5?r#&BIvfTtIo`L`*(tcv5FN~9gP zwkh5TbygzndniIR(7sC^-3=pv{$u*KpJoea%}ytg)~{Wjib>RuSI@OpO~(uU{N!$x z0kywS3*Z1C0C27VY=N^tOp!fvw<22;KjU#vN@vmt@?uFZtPizeGdO*GFWvsS2S~i4 zofj9w8gmUm$e$kJ7x#8Wf~aLP()0xm`Y=;*?9_zKEtJ#kXFTz+?gPjNyt^C6fbdqK z`umf0hT>VZVM67Q0ZT801Njhv?dP*l`wO)I4gdlG7Xm<>4V(tVh+6GPYFo>#5SAS8 zNR5?!kV&JnqM9v*j(xx>FT-g76q74>K0qG9ehpw$Tp+{OKv*DB>2?TPL$@<}{f6Iu zOKRn<=dztHeUk|=P5`yXGY*OPp--7SczFbe5!SeNQrr3{>NyCdCsXepz88hsU#JCe z01yCpR{(6md0@_p6oLanO&-Z!W8}~7^C~o!nDc(X=`x@!JI4`KVZs8k&80HpO7Z-? z;*IU`jWbZ&t>n@B9<~-V51;qQD-3B(iQ!CS?hVu*8SOuol_rBVf0Qb2fek5M?99HM zDmIl8U-wB=5GspvlS<-!cC$}AF|8og`8%{8CMbG8P5lJq?~vNRmCbSc zSO~HLw)K&KWQaXK&vw5%{!&Zgiil>Ql)jky(hfBVtJsxjNytz=5-g>=y> z2K=BCR7w9q!6i0=zt{l&;@`nRrwJzVkF}hfz3$oPt_jK0YAM?ukC5-PuBkU=&)ahx z>;QeDJ!R)QEpJ>eH$yDZMJx|2)sZ9QWd9 z3Ec;8o6@Ny?2mVwexREm$o{lfU|wq&Vj)0?gSwhPEr2gKkmZID0ziTRoOZlTS1_qj z{>Co4_W1B{q!%=$;&_T!loTtY>S5D~izowB<+5ABbVDJz1~9#t@IHUN@=NuH(h?*t zP=8n$hk9p?|C~X~nW7z2*(8hr+%y|#l0$A~W=fwtAx&2KVu#?#)jMeND1<^Sf_~eS z5o&*-7Qg{O01#aPFbC(If86DqfAbrQo=>%K?}Vo!?Ow9)lqADk!a%DJK8RkTDT5M%TW6ZwEzwP0)P|(K$04K)uY}ljbz;yv;$&n48sQcgPHB^ zACDJy>CFe3{O8!p8@+*Q2d>EKgdNt`6ClU1t({``=ljO{CyzFHS~5GAn8YV^AVAHQ9h7!9!VPIZMd1(yzYp&FXI$J?Jv{kPcGZxdxD6vR&tx-_YaTLFbEpTrB;QPYTeMa`S}dS#5Pw&`&=Y zC&1afGn(W?)%Iq#-PEYmdn$j=evJF*lVP3fip+7(ikG1F7is|<00h9DD*&_LYo8W6 zY%Cs2i~U%8c;=;*S~3%SCN%~%aZF@%D;DU z5dP2m|NUVgzYXEPMM?gbFii3P^4kF7)Zlwpf9QYt!DZ;=fB6RT^>+~e{G)IX0FdxW zaqu1LKZRG10{C+Wyj>m$q6h%|xqSoivA@)v69C8rw71Mdf%!W}bTuJ0GD`q$YboTp z4oWtkUq{9y$K4{J_3+sA3naa-f8r+v{&(UhLqQ6psc307s`NLTMCGW+j6KbK@!}&DN_v&F5p4W8 zD!%k=e4Qq|cwDFh2WkO)B0)e>{sjr}mofxj_MLL)78A$f1(?#E+X; zY*1!N%2bUaGt+|9%aC(7bEI=_u2g6P|Z z@kLYt_;;Z87is|<00aQ_6@ck^0LbGWKL2@U;R9@*Rdz`VLRasRY$nS#S0dLG3Tp0yqE&02&AYY4R5El^B;L>jU?& zlv^{23@*M^)#(ZvL{mTD#C|DS%%!J|tpUWGm^A#J9JP22pto8eyV6fMX>`@3y4iv= zERpDGZPcXbVBk*-r5&kx85jYSsDAVrq+AURZ_pZ;Ybfj8tz%Z7ltb~yZT8p?|BCko zYJZ^?zyUx2&|U#BXaImxR|UGHb}?V_{hAQ+9}MA{7frj%x|k}=4bqhPBC|aO6g{`# z;I!0xehuKgQ5n*V?J*r^0fYOqzM%O)_OA=NCL3FM&np7cxUpeMo0+2ce0O{s&2+2;2?JS*lowzT^ zXlkaQ5)m^HVzs;iqF9+KX900@zK2B*p zKhdz8zgrAK0%4p0n9g#xi(#hKVpHMHG68FW%N0ULWbHnF)0m!Z>s|YjQ2PtD01f~G zfc^@=3^*zUMc# zlIbsizwwhYZ>+(e!LD$(TqFXA@Hhk&Md2O)>P&Wd&!Dz$U*jHzYNy&-2Sok#_{G9w z49!3BlY;+Q{NzbJVunw;MmCmNod%n>Tym?ZL=540L?(CfoN9NlSMhgR_pv5%4WwB) z;+KIo&FZ+McxOxZvQSv`>H7;6Z5WL0N{m}#Flwswk5ZFH>Xct$0GnN&_Pjt+@bTw7 z$Bg7%0x=}1^T_TxEm%>^RQGdp>0vx-9dgDoDc2wHFf97>S#b1C^bbDd{V0(*MOgVu zlyqO}+1lUtNcuB=Qf&}5W3~VhAA$fvoa{kIhPf7>i1SbTq~qJmZk#m&iF6fSafu9F z9sBf9TCFBXbZAAurHFh2Fhm<1Z%on%G;Q3plPZbzoA7{<{OQME=i~gJx_%^$ty0x} z>q!u;9W~S!epkq1T5gDK3qJ=Os^|Zp;F3J^U-AHdnK=>wh$Q!}UL)^R!p=6s%03gx zyBi#1lrOy9IS*52q9`(>(17Cd!TtcmLjCJSk7%D7?K@7u!+iC*69!}*(ifP1OiEPA ztm;82tOQEau*OdgPKGh;)RIq2r!sPGb(3I+p>jGi;hze*Q`yj1myc6JUDKczz!yEp zqQ?RO@R0I50JNCX>-wg9Lz9`8ZJ*PLKnK-N?p5?x2cQ-!*UKjW{so}hHX;}I{?k91 z%Qr5LZybX(y>*J-s`s%J`?D3RG6-g(q6~zd8Z9n1$Hy-&V{hxgI01wWG}&w-F#FjV zjVCGHdlp^RisXgdF8U;8m=k2~O~cR0`VXGqP)jZ+0P7V1<52*}QcV3ttQUZoon|uY z*t&Md#VO?#3#M$3O{S%d(T0pO&}!7PppIO+;Tk~7sH9xSlgTib)mE_$$*^sQ3#k!Y zBz@A^7UQ_%^GXnm0BFA&_s(`|n`K@&;v1}uQ(KzsO2-Z0yQX}1q;B!JP=opehgtxi z0FVj5b_D=50}h`f=%!pON8*z~3}dQt$H;vu+4Fw+E$T|L+fn5<62=YSP3EK}604Sf z=VkM}G$p~O*InH5I!x(jJ^L6t&(R`FwEzwP0)YJrz#=kuAD{tQ)x6W$lXaQH$sciYu&%Gb zmhyM*&Dup!)zn={ZlJ(iF%N$VGVS#Q5c`GpecdnIV|v!CEz?CX)W>Jxe!Ha%NS74p zZUm~`jM6?^|;gc|Za+jH&v^o%q)P==z5D zBT;cmF=BA}+}12Nm9hhH5l_n~!kf05`$Tl7UVu zk=K+Y!XpUi644ynmyq`F42a2QGTg}g2Qz*kT$RT!g)(2WBx+9MtlreoT{ret<%IR3 z;B~7)GB5BJo&?>@yN^$9=JWH>mgVkwBn|H`dxJWgVSK3lg<1dy00F>t1t6Cj0BU1r z<-MrzE6)fmJpaXp9F2D;>&WlAz}>0?1lY zqZ+rWp22=BmZP;NOdwo%ro>A=C+|zb>$beNbq7SXWmJTMra$AaDdSp zfW&nM1ey_~bs(?Hr^uzyvX_72C+}UwPnPYy=6PyZYVu|ufvPGQIi-pNljBePWC$qC zz|Sb=o#rdk)K8zoBfqw_Q0+GVC^&YW9$xYjdS{XVdia_&6%!F@Xw0pn3NLx+*fR42 z*Iw!-ccXR`4MM1d^VIRO9_A-e~BCt4>w;HjL65 zl5eNc+64|B(ggKQmQ3QKJdnL!YYvAb+w)u}eJN7} zUfCOdx+nE3&F2MXSylRrz#-?J%rO`Nv=OTUKAf&Er#^@U47GMYoWfe~9IWyCa>gwd zJf-preyv~V?S)=(34rekz`G~lQ!Q2sJkm4z(z`^L8gepEC{Z&`3yFU(KW*qX`<(Q+ zh!H4sa6)JmPm_2JKsw(n6}0_4dpzFtk)7quNMmF+P^2DGEL|JYO(pCZI~V~t_Qv*h zw^%TRDY+G-$H{R1PEB1!y_fK*-{W9CVgX$i>dqw80{Gr0WN-8C6@VQt0O;FdbgXpr ztrEqLc5=KgDP21F(+2ICip|0s(_gF$88riK61>TM=WCCz0mx}k@3qPtABL`=-B(rL z@_I2sjiIpQnAWtn{S;Zq-ycQ*iz;6&x!G^igedo^X}wI;wB#qwU;zP0b}3$4DU6b) zKS0i1d z<@pBnFVKNKyr;{;qZO>DQ{R1?6q%Hu_7`da8~_A>z!d8|N13nOtB>OKUgC{<5py zULrfKTCiapg9g^@F;E6d8^RNGn-Q)eflrJ@+G7eGyN}h1xpM9rB@|G8E{57)s0DBU z5CDQ#0BT+UK)2+K;)@Py@K)HqzU)VFZV_OX8-H^aD#;$meXnqd2o)$cZvNmX;-~aA z0Kwz~m9+41Nx`>jn_@x2$)t*jKk2Q#Moyeq9D3%0U_IF?QqFjTsFrc^Q@IgO^gHP# zoTd`#QIQu9hxGD~>i7rxq4pPQ0UQ7Xz`ZK~$7tYposww!1xc9P<0`kXW)}2RYX!u?h z$spQeKi_CLKG%&Rb|n^rO}oPax@u)+Fz&zZ~zbhLJ$B7 z!ZiR;&=bnkvx*7tb+lmYU}Uc!%i;|&2_}WX1h%C&%=Ahaf%Z;pVZoJ!1lJQ_xz9s9 z2QhuQ#5fxJuv?6ZtIwK4Q(qc2D)3#a2$O>fi~u;@LT#th^@p5yOttF>+n-D}vMJUk z3?pf*=&ApXwC6`ZZsiR zpv18GAwC@Dzorq+8AE*x)Xfu zsIrLD7Po?~$zIwXf14*jlHp00wxT7e>*dC#6iY8T4rluD9L2tVoB^(bS6S{$sps-G zzy+q-+CdB$0hBmR%y6aFpcYzD`;rtiG*t2$%oUqST-LY^tt`aOj)DHy8mtbs%_iK04q>kH=WtEb_>*D)13*|g z8qq&uu{}#!-05k+L8Gh|cUi1x5xWoPBFVIqf5Za`XK*Y0?yB=&15gD45jgKSC$Kz- z2l>l53_LQL_N9>h*_7%&O&~k09SS3WUghk@ir4RMSA>tq<|Wkj8p+~kUf4&yr9%m3 z@iM(AgZc!AS^%E_kO?3T0icB21^_v%RV<`WWe?a0D7_f(>UuJ!x}{=jqlh5<^Jcpz z^-V;e_K9fz;G1F6YXB4(elEkeB^AxT^%HUBiemU~Q920c<@Yy%i(_yPaizuQpX@e&+%WBB1scY5^Po1c1a90PV*BP*e-Q3w5tp zI3lsH;CU?d&9nJepE(PskB}(1g$0@&!?eIf^c;5ll zlTSQZt|!29wXn2{$5QuQPANk6(7G0*bFp0-#9v`IB=;&F8*+!h2mp)DLw1_8s#R(e zKfL)J4$@**A?uT^XIg~^A8F`w73rb&7is|<00e;46@Zxo0La%pB?j$|A?^n4)4Ojz zy9W+Lw4!rnR;Fr#M5fA#Mc09nwDUdgy#?sk0G?I`N(L6~3Tm0&DPef_@iSXP6p4?; zMaMHj8e4S2Jr@`O*ymJy_D}V036n1qvrBYh>!x~MrMwfU#dBlBaPR4BDyaR1S^x(C z0U!+lpiI3907X9o=Df5$q(jBxIiY)#-z_Xqv@_J|hZG;euW^(%&j(Z(V40LeCZz%c zxQw6NFhe(bu@syp9Q=y)ZJ(a^1S(zUgVhGlnQkWXt_%em7y*>={BAvew}!ENAQI_= zq3&{vx>Y9D;s?7b8K)HYX6YD6gDA3|+C6+~ktvj!nu0z%L2gVmw&&CU)==%-T(eIF8?mn z2$#8+f9{E2{(Jrw-T?pL`tSQEe$wy1#$#T-3Xll^fNTE7Pbym=fTFwX1` zDp`#3UVs{VHKOZn+kWyd?IGzZKH3KQrr%{vMVGPt6F+(Xe=B}+c;?kDGi^Rc62*y+ z??t*q79^()5{$y^)2C$k_<+THAoP`YMEu)p;WpMDI>Wu0o6BfsZ_{KR04;lz-&4A{ zPhB0EtZ&INRJE(0pL@?r6L<3ZiRsDPS+1Xh{%KrE6hSFtc`$;!K~)RLY_j*tPx?6J zK1W%z4?@_T-+X>SuG+01!x09AI&h#Cz$X%9B0c;I65y{~AOHZ3cs?Zh9VAltggt-{1QLYt;QA*)qP zVAOsl{R>pWEBxpgi~w%4fPhS2hTnu0t`t?-b)bKXEc#7r@3UO;OA)4XY$uRAR+Qn z&#T*CK3?yW5DVOwACu^iUia_~VnuG|uyCZJ`FuEa(865rUis<^tnrhP!Y4*38Ku>% z+oGig>}Ngz)E1;xo-BXkr|6i!wZ%K2KEa_Dz$XA?0?0uCsPOy(fDppj8a9Xd^B?fD zJh)NQr=HRHEFyN_g{;^7mjCT)%wr(CD^^;ttAyV*0RH>wVJ1(r?*_a%!bORCbtZ6Q zD>!kpxd$mFP)7y8J`dvrh(nNDzTuh8*~g^Z8nQnY>Axf5hcdqj8tq^TblMPk1+~9W z3*Z1C0OYR#xCH?~4HVBGXi}+rcD0YmXcj`clHpAfL&i=980L1o8Ge<}2 zB)$fqvTOa6WD(Eq&D=99!Q&rF4h!ZXdygvD>4rK2qJV5UFap42!a@@=J9Y$dH;%9} zYd`JGTwvaDP~iK*Bc!Eia0h-hX7JShA8(gSfIs*VJP_ZWjEK9Ar|KGjqCUP~-r_73C_{cgpwD}p$tdf~ z`+@AwJBE`_EIr~r!3e;$gD?e`M;s5YNl5Bc&Sf#tV z{zXvhMKX3Y7IYTu1*h)pW#DP6Xf|efDJrkfu%I^>Mft*dZL~S`PUf(&x2yas+njkx zSX+COE8Ve3_EM(p9ybedi&vrc7is|<00e*%1c0jaG5|C|i7z?y-UK~E`QS8zOPclw zMRTnX_*622Hsm(7LnsQ6buPX#>mJj;%VU}brAcyU@<$kxarstJ7R;a^VC*eL9iYsg zF_+!`ndb=O1i-$z(fk4{&W6?mWDRSH4vFVq4!00;o( zD*z$u0MN=p!5w+J!?~7G17-5bgk)ze`p2KtUz(Qq5UW1~g{lD`k@nbCq`wNeUILuA zyoneyer33#<+>2ik_9eQd<^uzt;za^o^sjiW+^g^04^{jU1O+cgrA3fdC*7jGwkV^ z4-IzLaY+aI%Cdp;Q#Yvng<1dy00E$K1z`9#0Q5dWFPmI{))Qa)u(JOQbeh@JE%MA0 z)VNT+`ml%VW-ie6PE*z~$zVGez-9a-btPZaIg87ukDZyVM`aV=iPH^m^XeKkT{jHq zfyH~UULbe0W)9%yTQ03Aqn8p8@>n5-A%#wjVCUHB#}t=4;W0jll4;<{9a{n51exdf zu2>7YjKIuOT$Vqv&x*axFySpYR<3c2cV+<&Al(Ssa>=f zLvR2P0IGih_}|dm@K+;H1Awwje4Ss_gd8u%zn{$8zZDo&YT&0ahga<4d(?Pm!VV8e zHni8hr6c|~ep2{9i=Wh6Ma5EC(d=O=1=8t&iw@brM) z)zMU~s?_w#5#e?AKipr1LBk9S!b zO=qSpEDugHR0n*ZLfZ*3z>&pd@41fwdijXR$}V^itxDMIH2AKr*xmTNq|X+rI(Abe zbqcnaRaeJ8yL95Q=@PAf6}gB_$I_yukqrXR=%qf=XgzkAmAMy12II_&MtDk>*-`edAYf(F`=3&)R6|Y08So4UJWwy)bz>#pwGYTeQ0k5IGT)% zHDk>H4VD|!T zE_sk>D+j5TW!^4DO2}DA-6e+FU#JCe01yBgR{)m#03g>nyfVg%c_fW3fg5Lq;*??j zt3;dF!DqKdebXrUum=*RX|!J2;O zsdnqt!!yp@5FG)i{e@Zp2LJ(}bp^oD5CB>xPP0{|XQ}WYBPx|sQC(cRfyYd^8-!pq zABsMYa9{>BV?nPqrE~s$y#$ohzxjl})W>{Jm#2-(Xf;;EO;^RnBvVR{Wr6jcnBqMc z0qi#TY(Lj6mZ97t40Rrs(` zZT7<@x8!p_XH(~WwRIJ?RgJo!?mnsZ`EroRkSvyfM}E4J%6U0`+1yH zN^$4S{+)}18B_6EL4jw;t~GwP9JR**Hn z;{fuu<<5@s=^|YNnEDtbc}t5`-AiKpJ;70LX=m*B2m9|yBPwFTwLEl|7GVUCpN+SB z!`A#TV4?NRIC*>3S5ogWlL=un;U9x<48JBML+vlr0yqE&09^N!yOPwz1j*TvQF63(fSlua2o8Rd65&8<73Iiw@ zv^rMOMUFJT3VRqK&h*Dh!3cnZ?tz4WGj6wxm)p9tY5-=2#<6K6_Z$7{Ga3@pPe<^V zf&U9D00h9JD*(V%04VZJ7D{8Z`7Gjd_MchO2>eXAxFep;`|+R_&Fo;D6cwOI&u`8o zN@^e&z-9boQ8KGGNpVg&Xv_X*K2vps%1B(ImP(l99(5-WHy{nxx4&qu9e2)INp<%V zem*5T1Ze{0%I#WWQ9md1J+2Br{(qO8pNp;~l6=`6Q zWh)jlJbn^7k;{Dmy}tnd#7}Ar>i|GHUf+2TJc?A*nBQ~RF;JD(3C# z6IJIsE-z0Zu`z;97hf~7K5IRXasvklsrFVnC0!6|sQ&bPBAgO@n&jn?e(_3#ZE4L*zt%HC{soEB1WFACJPnN`zWOW2d;0Xq0reYAcOGx%%v=LV8*-qFm6O1E#>W`Gn8CH)K^OAbK6WB* zZ%F!Ea+Y2ei~v4W;?IGQwbIoa?@YZQnyLLr6(Wuq@}Akh%8zs-)6X4*+RP`!dbH(mE(>)DG_HoKHQOA_-0D->I;v955x=LlgtvzT2NYH&pfSU8m=D zPxp*@%JpbE%(M)i3kq*YoGDD*@vJ@kRBU31iDd*M0EbUsi`x&xBGTzJZw+9exs%w^ z_GsOc%~LZ~OshihGlJS*s0DBU5CD%M0JL~S0ibvuI#y(~IAI`x=qa<6d{CSy`MkFa z7EYRDdU^&yu{`ieDA8=bKorIG1b8OLbq_1-Ts9B8HrR2u?7>FUpj0|FZ}k@Hi4;Ej zDHV(We$K5;laKWk?E87(SG(-{6srQdnalZ@jdoemjFw}qq4pPQ0UQ7XfbkW87bXCZ z%MoSx*W}>6Ai4`aTMi%9;5C!?WlkeJ#25FSe&S2=0@bm}_7fio{5#=#bJ{7l!T=$# zY+&;B82k4SA3}ue8!g}5Ow*N6L^^thU<7bs?yWx2J@V{xmv_2p<-vQ2dL!ZPGhrQv zAK&U?abvon_7`da8~_A>$rXTB5cquC6jn^Fq=WwVi)hrNop>jS`qei~15t};3(Kag zy$QYnu`6k}9T4T!uP4Cad!w6HhuFlJ<|{b?_l#%A7W=OiURS(}iD&#{1CY3jd=<;X*+bGWIy&F*b3$*|a00O`i0zmub1psvRV?nAQ z=lAyToY>1Ogf{nWqD(S?CTT}AyJUs1sc;NX%s2Widq%L$HGtX<31kA-r6oL8XC?q0 z2DhFgSAh)2n|z0a*#N45`>=+=c;UEI`h9(A&^Fr}E=tq*10`D;RRaNJ*7o9|7 zSQ*Je>7NO389(`6{PA>FaN(G>i<`G);cnbB_cDbd(}1n_JL4wLL&+&%Tmr0u%eA9x zbKF%0@#FZvJop-V3w@6^y@klTYe<@8jrc1_K&(R{+<+H<@Z;DnBSS?yBf0Xas^T-x zwVV=?X}0xQc>E*+)a~++qxoL|f8!^$69~X>J==H?Z4!tk(&>3C5TRI<9`h%TpzYzJ zkKKOjb@G|}B7pZNhZaK+m zkRR{b`v@S~Pc(fSZq1k1%Z)eT>o<(dErnm3%*Ra4^f=;#o#J%U2)%Tt<*L}2od{tB zU^a;q=8wuvQ_na122DU3SFx{UmflRv=4<);0@359HK?lz)B^Z&16gh?AOLh2vH+mI z|A)Q1j*6;%7l%)Ghk$g0Qi61MN(j;+jdXVmAq-v8C?g;(5`svBG?D^}l1fRZG`y$- z&-tG7{??o|zvr*_oxPSYGy7t|b$#Z#_uRAhbsue$;ZjBqfi#MrFo*<*?k9u%DO(v>V90h5=fL9&|-}6koS0t$8#$ zp#(rpDTu8Y*X4=FlO6P;`QbQ7npng1t+-S|sB@M=P_Yuk{6Y+X0RRKAx(48o3IN6O zE?snre`l)}jc3wD5_feS3B16k%|?R1y+5#gCVC4f-1d4{I(^Lk2EhA+F(Y+RN>A}x z0}yg<+>_Ya9uuhtw7m$2r8P=1@ySpE=-EP`6==6ku8iKp3f@%zsMytIww5^6&;VHW z{82fO3NgPB17HBa0IaV8)D!_gx|;YJ#kg@jBd;aH$Gi(|I=#8gjgT0*7Iygh#=caR z0`1C%N%l9~{^>rL*w}~IIrIWQ+=#S%^jCQwLCpzH*bixxvBH3l{fiZEp#hAA@ry8Jt4 zu{MkR%LOsN z5CdQUzyO|r0qDpvT`hXUqkZ5#QEa6B5;e1Di}fQbLv&M}j0XOpjv4}uO0P7K=9yZe zp-GA8%@E*0S)uBrM=2liyzkRY_OFJ5F=GYgVZR=pdY_FaB=?{_(NV0}N{lh(r`d-A z;p5>%;oP`47KBR^wn7xE+(tG`y8aOJ3o!r&01UwP8bDkU0MxHbL5Wt@vy+b`JYNbB zVIeKeJ-B;$`2rqIx;r?&GajfU&xn1Qb<%$WK;wm~B+AQ1Y>-Z3APK{(j?=!|-{*%M zLMU{qLf@^K3PCvppptMS$`A2z6;sa7Y$0+8jU$H;krzJHyVyR}CUF%NfS6y10Wbhy z0Cv{^K2rcdf@|Xb$WfF7asey%PZI=2_O>xAz9wO#l`35BCPdA71DR2W?HmS}-ERPF z5?E5?@mEXH%(TI+6}%5i*GtDTk8!~vS=GS$_Q{zXN&rZB=7q;D_1G3n-{17wRtCtU zz4PRoIxn;chP#kh;EscsUx)!P0AK+2U;w(*9RQH0q=7}AGe4QrcBX#%Yg=E6%d_cU zwOmqf-BdIEE^^0#%0d+GO-@yqR{;LDpL|gNC8!HM<%<>fL*WcPUF07KgZGBU%`Hef ze^K{wGW>uN06#Y-+bU`l`xt7Jg8zhXskjttQZIIIRq>4K%xgsL_n=t?MkQt?cDpU$ z!)R(kN(NOm%b(U|I&MikaJM}ZW<5cT>lARCyR+nEo+0OKYY4F{uaO+ag{V>O^tl=n z2A9tMJAl7^9O3@U27ctfHf+4!d)yZEX9dOke@_#=1yK&@o z!^pq8;o;D3o);W1@h1fQm)tzb&0qHS&$)h<|M@%MuXg?UssDIhiN6y;4q$ zQr9L50J5%2$1qTO)B{)8pNm0r{?_kgvnSddIY&Xa+k8SXnGHz)L@$B9pxy3w`$@5X zr~PCk2!xc!Yp^oG=(lCe)CI>trn$JyJwLpoA{IqU=5X(p7f3{xY~>OCK*&LAu_Ujp z!ex9H-$Qop*2yi#bhYRgbczArj+@3ODWYM9%YN1i2{JJ4-boqmmALx;b#>E%B zk9IR8VcspNNX%j7&cvb>s`OpMj{vmm^q{Q+ov@Lr$WVx&otWzSic?$0usV+W8M`Q? zVsm$FX*^!Ix8>)~g6PMRSsGi2`Gpt&0{|Y9oUQ?!IA0x<-kP+RpIIv^x%V(mLza$& z1i!Hfx6b!xOCWPZ>NE`oQ0WKlkx*h#^$h?nziv07n(cA)b7DC82$66UuN}!P#~M?2 zcodA}74-htCUTx*__?Rk>=owe@MGP2I7Oi(eDLjX~7fp9?@XJrdeMUSQ)p_89} zdWgMe&G;75!O>Go3sQ*rg%|(>00!W44IpL^019*!`}BGc!-CRv+K59uKf6tQH8E^e zKQ~oCN*e1hCmk5X6&9<$MVEd9z@#ORw8w+7Hv1DV%i2ZI?R?{p(XJcsI@L-Z+p1_; zu0aVvBbbQv&G*&Rl<(CUYeS4VLR=ukCi=H+gvjBAkzBXQA?6oi01N;afa^7Yi8}yL zjD8=ys?Bg7+&gRGWU*SBs|D_I0-Z{65QgZK%D&hj0~ve+$81kkOKt#sdD2>^TH1Wl ziGSJ}v|RRW3cvC>w|RB^MoQV_flVB=6I1%ry2|(O4JW%&DbHrT4aT2xHqMLb3R%m0 zYl|wsoGT46zYqgp0Kfp;zyS2A^8ujEnP7AgYEWn25H62JI( zeJT3{H2ForMT>2VdIMm5Al%|9%MM!%m&O;ktrx8R3skFV#yHVarhqq~m~~qyE5KZa z;`g3=H1YbAcssUb4bFPe4FKtSv*%|V+MI1W6<>Q`g4Ixc@V(fUByhiad&DFoSO+i}LOLFX6&OQ1(n zP>Nr5p27`)cs2pv)X(DGiVko5SwJ%+Y0}R2)9vvtw~iZhaFb)|p#(7P)Q~sVXVDse zC=*IVM`F_P<}nSCsiI2BkK0C%N=cd_<`-fB3;-B_=QV({E&xazS%HlF!vVV)U}7&( zl7yaDc|YD-om+`dzVE)fxT-XeRl1_p`GfAs6@b6(Cm+vf-TU~wd3CvRZdSG^f-ZOA z^83YrmnQ?rh7_USI~+;?AJYb)ABw37Ux2LT`y=g3gk>U z+*CKaE8{qf#vzCUQ_+&9x}mE&2%q3Gj)(VH(m8Oc zx_-7&?Q_u+^psi{05AZrKLA4E_3wrn$kknaK-tDIc+>^(3u4x}!(4-8St}o!F>aSS zGCGhyK%aTxmoMg)YmhXv6yw0TRb|%~*1O3urC-pHF@`W#T0lmn>$+2BZ7wHpS^*IB%urp4W1*0b*un?mof0Pe4Y-VR9vK&%~9i9b@1I@s>tEv*1X zNN)Oz-Y?~$wr23>+9O(-Jing%{EXO2Yrq?5-bu&cf!t6Wd3C8+Xb4#bQ(vzet_gED zCzRwx(dK>NHDl~zKNEB9sV|DKUbeM(el&bR|BOexbRGZd;`kM667r9a3NAxsmy%kK z91Rra$TRF;x5Aro*8DJkOA9doMjlMw8(i}Y5_$ljw5&-+uf%AqSkv2BYOP$s_67Vq z$j2=A(B_Zs+lE&70%-{cIXX$W4sQlMLta5*?!3eqVc!FiMWxnb?jzbw4Xcr10qUo5 zqGnZAPy#T5lagoE(|uIQ0smqfkrs>O-ME;zF%gBQKz7VM&S`as`Gpt&0{{l#a}D6@ zF8~N5;C@e^^-B*VwXPpYQZZ-g2^hPSEBxPVdh-R{?Q4sG@GQF=`121vZUEHmIF1+} z<feA#%k}WaljxfAH(o9XQ|M(^$TN> zTf+N>O2s&v4T$-L7yttR2H*<@V8|#10J##3KN)@%o@9S$T;4L;$92e#l4Z@m9**g< z(nsu|k`Clf95WOjY)iWVP_FJL(Q`yzpOXIa$ z9lpN|U3VOYwD=Hil`n;dJ|>-xD~zFN!-}X21De5&O?LXaBHsY0si%H`z?*=f^J#-o zo}C0EOBb8-Hqp;Go!QdnODqC$C;{;47ZrzkZN7Lj)xhXp?i^CyssI3 z&*=bSejx_H0DuAbUjwMW4*X!<>Mv>twL(gn5c3N$ z00saIAn+Q1+6w?kVm6*u^71}^f77Tx07YbVecCBe zhHff=qGSq(R82)XTN}+s)$F&6wpy9b_nSq(Bi?S1jj_lB!H z3H(>0jp8d}1jajrHnj(;+}f=n<`-fB3;-BF&^3Te006`%(6u6XcF3N6*N!I;tyVHl z=;O8{YJ+nA@gpHNHI}ZUB&u3w=gl*Eiv)M}Xh2e|aYS$XE>}f=yPA zLKf+*XhsZ_0C>JFKG@1{=F7Jha^9k+v)m)0L*gz`OBlUR&=W9c4LdIz?qAsco&yEA z2C#Sq0QFOA?l+nZK6!Lhucv`P!T{gJmA%QYe53OyBt|o2Z-6pIiGFZ{n1ALzt&ibP zL5SoF)6RDT-iGm}Q_d8V_*n6I&&WK;NJPan`MI0SGX^DqHD`hj;PymwD%0Uudj2hs zcnQ>t?$@e{wJPr9ozq0!pi$dh<~mBgT>v0x*SyMI%d0kIxBrWJBtkD?s_{iCF|7S0 zWFdb61pfi>yZxjw*VQ0Ejc}My8GMhf#E9mC91&3KC!Fg}rpP@b@UBySP$&HaXnYb= zrhzP)^t=6}#C7}0t}VtAyQr>J?XGrb?6J^0TL|~uez%{D0;RQK%0DTvBvUquo^vS7 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